TCP--滑动窗口

大家好,我叫徐锦桐,个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家访问。

接收端和发送端通过窗口来实现流量的控制。发送端维护一个发送窗口,接收端维护一个接收窗口。拥塞窗口是一个变量,是发送方通过当前网络拥塞状态计算出来的一个值。

前言

推荐一个可以查看流量控制动图的网站,还有一个滑动窗口动图的网站

发送窗口–swnd

发送方维护一个发送窗口(swnd)
接收窗口.webp


发送窗口就是操作系统开辟出来的一片缓存,如果数据已经发送并且收到确认就从缓存中删除。


发送窗口数据都发送.webp
当发送窗口中的数据都发送出去等待确认的时候,这个时候就不会在发送数据了,因为超出了接收窗口的承受能力了,这时候只能等待收到服务端的确认。




发送窗口移动.webp
我们看到17~19的已经确认,窗口向右移动3格,就会有3个进入窗口,进入就绪状态。


就这样发送窗口一直向右移动,但是要注意的是发送窗口的大小并不是固定的,而是动态变化的

接收窗口–rwnd

接收方维护一个接收窗口
接收窗口啊.webp


中间的窗口可以接收数据,19~2117~18先到达(乱序到达),会先将19~21放到缓存区,然后等待17~18的数据,如果17~18数据到了,那么窗口就会向右移动了。如下图。

接收窗口移动.webp
接收窗口收到17~18并且发出确认,窗口向右移动。

细节

窗口大小由谁决定

TCP头部里面有个Window,用来协商窗口大小的。
这个就是接收方告诉发送方自己缓存区能接受数据的大小,发送方依据接收方的能力发送数据,不会导致接收方缓存爆满。
发送方发送的数据大小不能超过接收方的窗口大小,不然就会产生数据丢失。
但是TCP会根据当前网络拥塞状态计算出一个拥塞窗口(cwnd),TCP比较无私,当网络拥堵的时候会降低自己传输的速率,这时候发送窗口(swnd)=min(接收窗口rwnd,拥塞窗口cwnd)。

当接收窗口从0又有缓存了,发送端如何感知

当发送端知道接收窗口满了,会启动一个零窗口(TCP Zero Window)定时探测器,发送端每隔一段时间就会发送探测包,查看接收端的窗口是否有缓存。如下图所示。
0窗口探测器.webp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐锦桐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值