《计算机网络——自顶向下方法》精炼——3.7(1)

news2024/12/26 18:30:18

少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向

文章目录

  • 拥塞控制方法
    • ATM ABR拥塞控制
  • TCP拥塞控制
    • TCP拥塞控制算法的实现
      • 慢启动
      • 拥塞避免
      • 快速恢复
      • 总结

拥塞控制方法

在上一篇文章中,我们介绍了在数据传输过程中出现的问题。本节将简要介绍解决这些问题的方法。笼统来讲,根据网络层是否向运输层提供拥塞信息,我们可以将这些方法分为两类:

  1. 端到端拥塞控制:在这类方法中,运输层不能显式的从网络层获取拥塞信息,只能通过丢包,时延增加等迹象来推断发生拥塞。这是TCP协议采用的方法,因为IP协议不会向运输层报告拥塞。如果推断出有拥塞出现,TCP就会使用让窗口减小等方法控制拥塞。
  2. 网络辅助的拥塞控制:在这类方法中,网络层构件显式的向发送方主机运输层发送拥塞信息,这类信息可能是一个报文,也可能只是一个比特。路由器向发送方主机运输层发送信息的方式也有两种,可以直接向发送方主机发送报文,也可以先随要发送的数据发送到接收方,再由接收方发送到发送方。

在这里我们先简要介绍第二种方法,即网络辅助的拥塞控制。

ATM ABR拥塞控制

ATM采用面向虚电路(VC)的方法处理分组交换,这需要网络上的每台交换机维护从源到目的地VC的状态。这意味着每台交换机都掌握从整条链路和发送方主机的信息,非常适合用网络辅助的拥塞控制手段。
在ATM ABR中,封装数据的单位被称为信元而非分组。发送方在发送数据信元时,也会夹杂一些资源管理信元(RM信元)用于传递拥塞信息,这些RM信元在经过交换机或被接收方回送时可能会被修改。链路上的交换机也可以发送RM信元给发送方,这也体现了路由器反馈拥塞信息的两种方式。
对于反馈信息的第二种方式,即路由器将信息随数据发送给接收方,再由接收方回送,ABR提供了三种机制:

  • EFCI比特:每个数据信元带有一个EFCI比特,如果网络处于拥塞状态,那么交换机将每一个经过的数据信元的EFCI比特置为1。如果接收方发现收到的大量数据信元的EFCI比特都是1,那么它将下一个RM信元的拥塞指示比特(CI比特)置为1并会送给发送方。
  • CI比特和NI比特:RM信元中有拥塞指示(CI)比特和无增长(NI)比特。在轻微拥塞时,交换机将NI比特置为1;严重拥塞时,交换机将CI比特置为1。
  • ER字段:RM信元中包含一个两字节的显式速率(ER)字段。每经过一个交换机,如果这个字段的值大于该交换机所在链路的可支持速率(比如该交换机处于拥塞状态),那么这个字段的值将被更新为改速率。最终ER字段被设置为从源到目的地的路径上所有交换机的最小可支持速率。

TCP拥塞控制

正如上文所说,TCP使用端到端拥塞控制。为了实现TCP拥塞控制算法,TCP拥塞控制机制在发送方增加一个变量,即拥塞窗口(cwnd),它与接收方的接收窗口(rwnd)共同作用。发送方中未被确认的数据量不能超过这两个值中的较小值:
在这里插入图片描述
如果rwnd无限大,这样未被确认的数据量就只受制于cwnd,进而cwnd就可以控制发送速率。粗略的来说,设往返时间为RTT,那么发送速率就是cwnd/RTT字节/秒。TCP中,有几条原则用以控制发送速率:

  • 发生丢包时降低TCP发送方的速率。
  • 有未确认报文段确认到达,即有报文顺利到达接收方时,增加TCP发送方速率,由于这条原则,TCP被称为自计时的

TCP拥塞控制算法的实现

算法包括慢启动拥塞避免快速恢复三个部分。
在这里插入图片描述

慢启动

慢启动的目的是在连接开始时快速找到发送报文的合适速率。开始一段TCP连接时,拥塞窗口长度设为一个TCP报文长度(称为1个MSS),每收到一个新的确认报文,拥塞窗口增加1个MSS,这样可以达到每过一个RTT发送速率(拥塞窗口)翻倍的效果。例如,开始连接时窗口是一个MSS,发送一个TCP报文后等待确认报文,经过一个RTT,它收到确认,增加一个MSS,窗口长度变为2个MSS;然后它可以连续发送两个TCP报文,同理在一个RTT后它将收到两个确认报文,增加两个MSS,窗口长度变为4个MSS。通过这种方式,窗口长度得以指数式增长。
我们可以通过上面的FSM图看到关于慢启动状态转换条件的几种情况:

  • 在一开始进入慢启动状态时进行初始化,将拥塞窗口长度设为1个MSS,ssthresh值(称为“慢启动阈值”,当拥塞窗口长度大于该值时转换为拥塞避免状态)设为64KB。dupACKcount值(收到的冗余ACK报文数量,当数量达到3时代表网络可能发生拥塞,转换到快速恢复状态)设为0.
  • 收到冗余ACK报文时,dupACKcount值加1.
  • 收到新的ACK报文时,拥塞窗口长度加1个MSS,同时TCP协议确认网络不拥塞,重置dupACKcount值。
  • 超时时,确认发生拥塞且状况比较严重,将ssthresh值设为当前窗口长度的1/2(即TCP认为比较合适的发送速率),重置其他变量并重新开始慢启动过程。
  • 当拥塞窗口长度大于sstresh值时,需要进行谨慎的速率增加,因此切换到拥塞避免状态。
  • 冗余ACK报文数量到达3时,协议认为网络处于轻度拥塞状态,将sstresh值置为当前拥塞窗口长度的1/2并将新拥塞窗口长度置为sstresh值加3个MSS,切换到快速恢复状态。

拥塞避免

当TCP协议认为当前发送速率与适宜速率(充分利用链路资源且不会造成拥塞的速率)相近时,协议转换到拥塞避免状态以进行谨慎地速率增加。在这种状态下,每收到一个新确认报文,拥塞窗口长度增加MSS*MSS/cwnd字节,因此每经过一个RTT,拥塞窗口长度增加一个MSS,实现线性增长。
拥塞避免状态的转换条件:

  • 收到一个新的确认报文时,按照上文所示增加拥塞窗口长度并将冗余ACK报文段的数量置为0(每次协议认为网络不处于拥塞状态时都会重置dupACKcount值)。
  • 收到冗余ACK报文时,增加dupACKcount值
  • 冗余ACK报文数量到达3时采取与慢启动相同的策略并切换到快速恢复状态。
  • 超时时,重置所有变量,进入慢启动状态。

快速恢复

当协议认为网络处于轻度拥塞状态(协议收到3个冗余ACK报文)时,切换到快速恢复状态。快速恢复状态的状态转换条件:

  • 接收到冗余ACK时,协议继续处于快速恢复状态,但为了保证发送速率且尽快切换到别的状态,协议继续增加拥塞窗口长度。
  • 发生超时时,协议认为网络拥塞程度加重,重置变量并切换到慢启动模式(注意,除了第一次连接以外sstresh值都重置为cwnd的1/2)。
  • 接收到新的ACK报文时,协议认为网络不再拥塞,将cwnd重置为sstresh值并重置dupACKcount值,切换到拥塞避免状态。

总结

由于在实践中,cwnd常处于线性增长阶段,且每次减少都置为1,故TCP拥塞控制算法称为加性增,乘性减
请添加图片描述
我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Bitbucket 的SSH keys 突然无法识别 -> Permission denied (publickey)问题

Bitbucket 的SSH keys 突然无法识别 -> Permission denied (publickey)问题 用了几年的SSH keys突然出现Permission denied (publickey)问题,如下图所示: 1、首先排查项目权限问题,确认其他账号可更新代码,排除 2、排除SSH k…

【软件测试】白盒测试与黑盒测试

白盒测试与黑盒测试 测试用例定义生成的基本准测设计步骤作用测试数据和测试用例的区别 黑盒测试定义优点缺点黑盒测试的实施过程等价类划分法边界值分析法错误推测法因果图判定表判定表例题 白盒测试介绍覆盖程度基本路径覆盖程序流程图简化成控制流图计算圈复杂度导出测试用例…

chatGPT 学习笔记

学习笔记:chatGPT chatGPT 概述 什么是 chatGPT ?(要说明定义、来源、功能和特点) ChatGPT 是 OpenAI 开发的一个大型预训练语言模型,它基于 GPT-3.5 模型,可以在对话中生成类似人类的文本响应,简称对齐。它使用自监…

基于节点分层的配网潮流前推回代方法【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

java的UDP(一)

文章目录 1. 简介2. UDP客户端3. UDP服务器4. DatagramPacket类 1. 简介 Java中的UDP实现分为两个类:DatagramPacket和DatagramSocket。DatagramPacket类将数据字节填充到UDP包汇总,这称为数据报,由你来解包接收的数据报。DatagramSocket可以…

2023北京大学首席营销官CMO高级研修班简介

【课程背景】自 2022 年以来,营销新趋势呈现以下变化:消费渠道多元化,社会化媒体 成为信息主要渠道,流量红利消失,数字营销成当下主流:元宇宙数字营销成热点;私域运营更受品牌重视;国…

MySQL主存复制

介绍 配置-主库master 第一步:修改MySQL数据库的配置文件/etc/my.cnf [mysqld] log-binmysql-bin #[必须]启用二进制日志 server-id100 #[必须]服务器唯一id第二部:重启MySQL服务 systemctl restart mysqld第三步:登录MySQL操作&#x…

Talk预告 | 新加坡国立大学张傲:10%成本定制类 GPT-4 多模态大模型

本期为TechBeat人工智能社区第502期线上Talk! 北京时间06月01日(周四)20:00,新加坡国立大学在读博士生 — 张傲的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “10%成本定制类 GPT-4 多模态大模型 ”,届时将介…

RemoteSensing投稿流程

RemoteSensing投稿流程,底部有官网地址和word模板 RemoteSensing投稿流程,遇到的坑RemoteSensing期刊官网地址,模板 RemoteSensing投稿流程, ##3.16 Submit (第一次提交) 3.17 Under review (正…

中核浦原一号数字员工诞生,实在智能为智能制造再添强大引擎

头戴博士帽,脚踩喷气引擎,身披“科技蓝”披风,今年的全国科技工作者日,一位硬“核”数字员工正式诞生! 这就是由上海中核八所科技有限公司(下称中核八所)人工智能研发中心为上海中核浦原有限公司…

网工内推 | 上海网工专场,NP认证,朝九晚六,多次调薪机会

01 上海伍贤信息技术股份有限公司 🔷招聘岗位:网络工程师 🔷职责描述: 1、在网络基础设施方面提供日常支持,例如,WIFI、局域网、视频会议等。 2、协助管理亚太地区的网络安全服务(防火墙/代理/…

CVE-2023-33246 Apache RocketMQ 命令注入漏洞复现及分析

CVE-2023-33246 Apache RocketMQ 命令注入漏洞复现及分析 0x0.威胁情报: 漏洞编号CVE编号CVE-2023-33246漏洞评估危害评级高危漏洞类型RCE公开程度PoC已公开利用条件1.在受影响版本内威胁类型远程利用情报在野利用无漏洞活跃度中影响产品产品名称Apache RocketMQ受…

代码随想录算法训练营第二十四天| 回溯理论基础 、77. 组合

理论基础 回溯通常隐藏在递归函数的下面,递归和回溯是相辅相成的,通常来说 回溯函数就是指递归函数。 回溯法其实是一个纯暴力的搜索,有些问题只能依靠回溯法将所有的结果搜出来。 例如: 组合问题:N个数里面按一定规…

【VictoriaMetrics】VictoriaMetrics单机版数据删除

在使用vm的过程中,我们会遇到需要删除不必要的数据,那vm是如何操作数据删除的呢? VictoriaMetrics通过发送HTTP请求到http://<victoriametrics-addr>:8428/api/v1/admin/tsdb/delete_series?match=<timeseries_selector_for_delete> 其中<timeseries_sele…

npm+模块加载机制

1.npm与包 1.什么是包 Node.js中的第三方模块又叫做包。 就像电脑和计算机指的是相同的东西&#xff0c;第三方模块和包指的是同一个概念&#xff0c;只不过叫法不同。 2.包的来源 不同于Node,js中的内置模块与自定义模块&#xff0c;包是由第三方个人或团队开发出来的&am…

Android 应用弹出悬浮窗

Android开发者经常遇到应用想弹出悬浮窗的操作&#xff0c;而且有可能还想要高层级弹窗&#xff0c;就像ipone的浮标touch一样。android当然也有类似的悬浮图标&#xff0c;比如前些年我们的流量监控提醒。 这里我们忽略UI美学&#xff0c;简单记录一下&#xff1a; 1、基本使…

mac os 安装rz/sz

说明&#xff1a;使用rz sz实现终端的文件传输&#xff0c;该命令主要使用场景为 macos中通过堡垒机登陆后无法使用ftp工具传输文件。 工具&#xff1a;iTerm2、lrzsz、homebrew 以及两个脚本文件&#xff08;iterm2-recv-zmodem.sh、iterm2-send-zmodem.sh&#xff09; …

基于确定有穷自动机(DFA算法)实现敏感词过滤

1.DFA算法简介 DFA(Deterministic Finite Automaton) 是一种非递归自动机&#xff0c;也称为确定有穷自动机。它是通过event和当前的state得到nextstate&#xff0c;即eventstatenextstate。 确定&#xff1a;状态以及引起状态转换的事件都是可确定的。 有穷&#xff1a;状态以…

EBU6304 Software Engineering 知识点总结_4 analysis, design, implementation, testing

analysis 仅仅从用户的需求来看得到的消息不全面&#xff0c;还需要分析。用户可能认为你明白了&#xff0c;或者他考虑不全面&#xff0c;觉得一些地方是不需要的。 因此我们需要分析来 Refining requirements。 gather requirements-analyse in real world context-develo…

(字符串 ) 剑指 Offer 58 - II. 左旋转字符串 ——【Leetcode每日一题】

❓剑指 Offer 58 - II. 左旋转字符串 难度&#xff1a;简单 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如&#xff0c;输入字符串"abcdefg"和数字2&#xff0c;该函数将返回左旋转两位得到的…