RTT和RTO
- RTT:发送一个数据包到收到对应的ACK,所花费的时间
- RTO:重传时间间隔 ——> 重传机制
TCP的滑动窗口的作用
TCP使用滑动窗口做流量控制与乱序重排
1、保证TCP的可靠性
2、保证TCP的流控特性
窗口数据的计算过程

发送端:
LastByteAcked:已经发送并且收到回复的最后一个序号位置
LastByteSent:已经发送但还没有收到回复的最后一个序号位置
LastByteWritter:已经准备好的但还没发送的最后一个序号位置
接收端:
LastByteRead:收到并已经回复的最后一个位置
NextByteExcepted:收到的连续最大的sequence的位置(已经收到但还没有发送回复ACK)
LastByteRcvd:已收到的最后一个字节的位置
计算:
AdvertisedWindow = MaxRcvBuffer - (LastByteRcvd - LastByteRead)
EffectiveWindow = AdvertisedWindow - (LastByteSent - LastByteAcked)
其中:AdvertisedWindow(接收方还可以处理的量)、MaxRcvBuffer(接收方能接收的最大数据量,或接收端缓存区的大小)、EffectiveWindow(窗口内剩余可发送数据大小)
滑动窗口的基本原理
TCP会话的发送方:

任何时候,在其发送缓存内的数据都可以分为四类:
1、已经发送,并且得到端的回应;
2、已经发送,但还没收到端的回应;
3、未发送,但对端允许发送;
4、未发送,且由于达到window的大小,对端不允许发送。

(1)假设起始状态:[32-45] [46-51]共同构成了滑动窗口,其中前一部分是已发送的还没收到确认的,后一部分是可发送还没发的;
(2)假设发送的片段[32~35],发送端收到接收端的ACK回复,那么滑动窗口即可向右移动4个字节;
(3)此时可以将[46-51]发送出去,并且[52~55]由不可发送变为可发送,整个滑动窗口向右移动了4个字节的位置。
TCP会话的接收方:

某一时刻,在其接收缓存内存在三种状态:
1、已接收,并且已发送回执;
2、未接收,但可以接收(此段空间称为:接收窗口);
3、未接收,并且不能接收。
tips:由于ACK直接由TCP栈回复,默认没有应用延迟,不存在已接收但未回复ACK的状态
注:
应用会根据自身处理能力的变化,通过本端TCP接收窗口大小的控制来实现对端的发送窗口进行流量限制。
TCP的滑动窗口用于流量控制和确保可靠性。它涉及到RTT和RTO的计算,窗口数据的计算涉及LastByteAcked、LastByteSent等参数。接收端和发送端各有不同状态的数据处理,接收窗口大小的调整影响发送端的流量。滑动窗口通过窗口移动管理已发送、未发送及允许发送的数据,确保TCP连接的有效性和流量适配。
6119

被折叠的 条评论
为什么被折叠?



