挑战408——一周网络——运输层(4)

TCP的可靠传输(数据传输)

TCP的流量控制

如果发送方发送的数据速率过快,那么接收方就很可能来不及接收那么多的数据报。所谓流量控制,就是让发送方不要发送那么快,至少要让接收方来的即接收。利用滑动窗口机制可以很方便的实现对TCP流量的控制。这里注意,rwnd的值不等于缓存区的大小。
在这里插入图片描述
分析一下,假设B的初始接收窗口为rwnd= 400,也就是 一开始允许A最多发400字节的数据。
第一第二条表示数据的正常传输。第三条表示数据丢失。于是B收不到B发来的201到300的数据,于是认为它丢失了,便要求重传序列号为201之后的数据,并重新设置接收窗口为300.A收到后,除了重传201-301(图中第七条),也传了新的数据。等接收窗口接收后,发送确认报文,要求传501之后的报文,并重设接收窗口为100(图中倒数第三条)。B接收返回给A的报文中,rwnd为0,表示不再接收数据。注意到,这里整个过程rwnd都是在动态变化的
考虑这样一种情况,当B发送rwnd = 0的报文后,突然缓存区有了空闲,又想让A继续发送数据,于是B向A发送了rwnd = 400.可惜,这个报文在传输过程中丢失了。这样A在等待B发送非0窗口的确认报文,而B在等待A发送的数据。这样双方无休止的等待,陷入死锁。而打破这个死锁的办法就是让收到0窗口通知的一方启动持续计时器,时间到后发送0窗口探测报文。这样对方在发送确认的同时附带新的窗口值。

TCP拥塞控制

所谓拥塞控制就是防止过多的数据注入到网络中去,这样可以使得网络中的路由器或者链路不至于过载
拥塞控制与流量控制:拥塞控制所要做的都有一个前提:网络能承受现有的网络负荷。拥塞控制是一个全局性的过程。涉及所有主机,所有路由器。而流量控制是指点对点通信流量的控制,目的是为了抑制发送端的发送速率,防止接收端接收不过来。
目前,TCP进行拥塞控制的算法有4种:慢开始拥塞避免快重传快恢复
发送方在确定发送报文的同时,既要考虑对方的接收能力,又要从全局考虑不让网络出现拥塞。因此TCP要求发送方维持下面两个窗体:

  • 接收窗口(rwnd)
  • 拥塞窗口(cwnd):发送方根据自己估算的网络拥塞程度而设置的窗口值。只要网络没有出现拥塞 ,cwnd就可以适当增大一些以便吧更多的分组发送出去。反之,当网路出现拥塞或者可能出现拥塞的时候,就适当减小cwnd,防止过多的分组进入网络,缓解网络拥塞。

发送窗口的上限值一般min(rwnd,cwnd)。判断网络出现了拥塞的依据是出现了超时。

慢开始算法

思路:由小到大增大发送窗口的值,也就是说由小到大增大拥塞窗口的数值。每收到一个新的报文段的确认后,就可以把拥塞窗口增加最多一个SMSS。这样,每经过一个RTT,cwnd就加倍。下面是慢开始算法窗口增长示意图:
在这里插入图片描述
注意,这里的慢不是指的增长速率慢,而是指的一开始注入到网络中的数据很少,Cwnd从1开始。

拥塞避免

思路:让cwnd缓慢增大,即每一个RTT后,cwnd自动加一,而不是像慢开始那样加倍增加。这种增长方式称为加法增大。这种算法使得cwnd呈线性增长的趋势。比起慢开始算法这样的cwnd增长速率要慢很多。拥塞避免并非是完全避免拥塞,只是让网络比较不容易出现拥塞。

快重传与快恢复

思路:要求接收方一收到发送方发送的数据就确认。当发送方一连收到3个重复的确认时,就可以认为接收方没有收到相应的报文,于是立即重传丢失的报文。此时执行快恢复算法(将门限值变为拥塞窗口的一半,同时设置拥塞窗口为门限值,并执行拥塞避免算法)。这种做法称为乘法减小。
在这里插入图片描述

慢开始和拥塞避免

慢开始算法的cwnd是呈指数增长的,为了防止cwnd窗口增长过快引发的网络拥塞,还需要设置一个慢开始门限ssthresh
当 cwnd < ssthresh,使用慢开始
当 cwnd > ssthresh,停止使用慢开始,改用拥塞避免
当 cwnd = ssthresh,既可以使用慢开始也可以用拥塞避免。

在这里插入图片描述
设初始的ssthresh = 16,对上图进行分析:

  1. 0-4 采用慢开始算法,cwnd呈指数增长。
  2. 4-12,当RTT = 4 时,ssthresh = cwnd,此时采用慢开始算法。直到RTT = 12时,网络出现超时
  3. 此时cwnd =24,于是将ssthresh设置为出现超时时cwnd的一半,也就是12.重新开始执行步骤1,步骤2.
  4. 当RTT = 20时(cwnd = 16),发送方收到连续3个重复的ACK确认,此时改用快重传算法快恢复算法,重传分组的同时,将ssthresh,跟cwnd设置为出现重传时的一半,即8.然后执行拥塞避免算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值