滑动窗口
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:下一个接收的位置,它指向未收到但可以接收的第一个字节的序列号。