TCP的滑动窗口
TCP的滑动窗口
RTT和RTO
- RTT:发送一个数据包到收到对应的ACK,所花费的时间
- RTO:重传时间间隔(RetransmitTimeOut),TCP在发送一个数据包后会启动一个重传定时器,即RTO,如果超时没收到ACK就重传。
- RTO不是固定写死的数据,而是根据RTT算出来的。
TCP使用滑动窗口做流量控制与乱序重排
滑动窗口的作用:
- 保证TCP的可靠性
- 提供TCP的流控特性
流量控制:
TCP报文头中的Window字段用于接收方通知发送方自己还有多少缓冲区可以接收数据。发送方根据接收方的处理能力来发送数据。不会导致接收方处理不过来
窗口数据的计算过程:
左图是TCP协议的发送方的缓冲区,右图是接收端端缓冲区,下面是字节流,从左往右发送/接收
- AdvertisedWindow:接收方返回的还可以接收的缓冲区大小
- MaxRcvBuffer:接收方能接收的最大数据量
- LastByteRcvd - LastByteRead:已占用的缓存空间
- EffectiveWindow:发送方剩余可发送大小
- LastByteSent - LastByteAcked:待确认的数据量大小
滑动窗口基本原理
TCP会话的发送方:
数据可分为四类:
- 已发送并收到回应
- 已发送没收到回应
- 未发送但对端允许发送
- 未发送且由于达到了Window的大小对端不允许发送
2、3类数据组成滑动窗口
滑动窗口
发送方收到ACK之后窗口滑动,才能继续发送新出现在窗口中的数据
TCP会话的接收方:
数据存在三种状态:
- 已接收并已发送回执
- 未接收但是可以接收(准备接收)
- 未接收但是不能接收
未接收但是可以接收这段空间就称为接收窗口
滑动机制和前面发送方一致。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Alfred的小站!