为了进入 TCP 端口耗尽状态,需要多快分配临时端口?
我被告知有 ~4k(旧版 Windows)、~16k(新版 Windows)或 ~28k(RH Linux)端口可供客户端请求。那么,端口号池是全局的还是每个远程 IP 地址的?
如果它们是全局的,由于端口在 240 秒(Windows)或 60 秒(RH Linux)之后才可重复使用,所以是否需要以每秒 ~16/66/466 的速率相应地分配它们?
它是否正确?
根据您的经验,这是我应该实际担心的事情吗?
答案1
仅针对编写不良的应用程序,DOS 攻击除外。避免 TCP 端口耗尽的基本技巧是连接池,例如 HTTP 保持活动。这有几个有益的效果:
- 单位时间内的连接数更少。
- 第一次关闭连接通常由客户端完成,而不是服务器。这将 TIME_WAIT 状态从服务器移到客户端,客户端使用的套接字和端口要少得多,因此可以更好地容忍它。
答案2
Diito EJP 和 Sirex。监控将让您更好地了解自己的立场。您还可以调整允许套接字保持 TIME_WAIT 状态的时间。我必须在与数千个 GPRS 遥测设备通信的系统上执行此操作。它们拨号并占用端口,就像没人管一样。更激进的 TIME_WAIT 阈值意味着我们的应用程序更稳定。
MS Windows 上有一些有用的工具可用于监控端口使用情况,例如:TCPView 和 ProcessExplorer (MS SysInternals)。 netstat -a
当有数千个连接时可能会很慢,因此您可以改用netstat -an
(这会阻止对地址进行 DNS 解析)。但我不能保证 Linux 也是如此....