(一)TCP滑动窗口的目的
RTT:发出一个数据包到收到对应ACK所花的时间
RTO:重传时间间隔
Tcp要处理批量数据,则要知道实际的网络处理速度,才不会导致网络堵塞导致丢包,因此Tcp使用滑动窗口做流量控制与乱序重排,可动态调整大小
1.保证Tcp的可靠性
2.保证TCP的流控特性
- 滑动窗口体现TCP面向字节流的机制
(二)TCP滑动窗口数据的计算过程
对于发送方:
- LastAck指向最大的ACK段,即已确认的最大序列
- LastByteSent指向已发送的最后一个字节的位置,该位置已发出,但未收到回应
- LastByteWritten指向上层应用已写完的最后一个字节位置,即当前程序已准备好要发送的最新数据段
对于接收方: - LastByteRead指向上层应用已经读完并回执的最后一个字节的位置
- NextByteExpected指向已收到的最大SYN的位置
- LastByteRcvd是指向已收到的最后一个字节的位置
还能够接收的数据量:AdvertisedWindow=MaxRcvBuffer-(LastByteRecd-LastByteRead)
窗口剩余可发送的数据大小:EffectiveWindow=AdvertisedWindow-(LastByteSent-LastByteAcked)
(三)TCP的原理
TCP的发送方:
#1是已发送并已得到回应;
#2是已发出但未收到回应
#3是未发送但准备发送的
#4是超过Window大小不能发送
原窗口:其中32-36是发送但未收到确认,36-51是准备发送,51以后是不能发送
现窗口:当收到ACK=36时,滑动窗口向右移动
TCP的接收方:
#1+2:已收到且已发送回执的
#3:未接收但准备接收的状态
#4:由于超出阈值,不能接收
其中#3为滑动窗口