HTTP链接管理

1. 引言

HTTP链接是HTTP报文传输的关键通道,几乎全部的HTTP通讯都是由TCP/IP承载。程序员

HTTP链接实际上就是TCP链接和一些使用链接的规则。TCP链接是因特网上的可靠链接。
TCP为HTTP提供了一条可靠的比特传输管道。从TCP链接一端填入的字节会从另外一端以原有的顺序、正确地传送出来。
(1)浏览器解析出主机名
(2)浏览器查询这个主机名的IP地址(DNS)
(3)浏览器得到端口号
(4)浏览器发送到ip:port的链接
(5)乱了去年向服务器发送一个HTTP GET报文
(6)浏览器从服务器读取HTTP响应报文
(7)浏览器关闭链接算法

TCP流是分段的,由IP分组传送
TCP的数据是经过名为IP分组(或IP数据报)的小数据块来发送的。HTTP就是“HTTP over TCP over IP”这个协议栈中的最顶层。
其安全版本HTTPS就是在HTTP和TCP之间插入一个(称为TLS或SSL的)密码加密层。浏览器

如图:安全

HTTP要传送一条报文时,会以流的形式将报文数据的内容经过一条打开的TCP链接按序传输。TCP收到数据流以后,会将数据流砍成被称做段的小数据块,并将段封装在IP分组中,经过因特网进行传输,。全部这些工做都是由TCP/IP软件来处理的,HTTP程序员什么都看不到。
每一个TCP段都是由IP分组承载,从一个IP地址发送到另外一个IP地址的,每一个IP分组中都包括:
(1)一个IP分组首部(一般为20字节)
(2)一个TCP段首部(一般为20字节)
(3)一个TCP数据块(0个或多个字节)服务器

在任意时刻计算机均可以有几条TCP链接诶处于打开状态。TCP是经过端口号来保持全部这些链接的正确运行的。网络

 

2. 对TCP性能的考虑

HTTP紧挨着TCP,位于其上层,因此HTTP事务的性能在很大程度上取决于底层TCP通道的性能。并发

HTTP事务主要的链接、传输以及处理时延。如图:性能

与创建TCP链接,以及传输请求和响应报文的时间相比,事务处理时间多是很短的。除非客户端或服务器超载,或正在处理复杂的动态资源,不然HTTP时延就是由TCP网络时延构成的。加密

HTTP事务的时延有如下几种主要缘由:
(1)客户端手续须要根据URI肯定Web服务器的IP地址和端口号。若是最近没有对URI中的主机名进行访问,经过DNS解析系统将URI中的主机名转换成一个IP地址可能要花费数十秒的时间。
(2)客户端会向服务器发送一条TCP链接请求,并等待服务器会送一个请求接受应答。每条新的TCP链接都会有链接创建时延。这个值一般最多只有一两秒钟,但若是有百个HTTP事务的话,这个值会快速地叠加上去。
(3)一旦链接创建起来了,客户端就会经过新创建的TCP管道来发送HTTP请求。数据到达时,Web服务器会从TCP链接中读取请求报文,并对请求进行处理。因特网传输请求报文,以及服务器处理请求报文都须要时间。
(4)Web服务器会回送HTTP响应,这也须要花费时间。blog

这些TCP网络时延的大小取决于硬件速度、网络和服务器的负载,请求和响应报文的尺寸,以及客户端和服务器之间的距离。

性能聚焦区域
列出了一些会对HTTP程序员产生影响的、最多见的TCP相关时延。其中包括:
(1)TCP链接创建握手:创建一条新的TCP链接时,甚至在发送任意数据以前,TCP软件之间会交换一系列的IP分组。若是链接只是用来传送少许数据,这些交换过程就会严重下降HTTP的性能。HTTP程序员永远不会看到这些分组--这些分组都是由TCP/IP软件管理,对其是不可见的。HTTP程序员看到的只是建立TCP链接时存在的时延。
(2)TCP慢启动拥塞控制:TCP慢启动限制了一个TCP端点在任意时刻能够传输的分组数。每成功接收一个分组,发送端就有了发送另外两个分组的权限。若是某个HTTP事务有大量数据要发送,是不能一次将全部分组都发送出去的。因为存在这种拥塞控制特性,因此新链接的传输速度会比已经交换过必定量数据的链接慢一些。
(3)数据汇集Nagle算法:Nagle算法会引起集中HTTP性能问题。(a)小的HTTP报文可能没法填满一个分组,可能会由于等待哪些永远不会到来的额外数据而产生时延(b)Nagle算法与延迟确认之间的交互存在问题--Nagle算法会阻止数据的发送,直到有确认分组,但确认分组自身会被延迟确认算法延迟100~200ms。TCP_NODELAY禁用Nagle算法。
(4)用于捎带确认的TCP延迟确认算法:因为确认报文很小,因此TCP容许在发往相同方向的输出数据分组中对其进行“捎带”。TCP将返回的确认信息与输出的数据分组结合在一块儿,能够更有效地利用网络,为了增长确认报文找到同向传输数据分组的可能性,不少TCP栈都实现了一种“延迟确认”算法。延迟确认算法会在一个特定的窗口时间(100~200ms)内将输出确认存放在缓冲区中,以寻找可以捎带它的输出数据分组。
(5)TIME_WAIT时延和端口耗尽

3. HTTP链接的管理

有几种方法能够提升HTTP的链接性能:(1)并行链接:经过多条TCP链接发起并发的HTTP请求;(2)持久链接:重用TCP链接,以消除链接及关闭时延;在事务处理结束以后仍然保持在打开状态的TCP链接被称为持久链接。重用已对目标服务器打开的空闲持久链接,就能够避开缓慢的链接创建阶段。并且,已经打开的链接还能够避免慢启动的拥塞适应阶段,以便更快的进行数据传输。(3)管道化链接:经过共享的TCP链接发起并发的HTTP请求;(4)复用的链接:交替传送请求和响应报文。

相关文章
相关标签/搜索