如何使用 tcpdump(或类似工具)跟踪 TIME_WAIT 会话

如何使用 tcpdump(或类似工具)跟踪 TIME_WAIT 会话

我的服务器有大量 TIME_WAIT 会话。这些会话是服务器关闭的,但客户端没有关闭。

我想分析一个示例会话,以了解那里发生了什么。对 tcpdump 输出进行简单的“强力”分析是没有用的,因为大多数会话都已关闭。

有没有办法只挖掘出那些导致 TIME_WAIT 的连接?

答案1

处于 TIME_WAIT 状态的连接表示您的服务器是其关闭阶段的发起者。它可以防止接受较晚的段并确保另一端已正确关闭连接。

在大多数情况下,拥有大量 TIME_WAIT 连接不会有什么问题,这取决于服务器提供的服务。TIME_WAIT 连接数量过多的主要问题是内存消耗,40,000 个连接仅消耗约 10MB 内存。

如果你认为这可能会对你的具体情况造成伤害,你可以使用党卫军从 iproute2 查看哪些元组是罪魁祸首:

$ ss -tan state time-wait

然后,使用如下工具wireshark,您可以使用类似以下过滤器轻松分析与该元组相对应的 TCP 流:

tcp.port == <port> and ip.addr == <ip>

您还可以使用 wireshark 的“跟踪 TCP 流”功能,它将显示来自该特定连接的每个段。

相关内容