美文网首页
TCP的流量控制与拥塞控制机制

TCP的流量控制与拥塞控制机制

作者: 小小少年Boy | 来源:发表于2018-08-01 16:57 被阅读0次

    参考:
    滑动窗口
    TCP的流量控制和拥塞控制

    1 流量控制

    利用滑动窗口机制实施流量控制

    TCP协议里窗口机制有2种:一种是固定的窗口大小;一种是滑动的窗口。
    TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间数据传输。
    原理:

    这个窗口大小就是我们一次传输几个数据。对所有数据帧按顺序赋予编号,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧才允许被发送;同时接收方也维持着一个接收窗口,只有落在接收窗口内的帧才允许接收。这样通过调整发送方窗口和接收方窗口的大小可以实现流量控制。

    每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口:一个用于接收数据,另一个用于发送数据。

    TCP使用肯定确认技术,其确认号指的是下一个所期待的字节。 假定发送方设备以每一次三个数据包的方式发送数据,也就是说,窗口大小为3。发送方发送序列号为1、2、3的三个数据包,接收方成功接收数据包,用序列号4确认。发送方设备收到确认,继续以窗口大小3发送数据。当接收方要求降低或者增大网络流量时,可以对窗口大小进行减小或者增加,本例降低窗口大小为2,每一次发送两个数据包。当接收方设备要求窗口大小为0,表明接收方已经接收了全部数据,或者接收方应用程序没有时间读取数据,要求暂停发送。发送方接收到携带窗口号为0的确认,停止这一方向的数据传输。

    窗口为零导致的死锁:
    起因:考虑一种特殊的情况,就是接受方若没有足够缓存使用,就会发送零窗口大小的报文,此时发送方将发送窗口设置为0,停止发送数据。之后接受方有足够的缓存,发送了非零窗口大小的报文,但是这个报文在中途丢失了,那么发送方的发送窗口就一直为零导致死锁。
    解决办法:TCP为每一个连接设置一个持续计时器,只要TCP的一方收到对方的零窗口通知,就启动该计时器,周期性的发送一个零窗口探测报文段。对方就在确认这个报文的时候给出现在的窗口大小

    2 拥塞控制

    拥塞的原因是负载过大,控制的对象自然是发送者的流量。防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

    拥塞控制方法:

    • 慢开始和拥塞避免

    发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞。

    慢开始:先探测一下,即由小到大逐渐增大发送窗口。每经过一个传输轮次,拥塞窗口 cwnd 就加倍。慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。慢开始算法只是在TCP连接建立时和网络出现超时时才使用。

    拥塞避免算法:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

    • 快重传和快恢复
      快重传算法:首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。

    相关文章

      网友评论

          本文标题:TCP的流量控制与拥塞控制机制

          本文链接:https://www.haomeiwen.com/subject/ytervftx.html