HTTP的时延

本文探讨了HTTP事务延迟产生的原因,包括DNS解析、TCP连接建立、数据传输、加密解密以及串行事务处理等环节,并详细阐述了TCP的握手过程、慢启动拥塞控制、Nagle算法的影响。同时提出了并行连接、持久连接、管道化连接和连接复用等优化策略以提升HTTP性能。

HTTP事务的延迟


如图http事务请求过程

产生延迟的地方


1.通过 DNS 解析 IP地址、端口号 

 初次访问时延时较大


2.建立tcp链接

 需要等待服务器请求应答 


TCP 握手延时

Tcp建立链接和发送数据时会交换一些列的IP分组

书里讲:

如果连接只用来传送少量
数据,这些交换过程就会严重降低 HTTP 的性能

那么少量数据交互时,如何处理?


握手过程


a)请求新的 TCP 连接时,客户端要向服务器发送一个小的 TCP 分组(通常是 40 ~60 个字节) 。这个分组中设置了一个特殊的 SYN 标记,说明这是一个连接请求

b)如果服务器接受了连接,就会对一些连接参数进行计算,并向客户端回送一个TCP 分组,这个分组中的 SYN 和 ACK 标记都被置位,说明连接请求已被接受

c)   客户端向服务器回送一条确认信息,通知它连接已成功建立


TCP 慢启动拥塞控制

TCP 数据传输的性能还取决于 TCP 连接的使用期,刚建立链接是会限制最大传输速度。

如果数据传输成功,可以随着时间推移提高数据传输速度,这个过程被称为 "慢启动" 

目的是为了防止网络的突然阻塞和过载,所以 慢启动会限制一个 TCP 端点在任意时刻可以传输的分组数


数据聚集的 Nagle 算法

TCP 数据流接口,应用程序可以通过它将任意尺寸的数据放入 TCP 栈中
即使一次只放一个字节也可以!但是,每个 TCP 段中至少装载了 40 个字节的标记和首部,

所以如果 TCP 发送了大量包含少量数据的分组,网络的性能就会严重下降


Nagle 算法可以将数据捆绑发送,提高使用率,如果数据比较多的时候 Nagle 算法也可以提高性能

但是,如果只要少量数据时,Nagle也会带来性能问题 ,报文太小时无法填满一个分组,这样Nagle就会阻止数据的发送

可以使用TCP_NODELAY  禁用Nagle算法


TIME_WAIT 时延和端口耗尽

TCP在关闭时,不会立即被开放给下一次TCP链接使用

会在内存中存留一段时间,来保证同一端口不被重复使用


3.链接建立成功后的数据传送 


硬件、网路带宽、服务器负载、请求和相应报文大小 都对http延迟有影响


4.HTTP加密&解密


HTTPS 就是在 HTTP 和 TCP 之间插入了一个(称为 TLS 或 SSL的)密码加密层 

5.串行事务处理时延

书上的一个例子 

一个web 页面 有3个嵌入的图片,要完整的显示页面 会有4个http事务请求

请求顺序如图,这种方式的用户体验不够好,因为前3个事务已经得到数据了也需要在第4个事务完成后,才能显示页面


使用其他方式,提升用户体验和性能

并行连接 
通过多条 TCP 连接发起并发的 HTTP 请求。


持久连接 
重用 TCP 连接,以消除连接及关闭时延。


管道化连接 
通过共享的 TCP 连接发起并发的 HTTP 请求

复用的连接 
交替传送请求和响应报文




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值