科学家研制2D金属芯片
|
EV 即 receive,NXT 表示下一个接收的位置,WND 表示接收窗口大小。 流量控制过程 这里我们不用太复杂的例子,以一个最简单的来回来模拟一下流量控制的过程,方便大家理解。 首先双方三次握手,初始化各自的窗口大小,均为 200 个字节。 假如当前发送端给接收端发送 100 个字节,那么此时对于发送端而言,SND.NXT 当然要右移 100 个字节,也就是说当前的可用窗口减少了 100 个字节,这很好理解。 现在这 100 个到达了接收端,被放到接收端的缓冲队列中。不过此时由于大量负载的原因,接收端处理不了这么多字节,只能处理 40 个字节,剩下的 60 个字节被留在了缓冲队列中。 注意了,此时接收端的情况是处理能力不够用啦,你发送端给我少发点,所以此时接收端的接收窗口应该缩小,具体来说,缩小 60 个字节,由 200 个字节变成了 140 字节,因为缓冲队列还有 60 个字节没被应用拿走。 因此,接收端会在 ACK 的报文首部带上缩小后的滑动窗口 140 字节,发送端对应地调整发送窗口的大小为 140 个字节。 此时对于发送端而言,已经发送且确认的部分增加 40 字节,也就是 SND.UNA 右移 40 个字节,同时发送窗口缩小为 140 个字节。 这也就是流量控制的过程。尽管回合再多,整个控制的过程和原理是一样的。 010: 能不能说说 TCP 的拥塞控制?上一节所说的流量控制发生在发送端跟接收端之间,并没有考虑到整个网络环境的影响,如果说当前网络特别差,特别容易丢包,那么发送端就应该注意一些了。而这,也正是拥塞控制需要处理的问题。 对于拥塞控制来说,TCP 每条连接都需要维护两个核心状态: 拥塞窗口(Congestion Window,cwnd) 慢启动阈值(Slow Start Threshold,ssthresh) 涉及到的算法有这几个:
接下来,我们就来一一拆解这些状态和算法。首先,从拥塞窗口说起。 拥塞窗口 拥塞窗口(Congestion Window,cwnd)是指目前自己还能传输的数据量大小。 那么之前介绍了接收窗口的概念,两者有什么区别呢?
限制谁呢? 限制的是发送窗口的大小。 有了这两个窗口,如何来计算发送窗口?
取两者的较小值。而拥塞控制,就是来控制cwnd的变化。 慢启动 刚开始进入传输数据的时候,你是不知道现在的网路到底是稳定还是拥堵的,如果做的太激进,发包太急,那么疯狂丢包,造成雪崩式的网络灾难。 因此,拥塞控制首先就是要采用一种保守的算法来慢慢地适应整个网路,这种算法叫慢启动。运作过程如下:
难道就这么无止境地翻倍下去?当然不可能。它的阈值叫做慢启动阈值,当 cwnd 到达这个阈值之后,好比踩了下刹车,别涨了那么快了,老铁,先 hold 住! 在到达阈值后,如何来控制 cwnd 的大小呢? 这就是拥塞避免做的事情了。 拥塞避免 原来每收到一个 ACK,cwnd 加1,现在到达阈值了,cwnd 只能加这么一点: 1 / cwnd。那你仔细算算,一轮 RTT 下来,收到 cwnd 个 ACK, 那最后拥塞窗口的大小 cwnd 总共才增加 1。 也就是说,以前一个 RTT 下来,cwnd翻倍,现在cwnd只是增加 1 而已。 当然,慢启动和拥塞避免是一起作用的,是一体的。 快速重传和快速恢复
快速重传 (编辑:烟台站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


