DNS查询 - 连接 - 请求 - 处理 - 响应 - 关闭
与建立TCP连接,以及传输请求和响应报文的时间相比,事务处理的时间可能是很短的,除非客户端或服务器超载,或正在处理复杂的动态资源,否则HTTP时延是由TCP网络时延构成的。
HTTP网络时延有以下几种主要原因:
- 客户端根据URI确定Web服务器的IP地址和端口号,如果最近没有对URI的主机进行访问,通过DNS解析系统将URI中的主机名转换成一个IP地址可能要花费数十秒的时间。
- 接下来,客户端会向服务器发送一条TCP连接请求,并等待服务器回送一个请求接受应答,每条TCP连接都会有连接建立时延,这个值通常最多只有一两秒钟,但如果有数百个HTTP事务的话,这个值会快速的叠加上去。
- 一旦连接建立起来,客户端就会通过新建立的TCP管道来发送HTTP请求,数据到达时,Web服务器会从TCP连接请求中读取请求报文,并对请求进行处理。
- 然后,Web服务器会回送HTTP响应,这也需要时间。
性能聚集区域:
- TCP连接的握手时延
- TCP慢启动拥塞控制
- 数据聚集的Nagle算法
- 用于捎带确认的TCP延迟确认算法
- TIME_WAIT时延和端口耗尽
TCP慢启动:
TCP慢启动限制了一个TCP端点在任意时刻可以传输的分组数,简单来说,每成功接收一个分组,发送端就有了发送两个分组的权限,如果某个HTTP事务有大量数据要发送,是不能一次将所有分组都发送出去的,必须发送一个分组,等待确认然后可以发送两个分组,每个分组都必须被确认,这样就可以发送四个分组了,这种方式被称为“打开拥塞窗口”
Nagle算法与TCP_NODELAY
TCP 有一个数据流接口,应用程序可以通过它将任意尺寸的数据放入TCP 栈中——即使一次只放一个字节也可以!但是,每个TCP 段中都至少装载了40 个字节的标记和首部,所以如果TCP 发送了大量包含少量数据的分组,网络的性能就会严重下降。