gpt4 book ai didi

networking - 服务器端很多TIME_WAIT的代价是什么?

转载 作者:可可西里 更新时间:2023-11-01 02:28:40 25 4
gpt4 key购买 nike

假设有一个客户端与服务器建立了很多短期连接。

如果客户端关闭连接,客户端会有很多端口处于TIME_WAIT状态。由于客户端用完了本地端口,因此无法快速进行新的连接尝试。

如果服务器关闭连接,我会在服务器端看到很多TIME_WAIT。然而,这有什么坏处吗?客户端(或其他客户端)可以继续尝试连接,因为它永远不会用完本地端口,并且服务器端的 TIME_WAIT 状态的数量会增加。最终会发生什么?有什么不好的事情发生吗? (速度变慢、崩溃、连接断开等)

请注意,我的问题不是“TIME_WAIT 的目的是什么?”但是“如果服务器上有这么多 TIME_WAIT 状态会怎样?”我已经知道在 TCP/IP 中关闭连接时会发生什么,以及为什么需要 TIME_WAIT 状态。我不是要排除故障,只是想知道它的潜在问题是什么。

简单地说,假设netstat -nat | grep:8080 | grep TIME_WAIT | wc -l 打印 100000。会发生什么?操作系统的网络堆栈是否变慢? “打开的文件太多”错误?或者,只是没什么可担心的?

最佳答案

TIME_WAIT 中的每个套接字都会消耗内核中的一些内存,通常比 ESTABLISHED 套接字少一些,但仍然很重要。足够大的数量可能会耗尽内核内存,或者至少会降低性能,因为该内存可用于其他目的。 TIME_WAIT 套接字不保存打开的文件描述符(假设它们已正确关闭),因此您不必担心“打开的文件过多”错误。

套接字还绑定(bind)了特定的 src/dst IP 地址和端口,因此在 TIME_WAIT 间隔期间不能重复使用. (这是 TIME_WAIT 状态的预期目的。)占用端口通常不是问题,除非您需要使用相同的端口对重新连接。大多数情况下,一侧会使用一个临时端口,只有一侧锚定到一个众所周知的端口。但是,如果您在相同的两个 IP 地址之间重复频繁地连接,大量的 TIME_WAIT 套接字可能会耗尽临时端口空间。请注意,这只会影响这个特定的 IP 地址对,不会影响与其他主机的连接建立。

关于networking - 服务器端很多TIME_WAIT的代价是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com