TCP的滑动窗口

TCP的滑动窗口用于流量控制和确保可靠性。它涉及到RTT和RTO的计算,窗口数据的计算涉及LastByteAcked、LastByteSent等参数。接收端和发送端各有不同状态的数据处理,接收窗口大小的调整影响发送端的流量。滑动窗口通过窗口移动管理已发送、未发送及允许发送的数据,确保TCP连接的有效性和流量适配。

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接收窗口大小的控制来实现对端的发送窗口进行流量限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值