当前位置:网站首页>传输层 拥塞控制-慢开始和拥塞避免 快重传 快恢复
传输层 拥塞控制-慢开始和拥塞避免 快重传 快恢复
2022-07-06 10:10:00 【富士康质检员张全蛋】
通信两端的TCP协议在发数据包的时候要感受网络是否畅通,如果网络出现了阻塞,出现了丢包现象,他们会自动的降低发送速度,如果网络畅通了会提高发送速度。
拥塞是一个动态的,比如上下班会出现堵车现象,是大家的车都往路上跑引起的阻塞。
左边的计算机和右边的计算机都要进行通信,通信的流量都过这一条链路,链路的带宽都是有限的,比如1G,千兆带宽,从一边涌入了700M的带宽,从另外一边涌入了600M带宽,都要过这1000M的链路,超过了最大值,肯定有部分数据包就丢掉了。
如果出现丢包了,还是什么都不管,该怎么发怎么发,发了200个,丢了100个再重发100个 ,发的多也没用,还是得重发,干脆大家发慢点,发了100个丢了50个,那么下次发10个,发10个再丢发5个,再不行发1个,收到确认了再发。这样就将速度降下来了,不连着发。这个就是拥塞控制,拥塞避免。
上面可以看到吞吐量就是过链路的流量,吞吐量是两个方向的,两个方向加到一块叫做吞吐量。
最开始发多少,吞吐量就是多少,随着负载增加,这个时候就会出现丢包,之后负载增加就引起轻度阻塞了,还接着往里面增加流量,这个时候丢包就比较严重了,丢了上面-下面的这么多包,吞吐量增加,可能1个包都过不来了,死机了。
随着你往网络当中输入的负载增加, 链路上的吞吐量没有增加,反而降低,这种情况就是拥塞,我们要避免出现这种情况,把拥塞控制在轻度拥塞。
拥塞控制方法—慢开始和拥塞避免
因特网建议标准RFC2581定义了进行拥塞控制的四种算法,即慢开始(Slow-start)、拥塞避免(Congestion Avoidance)、快重传(Fast Restransmit)和快回复(Fast Recovery),我们假定: 数据单方向传送,另外一个方向只传送确认。 接收方总是有足够大的缓存空间,因而发送窗口的大小由网络的拥塞程度来决定。
慢开始
在通信的时候,b计算机,会告诉a计算机接受窗口是多大,最大的MSS是多少,也就是最大的段是多少,虽然告诉它了,接受窗口是3000,它也不会将发送窗口设置为3000,因为在a这端还有拥塞窗口,一开始发送窗口等于拥塞窗口,拥塞窗口先发一个段,因为a也不知道网络状态怎么样,先发一个试试看,发送一个包收到确认了,一看网络状态还可以,它将发送窗口变为2了,下次发的时候连续发两个段,之后就是2倍数的增加发送速度。
拥塞窗口是2倍的增加,拥塞窗口等于滑动窗口。直到增加到b计算机告诉给她的发送窗口大小
a发送窗口受到两个控制,一个是拥塞窗口控制还有一个是b计算机的接受窗口控制,它求得哪个窗口最小,就使用哪个窗口作为发送窗口。
可见a的发送窗口是受拥塞窗口控制的。先发1个,然后2 4 8直到和接受窗口一样大。
拥塞避免
左边是拥塞窗口,单位是字节,一个报文段还是按照100个字节来算,慢开始从1开始,先发一个看看是否能够收到,可以看到拥塞窗口都是以倍数增长的,窗口到达1600个字节之后,下一轮不是以指数增长了,而是加1线性增长,到了12轮次的时候出现了网络拥塞丢包了,这个时候慢开始门限除以2变为了1200,它的拥塞窗口从1开始了,1200到达慢开始门限了,然后就+1。
每次增加,开始丢包,慢开始门限开始调整,然后又从1 2 4 8这样开始,这叫做慢开始,这样就可以避免网络的拥塞,
拥塞控制方法—快重传和快恢复
发数据的时候发m1 m2 m3,发现第三个丢了,等到超时之后重传,这样的话效率不高,这边没有到立刻发3个重复的确认,告诉对端该法第三个了,这边就不等着超时了,立刻发,立刻将段发过来了。
快重传也就是发现对端发现数据包没有按照顺序到达,发现有丢包就连续发3个包,对这个包确认,另外一边发现有3个,相当于加急,就立刻发丢了包,就不需要等到超时了。
快恢复算法而不是慢开始算法
前面和之前一样,慢开始门限了就+1,发现丢包了之后将满开始门限除2,这就是新的慢开始门限,这个时候就不从1开始了,从新的满开始门限开始了。这就叫做快恢复,不是从下面开始了。
如果到达4000开始丢包,那么就将慢开始门限调整为2000,然后再增加,以此类推。
上面可以看到TCP协议可以感知网络情况,自动的调整发送速度。
发送窗口的上限
发送窗口的上限收到两个因素的控制,一个cwnd拥塞窗口,rwnd接受窗口,选取最小值。
如果把本节所讨论的拥塞控制和接收方对发送方的流量控制一起考虑,那么很显然,发送方的窗口的上限值应当取为接收方窗口rwnd和拥塞窗口cwnd这两个变量中较小的一个,也就是说: 发送方窗口的上限值 = Min [rwnd,cwnd] 当rwnd<cwnd时,是接收方的接收能力限制发送方窗口的最大值。 反之,当cwnd<rwnd时,则是网络的拥塞限制发送方窗口的最大值。 也就是说,rwnd和cwnd中较小的一个控制发送方发送数据的速率。
边栏推荐
- 李书福为何要亲自挂帅造手机?
- Reppoints: advanced order of deformable convolution
- Olivetin can safely run shell commands on Web pages (Part 1)
- RB157-ASEMI整流桥RB157
- Principle and usage of extern
- 在一台服务器上部署多个EasyCVR出现报错“Press any to exit”,如何解决?
- FMT open source self driving instrument | FMT middleware: a high real-time distributed log module Mlog
- Unity particle special effects series - treasure chest of shining stars
- 微信小程序中给event对象传递数据
- Summary of Android interview questions of Dachang in 2022 (I) (including answers)
猜你喜欢
Manifest of SAP ui5 framework json
The solution that flutterweb browser cannot be rolled back after refreshing
Establishment of graphical monitoring grafana
Pytest learning ----- pytest operation mode and pre post packaging of interface automation testing
Pytest learning ----- pytest confitest of interface automation test Py file details
视频融合云平台EasyCVR增加多级分组,可灵活管理接入设备
Unity particle special effects series - treasure chest of shining stars
FMT开源自驾仪 | FMT中间件:一种高实时的分布式日志模块Mlog
Appium automated test scroll and drag_ and_ Drop slides according to element position
Getting started with pytest ----- test case rules
随机推荐
虚拟机VirtualBox和Vagrant安装
开源与安全的“冰与火之歌”
Will openeuler last long
It doesn't make sense without a distributed gateway
EasyCVR电子地图中设备播放器loading样式的居中对齐优化
Jerry's setting currently uses the dial. Switch the dial through this function [chapter]
Easy introduction to SQL (1): addition, deletion, modification and simple query
Open source and safe "song of ice and fire"
kivy教程之在 Kivy 中支持中文以构建跨平台应用程序(教程含源码)
adb常用命令
How to output special symbols in shell
中移动、蚂蚁、顺丰、兴盛优选技术专家,带你了解架构稳定性保障
FMT open source self driving instrument | FMT middleware: a high real-time distributed log module Mlog
面向程序员的精品开源字体
F200——搭载基于模型设计的国产开源飞控系统无人机
Alertmanager sends the alarm email and specifies it as the Alibaba mailbox of the company
78 year old professor Huake has been chasing dreams for 40 years, and the domestic database reaches dreams to sprint for IPO
编译原理——预测表C语言实现
Olivetin can safely run shell commands on Web pages (Part 1)
Optimization of middle alignment of loading style of device player in easycvr electronic map