深入理解 TCP 拥塞控制

2023-11-03

随着网络技术的飞速发展,越来越多的工作依赖网络完成,基于互联网的实时通信系统的质量和实时性也很大程度也依赖于网络质量。然而,在Internet的TCP/IP体系结构中,拥塞的发生是其固有的属性。网络拥塞是指用户对网络资源(包括链路带宽、存储空间和处理器处理能力等)的需求超过了固有的处理能力和容量, 相比UDP,TCP自身具有拥塞控制机制,并且需要保障数据可靠传输,这会对基于TCP的音视频实时传输造成一定的困扰。本文将深入讲解TCP的拥塞控制机制以及如何基于TCP传输来设计一个实时音视频系统。

PART 01 TCP拥塞控制简介

TCP/IP协议栈开始广泛运行后,网络开始遭受拥塞崩溃;即数据发送主机会以建议允许的速度将其数据包发送到互联网,当某些路由器发生拥塞,导致数据包被丢弃;对于TCP这种有重传机制的传输协议,当发生数据丢失时,重传数据将延长数据到达的时间;同时,高频率的重传,也将导致网络的拥塞得不到缓解,从而引发更多的拥塞。为了避免这类问题,1980年代后期,TCP拥塞控制被引入到网络协议中。

从广义上讲,TCP拥塞控制的是让每个源确定网络中有多少可用容量,以便它知道可以安全传输多少数据包,防止过多的数据注入到网络中,使网络中的路由或者链路不至于过载。在网络中发生拥塞时,拥塞控制减少向网络中发送数据的速度,防止造成恶性循环;同时在网络空闲时,提高发送数据的速度,最大限度地利用网络资源。当然,确定可用网络容量并非易事,不断有新的TCP连接的加入和减少;更糟糕的是,可用带宽会随着时间的推移而变化,这意味着任何给定的源都必须能够调整它在传输中的数据包数量。

PART 02 TCP拥塞控制算法分类

理论上,拥塞控制有两种实现方式:

  • 端到端拥塞控制:在这种拥塞控制方法中,由发送端自己来判断是否拥塞,然后调整传输速率;
  • 网络辅助的拥塞控制:由网络中的路由器来告诉发送方,网络的拥塞情况。

通过网络层反馈拥塞信息实现拥塞控制的方法,需要得到网络设备的支持,改造底层硬件;现在常用的TCP协议大都采用的是端到端拥塞控制,即由发送端自己来判断是否拥塞;若发送端检测到这种现象,就应该降低发送数据的速率,若没有,则可以慢慢提高速率。拥塞控制算法需要解决以下三个问题:

  • TCP如何限制数据的发送速率;
  • TCP如何检测网络中是否拥塞;
  • TCP采用什么算法来调整速率(什么时候调整,调整多少)。

TCP拥塞控制算法发展的过程当中出现了以下几种不一样的思路:

基于丢包的拥塞控制:将丢包视为出现拥塞,采取缓慢探测的方式ÿ

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入理解 TCP 拥塞控制 的相关文章

  • 关于 Python 之 Matplotlib 的总结

    文章目录 通用 简单例子 中文显示问题 参数 颜色 color参数表 线型 linestyle ls 参数表 标记符号 marker参数表 位置 legend loc参数表 plt 常用命令 图形模板 柱形图 饼图 散点图 直方图 箱线图

随机推荐

  • 1、微信小程序-环境搭建、基本语法

    文章目录 前言 一 微信小程序简介 1 微信 程序 2 运行环境 3 环境准备 二 项目的目录结构 1 小程序项目结构与传统web相比 2 小程序基本目录结构 2 1 json 配置文件 2 1 模板语法 代码见demo01 2 2 wxs
  • 进程间通讯几种方式

    进程通信的目的 数据传输 一个进程需要将它的数据发送给另一个进程 发送的数据量在一个字节到几M字节之间 共享数据 多个进程想要操作共享数据 一个进程对共享数据 通知事 一个进程需要向另一个或一组进程发送消息 通知它 它们 发生了某种事件 如
  • (2)minikube玩转k8s集群之安装kubectl和minikube

    配套视频教程 1 Minikube介绍 简单说 创建k8s集群很麻烦 minikube可以让我们快速搭建一个k8s集群用于学习 Minikube 是一种可以让您在本地轻松运行 Kubernetes 的工具 Minikube 在笔记本电脑上的
  • 从文本、图像到音视频,AIGC技术将如何重构我们的数字世界?

    引言 1950 年 艾伦 图灵提出著名的 图灵测试 给出判定机器是否具有智能的试验方法 16 年后 世界上第一款可人机对话的机器人 Eliza 问世 这是 AI 技术最早期的萌芽阶段 但由于当时的科技水平限制 AIGC 仅限于小范围实验 A
  • Git clone下载文件和依赖项 in cmd

    从github复制好你要下载的文件地址和依赖项 git clone https github com kibamin FuzzyConstraintClustering git pip install r requirements txt
  • LeetCode 56. 合并区间

    题目链接 点击这里 题意 给出一个区间的集合 请合并所有重叠的区间 思路 AC代码 class Solution public vector
  • 高德地图开发(二、地图控件)

    高德地图开发 二 地图插件加载 一 加载单个插件 二 加载多个插件 有同步 异步等方法 我用得都是异步 图层类型切换 MapType 与3D罗盘控制 AMap ControlBar 会重叠 需要另写样式让它们分开 插件类型链接 https
  • TensorFlow bug(六)——Dimensions of inputs should match: shape[0] = [1,600,750,3] vs. shape[2] = [1,600

    问题描述 在用R FCN目标检测API训练我自己的数据时 我对原代码做了些改动 原来的rfcn resnet101 coco config文件中 batch size的值为1即一次处理1张图片 我改成了别的数 2 8 16 32 都会出现如
  • Unity 3D物体、UI同屏||3D物体在UI界面显示

    先来猜一下这两个石头人 哪一个是UI 哪一个是3d物体 答案是中间那一个 这种UI显示3D物体适用很多场景 比如说商店展示模型展示 例子特效 2 5d游戏 实现起来很简单 接下来我们实现一下 实现步骤 1 新建一个相机 对准角色 2 UI新
  • usb设备拓扑关系

    usb设备拓扑关系 1 简介 2 usbfs和debugfs拓扑 2 1挂载方式 2 2拓扑关系信息说明 2 2 1usb总线上的设备信息 2 2 2总线上特定设备的详细信息 2 3debugfs中的设备拓扑信息 T Topology B
  • react之旅(八)React生命周期

    一 react 16前的生命周期 1 1 constructor constructor props context 如果想 在组件其他地方是可以直接接收的 使用props或context 则需要以参数形式传入 只要组件存在construc
  • 求n的阶乘的算法框图_你不知道的阶乘与gamma函数

    你不知道的阶乘 阶乘对于有数学基础的人来说都不陌生 简单理解就是数的累乘 10的阶乘10 10 9 8 7 6 5 4 3 2 1 但是我们有没有思考过 如分数的阶乘是如何运算的 有没有方法估算一个数的阶乘 其实 1 2的阶乘等于 的平方根
  • 入门级题解:剑指 Offer 06. 从尾到头打印链表

    题目地址 https leetcode cn com problems cong wei dao tou da yin lian biao lcof 主要是 vector 容器的用法 之前学过 忘了 vector的详解 https blog
  • SpringBoot+VUE实现文件导入并将其保存到Liunx系统

    SpringBoot VUE实现文件导入 一 需求 二 前端代码实现 2 1 显示实现 2 1 1 a标签实现 2 1 1 1 上传标签实现 2 1 1 2 查看标签实现 2 2 上传文件和文件查看界面实现 2 2 1 上传文件界面 2 2
  • 云原生之使用Docker部署Redis数据库

    云原生之使用Docker部署Redis数据库 一 检查系统版本 二 检查docker状态 三 检查docker版本 四 搜索redis镜像 五 下载redis镜像 六 创建redis容器 1 创建数据目录 2 运行redis容器 3 检查r
  • 挺详细的一篇Cadence学习笔记

    目录 下载方法及连接 更新补丁后快捷方式失效怎么办 cadence软件介绍 Cadence Product Choices 新建工程 如何不打印右下角的信息框 原理图库 复合元器件 元器件逆时针放置引脚 添加元件库 元器件编号重新排列 页面
  • 对于msvcr120.dll丢失的问题,分享几种解决方法

    msvcr120 dll的作用是提供一系列的运行时函数和功能 以便应用程序能够正常运行 这些函数和功能包括内存管理 异常处理 输入输出操作 数学运算等 在没有这个库文件的情况下 应用程序可能无法正常启动或执行特定的功能 甚至会出现错误提示
  • JavaScript常用的定时器

    1 定时器 setTimeout setInterval clearInterval clearTimeout 1 1setTimeout 定时器 window setTimeout 调用函数 延迟的毫秒数 该定时器在定时器到期后执行调用函
  • 又被薪资倒挂了。。。

    十月中旬 一年一度的秋招接近尾声了 各家公司开始陆续开奖 公布今年校招各个档位的薪资水平 互联网的确有些卷 不仅体现在工作时长和强度上 就连每年应届生的薪资 也在同行的不断加码下 水涨船高 不过 薪资的卷 是令校招生喜闻乐见的事情 尽管 这
  • 深入理解 TCP 拥塞控制

    随着网络技术的飞速发展 越来越多的工作依赖网络完成 基于互联网的实时通信系统的质量和实时性也很大程度也依赖于网络质量 然而 在Internet的TCP IP体系结构中 拥塞的发生是其固有的属性 网络拥塞是指用户对网络资源 包括链路带宽 存储