我正在研究减轻服务器遭受 DoS 类型攻击的方法。在一种情况下,我打开了数百个到 Web 服务器的 TCP 连接。在初始 TCP 握手后,我没有发送任何数据;在 TCP 握手后,这是一个空闲连接。服务器显示此连接处于 ESTABLISHED 状态。
60 秒内没有活动后,服务器将终止连接(转至 FIN_WAIT2 状态)。
为什么 60 秒后会发生这种情况?是否有内核值可以控制这一点?我预计连接会在“tcp_keepalive_time”秒后终止(当前设置为 7200)。
空闲连接不必等待 7200 秒才能终止,这是件好事,但我想了解为什么它会在 60 秒后发生。
这是在运行 2.6.32 内核的 CentOS 6.4 服务器上。
答案1
空闲连接的处理与 TCP 保持活动无关,而仅与服务器进程内的设置有关。TCP 保持活动只关心及时检测断开的连接,即由于中间出现故障或一方崩溃而无法交换数据包的情况。当连接处于空闲状态时,不会交换任何实际数据,但仍可以交换具有零有效负载的 TCP 保持活动数据包。