高速网络下的http协议优化
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协议优化的更多相关文章
- 卫星网络中使用TCP协议的劣势(所以才有TCP优化版用来卫星通信啊,比如TCP-Peach和ADolar)
卫星网络中使用TCP协议的劣势 为了避免产生网络拥塞,原TCP协议综合采用了慢启动.拥塞避免.快速重传以及快速恢复等算法.但这些算法应用的前提是网络发生拥塞造成丢包,然而在误码率相对较高的卫星通信系统 ...
- Windows系统下的TCP参数优化
1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用.特定数据包以及超时等,具体状态如下所示: CLOSED:初始状态, ...
- 入木三分学网络第一篇--VRRP协议详解第一篇(转)
因为keepalived使用了VRRP协议,所有有必要熟悉一下. 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是解决局域网中配置静态网关时,静 ...
- Mysql优化系列(1)--Innodb引擎下mysql自身配置优化
1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色 ...
- CentOS服务器下对mysql的优化
原文链接: CentOS服务器下对mysql的优化 一.mysql的优化思路 mysql的优化分为两方面: 1. 服务器使用前的优化 2. 服务使用中的优化 二.mysql的基础优化步骤 1. 硬件级 ...
- Windows系统下的TCP参数优化(注册表\TCPIP\Parameters)
转自:https://blog.csdn.net/libaineu2004/article/details/49054261 Windows系统下的TCP参数优化 TCP连接的状态与关闭方式及其对 ...
- C#下实现的K-Means优化[1]-「离群点检测」
资源下载 #本文PDF版下载 C#下实现的K-Means优化[1]-「离群点检测」 前言 在上一篇博文中,我和大家分享了「C # 下实现的多维基础K-MEANS聚类」的[C#下实现的基础K-MEANS ...
- java ->网络通信协议(UDP协议、TCP协议)
网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规 ...
- SSL/TLS协议详解(下)——TLS握手协议
本文转载自SSL/TLS协议详解(下)--TLS握手协议 导语 在博客系列的第2部分中,对证书颁发机构进行了深入的讨论.在这篇文章中,将会探索整个SSL/TLS握手过程,在此之前,先简述下最后这块内容 ...
随机推荐
- bash数组总结
bash数组操作 bash支持两种数组,一种是索引数组,一种是关联数组 索引数组 数组的值类型是任意的,索引也未必一定要连续,当做列表理解更好 下面总结下索引数组,即列表: 1. 声明 declare ...
- [转]如何升级gcc版本
首先需要准备需要材料:gcc4.4.2版需要安装gmp4.2.0+和mpfr2.3.0+,到GMP的网站(http://gmplib.org/)上下载gmp-4.3.1.tar.gz 和mprf的网站 ...
- SpringBoot-集成PageHelper5.1.2踩坑
背景就不介绍了,项目是SpringBoot+MyBatis搭建的,需要集成git上的PageHelper5.1.2,这个插件大家都比较熟悉了 之前一直用的PageHelper4.0.3,集成是这样的: ...
- 5-MySQL高级-事务-回滚(3)
回滚 为了演示效果,需要打开两个终端窗口,使用同一个数据库,操作同一张表 step1:连接 终端1 select * from goods_cates; step2:增加数据 终端2:开启事务,插入数 ...
- 如何读懂Web服务的系统架构图
Web服务的一个重要特点就是流量大.数据多,仅靠一台服务器肯定难以支撑大规模的服务. 所以我们经常会看到诸如以下的一些术语,教人好生不懂: *:系统架构.物理架构.Web服务基础设施 *:应用服务器 ...
- java编程——数据的加法
设计思想: 第一步:从键盘上输入一定个数的整数. 第二步:因为在main()方法中的参数是String类型的,所以第一步中输入的其实是字符类型,在这一步要把String转化成int. 第三步:初始化s ...
- Android开发 View的UI刷新Invalidate和postInvalidate
Invalidate 正常刷新 /** * 使整个视图无效.如果视图可见, * {@link #onDraw(android.graphics.Canvas)} 调用此方法后将在后续的UI刷新里调用o ...
- Buy Low, Buy Lower
Buy Low, Buy Lower 给出一个长度为N序列\(\{a_i\}\),询问最长的严格下降子序列,以及这样的序列的个数,\(1 <= N <= 5000\). 解 显然我们可以很 ...
- 【JZOJ6277】矩阵游戏
description analysis 设所有操作之后,\(f[i]\)表示\(i\)行乘的数,\(g[j]\)表示\(j\)列乘的数,那么 \[Answer=\sum^{n}_{i=1}\sum^ ...
- 校园商铺-2Logback配置与使用-2Logback配置
logback配置文件加载顺序 logback:程序在运行的时候,会按照一定的顺序去加载logbook相关的配置文件. 如果我们在配置里面制定了logbackConfigurationFile这个属性 ...