计算机网络原理 杂记(二)

此为摘抄杂记,仅供个人查阅。

用户数据协议(UDP)

用户数据协议(User Datagram Protocol UDP):Ineternet 传输层协议, 提供无连接、不可靠、数据报尽力传输服务。

UDP特点:

  1. 应用进程更容易控制发送什么数据以及何时发送,会出现分组的丢失和重复。
  2. 无需建立连接。
  3. 无连接状态。
  4. 首部开销小,只有 8 个字节。

UDP 数据报结构:

image.png
  1. UDP 首部四个字段,每个字段长度都是 2 个字节,共 8 个字节。
  2. 源端口号和目的端口号:用于 UDP 实现复用和分解 。
  3. 长度:指示 UDP 报文段中的字节数(首部和数据的总和)。
  4. 校验和:接收方使用来检测报文段是否出现差错。

UDP 校验和

UDP 校验和计算规则:

  1. 所有参与运算的内容(包括 UDP 报文段)按 16 位对齐求和。
  2. 求和过程中遇到任何溢出(即进位)都被回卷(即进位与和的最低为再加), 最后得到的和取反码,就是 UDP 的校验和,填入 UDP 数据报的校验和字段。
  3. UDP 在生成校验和时,校验和字段全取 0。

UDP 伪首部:

image.png

源 IP 地址、目的 IP 地址、协议号:均是封装对应 UDP 数据报的 IP 分组的对应字段。
UDP 长度字段:是该 UDP 数据报的字段,该字段参与计算两次。
UDP 协议号:17。

传输控制协议(TCP)

传输控制协议(Transmission Control Protocol ,TCP):Internet 传输层协议。提供面向连接、可靠、有序、字节流 传输服务。

  1. 应用进程好似在”打电话“要先建立连接。

  2. 每一条 TCP 连接只有两个端点。

  3. 可靠交付:无差错,不丢失,不重复,按序到达

  4. 全双工通信。

  5. 面向字节流。流:字节序列。应用程序和 TCP 的交互是一个个数据
    块,TCP 把他们看做是无结构字节流。

TCP 报文段结构

image.png
  1. 源端口号字段,目的端口号字段分别占 16 位。多路复用/分解来自或送到上层应用的数据。
  2. 序号字段、确认序号字段分别占 32 位。
    序号字段:TCP 的序号是对每个应用层数据的每个字节进行编号, 确认序号字段:期望从对方接收数据的字节序号,即该序号对应的字节尚未收到。
  3. 首部长度字段占 4 位。指出 TCP 段的首部长度,以 4 字节为计算单位。
    最短是 20 字节;最长是 60 字节。
  4. 保留字段占 6 位。保留为今后使用,目前值为 0。
  5. URG、ACK、PSH、RST、SYN、FIN 各占 1 位。为标志位字段;
  • 各占 1 位,取值为 0 或 1;
  • 紧急 URG=1,紧急指针字段有效,优先传送。
  • 确认 ACK=1,确认序号字段有效;ACK=0 时,确认序号字段无效。
  • 推送 PSH=1,尽快将报文段中的数据交付接收应用进程,不要等缓存满了再交付。
  • 复位 RST=1,TCP 连接出现严重差错,释放连接,再重新建立 TCP 连接。
  • 同步 SYN=1,该 TCP 报文段是一个建立新连接请求控制段或者同意建立
    新连接的确认段。
  • 终止 FIN=1,TCP 报文段的发送端数据已经发送完毕,请求释放连接。
  1. 接收窗口字段占 16 位。向对方通告我方接收窗口的大小。
  2. 校验和字段占 16 位。校验和字段检验的范围类似于 UDP,计算方法与 UDP 校验和的计算方法相同。TCP 协议号是 6。
  3. 紧急指针字段占 16 位。
  • URG=1 时,才有效。指出在本 TCP 报文段中紧急数据共有多少个字节。
  1. 选项字段长度可变,基本不用。最短为 0 字节,最长为 40 字节。 例如:发送方告诉接收方其缓存能够接收的数据段的最大长度是 MSS 个字节。 【最大报文段长度(Maximum Segment Size,MSS):报文段中封装的应用层数据的最大长度。】
  2. 填充字段,取值全为 0,目的是为了整个首部长度是 4 字节的整倍数。
TCP 连接管理

TCP 连接管理:

  • 连接建立(三次握手)
  • 连接拆除(四次挥手)
连接建立:
image.png

第一次握手:

客户向服务器发送连接请求段:SYN 报文段:(SYN=1,seq=x)

SYN=1:建立连接请求控制段

seq=x:表示传输的报文段的第 1 个数据字节的序列号是 x,并以此序列号代表 整个报文段的序号(补充:sequence number,序号的意思。)

客户端进入 SYN_SEND(同步发送)

第二次握手:

服务器收到 TCP 连接请求段后,如同意,则发回确认报文段:(SYN=1,ACK=1,seq=y, ack_seq=x+1)

SYN=1:同意建立新连接的确认段

ack_seq=x+1:表示已经收到了序列号为 x 的报文段,准备接收序列号为 x+1 的报文段。

seq=y:服务器告诉客户确认报文段的第 1 个数据字节的序列号是 y。 服务器由 LISTEN 进入 SYN_RCVD(同步收到)

第三次握手:

只有第三次握手可携带数据。

客户对服务器的同意连接报文段进行确认:(ACK=1,seq=x+1,ack_seq=y+1)

seq=x+1:客户传输的报文段的第一个数据字节的序列号是 x+1

ack_seq=y+1:客户期望接收服务器序列号为 y+1 的报文段。

当客户发送 ACK 时,客户端进入 ESTABLISHED 状态;

当服务收到 ACK 后,也进入 ESTABLISHED 状态;

为什么需要三次握手:
  • 第一次握手:客户发送请求,此时服务器知道客户能发。
  • 第二次握手:服务器发送确认,此时客户知道服务器能发能收。
  • 第三次握手:客户发送确认,此时服务器知道客户能收。
连接拆除:

第一次挥手:

客户向服务器发送释放连接报文段:(FIN=1,seq=u)

首部的 FIN=1:TCP 报文段的发送端数据发送完毕,请求释放连接。

序号 seq=u:表示传输的第一个数据字节的序号是 u

客户端状态由 ESTABLISHED 进入 FIN_WAIT_1(终止等待 1 状态)

第二次挥手:

服务器向客户发送确认段:(ACK=1,seq=v,ack_seq=u+1)

ACK=1:标识确认字号段有效。

确认序号 ack_seq=u+1:表示服务器期望接收客户数据包序号为 u+1 的包

序号 seq=v:表示服务器传输的第一个数据字节的序号是 v

服务器状态由 ESTABLISHED 进入 CLOSE_WAIT(关闭等待)

客户端收到 ACK 段后,由 FIN_WAIT_1 进入 FIN_WAIT_2

第三次挥手:

服务器向客户发送释放连接报文段:(FIN=1,ACK=1,seq=w,ack_seq=u+1)

FIN=1:请求释放连接

ACK=1:标识确认字号段有效。

确认序号 ack_seq=u+1:表示服务器期望接收客户数据包序号为 u+1 的包

序号 seq=w:表示自己传输的第一个数据字节的序号是 w

服务器状态由 CLOSE_WAIT 进入 LAST_ACK(最后确认状态)

第四次挥手:

客户向服务器发送确认段:(ACK=1,seq=u+1,ack_seq=w+1)

ACK=1:标识确认字号段有效。

确认序号 ack_seq=w+1:表示客户期望接收服务器数据包序号为 w+1 的包

序号 seq=u+1:表示客户传输的第一个数据字节的序号是 u+1

客户端状态由 FIN_WAIT_2 进入 TIME_WAIT,等待 2MSL 时间,进入 CLOSED 状态,释放连接

服务器在收到最后一次 ACK 段后,由 LAST_ACK 进入 CLOSED,释放连接

TCP 可靠数据传输
TCP 实现可靠数据传输服务的工作机制:
  1. 分段:应用数据被分割成 TCP 认为最适合发送的数据块。

  2. TCP 发出一个段后,启动一个计时器,等待目的端确认收到这个报文段。

  3. TCP 首部中设有校验和字段,用于检测数据在传输过程中是否发生差错。

  4. TCP 报文段的到达也可能会失序。如果必要,TCP 会重新排序。

  5. 存在网络延迟和重传机制,接收端可能会收到多个重复的报文段,这时接收端需要根据序号把重复的报文段丢弃。

  6. TCP 能够提供流量控制。

TCP 生成 ACK 的策略:
  1. 具有所期望序号的报文段按序到达,所有在期望序号及以前的报文段都已被确认。TCP 延迟发送 ACK,约 500ms。

  2. 具有所期望序号的报文段按序到达、且另一个按序报文段在等待 ACK 传输,TCP 接收方立即发送单个累计 ACK,确认以上两个按序到达报文段。

  3. 拥有序号大于期望序号的失序报文段到达,TCP 接收方立即发送重复 ACK,只是下一个期望接收字节的序号。

  4. 收到一个报文段,部分或完全填充接收数据间隔。

image.png
image.png
TCP 拥塞控制

通过合理调度、规范、调整向网络中发送数据的主机数量、发送速率、数据量,以避免拥塞的发生。

TCP 拥塞控制的算法包括:慢启动;拥塞避免;快速重传;快速恢复。

  • 慢启动:阈值之前的阶段称之为慢启动阶段,每经过 RTT,拥塞窗口大小加倍。

  • 拥塞避免:阈值之后的阶段称之为拥塞避免阶段,每经过 RTT,拥塞窗口大小增加 1。

  • 快速恢复算法:当发生 3 次重复确认时,不再从慢启动阶段开始,而是直接从新的阈值开始,直接进拥塞避免阶段。
    新阈值(12) =当前窗口(24)的一半;新拥塞窗口=新阈值。

  • 计时器超时:可判定发生拥塞且拥塞严重

image.png

窗口调整的基本策略 AIMD(Additive Increase,Multiplicative Decrease):网络未发生拥塞时,逐渐“加性”增大窗口。网络拥塞时“乘性”快速减小窗口大小。

拥塞消除策略:先拥塞检测,再采取措施。

拥塞预防策略:流量整形技术,规范主机向网络发送数据的流量。

TCP 流量控制

协调发送方与接收方的数据发送与接收速度。在通信过程中,接收方设置报文段的接收窗口字段来将窗口大小通知给发送方。

推荐阅读更多精彩内容