tcp丢包率_学习笔记-TCP流量控制

TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是阻塞控制(详见学习笔记-TCP拥塞控制)。

为什么需要流量控制

双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来,这时候接收方只能把处理不过来的数据存在缓存区里(失序的数据包也会被存放在缓存区里)。

如果缓存区满了发送方还在疯狂着发送数据,接收方只能把收到的数据包丢掉,大量的丢包会极大着浪费网络资源,因此,我们需要控制发送方的发送速率,让接收方与发送方处于一种动态平衡才好。所以流量控制是让发送端不要发送太快,要让接收端来得及接收。简单的说,对发送方发送速率的控制,我们称之为流量控制

总结:

拥塞控制:作用于网络,它是防止过多的包被发送到网络中,避免出现网络负载过大,网络拥塞的情况。

流量控制:作用于发送端,它是防止过多的包挤到接收端,接收端来不及处理,从而丢包。

7bb28827224e9ef13340fd65beba1939.png

TCP流量控制

TCP协议通过大小可变的滑动窗口来进行流量控制,它是控制发送方的发送速度从而使接受者来得及接收并处理。发送端窗口大小不能超过接收端窗口大小的值。TCP窗口单位是字节。

为什么要设置窗口,因为如果TCP发完一次数据等待接收端确认再发下一条数据太慢了。

1c8e740eaa92952941a12429fbfab688.png

由图中可知,TCP三次流量控制分别是,第一次窗口大小由400减到300,第二次减到100,第三次减到0。

TCP连接的一方如果收到零窗口通知,就会启动坚持计时器。若坚持计时器的时间到期,就会发送一个零窗口控测报文段,收到报文段的一方就重新设置坚持计时器。

滑动窗口

滑动窗口类似一个窗口,是用来告诉发送方可以发送数据的大小。也可以说是窗口标记了接收方缓冲区的大小。窗口大小也就表示一次能发送多少数据量,而且这个窗口可以滑动,滑动窗口因此得名。

需要注意的是:

1,接收方将自己能够接收的缓冲区大小是在TCP首部中的"窗口大小"字段表示的,通过Ack通知发送方。

2,窗口大小是发送方可以发送的数据量的值,也就是说可以不需要Ack应答,可以发送多次数据,前提发送总数据量不要超过窗口大小。

3,窗口大小大说明网络的吞吐率高

4,操作系统内核维护了一块接收缓冲区,只有Ack应答之后的数据才能从缓冲区中删除。

5,接收方一旦发现自己的缓冲区快满了,就会通知对方自己的窗口为更小的值。

6,如果接收方发现自己的缓冲区满了,就会将窗口的大小设置为0,此时发送方将不再发送数据,但是需要定期发送一个窗口探测数据段,使接收方把窗口大小告诉发送方 。(针对这一点重点说明下为什么需要定期发送窗口探针?可以想象下,如果接收方缓冲区满了,然后通过Ack告知发送方窗口大小为0。发送方从此不会发送数据给接收方,接收方也没办法告知对方自己缓冲区可以接收数据,就会出现"卡死"的情况)

实例

A 向 B 发送数据。在连接建立时,B 告诉 A:"我的接收窗口 rwnd = 400(字节)。注意:图中的箭头上面大写的ACK表示首部中的确认位ACK,小写ack表示确认字段的值。

3dd93a023e3d0d9e243fa90a9545e27d.png

上面的过程是这样的:

1,A发送了数据序号1至100,还能发送300字节

2,A发送了数据序号101至200,还能发送200字节

3,A发送了数据序号201至300,但是丢失了数据

4,B发送了ACK,同时通知A,允许A发送序号201至500,300字节

5,A发送了数据序号301至400,还能发送100字节

6,A发送了数据序号401至500,不能发送数据了

7,A超时重传旧的数据,但不能发送新数据

8,B发送了ACK,同时通知A,允许A发送序号501至600,100字节

9,A发送了数据序号501至600,不能发送数据

10,B发送了ACK,同时通知A,不允许A发送数据

其他说明

1、都有滑动窗口。由于TCP/IP支持全双工传输,因此通信的双方都拥有两个滑动窗口,一个用于接受数据,称之为接收窗口;一个用于发送数据,称之为发送窗口。指出接受窗口大小的通知我们称之为窗口通告。

2、接收窗口不固定。在早期的TCP协议中,接受接受窗口的大小确实是固定的,不过随着网络的快速发展,固定大小的窗口太不灵活了,成为TCP性能瓶颈之一,也就是说,在现在的TCP协议中,接受窗口的大小是根据某种算法动态调整的。

3、接受窗口越大越好吗?接受窗口如果太小的话,显然这是不行的,这会严重浪费链路利用率,增加丢包率。那是否越大越好呢?答否,当接收窗口达到某个值的时候,再增大的话也不怎么会减少丢包率的了,而且还会更加消耗内存。所以接收窗口的大小必须根据网络环境以及发送发的的拥塞窗口来动态调整。

4、发送窗口和接受窗口相等吗?接收方在发送确认报文的时候,会告诉发送发自己的接收窗口大小,而发送方的发送窗口会据此来设置自己的发送窗口,但这并不意味着他们就会相等。首先接收方把确认报文发出去的那一刻,就已经在一边处理堆在自己缓存区的数据了,所以一般情况下接收窗口 >= 发送窗口。

本文的初衷为学习笔记的分享,部分图文来源于网络,如侵,联删。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值