一、什么是TCP加速?
 
TCP加速就是在高时延链路提高吞吐量的一系列解决方案。
 
二、为什么需要对TCP进行加速?
 
1、传统的TCP拥塞控制算法并不适用于高时延、高误码的链路。
2、随着web元素的丰富,用户量的增加对交互时延和处理能力的要求越来越高。
3、对资源和合理配置,提高网络带宽利用率的需求。
 
以同步卫星通信场景为例讲解1
卫星通信的传输时延是因为卫星在36000公里的高空,电波的从地面到卫星再回到地面的时间大约是0.27秒(30万公里/秒)。这就是所谓的卫星通信的传输延时。
实测来讲:卫星的传输时延远大于理论值,同步卫星天地往返时延在500ms以上,链路较差是在600ms-800ms之间波动。
实际测试:在时延500ms、时延抖动较小的情况下,TCP连接不做加速时传输速率为空口带宽(卫星口最大传输能力)的30%-40%。例:10Mbps的带宽最大只能利用3Mbps-4Mbps,其余资源被浪费。
 
三、如何对TCP加速?
 
如何对TCP进行加速业界并没有一个标准,但有一系列的推荐方法。详细可阅读RFC 3135
 
现在最常用的方法是:TCP透明代理 + 算法优化 
 
TCP透明代理(TCP加速的核心思想
原理:就是利用一些手段在内核或者协议栈捕获TCP报文,将TCP报文送入TCP加速器中处理并在处理完成后将报文头部还原并继续转发。
好处:1、透明代理可以把端到端的TCP分割为几个部分,这样就可以根据每个部分的丢包、时延情况进行不同的优化,从而提高TCP的性能。
           2、TCP加速器将一端的连接终结,然后重新发起一个连接到另一端。这样两端的数据包都被缓存在两端的TCP加速器上,TCP加速器之间的数据发送由加速器自行控制。
 
算法优化
原理:利用透明代理机制,在加速器之间或加速器与Server端之间修改或优化算法,使用更适用链路特点的算法可以事倍功半!
    单边加速:只需要在tcp的一端部署的加速技术(绝大多数都是优化tcp的拥塞控制算法)
        优点:部署容易,变动较小,应用范围广,研发厂商多算法丰富多样。
        缺点:必须兼容标准的TCP协议,优化调整点不如双边多。
    双边加速:双端部署
        优点:可以采用更高效的传输协议,数据缓存,流量压缩,多路径转发
        缺点:部署较为麻烦,必须双端部署;如果是客户端需要安装相应软件工具
 
注意!!!
上述所说的TCP加速方法只能提高TCP连接的带宽利用率不能提高TCP连接的建链速度等;简单来说就是不能提高你访问网页的速度,只能提高你下载文件的速度!
 
如果想提高HTTP的访问速度请选择压缩等方法
 
------------------------------------------------------------------------
注:如果想进一步研究TCP加速的优化方案建议研究RFC3135
 
卫星通信行业的大佬 休斯的TCP加速就是按照RFC 3135做的
 
之前和小伙伴们研究了一下
RFC 3135 大致有这几块(PEP就是TCP透明代理)
1、TCP ACK处理:  TCP PEP 基于TCP ACK操作
2、TCP ACK间距:  ACK间隔用于平滑遍历链路的TCP确认流
3、本地TCP确认:   PEP接收的TCP数据段由PEP本地确认
4、本地TCP重传:本地重传在TCP PEP和接收端系统之间的路径上丢失的数据段
5、TCP ACK过滤和重建:通过过滤链路一侧ACK,并在链路的另一侧重建已删除的ACK来解决由于不对称链路产生的拥塞问题
6、隧道:封装消息以跨特定链路传送消息或强制消息遍历特定路径,封装隧道另一端的PEP在最终传送到接收端系统之前移除隧道封装器 (中间链路使用UDP传输就是这种)
7、压缩:压缩各部分简要需要通过链路的字节数
8、处理与TCP断开链路的周期:TCP发送方未收到预期的确认,在重传定时器到期时会导致TCP关闭其连接
9、基于优先级的附庸:通过缓慢且昂贵的链路实现基于优先级的数据复用,可以显著提高所选应用或连接的链路性能和可用性
10、协议助推器机制:如UDP错误检测、奇偶校验分组数据包、发送PEP添加时间戳来延迟分组一边接收端重现正确的间隔

TCP加速机制是如何加速的?的更多相关文章

  1. 通俗易懂讲解TCP流量控制机制,了解一下

    上篇文章讲了TCP拥塞控制机制的原理,没看过的不妨看下:5分钟读懂拥塞控制,这篇文章讲讲TCP流量控制机制. 一.为什么需要流量控制? 双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发 ...

  2. TCP/IP 笔记 - TCP保活机制

    TCP协议中不存在轮询机制,这意味着加入启动一个客户端进程,与服务器建立连接后,然后离开几小时.几天.甚至几个月,连接依然会保持着.理论上,中间路由器可以崩溃和重启,数据线可以断开再连接,只要连接两端 ...

  3. go依赖包下载加速方法及github加速

    go依赖包下载加速方法及github加速 对于https://github.com/kubernetes/kubernetes整个仓库大小为近900M,下载起来那个伤心: 方法一:使用码云 这是码云上 ...

  4. TCP拥塞控制机制

     研究TCP的拥塞机制,不仅仅是想了解TCP如何的精巧,更多的是领悟其设计思想,即在一般情况下,我们该怎样处理问题.   一.拥塞的发生与其不可避免    拥塞发生的主要原因:在于网络能够提供的资源不 ...

  5. tcp窗口机制(写的最简单精炼的文章)

    tcp窗口机制(写的最简单精炼的文章) http://blog.csdn.net/occupy8/article/details/48468445

  6. TCP重传机制的学习应用

    1. TCP重传机制 TCP协议是一个可靠的协议.发送方每次发送一个数据包,需要等到ACK确认包再继续发送. 发出去的请求包在规定时间内没有收到ACK,不管是请求包丢失,还是ACK包丢失,还是网络延迟 ...

  7. python网络编程05 /TCP阻塞机制

    python网络编程05 /TCP阻塞机制 目录 python网络编程05 /TCP阻塞机制 1.什么是拥塞控制 2.拥塞控制要考虑的因素 3.拥塞控制的方法: 1.慢开始和拥塞避免 2.快重传和快恢 ...

  8. TCP KeepAlive机制理解与实践小结

    0 前言 本文将主要通过抓包并查看报文的方式学习TCP KeepAlive机制,以此加深理解. 1 TCP KeepAlive机制简介 TCP长连接下,客户端和服务器若长时间无数据交互情况下,若一方出 ...

  9. Debian 9 / Debian 10 / Ubuntu 18.04 / Ubuntu 18.10快速开启BBR加速 或 关闭BBR加速

    如果使用的是Debian 9.Debian 10.Ubuntu 18.04.Ubuntu 18.10等内核高于4.9版本的系统,均可以使用此方法开启BBR加速,若你使用了Ubuntu 19.04的系统 ...

随机推荐

  1. Appium+python自动化(十)- 元素定位秘籍助你打通任督二脉 - 上卷(超详解)

    简介 你有道灵光从天灵盖喷出来你知道吗,年纪轻轻就有一身横练的筋骨,简直百年一见的练武奇才啊,如果有一天让你打通任督二脉,那还不飞龙上天啊.正所谓我不入地狱谁入地狱,警恶惩奸维护世界和平这个任务就交个 ...

  2. Metasploit实现木马生成、捆绑、免杀

    原创博客,转载请注出处! 我的公众号,正在建设中,欢迎关注: Meatsploit介绍 2018/01/03 更新 Metasploit是一款优秀的开源(!= 完全免费)渗透测试框架平台,在该平台下可 ...

  3. 视频私有云实战:基于Docker构建点播私有云平台

    私有云是为一个客户单独使用而构建的,因而提供对数据.安全性和服务质量的最有效控制.前置条件是客户拥有基础设施,并可以使用基础设施在其上部署应用程序.其核心属性是专有的资源.本篇文章将会结合网易云信的实 ...

  4. Spring Batch 入门级示例教程

    Spring Batch 入门级示例教程 我将向您展示如何使用Spring Boot创建一个的Spring Batch的Hello World示例. (循序渐进) 因此,如果您是Spring Batc ...

  5. 【设计模式】结构型06享元模式(Flyweight Pattern)

    享元模式(Flyweight Pattern) 首先吐槽下这个名字,享元?共享元素的话感觉还是蛮好的~但是这个英文... 意图:更好的重用.管理对象,减少内存开销,节约资源. 主要解决:在有大量重复对 ...

  6. 寻找图的强连通分量:tarjan算法简单理解

    1.简介tarjan是一种使用深度优先遍历(DFS)来寻找有向图强连通分量的一种算法. 2.知识准备栈.有向图.强连通分量.DFS. 3.快速理解tarjan算法的运行机制提到DFS,能想到的是通过栈 ...

  7. 深度残差网络(ResNet)

    引言 对于传统的深度学习网络应用来说,网络越深,所能学到的东西越多.当然收敛速度也就越慢,训练时间越长,然而深度到了一定程度之后就会发现越往深学习率越低的情况,甚至在一些场景下,网络层数越深反而降低了 ...

  8. 你所不知的spring与mybatis整合方法

    内容目录 1.采用MapperScannerConfigurer2.采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.Sql ...

  9. java日期在今天的基础上加一个月。并计算时间相差天数

    Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, 1); ...

  10. c++字符数组

    题目描述 题目描述 输入一个英文句子(长度不会超过100),和他的长度,统计每个字母出现的个数. 输入 第一行包括一个整数,表示句子的长度,长度不会超过100.数字后可能会有多余的无效字符 请gets ...