连接管理

1、HTTP的连接

http是基于tcp的应用层网络协议。
这里写图片描述

2、对tcp性能的考虑

2.1 http的时延

与建立TCP连接,以及传输请求和响应报文相比,事务处理的时间可能很短。http的时延有以下几种情况:
1、根据URI查找对应的ip和端口号。如果没有缓存,通过DNS解析ip会花费数十秒
2、客户端向服务器发送TCP连接请求,并等待服务器回复。每个tcp连接最多需要一两秒。但是如果有数百个http事务,会叠加
3、报文传输的时间

这里写图片描述

2.2 TCP时延的主要因素

2.2.1 TCP连接握手延时
tcp三次握手需要的时间

2.2.2 延迟确认
tcp实现了确认机制来确保数据的成功传输,每个tcp段都有一个序列号和数据完整性校验和,每个段的接收者收到完好的段都会向发送者发送小的确认分组。如果发送者没有收到确认分组,会认为分组已经损坏并重发。
由于确认报文很小,tcp允许在发往相同方向的输出数据分组对其进行捎带。tcp将确认信息和输出的数据分组一起发送,以更有效的利用网络。
为了增加确认报文找到相同方向数据的可能性,很多tcp实现了延迟确认算法。即在缓存中查找相同方向的数据,若没找到则单独发送。
http的请求、应答特性降低了捎带的可能性,通常延迟确认算法会增加http延迟,可以考虑调整或者关闭

2.2.3 tcp慢启动
慢启动用于防止网络的突然过载或阻塞。tcp在收到一个包时,就拥有发送两个包的权限,收到两个包,就有了发送四个包的权限。

2.2.4 Nagle算法
Nagle算法试图将多个小的包捆绑在一起发送,以提高网络效率。Nagle算法鼓励传输全尺寸的数据。
如果小的http报文等待那些永远不会到来的数据,也会产生延迟。

2.2.5 TIME_WAIT累积和端口耗尽
当某个tcp端点关闭tcp连接时,会在内存维护一个小的控制块,用于记录最近关闭连接的ip和端口,通常为最大分段使用期的两倍(一般为2分钟),以确保在这段时间内不会创建相同ip和端口的新连接。
由于客户端源端口有限,一般为60000个,而且在120秒内无法重用,所以可以的连接率被限制在60000/120=500次/秒。如果高于这个数,客户端会遇到端口耗尽问题。

3、持久连接

http/1.1允许http设备在事物处理结束之后将tcp保持打开状态,以便在未来的http请求重用连接。
持久连接降低了时延和连接建立的开销,将连接保持在已调谐状态。持久连接有两种类型:http/1.0+使用keep-alive,需要指定才能持久连接。 http/1.1使用persistent,默认就是持久连接。
发送keep-alive首部只是请求保持连接,但是服务器并不一定会同意进行keep-alive会话

3.2 哑代理

通过代理传递keep-alive时,代理并不会处理,会转发给服务器。服务器收到keep-alive会与代理保持持久连接,而不是客户端。

4、管道化连接

http/1.1允许在持久连接上可选的使用请求管理,这是在keep-alive上的进一步性能优化。在响应到达之前,将多条请求放入队列。当第一条请求发出,后续的请求也开始发送。在高延迟网络下,提高了性能。
管道化的条件:
连接必须是持久的
必须按照与请求相同的顺序回送http响应
http必须做好连接会在任意时刻关闭的准备
http客户端不应该用管道化的方式发送会产生副作用的请求,如post(如果一个事务执行一次或者多次得到的结果都是相同的,这种事务就是幂等的。GET、HEAD、PUT、DELETE、TRACE、OPTIONS都是幂等)

5、关闭连接

5.1 任意解除连接

所有客户端、服务器、代理都可以随时关闭一条tcp传输连接。

5.2 正常关闭连接

5.2.1 完全关闭及半关闭
套接字调用close会将tcp的输入、输出信道都关闭,称作完全关闭。
使用shutdown关闭输入或者输出称为半关闭

5.2.2 tcp关闭及重置错误
如果向已关闭的输入信道发送数据,操作系统会回复一条TCP”连接被对端重置”的报文。此时会清空缓冲区,将失去已缓存而未读的数据。

5.2.3 正常关闭
首先关闭输出信道。然后等待连接的另一端关闭输出信道。当两端都不再发送数据时,连接就被完全关闭而不会出现重置错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值