跳到主要内容

滑动窗口

2024年11月08日
柏拉文
越努力,越幸运

一、认识


TCP发送一个数据,需要收到确认应答,才会发送下一个数据。这样有个缺点,就是效率会比较低。为了解决这个问题,TCP引入了窗口,它是操作系统开辟的一个缓存空间窗口大小值表示无需等待确认应答,而可以继续发送数据的最大值。TCP头部有个字段叫win,也即那个16位的窗口大小,它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度,从而达到流量控制的目的。

TCP 滑动窗口分为两种: 发送窗口和接收窗口。

二、发送窗口


发送端的滑动窗口包含四大部分,如下

  • 已发送且已收到ACK确认
  • 已发送但未收到ACK确认
  • 未发送但可以发送
  • 未发送也不可以发送
Preview

如图所示:

  • 虚线矩形框,就是发送窗口。
  • SND.WND: 表示发送窗口的大小,上图虚线框的格子数就是14个。
  • SND.UNA: 一个绝对指针,它指向的是已发送但未确认的第一个字节的序列号。
  • SND.NXT:下一个发送的位置,它指向未发送但可以发送的第一个字节的序列号。

三、接收窗口


接收方的滑动窗口包含三大部分,如下:

  • 已成功接收并确认
  • 未收到数据但可以接收
  • 未收到数据并不可以接收的数据
Preview

如图所示:

  • 虚线矩形框,就是接收窗口。
  • REV.WND: 表示接收窗口的大小,上图虚线框的格子就是9个。
  • REV.NXT:下一个接收的位置,它指向未收到但可以接收的第一个字节的序列号。