异常网络下TCP的可靠服务机制(慢启动、拥塞避免、快重传、快恢复)

目录

  • TCP超时重传
  • 拥塞控制
    • 概述
    • 慢启动和拥塞避免
      • 下面讲解发送端如何判断拥塞发生。
    • 快速重传和快速恢复

本文描述TCP在异常网络下的处理方式 以保证其可靠的数据传输的服务

TCP超时重传

tcp服务能够重传其超时时间内没有收到确认的TCP报文段,tcp模块为每一个报文段都维护一个重传定时器,定时器在第一次TCP报文段发送的时候启动,如果超时事件内没有收到回复。Tcp模块就会重传该报文段并重置定时器

至于下次重传的事件 和最多的重传次数 就是重传策略的选择。
liunx内核有两个重要的内核参数和tcp超时重传相关:
/proc/sys/net/ipv4/tcp_retries1
/proc/sys/net/ipv4/tcp_retries2
前者指定了底层IP接管TCP最少执行的重传次数 ,默认3
后者指定连接放弃前TCP最多可以执行的重传次数 默认15(一般对应13 - 30min)
虽然超时会导致TCP报文段重传,但是tcp报文段的重传可以发生在超时之前,即快速重传。

拥塞控制

概述

拥塞控制的目的是

  • 提高网络利用率
  • 降低丢包率
  • 保证网络资源对每条数据流的公平性

拥塞控制标准文档是RFC 5861 四个部分:

  • 慢启动(slow start)
  • 拥塞避免(congestion avoidance)
  • 快速重传(fast retransmit)
  • 快速恢复(fast recovery)
    拥塞控制算法在liunx上 有多种实现,比如reno算法,vegas算法和cubic算法等。它们或者部分或者全部实现了上面上述四个部分.
    /proc/sys/net/ipv4/tcp_congestion_control 文件指示机械当前所使用的拥塞控制算法
    在这里插入图片描述
    在发送端一次向网络中连续写入的数据量(收到其中第一个数据的确认之前) 我们称为SWND(Send Window 发送窗口) 发送端最终以TCO的报文段来发送内容 所以SWND限定了发送端能发送的TCP报文段的数量。
    TCP报文段的最大长度(数据部分) 被称为SMSS(Sender MAximum Segment Size ,发送者最大段的大小) 其值一般等于MSS
    MSS的值通常是由MTU(Maximum Transmission Unit,最大传输单元)减去IP首部长度(20字节)和TCP首部长度(20字节)得到的。因此,如果MTU值为1500字节,那么MSS的值一般就是1460字节)。
    发送端需要合理的选择SWND的大小 ,如果SWND太小会引起明显的网络延迟 反之如果太大则会导致网络拥塞。
    接收方虽然可以通过RWND来控制发送端的SWND,但是显然不够
    发送端引入了一个称为拥塞窗口的状态变量(CWND) 实际的SWND值 是RWND和CWND里面的较小者
    下图显示了拥塞控制的输入和输出
    在这里插入图片描述

慢启动和拥塞避免

Tcp创建好连接后 CWND的值被初始化为IW(initial Window ) 其大小为2~4个SMSS。但新的Liunx内核提高了该值的初始化,以减少传输滞后。
发送端最多可以发送IW字节的数据 ,此后发送端没收到一个及手段的确认。其CWND就按格式增加


cwnd +=min(N,SMSS)
(读者在其他地方也可以看到了 cwnd是直接加上一个SMSS的值的 这个我不太清 查资料没查到 欢迎指正)

其中的N表示 此次确认中包含之前未被确认的字节数。
这样CWND将会按指数的形式扩大,这就慢启动。
慢启动算法的理由是,TCP模块刚开始发送数据并不知道网络的实际情况,需要一种探测的方式平滑的增加CWND的小事。
如果不是家其他手段 慢启动必然会使得 CWND很快膨胀最终导致网络拥塞。因此TCP拥塞控制汇总顶一个另一个重要的状态变量:
慢启动门限(ssthresh) 当CWND的大小超过该值的时。TCP拥塞控制将进入拥塞避免阶段。


拥塞避免算法是的CWND按照线性的方式增加 从而减缓起扩大.RFC 5681中提到了如下两种实现方式:

  • 每个RTT时间内按照格式从新计算新的CWND,不论RTT事件内收到了多少个确认
  • 没收到一个新的数据确认报文段,就按照下面公式来更新CWND
  • CWND +=SMSS*SMSS/CWND

下图粗略描述了慢启动和拥塞避免发生的时机和区别。 假设ssthresh的大小是16SMSS大小 实际远不止这么大
在这里插入图片描述
以上是发送端在未检测到拥塞时所采取的积极避免拥塞的方法。
下面介绍拥塞发生时(可能在慢启动 也可能在拥塞避免阶段) 拥塞控制的行为。

下面讲解发送端如何判断拥塞发生。

  • 传输超时,或者TCP重传定时器溢出
  • 接受到重复的确认报文段
    拥塞控制对第一种情况仍然使用慢启动和拥塞避免。
    第二种情况使用快速重传和快速恢复(如果真的发生拥塞的话)。
    第二种情况如果发生在第一种情况之后也就是重传定时器溢出,也会被拥塞控制当成第一种情况来对待。
    如果发送端检测到拥塞发生是由于传输超时 它就会执行重传并做出一下调整
    在这里插入图片描述
    其中FlightSize是已经发送但是没有收到确认的字节数。这样调整 CWMD将小于SMSS。必然也小于新的慢启动门限值ssthresh
    拥塞控制一定会再次进入慢启动阶段

快速重传和快速恢复

有时发送端可能接收到重复的确认报文段,如TCP报文段丢失 或者接收端收到乱序的TCP报文段并重排的时候,拥塞控制算法需要判断当收到重复确认的报文。网络是否真的拥塞 或者TCP报文段是否真的丢失。
具体的做法是当发送端连续收到三个重复的确认报文段 就认为是拥塞发生。就会启动快速重传和快速恢复算法来吃处理拥塞
过程如下:

  1. 当收到三个重复的确认报文的时候 按照
    在这里插入图片描述
    来计算ssthresh,然后立刻重传丢失的报文段
    并按照
    在这里插入图片描述
    来设置CWND
  2. 每次收到一个重复的确认的时候 ,设置CWND=CWND+SMSS。 此时发送端可以发送新的TCP报文段。如果新的CWND允许的话
  3. 当收到新的数据确认的时候 设置CWND = ssthresh(ssthresh是新的慢启动的门限值)由第一步计算得到
    快速重传和快速恢复完成之后 拥塞控制将恢复的拥塞避免阶段 这一点由第3 步可以知道

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI最新发布的文生视频模型Sora到底强在哪?

文章目录 1.Sora到底强在哪?2. 不足3. 结尾 2024年2月16日,当大家沉浸在过年的喜庆氛围中,OpenAI发布首款文生成视频大模型 Sora ,其炸裂登场让人感到惊艳。 Sora官网介绍:https://openai.com/sora 说起文生视频工具…

openGauss学习笔记-230 openGauss性能调优-系统调优-配置并行查询功能

文章目录 openGauss学习笔记-230 openGauss性能调优-系统调优-配置并行查询功能230.1 适用场景与限制230.2 资源对SMP性能的影响230.3 其他因素对SMP性能的影响230.4 配置步骤 openGauss学习笔记-230 openGauss性能调优-系统调优-配置并行查询功能 openGauss的SMP并行技术是一…

使用面向对象思想去封装实现canvas功能

前言 各种插件/库和一些常规的业务代码,最大的区别就在于编程的思路与方法。 比如我们现在想写一段业务代码,使用js实现一个矩形,那很简单,几行代码就可以了 const canvas document.getElementById(canvas)const mode canvas.getContext(2d)mode.rect(200,200,200,200)mode…

CIM的基本概念知识,以及应用场景介绍

CIM的理念 CIM基本理念总结为:依托先进技术、面向具体需求、融合动态信息、描述实体单元、支撑各类应用。 首先要依托于对 BIM、GIS、IOT技术的透彻理解和深度应用,并与云计算、大数据等技术充分融合。 同时,针对不同区域、不同运行管理对象、…

【dc-dc】AP5101C 高压线性恒流IC 9-19V 500ma LED电源驱动方案 过压保护 抗浪涌线路

产品描述 AP5101C 是一款高压线性 LED 恒流芯片 , 外围简单 、 内置功率管 , 适用于6- 100V 输入的高精度降压 LED 恒流驱动芯片。最大电流2.0A。AP5101C 可实现内置MOS 做 2.0A,外置 MOS 可做 3.0A 的。AP5101C 内置温度保护功能 ,温度保护…

拜登:“一切非 Rust 项目均为非法”,开发界要大变天?

文章目录 科技巨头应为安全漏洞负起责任使用其他语言的开发者​该何去何从? 白宫国家网络总监办公室(ONCD,以下简称网总办)在本周一发布的报告中说道:“程序员编写代码并非没有后果,他们的⼯作⽅式于国家利…

练习 2 Web [ACTF2020 新生赛]BackupFile 1

[ACTF2020 新生赛]BackupFile 1 Web常规题目 首先尝试查找常见的前端页面index.php之类的,没找到 题目有个“BackupFile”——备份文件 尝试用工具遍历查找相关的文件 御剑没扫出来,搜索搭建好dirsearch后,扫出来的index.php.bak 扫描工…

我又上来啦!湖人胜率反超勇士升至第九 勇士降第十

nba直播吧 02月29日讯 湖人今日在洛杉矶德比中116-112逆转击沉快船! 赛后,湖人的战绩来到32胜28负,胜率反超勇士(30胜27负),升至西部第九,勇士降到西部第十。

eBay美国站怎么样?eBay跨境电商卖家开店必知!

在众多跨境电商平台之中,eBay作为全球知名的电商平台之一,为卖家提供了跨境电商的机会。对于中国卖家而言,这是一个充满机遇的市场。那么,eBay美国站怎么样?如何顺利在美国eBay上开店呢?让我们一起来了解一…

Apache SeaTunnel 及 Web 功能部署指南(小白版)

在大数据处理领域,Apache SeaTunnel 已成为一款备受青睐的开源数据集成平台,它不仅可以基于Apache Spark和Flink,而且还有社区单独开发专属数据集成的Zeta引擎,提供了强大的数据处理能力。随着SeaTunnel Web的推出,用户…

证明StringBuilder不是现性安全的

1 理论证明 StringBuilder存放字符串的属性是char value[], 这在其父类AbstractStringBuilder里面可以查看: 数组都是创建在堆中,堆中的内存任意线程都可以访问。而且这个字符数组没有像String类那样用final修饰,所以任意线程都可以修改&am…

八、ActiveMQ持久化

ActiveMQ持久化 一、MQ的高可用二、持久化介绍三、持久化存储方式1.AMQ Mesage Store(了解)2.KahaDB消息存储(默认)2.1 存储原理 3.JDBC消息存储4.LevelDB消息存储(了解)5.JDBC Message Store with ActiveMQ Journal查询持久化存储方式 四、持久化存储使用1.JDBC消息…

【小夏送书 | 第二期】世界顶级名校计算机专业,都在用哪些书当教材?

🌄参与规则 参与方式:关注博主点赞收藏评论,(每人最多评论三次) 本次送书1~3本【取决于阅读量,阅读量越多,送的越多】 活动时间至:2024-3-6 20:00:00 | 随机抽取由博主动态公布抽…

linux centos 挂载磁盘

linux centos 挂载磁盘 未挂载磁盘分区挂载硬盘 背景:客户新加了一块600G的数据盘要挂载使用 未挂载磁盘分区 查看未挂载的磁盘 fdisk -l开始分区 fdisk /dev/sdb按照图示一次输入指令 再次查看 fdisk -l格式化 mkfs -t ext4 /dev/sdb1挂载硬盘 创建数据目录…

Visio使用笔记

记录一下需要的常用操作 圆角矩形的弧度调整 如果一开始创建的是圆角矩形,可以菜单栏先改为矩形 取消箭头的对齐吸附 alt F9,取消勾选 忘记快捷键,可以菜单栏找到视图,点击视觉帮助右下角的小箭头,引出上面的界面…

《Decoupling Representation and Classifier for Long-Tailed Recognition》阅读笔记

论文标题 《Decoupling Representation and Classifier for Long-Tailed Recognition》 用于长尾识别的解耦表示和分类器 作者 Bingyi Kang、Saining Xie、Marcus Rohrbach、Zhicheng Yan、 Albert Gordo、Jiashi Feng 和 Yannis Kalantidis 来自 Facebook AI 和 新加坡国…

推荐一款桌面端redis连接工具, redis desktop manager替代品——another redis desktop manager

下载地址 Another Redis Desktop Manager | 更快、更好、更稳定的Redis桌面(GUI)管理客户端,兼容Windows、Mac、Linux,性能出众,轻松加载海量键值 封面对比 对比redis desktop manager ,ui上有巨大的改进 但是redis desktop ma…

力扣262 行程和用户

如何计算特定时间段内非禁止用户的出租车行程取消率。这个问题可以通过SQL查询来解决,我们需要关联Trips表和Users表来筛选出符合条件的行程记录,并计算取消率。 目录 题目描述 思路整理 完整代码及解释 题目描述 表:Trips -----------…

数据卷(Data Volumes)自定义镜像(Dockerfile)

目录 一.数据卷(Data Volumes) 二.自定义镜像(Dockerfile) 自定义centos 一.数据卷(Data Volumes) 数据卷(Data Volumes)是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器,它可以提供很多有用的特性: 1.数据卷…

软件测试如何做到充分性测试?

做软件测试要想保质保量,就要做到测试充分,什么是测试充分,就是把所需要覆盖的场景都要覆盖到。如何做到场景全面覆盖,特别是在时间紧任务重的时候?我把我这些年来工作的一点经验总结一下分享给大家,希望对…