流量控制的作用,流量控制是哪一层的功能

2023-05-06 21:23:15 阅读:116236 作者: 3272

为什么需要TCP流量控制? 流量控制是指发送端的发送速率不要太快,以便接收端能赶上接收。

TCP流量控制不是为了减少网络压力,而是TCP拥塞控制的作用。

简要说明TCP流量控制的目的。 3358www.Sina.com/互连的两个终端(65作用对象:和http://www.Sina.com/)。发送端:解决发送端和接收端吞吐量不匹配的问题。 例如,在某个发送端a每秒发送10个分组,而接收端b每秒只能接收1个分组的情况下,发生分组丢失,因此发送端和接收端请求的吞吐量应当一致。

根据http://www.Sina.com/: http://www.Sina.com/http://www.Sina.com /的接收能力动态调整发送速率

如何进行TCP流控制? 使用接收端,可以通过TCP连接方便地进行发送端业务控制。 TCP的窗口单位是字节,而不是消息段。 发送方的发送窗口不能超过来自接收方的接收窗口的值。 这里采用滑动窗口机制,一是每次传输完成时不需要等待收到确认消息,二是借鉴接收方的接收能力,限制发送数据段的大小,避免丢失现象。

发送窗口在建立连接时由双方协商。 但是在通信过程中,可以增大或减小解决问题()。

接收侧通过通知发送侧自身的窗口尺寸,来控制发送侧的发送速度,实现防止发送侧的发送速度过快淹没自己的目的。

目的

发送方发送了400字节的数据,但只接受前200字节数据的确认,窗口大小不变。 也可以发送300字节。

发送方确认了前400字节的数据,但发送方通知必须将窗口缩小到400字节。 发送方现在还可以发送最多400字节的数据。

发送端

TCP是双工协议,会话双方都可以同时发送和接收数据。 TCP会话双方分别保持“发送窗口”和“接收窗口”。 每个“接收窗口”的大小取决于APP应用程序、系统和硬件的限制。 TCP传输速率不能大于APP应用程序的数据处理速率。接收端,要求相同。

首先介绍TCP流控制所需的几个变量。

LastByteSent (最后发送的数据包的编号、发送端进行维护的LastByteAck )最后接收到的ACK数据包中确认的数据包编号、发送端进行维护的rwnd )接收窗口、发送端进行维护,接收等待检查)。 接收方将其rwnd值放在要发送到发送方的消息段的接收窗口字段中,并通知发送方该连接的缓存中有多少空闲区域。 LastByteRead :序列号RcvBuffer:接收端缓存的最大值LastByteRcvd :从网络到达的最后放入接收缓存中的papper,表示接收端管理的APP应用最后从缓存中读取的包为了防止溢出上的分组丢失,需要确保接收端缓存足以接收即将接收的数据。

即lastbytercvdlastbytereadrcv buffer

lastbytercvdlastbytereadrcv buffer

另外,rwnd=rcv buffer [ lastbytercvdlastbyteread ]

rwnd=rcv buffer [ lastbytercvdlastbyteread ]

要实现TCP流控制,必须满足以下表达式: http://www.Sina.com/: lastbytesentlastbyteackrwnd

LastByteSentLastByteAckrwnd

滑动窗口机制

TCP段发送定时主要有以下选择。

1 ) TCP保持等于最大段长度MSS的变量,并且在缓存中存储的数据达到MSS字节时将其组装成TCP段并发送。

2 )指定发送方的APP应用请求发送消息的段,即TCP支持的推送操作

3 )在发送方的定时器期限到来后,将当前现有的缓存数据放入报文段中发送。

具体是怎么进行的?

如图所示,说明了基于可变窗口尺寸的流量控制。 假设主机a向主机b发送数据。 双方确定的窗口值为400。 此外,如果各消息段为100字节长,序列号的初始值为seq=1,图中箭头上的大写ACK指示标头中确实被识别为ACK,小写ACK指示确定字段的值。

接收侧的主机b进行了3次流量控制。 第一次将窗口设置为rwind=300,第二次减少为rwind=100,最后减少为rwind=0。 也就是说,不允许发送方重新发送数据。 这接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值

暂停发送的状态将持续到主机B重新发出一个新的窗口值为止

     假如,B向A发送了零窗口的报文段后不久,B的接收缓存又有了一些存储空间。于是B向A发送了rwind=400的报文段,然而这个报文段在传送中丢失了。A一直等待收到B发送的非零窗口的通知,而B也一直等待A发送的数据。这样就死锁了。为了解决这种死锁状态,TCP为每个连接设有一个持续计时器只要TCP连接的一方收到对方的零窗口通知就启动持续计时器,若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。

最简单的思路:rwnd=0时咱们不发送了,但这样会存在一个问题,就是如果之后没有ACK,那么连接就相当于断开了。 
所以真正的解决方案是:当rwnd=0时,发送端发送只有一个字节的数据的报文段。这些报文段将会被接收方确认。最终缓存开始清空,并且确认报文里将包含一个非0的rwnd值

如何恢复?

等下一次ACK到来可能rwnd就变大了,到时候就可以发送更多的数据了。

UDP不提供流量控制。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。

标签: 流量控制   作用

Copyright © 2022 恩蓝号 Inc. 保留所有权利。 Powered by 恩蓝号

页面耗时0.0205秒, 内存占用107.28 KB, 访问数据库2次