计网协议 | TCP(3-拥塞控制)
发布日期:2022-02-21 17:40:27
浏览次数:63
分类:技术文章
本文共 1191 字,大约阅读时间需要 3 分钟。
1 何为拥塞?
套用下百度百科:
网络拥塞(network congestion) 是指在分组交换网络中传送分组的数目太多时,由于存储转发节点的资源有限而造成网络传输性能下降的情况。网络拥塞是一种持续过载的网络状态,此时用户对网络资源(包括链路带宽、存储空间和处理器处理能力等)的需求超过了固有的处理能力和容量。在Internet的体系结构中,拥塞的发生是其固有的属性。
总结来说就是:对资源需求的总结>可用资源
- 网络中有许多资源同时呈现供应不足 ↓ ↓ (导致) ↓
- 网络性能变坏 ↓ ↓ (导致) ↓
- 网络吞吐量将随输入负荷增大而下降
此时出现了拥塞控制,为了防止更多的数据注入到网络中,这是一个很严肃的全局性问题。
2 拥塞控制和流量控制的区别?
拥塞控制和流量控制都是让发送方减慢自己的发送速率,那么这二者有什么区别呢?
2.1 拥塞控制
拥塞控制是一个发送方对多个接收方的情况,不同接收方返回的需要减少发送数据量的请求是不一致的,这是一个全局性的问题。
2.2 流量控制
流量控制的话就是发送方和接收方一对一关系,只是端到端的问题,如果接收方来不及接受,他立马就知道反馈给哪个接收方
3 拥塞控制的四种算法
讲算法之前先做几个假定:
- 数据单方向传送,而另一个方向只传送确认
- 接收方总是有足够大的缓存空间,因而发送窗口大小取决于拥塞程度
- 发送窗口=Min{接收窗口rwnd,拥塞窗口cwnd}
再确定两个概念:
- 接收窗口:接收方根据接受缓存设置的值,并告知给发送方,反映接收方容量。
- 拥塞窗口: 发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量。
3.1 慢开始 + 拥塞避免
可以先大概看一下图:
这里面出现的概念:- 传播轮次: 发送了一批报文段并收到它们的确认的时间。其实也就是往返时延RTT。
- 慢开始: 拥塞窗口的大小随着传播轮次的增加而增加,从1开始,每次*2,呈指数增长,直到ssthresh初始值,也就是慢开始门限值的时候。
- 拥塞避免算法: 此时拥塞窗口cwnd值的增长由
*2
变为+1
,变成线性增长,直到阈值(出现了网络拥塞) - 再次慢开始: 当出现拥塞后,cwnd立刻减为1,再执行之前重复过的慢开始算法,但是,此时的慢开始门限ssthresh值变为上一次产生拥塞的窗口值的一般
也就是24/2=12
这就是慢开始+拥塞避免算法的过程,如此反复~
3.2 快重传 + 快恢复
-
快重传: 如果数据发生丢失,比如发送方给接收方按序发送A,B,C,D,E。然后A发送成功,B丢失,C,D,E发送成成功,但是在返回对CDE的确认的时候,接收方只会返回自己需要的B的报文,当该确认重复三次
(冗余ACK)
时,发生快重传。 -
快恢复: 当发生拥塞时,不会直接回到慢开始,而是直接将窗口大小cwnd设置为出现三次重复确认时窗口大小的二分之一,然后执行拥塞避免算法。
转载地址:https://blog.csdn.net/weixin_40597409/article/details/122761321 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月01日 22时23分03秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【Leetcode刷题篇】leetcode207 课程表
2019-04-26
【Leetcode刷题篇】leetcode322 零钱兑换
2019-04-26
【Leetcode刷题篇】leetcode437 路径总和III
2019-04-26
【Linux篇】Linux常用命令之性能优化
2019-04-26
【面试篇】JVM体系
2019-04-26
【Leetcode刷题篇】leetcode406 根据身高重建队列
2019-04-26
【Leetcode刷题篇】leetcode581 最短无序连续子数组
2019-04-26
【Leetcode刷题篇】leetcode538 把二叉搜索树转换为累加树
2019-04-26
【多线程与高并发】线程的优先级是怎么回事?
2019-04-26
【多线程与高并发】Java守护线程是什么?什么是Java的守护线程?
2019-04-26
【Leetcode刷题篇/面试篇】-前缀树(Trie)
2021-06-29
【Leetcode刷题篇】leetcode337 打家劫舍III
2021-06-29
【Leetcode刷题篇】leetcode4 寻找两个正序数组的中位数
2021-06-29
【Leetcode刷题篇】leetcode316 去除重复字母
2021-06-29
【Leetcode刷题篇】leetcode1081 不同字符的最小子序列
2021-06-29
【面试篇】Java网络编程与IO流体系
2021-06-29
【大话Mysql面试】-Mysql的索引为什么要使用B+树,而不是B树,红黑树等之类?
2021-06-29
【大话Mysql面试】-如何通俗易懂的了解Mysql的索引最左前缀匹配原则
2021-06-29
【大话Mysql面试】-MYSQL的两种存储引擎MyISAM与InnoDB的区别是什么?
2021-06-29