计算机网络——网络层探究

好久没写博客了。感觉最近有点懒了。重新拾起《计算机网络——自顶向下方法》看看,这一篇聊聊网络层。


简述

网络层的作用即是将分组从一台主机移动到另一台主机。转发路由选择 共同完成这项工作。

除此之外还有连接建立(connection setup)的功能。

阅读更多

HTTP之旅

参考书籍:《计算机网络:自顶向下方法》

HTTP简介

一个 Web 应用程序,首先接触的是应用层协议是 超文本传输协议(HyperText Transfer Protocol,HTTP),HTTP由两个程序实现:一个客户端、一个服务器。其连接模型大概为:客户端向服务器发起 请求(request) ,服务器收到请求后,进行 响应(response),返回客户端需要的内容。

http


与 HTTP 有关的概念

web 对象

一般来说,一个 Web page(页面)是由很多对象组成的。对象可以是 html、图片、视频,甚至是Java程序。例如,当我们访问 https://www.google.com ,这个 Web page 是由 Google 提供的一个基本 html 页面和搜索框上面大大的 logo 图片(以及其他对象)组成。

Google

这个 html 页面是一个对象(通常为index.html),其中的 logo 图片也是一个对象。这些对象都存储在服务器上面。

实际上对象一般都可以通过 URL 寻址,比如谷歌首页的Logo图片,其URL地址是
https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png

HTTP 定义了客户端如何向服务器请求 Web page。HTTP使用 TCP 作为支撑运输协议,所以不用担心请求的过程数据在中途丢失或出错的问题。

阅读更多

当你输入一个网址的时候,实际会发生什么?

前言

一个 web 应用是如何运行的?作为软件开发者,我们必须得有一个完整的层次化的认知。这一篇将从浏览器,到 HTTP,HTML,web server,request handles 等方面切入,聊聊当我们输入一个网址的时候,后台到底发生了什么。

阅读更多

TCP与UDP的区别

TCP和UDP是OSI模型运输层中的协议。

TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。

UDP (User Datagram Protocol)

UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。

即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。

此外,传输途中如果出现了丢包,UDP也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不得不交给由采用UDP的应用程序去处理。

换句话说,UDP将部分控制转移到应用程序去处理,自己却只提供作为传输层协议的最基本功能。UDP有点类似于用户说什么听什么的机制,但是需要用户充分考虑好上层协议类型并制作相应的应用程序。

TCP(Transmission Control Protocol)

TCP充分实现了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。

此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

TCP与UDP如何加以区分使用?

TCP用于在传输层有必要实现可靠性传输的情况。由于它是面向有连接并具备顺序控制、重发控制等机制的。所以它可以为应用提供可靠传输。

另一方面,UDP主要用于那些对高速传输和实时性有较高要求的通信或广播通信。

举一个IP电话进行通话的例子。如果使用TCP,数据在传送途中如果丢失会被重发,但是这样无法流畅地传输通话人的声音,会导致无法进行正常交流。而采用UDP,它不会进行重发处理。从而也就不会有声音大幅度延迟到达的问题。即使有部分数据丢失,也只是影响某一小部分的通话。

此外,在多播与广播通信中也使用UDP而不是TCP。RIP、DHCP等基于广播的协议也要依赖于UDP。


TCP与UDP区别总结

  1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
  2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP则是面向报文的。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等),并且UDP速度更快。
  4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
  5. TCP首部开销20字节;UDP的首部开销小,只有8个字节
  6. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
TCP UDP
面向连接 无连接
提供可靠的服务。 尽最大努力,不保证可靠交付
面向字节流 面向报文
只能点到点 支持一对一,一对多,多对一和多对多
首部开销 20 字节 首部开销 8 个字节
可靠逻辑通信信道(全双工) 不可靠逻辑通信信道

TCP之旅

前言

前面两篇介绍 Socket 的文章中,简单描述了 Socket 网络编程的过程。这一篇,主要介绍一下 TCP 的工作原理。包含以下5点:

  1. TCP连接(三次握手)
  2. TCP报文段
  3. TCP可靠在哪里(序号、ACK回复、超时重传)
  4. 滑窗机制
  5. 拥塞控制机制
阅读更多

Socket编程实践(Java & Python实现)

之前在浅谈 Socket 编程一篇中,初步使用 Socket 套接字,在 linux 下用 C 实现了一个客户端/服务器 通信的例子。但是由于C语言比较隐晦难懂,很多自定义的数据结构也偏向于底层,导致我对于 TCP/UDP Socket 的过程理解不深。这一篇,主要站在应用的角度,用实际的例子,补充实践 Socket 通信的过程。一开始为了更好地理解,使用了 Python 语言。2019年1月9日闲来无事,用java重写了一遍,感受对比一下 java 的繁琐和 python 的简洁(真是无趣的家伙)。

  • 参考书籍:《计算机网络:自顶向下方法》(第2章)。

阅读更多

计算机网络漫游

京东图书日买了几本专业书籍。其中一本是《计算机网络:自顶向下方法》,算是很知名的一本介绍计算机网络的书了。今天晚上看了第一章,很是过瘾。大二的计算机网络课程,虽然拿了90+的成绩,但说实话,对计算机网络的很多概念(包括七层模型)都是模糊的。希望看完这本书,能补一补大二欠下的计算机网络的知识吧。决定开坑,把这本书的一些知识点归纳到博客里。

阅读更多

浅谈 socket 编程

计算机通信和socket

计算机程序之间的通信,是进程与进程之间的通信。之前在 Linux 学习中就遇到用管道(PIPE)来让一个进程的输出和另一个进程的输入连接起来,从而利用文件操作API来管理进程间通信。

Unix/Linux的基本哲学之一就是“一切皆文件”,一切都可以用打开(open) –> 读写(read/write) –> 关闭(close)的模式来操作。socket可以看成一个进程向socket的一端写入或读取文本流,而另一个进程可以从另一端读取或写入。比较特别的是,这两个建立socket通信的进程可以分别属于两台不同的计算机,可以简单地把socket理解为一种特殊的文件,我们通过操作socket函数,实现文本流在多台计算机之间传输,同时也就实现了计算机之间的通信。

一个socket包含四个地址信息: 两台计算机的IP地址和两个进程所使用的端口(port)。IP地址用于定位计算机,而端口用于定位进程 (一台计算机上可以有多个进程分别使用不同的端口)。

TCP和UDP

在开始 socket 编程之前,有必要简单了解一下TCP和UDP协议。

TCP(传输控制协议)提供面向连接、可靠的字节流服务。客户端和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,从而保证数据能从一端传到另一端

UDP(用户数据报协议)是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不需在客户端和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×