计算机网络-24-TCP协议的流量控制

    技术2024-10-25  23

    两个内容: TCP通过让接收方指明希望从发送方接收的数据字节数(即窗口大小)来进行流量控制。如果窗口大小为0会发生什么情况呢?这将有效阻止发送方传送数据,直到窗口变为非0为止。 接受数据的流程: 假设窗口为0之后,马上对这些数据进行处理,处理之后把它交给应用层,一段时间之后接收方又可以接收新的消息,这时接收方就会给发送方发送一个消息,告诉发送方,假设为:我的窗口可以接收1000个数据,也就是说接收方调整了窗口的大小,并告诉了发送方,发送发接收到这个消息后,它知道接收方可以接收1000个字节的数据了,因此会进行数据的封装,然后发送。 通过调整窗口的大小继续进行数据的发送。 下面有个问题:如果窗口改变为1000的消息没有收到咋办呢? 上述情况总结:假设一个场景:如果一个确认丢失了,则双方就有可能因为等待对方而使连接终止,接收方等待接收数据(因为它已经向发送方通告了一个非0的窗口),而发送方在等待允许它继续发送数据的窗口更新。为防止这种死锁情况的发生,发送方使用一个坚持定时器(persist timer)来周期性地向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查(window probe)。 这个消息丢失,将会形成死锁:接收方和发送方都会等待,窗口重置消息时没有超时重传机制的 解决这个问题需要:坚持定时器 这是学到的第二个定时器: 坚持定时器工作流程: (1)发送端收到0窗口通告后,就启动坚持定时器,并在定时器溢出的时候向客户端查询窗口是否已经增大。 (2)在定时器未到,就收到非零通告,则关闭该定时器,并发送数据。 (3)若定时器已到,还没有收到非零通告,就发探查报文。 (4)如果探查报文ACK的通告窗口为0,就将坚持定时器的值加倍,TCP的坚持定时器使用1,2,4,8,16……64秒这样的普通指数退避序列来作为每一次的溢出时间,重复1、2、3步,如果通告窗口非零,发送数据,关闭定时器。

    Processed: 0.010, SQL: 9