TCP拥塞算法详解
 
 ps:详解TCP拥塞算法就是为了说明瓶颈所在。
 
先解释一下概念
拥塞:对网络中某一资源的需求超出了该资源所能提供的可用部分
拥塞窗口:以字节为单位,表示能通过的数据报的个数
 
TCP传统拥塞控制算法(参考TCP/IP详解一卷)
 
传统拥塞控制算法有四个阶段
------------------------------------------------------------------
慢开始
    由小到大逐渐增大拥塞窗口数量(注意!慢开始只是起点低,增加速度并不慢 指数增加)
 
阶段转变:当报文数目达到拥塞窗口的初始门限时,由慢开始变为拥塞避免阶段
------------------------------------------------------------------
拥塞避免
     拥塞窗口缓慢增大,线性增大
     特点:拥塞避免其实就是为了避免报文数增长过快导致丢包
     说明:丢包是无法避免的,TCP是可靠的并不是说他不丢包而是有重传机制可以保证报文丢失后的再次传输
 
阶段转变:当出现第一个丢包时,触发快重传机制,重传完成后进入快恢复阶段
------------------------------------------------------------------
这个阶段涉及两个操作
1、快重传
       接收方收到失序报文段口发出重复确认,发送方收到三个重复确认立即进行重传
       分析一下:1、为什么叫快重传,其实就是区别去超时重传,超时重传是在发包是设置定时器,超过时间没收到返回的ACK就进行重传;而快重传是接收端发现收到的报文段失序后,理解发送三条相同报文告知发送端你该重传了,别再等定时器了!
       通俗的描述一下快重传机制:收端收的报文是有顺序的,例如收端收到了1,2,4收端发现3不见了,就会连续像发端发送3个2告诉发送端我没收到3,你先把3发给我。
    
如果重传还是没有传输成功是如何处理的?
  此处有两个标准一个是时间一个是次数,如果在指定时间或次数内没有重传成功会终结该链接。
2、快恢复
     发送方收到三个重复确认后慢开始门限减半
     新的拥塞窗口大小=新的慢开始门限(丢包时拥塞窗口的一半)+3 (3代表3个重传的报文段)
 
阶段转变:重新确认拥塞窗口大小后,将状态变更到拥塞避免阶段
--------------
传统算法瓶颈
根据上述基础知识就可以知道TCP传统拥塞算法对丢包、时间都非常敏感!!!
 
以同步轨道卫星通信为例分析瓶颈:
1、卫星链路实测往返时延达到500ms以上,传统拥塞算法的定时器、传输机制都不适用
2、卫星链路不稳定会受到天气、太阳等的影响,相比较地面网络丢包和误码率都大很多
 
综上所述:就会导致TCP业务传输吞吐量始终在30%左右,浪费资源。(丢包折半丢包折半的死循环)
--------------
解决方案
TCP加速器是如何解决上述问题的呢?
 
前人做过很多探索,如 修改本地TCP协议、调整缓冲区等
经过很多探索之后,现在主流的就有两种:单边加速和双边加速
 
之前的文章提到过,单边就是优化算法,双边更倾向于变更协议
 
单边方面来说使用广算法多
BBR:谷歌的算法,现在买外国服务器搭BBR加速已经成为很普遍了,但使用是要注意内核版本BBR对内核版本要求较高
Zeta:我国的一款算法,具体没有使用过,看宣传是基于传输历史学习的,可以通过学习传输历史调整发送节奏降低丢包率
当然也可以自定义,只要透明代理做的好,算法完全可以在加速器中自行选择优化方向
 
 
双边加速 (现阶段基本都是星空链路使用UDP,由加速器来进行报文发送、确认)
主要采用的就是RFC 3135中的隧道机制
       性能增强代理可以封装消息以跨特定链路传送消息或强制消息遍历特定路径。封装隧道另一端的PEP在最终传送到接收端系统之前移除隧道封装器。分布式分离连接TCP实现可以使用隧道作为用于在分布式PEP之间进行连接的装置。 隧道也可用于支持强制TCP连接,该连接使用非对称路由来遍历分布式PEP实现的端点。
双边加速可以最大限速的利用压缩机制,现阶段网络安全问题越来越突出,压缩不仅仅能提升传输速率还能提高安全性,何乐而不为呢?
 
总而言之,TCP协议的优化点就是变更算法变更协议,前者资源多开发难度小,后者开发难度大但优化空间高;总之适合的才是最好的~~~没有必要一味追求单边双边。
 
 转发请注明出处,谢谢~
 
 
 
 

TCP拥塞算法瓶颈及TCP加速器解决方案的更多相关文章

  1. 深入浅出 BPF TCP 拥塞算法实现原理

    本文地址:https://www.ebpf.top/post/ebpf_struct_ops 1. 前言 eBPF 的飞轮仍然在快速转动,自从 Linux 内核 5.6 版本支持 eBPF 程序修改 ...

  2. Linux kernel 4.9及以上开启TCP BBR拥塞算法

    Linux kernel 4.9及以上开启TCP BBR拥塞算法 BBR 目的是要尽量跑满带宽, 并且尽量不要有排队的情况, 效果并不比速锐差 Linux kernel 4.9+ 已支持 tcp_bb ...

  3. TCP拥塞控制算法 优缺点 适用环境 性能分析

    [摘要]对多种TCP拥塞控制算法进行简要说明,指出它们的优缺点.以及它们的适用环境. [关键字]TCP拥塞控制算法 优点    缺点   适用环境公平性 公平性 公平性是在发生拥塞时各源端(或同一源端 ...

  4. 浅谈TCP拥塞控制算法

    TCP通过维护一个拥塞窗口来进行拥塞控制,拥塞控制的原则是,只要网络中没有出现拥塞,拥塞窗口的值就可以再增大一些,以便把更多的数据包发送出去,但只要网络出现拥塞,拥塞窗口的值就应该减小一些,以减少注入 ...

  5. TCP拥塞控制算法

    转自浅谈TCP拥塞控制算法 本篇文章介绍了几种经典的TCP拥塞控制算法,包括算法原理及各自适用场景. 回顾上篇文章:浅谈 redis 延迟 前言 TCP 通过维护一个拥塞窗口来进行拥塞控制,拥塞控制的 ...

  6. 【转载】TCP拥塞控制算法 优缺点 适用环境 性能分析

    [摘要]对多种TCP拥塞控制算法进行简要说明,指出它们的优缺点.以及它们的适用环境. [关键字]TCP拥塞控制算法 优点    缺点   适用环境公平性 公平性 公平性是在发生拥塞时各源端(或同一源端 ...

  7. 一文带你掌握【TCP拥塞窗口】原理

    ❝ 关注公众号:高性能架构探索.后台回复[资料],可以免费领取 ❞ 学过网络相关课程的,都知道TCP中,有两个窗口: 滑动窗口(在我们的上一篇文章中有讲),接收方通过通告发送方自己的可以接受缓冲区大小 ...

  8. TCP 拥塞窗口原理

    学过网络相关课程的,都知道TCP中,有两个窗口: 滑动窗口(在我们的上一篇文章中有讲),接收方通过通告发送方自己的可以接受缓冲区大小(这个字段越大说明网络吞吐量越高),从而控制发送方的发送速度. 拥塞 ...

  9. 网络拥塞控制(三) TCP拥塞控制算法

    为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制.最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion  ...

随机推荐

  1. a元素变成块状元素点击之后删除出现背景

    a { text-decoration: none; background: none; -webkit-tap-highlight-color: transparent; } a:hover { - ...

  2. 【koa2基础框架封装】基于Proxy路由按需加载器和初始加载器

    我们在使用koa2做路由拦截后一般都习惯于直接将查找对应处理函数的过程映射到项目的文件夹目录,如: router.get('/test', app.controller.index.test); ap ...

  3. c#基础三

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  4. IDEA中Maven依赖包下载不了的问题解决方案汇总

    第一种方案: 第二种方案:下面的几个不要选择. 第三种方案:可能是某一个 dependency 依赖无法下载,导致整个项目都报错 打开具体的报错的maven项目的pom.xml.试着去删除一些 dep ...

  5. Facebook也炒币吗?Libra币是什么?

    Facebook 在上周发布了加密数字货币,称为 Libra币. 太火爆了,很多人都在关注和讨论,包括一些科技大佬们都很积极的讨论(当然,这里指的是真正的科技大佬,比如 马化腾.王兴等,而不是指哪些割 ...

  6. SPOJ MINSUB - Largest Submatrix(二分+单调栈)

    http://www.spoj.com/problems/MINSUB/en/ 题意:给出一个n*m的矩阵M,和一个面积k,要使得M的子矩阵M'的最小元素最大并且面积大于等于k,问子矩阵M'的最小元素 ...

  7. Vue技术点整理 vue-devtools

    注:默认浏览器调试工具,在调试vue的页面时,是不能看到vue项目的属性状态值的,所以最好是在浏览器上安装 vue-devtools,这样就可以在浏览器里面审查和调试vue的应用了 1,Chrome浏 ...

  8. easyui 使用jquery动态添加组件样式问题

    可以使用$.parser.parse();这个方法进行处理: 例如:   $.parser.parse(); 表示对整个页面重新渲染,渲染完就可以看到easyui原来的样式了:   var targe ...

  9. EF 使用遇到过的错误记录备忘

    1. is only supported for sorted input in LINQ to Entities  The method :只支持排序输入实体LINQ 的方法 是使用skip()时没 ...

  10. [NOIP2016]换教室 题解(奇怪的三种状态)

    2558. [NOIP2016]换教室 [题目描述] 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1< ...