热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

将计算机思维故事化——之计算机网络TCP拥塞控制算法

互联网各主机彼此通信的背后。有无数的信息在互相发送,来往忙碌。为了形象化这个过程,能够引入中国古代信息传递的经典景象——奏章。奏章是古代各层官员向帝王进言陈事的文书,驿卒携带奏章前往京城,为地方

互联网各主机彼此通信的背后。有无数的信息在互相发送,来往忙碌。为了形象化这个过程,能够引入中国古代信息传递的经典景象——奏章。奏章是古代各层官员向帝王进言陈事的文书,驿卒携带奏章前往京城,为地方官员传递奏章,同一时候从京城带回该奏章的批复。


在战争爆发或自然灾害等国事紧急时,奏章频传,地方官员经常不能在第一时间内得到京城的批复,主要原因有两点

第一。大量传递奏章的驿卒都赶往京城。交通出现拥挤。一定程度上添加了驿卒往返的时间;

第二。皇帝审阅奏章速度有限,面对过多的奏章无法做到及时地批复。

【在计算机网络通讯中。为了缓解这两个问题,分别引入“拥塞控制”和“流量控制”两种服务:拥塞控制考虑的是总体网络的负载,防止过多的数据注入网络,避免通信时延的添加;流量控制则抑制发送端发送数据的速率,以便接收端来得及接收】


在这里,只讨论怎样缓解第一种问题(即交通拥挤)带来的麻烦。因特网的标准定义中有四种拥塞控制办法来处理这个问题。

【当出现拥塞时,发送端并不能了解到拥塞发生的细节,对于通信连接的发送端而言,拥塞往往表如今通信时延的添加。不能在期望时间内得到反馈确认】


在国事紧急时期刚開始时,中央规定:第一天,各层官员每天仅仅能上呈一封奏章。皇帝自然能够从容地批复全部奏章,并让驿卒带回批复,地方官员看到第一天的一封奏章得到批复,心领神会地在第二天上呈两封奏章,同理。假设第二天晚上两封都得到了批复,表明第三天能够上呈四封,以此类推……

【这个算法叫做“慢開始算法”。每天上呈奏章数被称为“拥塞窗体(cwnd)”,初始时。先令拥塞窗体cwnd=1,每经过一个传输轮次(即往返时延RTT)且收到确认,拥塞窗体大小cwnd就会加倍】


随着一天天过去。地方官员上呈奏章数目呈指数增长。前往京城的驿卒也越来越多——快马飞驰,扰民伤民——京城的交通情况有了恶化的苗头,于是朝中治安重臣開始实施新规定:一旦每天上呈的奏章数达到了上限值。在得到皇帝的批复后,次日可上呈的奏章数不再翻倍,而是仅仅添加一封

这样,尽管每天赶往京城的驿卒数还在增长。却不再像前段时间那样指数增长了。

【这个算法叫“拥塞避免算法”,当拥塞窗体大小按指数增长达到上限值(这个值与当前网络状态有关,被称为“阙值(ssthresh)”)时,每经过一个传输轮次(即往返时延RTT)且收到确认,拥塞窗体大小cwnd就加1,而不是加倍】


新规定运行后,赶往京城的驿卒在缓慢添加,直到某天,京城最终出现了交通拥挤的情况,马如龟速,以致于驿卒在一天之内不能带回奏章的批复,地方官员到了晚上还见不到驿卒回来,知道京城交通出现了问题。而问题的解决办法就在于自己每天派出的驿卒太多。非常聪明的是。次日他们又会又一次依照一天一封的规定上呈奏章。而对于治安重臣。京城交通拥挤也应该解决,于是開始反思自己执法过程的漏洞,最后得出的结论是:上限值的大小设置不恰当,于是决定设为此时驿卒数(即奏章数)的一半

这样。地方官员又又一次開始了一天一封的“指数增长阶段”,而治安重臣也设定了新的上限值。

总之。新的一轮“指数增长-线性增长”又開始了。

【当网络出现拥塞时。不管是在“慢開始算法”阶段还是在“拥塞避免算法”阶段,仅仅要发送端没有按时收到确认,网络就把阙值(ssthresh)设置为发生拥塞时发送端拥塞窗体(cwnd)的一半,然后把拥塞窗体(cwnd)又一次初始化为1,又一次运行慢開始算法】


后来,因为京城交通拥挤常发生,所以地方官员仅仅有等到晚上。才知道京城交通发生了拥挤,所以希望能有个小小的预知。如此,治安重臣想出了办法,因其了解京城交通状况,能够提前推断驿卒能否够当晚带回批复。当了解到某驿卒不能赶回时。他便派遣自己辖下的驿卒,三人一组,出京城直奔地方。告知地方官员不必再等晚上的批复了

【这个算法叫做“快重传”,当发送端收到接受端连续三个确认信息时,表明网络已经出现了拥塞。而发送端不必再等待自己预期中的计时器超时】


一旦地方官员提前得到了消息。知道驿卒又多了,京城又堵了。地方官员又会郁闷地在次日開始一天一封的“指数增长阶段”。

同一时候,治安重臣也考虑到地方官员大量奏章上呈的愿望,也折衷地想了还有一个办法:在改动上限值为拥挤时驿卒数一半的同一时候。让地方官员不必又一次从一天一封開始,而是让每天上呈的奏章数跟新上限值一样。这样直接跳过“指数增长”阶段,直接进入“线性增长”阶段。

【这个算法叫做“快恢复算法”,当发送端收到接受端连续三个确认信息时。即网络发生拥塞时,网络把阙值(ssthresh)设置为出现拥塞时发送端拥塞窗体大小(cwnd)的一半的同一时候,对拥塞窗体大小(cwnd)也相同操作,从而直接运行“拥塞避免算法”,使拥塞窗体大小线性添加】


以上就是标准互联网定义中TCP拥塞控制的四种算法(慢開始算法、拥塞避免算法、快重传算法、快恢复算法),当中慢開始算法、拥塞避免算法是拥塞控制的基础,快重传算法、快恢复算法是前二者的改进



* 思维碰撞,不要忘了与好友分享!

未来将推出“将计算机思维故事化”系列。谢谢大家的关注!

*



推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • 如何找到并加速缓慢的代码,提高性能
    本文讲述了如何找到并加速缓慢的代码,提高系统性能。作者通过优化内部循环、利用多处理器运行内部循环以及减少内部循环运行次数等方式来提高代码的执行效率。以一个游戏开发中的案例为例,作者介绍了如何通过调查和排查问题,找到导致帧率下降的设计缺陷,并进行修复。文章总结了优化代码的关键点,并提供了一些实用的方法和技巧。 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 玩转直播系列之消息模块演进(3)
    一、背景即时消息(IM)系统是直播系统重要的组成部分,一个稳定的,有容错的,灵活的,支持高并发的消息模块是影响直播系统用户体验的重要因素。IM长连接服务在直播系统有发挥着举足轻重的 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了VoLTE端到端业务详解|VoLTE用户注册流程相关的知识,希望对你有一定的参考价值。书籍来源:艾怀丽 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • 当写稿机器人真有了观点和感情,我们是该高兴还是恐惧?
    目前,写稿机器人多是撰写以数据为主的稿件,当它们能够为文章注入观点之时,这些观点真的是其所“想”吗?最近,《南 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 详解 Python 的二元算术运算,为什么说减法只是语法糖?[Python常见问题]
    原题|UnravellingbinaryarithmeticoperationsinPython作者|BrettCannon译者|豌豆花下猫(“Python猫 ... [详细]
  • http头_http头部注入
    1、http头部注入分析1、原理 ... [详细]
author-avatar
我叫柒薇安2001
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有