(一)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为滑动窗口
TCP滑动窗口是一种用于流量控制和确保可靠性的机制,它动态调整窗口大小以避免网络拥塞和数据丢失。发送方的LastByteSent、LastByteWritten和接收方的LastByteRead、NextByteExpected等参数维护了发送和接收的状态。有效窗口大小和可接收数据量的计算确保了高效且准确的数据传输。TCP通过滑动窗口实现了字节流的管理和乱序数据的重排。

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



