TCP 滑动窗口
TCP 使用滑动窗口做流量控制与乱序重排
RTT 和 RTO
RTT
发送一个数据包到收到对应的 ACK,所花费的时间
RTO
定时器,重传时间间隔
没有回应 ACK 则等到 RTO 到期进行重传,根据 RTT 计算出来
TCP 使用滑动窗口做流量控制与乱序重排
保证TCP 的可靠性
保证TCP 的流量控制特性
Window 字段
window 字段的流量控制:用于接收方通知发送方自己还有多少缓冲区可以接收数据,发送方根据接收方的处理能力来发送数据,不会导致接收方处理不过来。
滑动窗口机制体现了tcp面向字节流的设计
窗口数据的计算过程
左右为发送方接收方缓冲区
发送方
LastByteWritten: 发送方上层应用写出的数据长度
LastByteSent: 通过 TCP 最后发送到接收方的数据位置
LastByteAcked: 已经收到接收方的连续最大 ACK 的位置(二次握手)
接收方
MaxRcvBuffer: 最大缓冲区
LastByteRead: 接收方上层应用在 TCP 缓冲区中已经读完的最后一个字节的位置
NextByteExpected: 收到的连续最大 Seq 包的位置(排好序可以读的数据)
LastByteRcvd: 已收到的最后一个字节的位置
NextByteExpected 与 LastByteRcvd 之间会有部分空隙表示这些数据还无法读或者应用无