计算机网络面试总结-TCP的滑动窗口
5.TCP的滑动窗口
5.1.RTT和RTO:
- RTT:发送一个数据包收到对应的ACK,所花费的时间(Round Trip Time:一个连接的往返时间)
- RTO:重传时间间隔(Retransmission Time out)
- 滑动窗口基于RTO
5.2.TCP使用滑动窗口做流量控制与乱序重排
- 保证TCP的可靠性
- 保证TCP的流控特性
- 报头的window:用于接收方通知发送方,自己还有多少缓冲区用来接收数据,发送方根据接收方的处理能力来发送数据,不会导致接收方处理不过来。
5.3.TCP的滑动窗口
滑动窗口的可靠性建立在确认重传机制上。
5.3.1.名词解释:
LastByteWritten:上层应用最后一个写的数据,即当前程序准备好要发送的最新的一个数据(还没发送)
LastByteAcked:最后一个ACK(确认收到)的数据
LastByteSent:最后一个已经发送的数据,还没收到ack
LastByteRead:接收端,读取到的并且已经处理的最后一条数据(已经回复ACK的)
NextByteExpected:已经收到的连续数据中最大的一条(还没回复ACK的)
LastByteRecvd:已收到的最后一条数据(不连续)
5.3.2.窗口数据的计算过程:
- 1.接收方计算AdvertisedWindow:
- AdvertisedWindow:建议发送端发送的最大数据量
- AdvertisedWindow = MaxRcvBuffer - (LastByteRecvd-LastByteRead)
- MaxRcvBuffer接收端缓存池大小
- 2.将AdvertisedWindow发送到发送方,发送方根据AdvertisedWindow计算EffectiveWindow
- EffectiveWindow:发送方窗口内,剩余可发送的最大数据量
- EffectiveWindow = AdvertisedWindow - (LastByteSent-LastByteAcked)
5.3.3.滑动窗口的基本原理:(滑动窗口要比(接收、发送)缓存小)
- 1.发送方发送缓存中的数据状态分类:
- 2.滑动窗口:Category#2 + Category#3
- 3.当发送方收到接收方的数据ack时,窗口就会滑动。
- 4.接收方接收缓存的状态分类:
- 接收到并已确认的数据
- 未接收,并允许发送方发送的大小
- 未接收,并且不能接收的状态,已经达到了窗口阈值
- 5.接收窗口:Category#3
- 当接收方接收到连续数据后并发出ack信号后,窗口就会滑动
5.3.4. 总结:
流量控制:
- 滑动窗口的大小可以依据一定策略动态调整,应用会根据自身处理能力的变化,通过本端TCP接收窗口的大小的控制,实现对端的发送窗口改变进行流量控制。
- 接收方通过计算得出AdvertisedWindow,并发送给发送方。
- 发送方:根据AdvertisedWindow计算可发送最大的数据量EffectiveWindow。
乱序控制:
- 接收方:按连续顺序确认接收并发送ack信号。
- 发送饭:按连续顺序发送数据。