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 地址以增加更多的连接组合。

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

相关推荐
tan180°7 小时前
Linux网络HTTP(下)(9)
linux·网络·http
程序员小远7 小时前
使用Jmeter进行http接口测试
自动化测试·软件测试·python·测试工具·jmeter·http·接口测试
咖啡教室15 小时前
每日一个计算机小知识:HTTP
后端·http·https
paishishaba17 小时前
HTTP、HTTPS 和 WebSocket 协议和开发
websocket·http·https·实时聊天
GilgameshJSS17 小时前
STM32H743-ARM例程29-HTTP
c语言·arm开发·stm32·单片机·http
l1t17 小时前
在DuckDB中使用http(s)代理
数据库·网络协议·http·xlsx·1024程序员节·duckdb
2301_8035545218 小时前
Http学习
网络协议·学习·http
jfqqqqq1 天前
使用pem和key文件给springboot开启https服务
网络协议·http·https
Tony Bai1 天前
【Go 网络编程全解】13 从 HTTP/1.1 到 gRPC:Web API 与微服务的演进
开发语言·网络·http·微服务·golang
易ლ拉罐1 天前
【计算机网络】HTTP协议(二)——超文本传输协议
网络·计算机网络·http·1024程序员节