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

被折叠的 条评论
为什么被折叠?



