TCP滑动窗口
TCP 滑动窗口(Sliding Window)是 TCP
可靠传输的重要机制之一,用于控制发送方和接收方之间的数据流量,保证数据有序且高效传输。
一、滑动窗口的基本概念
- 窗口大小(Window
Size):表示发送方可以发送的、且尚未被确认(ACK)的最大数据量(字节数)。
- 发送窗口:发送方维护的一个窗口,表示允许发送但未确认的数据范围。
- 接收窗口:接收方告诉发送方自己还能接收多少数据的容量,用于流量控制。
二、滑动窗口的工作原理
- 发送方发送数据,数据序号从窗口左边界开始,窗口大小限制最多发送多少未确认数据。
- 接收方收到数据后,发送确认(ACK),并告知自己的接收窗口大小。
- 发送方收到 ACK
后,窗口向前滑动(窗口左边界向右移动),可以继续发送后续数据。
三、示意图(假设窗口大小为4个数据包)
发送窗口:[ | | | | ] (4个包)
数据序号:1 2 3 4 5 6 7 ...
发送方依次发送序号1~4的数据包,等待确认。
收到确认后,窗口向右滑动,发送5~8的数据。
四、滑动窗口的作用
- 流量控制:防止发送方发送速度超过接收方处理能力,避免丢包。
- 提高效率:发送方不用等待每个数据包确认,可以连续发送多个数据包。
- 保证顺序:通过序号和确认机制保证数据顺序到达。
五、TCP 中的滑动窗口字段
- 序号(Sequence Number):标识数据的字节序号。
- 确认号(Acknowledgment
Number):期望接收的下一个字节序号。
- 窗口大小(Window
Size):接收方告知发送方剩余可用缓存大小(字节)。
六、示例说明
- 发送方窗口大小为 5000 字节,序号从 1000 开始。
- 发送方发送从序号 1000 到 5999 的数据(5000 字节)。
- 接收方确认收到序号
3000,窗口向前滑动,表示接收方已经收到1000~2999字节的数据,且窗口还有空间。
七、总结
流量控制 |
避免网络拥塞和接收方溢出 |
高效利用带宽 |
允许多个数据包连续发送 |
数据可靠传输 |
结合确认机制确保无误 |