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. Hive学习之路(一)—— Hive 简介及核心概念

    一.简介 Hive是一个构建在Hadoop之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类SQL查询功能,用于查询的SQL语句会被转化为MapReduce作业,然后提交到Hadoop上运行. ...

  2. K-近邻算法介绍与代码实现

    声明:如需转载请先联系我. 最近学习了k近邻算法,在这里进行了总结. KNN介绍 k近邻法(k-nearest neighbors)是由Cover和Hart于1968年提出的,它是懒惰学习(lazy ...

  3. Python笔记【2】_列表学习

    #!/usr/bin/env/python #-*-coding:utf-8-*- #Author:LingChongShi #查看源码Ctrl+左键 #字符串:通常有单引号“'”.双引号“" ...

  4. 跟我学SpringCloud | 第八篇:Spring Cloud Bus 消息总线

    SpringCloud系列教程 | 第八篇:Spring Cloud Bus 消息总线 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特 ...

  5. 你真的会用mysql行级锁吗?mysql 行级锁全解析

    在互联网大并发应用大行其道的今天,应用的开发总是离不开锁,在分布式应用中,最常见的莫过于基于数据库的行级锁了,由于互联网公司中比较主流的数据库还是mysql,所以这一话题绕不开的就是mysql了,但是 ...

  6. Android 蓝牙开发(2)——低功耗蓝牙

    低功耗蓝牙官方文档 本文章是参考官网,然后加入自己实践中的理解完成!没有看上一篇的读者,可以先阅读一下前一篇,这是一个系列. 官网地址:https://developer.android.com/gu ...

  7. 快速搭建 Windows Kubernetes

    背景 接上一篇 Windows 应用容器 后,想要快速且便利的部署与管理它们,可以借助容器编排工具.对于 Windows 容器,在今天 Service Fabric 会是个更为成熟的选择,在业界有更多 ...

  8. easyui close的最大化的dialog 切换 tab 再次出现

    今天发现一个神奇的bug,easyui中的dialog在经历了d.panel('close');之后,当前的tab仍然未关闭,切换了另一tab,然后回去刚才的tab,发现已经close的dialog又 ...

  9. Linux环境下虚拟环境virtualenv安装和使用(转)

    virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够: 1. 在没有权限的情况下安装新套件 2. 不同应用可以使用不同的套件版本 3. 套件升级不影响其他应用 ...

  10. 设计模式:代理模式是什么,Spring AOP还和它有关系?

    接着学习设计模式系列,今天讲解的是代理模式. 定义 什么是代理模式? 代理模式,也叫委托模式,其定义是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用.它包含了三个角色: Subject: ...