TCP KeepAlive(套接字选项SO_KEEPALIVE
)由三个选项控制:机制触发的时间,探测间隔和失败的探测数,之后声明连接中断。
它们的默认值为:
- tcp_keepalive_time = 7200
- tcp_keepalive_intvl = 75
- tcp_keepalive_probes = 9
在1¼分钟后发送探针听起来很合理,在9次失败的探针之后声明失败也可以,但是最初的2小时背后的想法是什么?
甚至tcp(7)说
请注意,底层的连接跟踪机制和应用程序超时可能要短得多。
启用keepalive的要点是防止任何有状态的网络元素丢弃状态信息,但是此类元素往往会在几分钟内断开连接。对于某些受速率限制的服务器,curl
短时间--keepalive-time
似乎可以显着提高下载的可靠性。
那么为什么默认值这么长?