HTTP:TIME_WAIT累积与端口耗尽

背景:当某个 TCP 端点关闭 TCP 连接时,会在内存中维护一个小的控制块,用来记录最 近所关闭连接的 IP 地址和端口号。这类信息只会维持一小段时间,通常是所估计的 最大分段使用期的两倍(称为 2MSL,通常为 2 分钟 8)左右,以确保在这段时间内 不会创建具有相同地址和端口号的新连接。实际上,这个算法可以防止在两分钟内 创建、关闭并重新创建两个具有相同 IP 地址和端口号的连接。

现在高速路由器的使用,使得重复分组几乎不可能在连接关闭的几分钟之后,出现 在服务器上。有些操作系统会将 2MSL 设置为一个较小的值,但超过此值时要特别小心。分组确实会被复制,如果来自之前连接的复制分组插入了具有相同连接值的 新 TCP 流,会破坏 TCP 数据。

2MSL 的连接关闭延迟通常不是什么问题,但在性能基准环境下就可能会成为一个 问题。进行性能基准测试时,通常只有一台或几台用来产生流量的计算机连接到某 系统中去,这样就限制了连接到服务器的客户端 IP 地址数。而且,服务器通常会在 HTTP 的默认 TCP 端口 80 上进行监听。用 TIME_WAIT 防止端口号重用时,这些 情况也限制了可用的连接值组合。

在只有一个客户端和一台 Web 服务器的异常情况下,构建一条 TCP 连接的 4 个值: <source-IP-address, source-port, destination-IP-address, destination-port>

其中的 3 个都是固定的------只有源端口号可以随意改变: <client-IP, source-port, server-IP, 80>

解决方案:客户端每次连接到服务器上去时,都会获得一个新的源端口,以实现连接的唯一性。 但由于可用源端口的数量有限(比如,60 000 个),而且在 2MSL 秒(比如,120 秒)内连接是无法重用的,连接率就被限制在了 60 000/120=500 次 / 秒。如果再不 断进行优化,并且服务器的连接率不高于 500 次 / 秒,就可确保不会遇到 TIME_ WAIT 端口耗尽问题。要修正这个问题,可以增加客户端负载生成机器的数量,或 者确保客户端和服务器在循环使用几个虚拟 IP 地址以增加更多的连接组合。

即使没有遇到端口耗尽问题,也要特别小心有大量连接处于打开状态的情况,或为 处于等待状态的连接分配了大量控制块的情况。在有大量打开连接或控制块的情况 下,有些操作系统的速度会严重减缓。

相关推荐
invicinble12 小时前
http协议的底层实现方式与交互过程
网络协议·http·交互
qq_4112624215 小时前
使用ESP-IDF的HTTP OTA Demo测试,开启蓝牙功能后,HTTP下载速度就非常慢
网络·网络协议·http
鲨莎分不晴15 小时前
HTTP协议全解:从三次握手到HTTP/3的进化史
网络·网络协议·http
VekiSon16 小时前
Linux网络编程——网络数据封装与 HTTP 协议
网络·网络协议·http
东东的脑洞16 小时前
【面试突击】深入理解 TCP 三次握手与 HTTP 协议演进
tcp/ip·http·面试
ベadvance courageouslyミ17 小时前
网络编程(三)HTTP
网络·网络协议·http
微爱帮监所写信寄信17 小时前
HTTPS技术架构与微爱帮监狱写信寄信小程序EV证书深度解析
网络协议·http·https·监狱寄信·微爱帮
TracyCoder12317 小时前
告别明文传输:HTTPS 加密机制
网络协议·http·https
Irene199119 小时前
HTTP 缓存详解
http·缓存
Knight_AL19 小时前
HTTP 状态码一览:理解 2xx、3xx、4xx 和 5xx 分类
网络·网络协议·http