http协议是基于TCP协议,具备TCP协议的所有功能。但是与一般TCP的长连接不同的是http协议往往连接时间比较短,一个请求一个响应了事。但是总所周知,TCP协议除了具备可靠的传输以外,还有拥塞控制,慢启动等策略。在当年提出这些策略的时候网速普遍较低,这些策略引起的负面影响尚不明显,然而现在的动则百兆光纤的高速网络下TCP也必须不断优化以适应现在的环境,因为从目前来看弄出第二种协议才取代TCP是不可能的。

1.增大发送窗口

TCP的慢启动就是说,协议一开始从设置发送窗口从某个数值开始,如果没有出现丢包,则发送窗口以指数级增长,一旦发生丢包那么立刻减半防止因为拥塞大量丢包。

那么问题来了,http协议很多时候传输数据量很小,当慢启动还在试探的时候整条连接就被咔嚓了,这么一来本来可以两三个包交互的过程可能被拖到了4,5,6个,网络资源得不到完美利用。因此增大TCP的初始化窗口是极为必要的,可以在较短的时间内获得极大的吞吐量以便于网络资源得到充分发挥。

Google建议TCP初始化传输窗口增大到10个MSS,差不多16K左右。据统计,百分之九十的http回包大都数都是在16K以下。

2.优化三次握手策略

TCP在建立连接的时候首先要进行三次握手,所谓的三次握手就是彼此协商好一切初始化数据。比如说初始化序列号,协商好MSS。。。但是如果放到http协议里面,本来一个请求一个响应,可能很多时候根本就是一个包来就可以了事的事,却偏偏弄成了三次握手,一个包来,回复一个ack,然后再加上4次挥手断开连接,网络资源平白无故的浪费了许多。

事实上这里如果我们能优化掉一个包,那么整个互联网上减少的数据包会少掉多少?虽说无法统计但是能想像得到。不过有一点是有统计数据的,三次握手在http协议当中占据的传输时间少则占用百分之十,多则占用百分之三十。

其实TCP协议是可以在SYN数据包当中带数据的,不过为了安全考虑必须要等到三次握手结束之后才提交给应用程序,其套接字选项是TCP_LISTEN_TFO,对于编程来说也很简单。此时TCP协议会所带的数据和生成的cookis一起发送过去,据统计采用此技术后一些门户网站延迟效率提升了近百分之四十,而linux内核从3.6版本开始也采用了此项技术。

3.尾部探测技术

据统计,TCP传输的过程中,大约有30%的链接出现过丢包的情况。而TCP协议在处理丢包主要有两种方式:
1、发送端收到重复响应出发快速重传机制,大约需要1个RTT时间
2、当重传超时时进行数据包重传,一般都是5个甚至更多的RTT时间

数据包超时重传所需要的延迟远大于快速重传机制,另外TCP丢包往往发生在数据包的尾部,而且更多是连续性丢包,此时快速重传机制很难发挥作用,绝大多数这种情况下的丢包最后都是等到超时后重传的,如果我们能优化掉这个细节点,那么http协议传输效率则会有很大提高,于是我们出现了TLP机制。

TLP机制就是尾部丢失探测Tail Loss Probe,其原理就是当出现尾部连续性丢包时,补发最后那个包,此时就可以利用快速重传来代替超时重传,从而缩短TCP数据恢复的时间。而触发快速重传机制的根本就是引入了探测包的超时时间。当网络丢包时,探测的超时先于重传超时先触发,于是使得发送端发送最后那个数据,此时就可以从服务端收到ack回包,那么中间丢掉的包就会因为进入快速重传机制而很快补上而不用等到彻底超时。

有统计表明,因为这项改进增加了百分之一不到的探测报,从而导致搜索延迟减少了百分之六,数据重传减少了百分之十以上,可见其优化效果。

高速网络下的http协议优化的更多相关文章

  1. 卫星网络中使用TCP协议的劣势(所以才有TCP优化版用来卫星通信啊,比如TCP-Peach和ADolar)

    卫星网络中使用TCP协议的劣势 为了避免产生网络拥塞,原TCP协议综合采用了慢启动.拥塞避免.快速重传以及快速恢复等算法.但这些算法应用的前提是网络发生拥塞造成丢包,然而在误码率相对较高的卫星通信系统 ...

  2. Windows系统下的TCP参数优化

    1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用.特定数据包以及超时等,具体状态如下所示: CLOSED:初始状态, ...

  3. 入木三分学网络第一篇--VRRP协议详解第一篇(转)

    因为keepalived使用了VRRP协议,所有有必要熟悉一下. 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是解决局域网中配置静态网关时,静 ...

  4. Mysql优化系列(1)--Innodb引擎下mysql自身配置优化

    1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色 ...

  5. CentOS服务器下对mysql的优化

    原文链接: CentOS服务器下对mysql的优化 一.mysql的优化思路 mysql的优化分为两方面: 1. 服务器使用前的优化 2. 服务使用中的优化 二.mysql的基础优化步骤 1. 硬件级 ...

  6. Windows系统下的TCP参数优化(注册表\TCPIP\Parameters)

    转自:https://blog.csdn.net/libaineu2004/article/details/49054261 Windows系统下的TCP参数优化   TCP连接的状态与关闭方式及其对 ...

  7. C#下实现的K-Means优化[1]-「离群点检测」

    资源下载 #本文PDF版下载 C#下实现的K-Means优化[1]-「离群点检测」 前言 在上一篇博文中,我和大家分享了「C # 下实现的多维基础K-MEANS聚类」的[C#下实现的基础K-MEANS ...

  8. java ->网络通信协议(UDP协议、TCP协议)

    网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规 ...

  9. SSL/TLS协议详解(下)——TLS握手协议

    本文转载自SSL/TLS协议详解(下)--TLS握手协议 导语 在博客系列的第2部分中,对证书颁发机构进行了深入的讨论.在这篇文章中,将会探索整个SSL/TLS握手过程,在此之前,先简述下最后这块内容 ...

随机推荐

  1. LeetCode 852. Peak Index in a Mountain Array (山脉数组的峰顶索引)

    题目标签:Binary Search 题目给了我们一组 int array,让我们找到数组的 peak. 利用 binary search, 如果数字比它后面那个数字小,说明还在上坡,缩小范围到右半边 ...

  2. springboot 项目普通类中调用mapper或service接口

    1.该类使用@Component注解 2.添加一个本类类型的静态字段 3.创建一个初始化方法,贴上@PostConstruct 标签,用于注入bean 4.创建方法调用mapper或service接口 ...

  3. mysql查看数据库大小或者表大小

    要想知道每个数据库的大小的话,步骤如下: 1.进入information_schema 数据库(存放了数据库的信息) use information_schema; 2.查询所有数据库的大小: sel ...

  4. jquery控件的学习

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. C++之关键字&标识符命名规则

    关键字 **作用:**关键字是C++中预先保留的单词(标识符) * **在定义变量或者常量时候,不要用关键字** C++关键字如下: 提示:在给变量或者常量起名称时候,不要用C++得关键字,否则会产生 ...

  6. uoj140 【UER #4】被粉碎的数字

    题目 看起来就像是数位\(\rm dp\) 不妨从竖式乘法的角度来考虑这个问题 为了方便处理进位,我们得从低位向高位填数 设\(dp[i][0/1][j][p][t]\)表示填到了第\(i\)位,卡不 ...

  7. 2019-7-3-Roslyn-在项目文件使用条件判断

    title author date CreateTime categories Roslyn 在项目文件使用条件判断 lindexi 2019-7-3 17:7:32 +0800 2018-8-3 2 ...

  8. kaggle 实战 (1): PCA + KNN 手写数字识别

    文章目录 加载package read data PCA 降维探索 选择50维度, 拆分数据为训练集,测试机 KNN PCA降维和K值筛选 分析k & 维度 vs 精度 预测 生成提交文件 本 ...

  9. sql count 函数用法

    count(*) 会查询所有记录数,,包括为null值的数据: count(column)不会包含 column值为null的情况: count(1) 和 count(*)相同,,不同的是,,mysq ...

  10. CSS——滑动门技术及应用

    先来体会下现实中的滑动门,或者你可以叫做推拉门: 滑动门出现的背景 制作网页时,为了美观,常常需要为网页元素设置特殊形状的背景,比如微信导航栏,有凸起和凹下去的感觉,最大的问题是里面的字数不一样多,咋 ...