计算机网络面试总结-TCP的滑动窗口

5.TCP的滑动窗口

5.1.RTT和RTO:

  • RTT:发送一个数据包收到对应的ACK,所花费的时间(Round Trip Time:一个连接的往返时间)
  • RTO:重传时间间隔(Retransmission Time out)
  • 滑动窗口基于RTO

5.2.TCP使用滑动窗口做流量控制与乱序重排

  • 保证TCP的可靠性
  • 保证TCP的流控特性
  • 报头的window:用于接收方通知发送方,自己还有多少缓冲区用来接收数据,发送方根据接收方的处理能力来发送数据,不会导致接收方处理不过来。

计算机网络面试总结-TCP的滑动窗口

5.3.TCP的滑动窗口

滑动窗口的可靠性建立在确认重传机制上。

计算机网络面试总结-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.发送方发送缓存中的数据状态分类:

计算机网络面试总结-TCP的滑动窗口

  • 2.滑动窗口:Category#2 + Category#3
  • 3.当发送方收到接收方的数据ack时,窗口就会滑动。

计算机网络面试总结-TCP的滑动窗口

  • 4.接收方接收缓存的状态分类:
    • 接收到并已确认的数据
    • 未接收,并允许发送方发送的大小
    • 未接收,并且不能接收的状态,已经达到了窗口阈值

计算机网络面试总结-TCP的滑动窗口

  • 5.接收窗口:Category#3
  • 当接收方接收到连续数据后并发出ack信号后,窗口就会滑动

5.3.4. 总结:

流量控制:

  • 滑动窗口的大小可以依据一定策略动态调整,应用会根据自身处理能力的变化,通过本端TCP接收窗口的大小的控制,实现对端的发送窗口改变进行流量控制。
  • 接收方通过计算得出AdvertisedWindow,并发送给发送方。
  • 发送方:根据AdvertisedWindow计算可发送最大的数据量EffectiveWindow。

乱序控制:

  • 接收方:按连续顺序确认接收并发送ack信号。
  • 发送饭:按连续顺序发送数据。