超硬核TCP、UDP基础知识汇总3

电子说

1.2w人已加入

描述

6、拥塞控制

6.1、拥塞控制概述

拥塞:当对网络资源的需求超过了现有的资源的可用部分。

拥塞出现的原因:

1.链路容量不够大,在链路上形成堆积,路由器一直是高负荷运转。

2.路由器缓存不够大,交来的数据太多远远超过了处理的速度就会在路由器缓存形成堆积,堆不下的就丢失了。

3.处理机太慢了。

网络拥塞往往是多种原因的,仅仅增加网络资源有可能适得其反。比如说增大路由器的缓存但并未增加链路带宽和处理机速度会导致排队时间更长一旦用TCP报文传输那么大量的超时重传会引发更严重的问题。提高处理机的速度也不行因为你会把巨大的压力施加给下一跳。需要耗费大量的资源。

6.2、拥塞控制与流量控制

1.流量控制是点到点的,拥塞控制是全局性网络的。

2.拥塞控制是防止过多数据注入到网络,控制发送速率这又与流量控制有些相似。

3.流量控制是发送缓存与接收缓存的问题,拥塞控制是网络的问题。

UDP

6.3、拥塞控制的原理

1.开环控制方法:在设计网络时考虑发生拥塞的因素,力求网络不发生拥塞。

2.闭环控制方法:

基于反馈环路的概念:

•检测网络系统以便检测到拥塞在何时何地发生;

•将拥塞发生的信息传送到可采取行动的地方;

•调整网络系统的运行已解决出现的问题。

6.4、拥塞出现的指标

1.由于缓冲区不够而造成的分组丢失的百分数。

2.平均队列长度。

3.超时重传的分组数。

4.平均分组时延。

5.平均分组时延标准差。

一旦检测到了拥塞会向源站发送拥塞信息。

6.5、拥塞通知的传递

UDP

IP中tos字段00表示不支持ECN传输,01或10表示支持ECN传输,11表示产生拥塞。接收端知道产生拥塞后将TCP报文首部中的ECE置为1告诉源端减小发送速率,源端降低速率后下一次发送报文TCP中的CWR置为1降低拥塞窗口(发送窗口是受对方接收窗口和拥塞窗口控制的)。

6.6、TCP拥塞控制方法

TCP采用基于窗口的方法进行拥塞控制,该方法属于闭环控制方法。TCP发送方维持一个拥塞窗口,拥塞窗口根据网络的拥塞程度动态的变化。发送端利用拥塞窗口根据拥塞情况调整发送的数据量若网络没有拥塞则增大窗口让他多发数据提高网络利用率。所以真正发送窗口的值为接收窗口值和拥塞窗口值的最小值。

现在我们假设对方接收缓存无限大仅考虑网络问题探讨一下TCP的拥塞控制算法。

6.6.1、慢开始算法

目的:用来探测网络的负载或者承受能力。

算法思路:由小到大逐渐增大拥塞窗口,当自己主机刚连进网络时如果一下注入太多资源可能造成网络拥塞,因此循序渐进的探测网络的拥塞程度。每收到一个确认报文拥塞窗口就增加一个报文段。

UDP

发送方每接收到一个确认报文就将拥塞窗口增加一个报文段。如图所示我们可以看出发送一个收到一个确认下次发两个,收到两个确认下次发2+2=4个收到4个确认下次发4+4等于8个由此可见慢开始算法并不慢。

慢开始门限ssthresh(状态变量)防止拥塞窗口cwnd增长过大引起网络拥塞。

•当cwnd

•当cwnd>sshresh,停止使用慢开始算法而使用拥塞避免方法。

•当cwnd = sshresh时既可以使用慢开始算法也可以使用拥塞避免算法。

拥塞避免算法:每经过一个RTT,cwnd = cwnd + 1,他的增长是线性的。

当出现网络拥塞时,ssthresh = max(cwnd/2,2);cwnd = 1;执行慢开始算法。

目的:迅速减少网络中的分组数,有利于路由器将积压的分组处理完。

6.6.2、拥塞控制流程

UDP

•0~1执行慢开始算法拥塞窗口呈指数级增大。

•1~2达到慢开始门限时执行拥塞避免算法拥塞窗口呈线性增大。

•2~3超时重传可能出现网络拥塞执行将拥塞窗口置1重新执行慢开始算法。

•34同12

•4~5中间出现报文丢失收到3个确认报文执行快重传

UDP

6.6.3、快重传

快重传算法要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文也要立即发出对已收到的报文段的重复确认。发送方只需要一连收到3个重复确认就立即重传这样就不会出现超时。

UDP

当我发送M3时发生了报文丢失按理说我应该等超时之后再重新发送。但是这样做有可能导致误会这时候网络可能没有发生拥塞。当M3丢失后接收方发送已接收报文的重复确认即M2当M2重复确认3次M3立即重传。快重传算法可以让发送方尽早知道报文发生了丢失。这样就不会超时,就不会让对方误以为发生了拥塞。

6.6.4、快恢复算法

•当发送端收到连续3个重复确认时,发送方认为网络很可能没有发生阻塞,因此不执行慢开始算法,而是执行快恢复算法;

•ssthresh = cwnd/2;

•新拥塞窗口cwnd = ssthresh;

•开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分