TCP滑动窗口
RTT:发送一个数据包,到收到对应的ACK所花费的时间
RTO:TCP发送数据包后会启动重传定时器,RTO就是重传时间
RTO不是一个固定的时间配置,是根据RTT计算出来的
计算过程参考 https://blog.csdn.net/wdscq1234/article/details/52505191
TCP使用滑动窗口做流量控制与乱序重排
窗口:通知接收方,发送方还有多少缓冲区可以接受数据
流量控制:发送方根据接收方的处理能力来发送数据,不会导致接收方处理不过来
AdvertisedWindow = MaxRcvBuffer - (LastByteRcvd - LastByteRead)
AdvertisedWindow 接受端告知发送端可以发送的数据大小 MaxRcvBuffer 接收方可接受的最大数据量 LastByteRcvd - LastByteRead 已接受的数据或还未接受到的预定的数据留出的空间
要求已发送与待确认的数据量小于接收方的window大小
EffectiveWindow = AdvertisedWindow - (LastByteSent - LastByteAcked)
EffectiveWindow 窗口内剩余可发送数据大小 AdvertisedWindow 接受端告知发送端可以发送的数据大小 LastByteSent - LastByteAcked 已发送的待确认的数据
对于TCP的发送方
滑动窗口类型 | |
---|---|
1 | 已经发送,已经得到回应 |
2 | 已经发送,未得到回应 |
3 | 未发送,对方可以接受的 |
4 | 未发送,因达到window的大小,对方不可以接受的 |
2、3组成发送窗口
对于TCP的接收方
滑动窗口类型 | |
---|---|
1+2 | 已经接收,已经发送ACK回应 |
3 | 未接收,可以接受的 |
4 | 未接收,因达到window的大小,不能接受的 |
3为接收窗口