首页 > IT职业 > IT图书 > TCP 流量控制-滑动窗口
TCP 使用滑动窗口做流量控制与乱序重排
RTT
发送一个数据包到收到对应的 ACK所花费的时间
RTO
定时器重传时间间隔
没有回应 ACK 则等到 RTO 到期进行重传根据 RTT 计算出来

左右为发送方接收方缓冲区
发送方
LastByteWritten: 发送方上层应用写出的数据长度
LastByteSent: 通过 TCP 最后发送到接收方的数据位置
LastByteAcked: 已经收到接收方的连续最大 ACK 的位置(二次握手)
接收方
MaxRcvBuffer: 最大缓冲区
LastByteRead: 接收方上层应用在 TCP 缓冲区中已经读完的最后一个字节的位置
NextByteExpected: 收到的连续最大 Seq 包的位置(排好序可以读的数据)
LastByteRcvd: 已收到的最后一个字节的位置
NextByteExpected 与 LastByteRcvd 之间会有部分空隙表示这些数据还无法读或者应用无法读到。
接收方窗口 AdvertisedWindow 接收方还能够接收的数据量
AdvertisedWindow = MaxRcvBuffer – (LastByteRcvd - LastByteRead)
接收方把 AdvertisedWindow 告知发送方发送方 LastByteSent - LastByteAcked 不能大于 AdvertisedWindow 接收方还能接收的量
发送方窗口 EffectiveWindow 发送方窗口内剩余可发送的大小
EffectiveWindow = AdvertisedWindow - (LastByteSent - LastByteAcked) 保证接收方可以处理数据
LastByteSent - LastByteAcked 发送方可以发送的数据减去已经确认好可发送的数据就是发送方将要发送的数据这个数据不能大于接收方还能够接收的数据量。
接收方还能够接收的数据量 AdvertisedWindow = MaxRcvBuffer – (LastByteRcvd - LastByteRead)接收方把 AdvertisedWindow 告知发送方发送方 LastByteSent - LastByteAcked 不能大于 AdvertisedWindow 接收方还能接收的量。
发送方窗口内剩余可发送的大小 EffectiveWindow = AdvertisedWindow - (LastByteSent - LastByteAcked) 保证接收方可以处理数据
TCP 最基本的传输可靠性来源于确认重传机制TCP 的滑动窗口机制也是建立在确认重传基础上的。
发送窗口收到接收端对于本段窗口内字节的 ACK 确认才会移动发送窗口的左边界。
接收窗口只有在前面所有的段都确认的情况下才会移动左边界当前面还有字节未接收但收到后面字节的情况下(乱序)窗口是不会移动的并不对后续字节确认, 确保这段数据重传。
可以根据滑动窗口的调整进行流量控制。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2249/viewspace-2822950/ ,如需转载,请注明出处,否则将追究法律责任。