我正在开发一个通过TCP连接到服务器的客户端。配置服务器使得如果一个服务器关闭,则与另一个服务器建立连接。
我的要求是如果在2s内没有与第一台服务器建立TCP连接,客户端需要与第二台服务器建立连接。
以下是基于测试的观察结果 - 客户端将TCP SYN消息发送到第一服务器以建立连接。由于第一台服务器关闭,1秒后,TCP SYN重传被发送到第一台服务器。在2s之后(由于处理和网络延迟),客户端将TCP SYN消息发送到第二服务器。因此将SYN消息的3s(1s + 2s)发送到第二台服务器,这不是我想要的。我希望在2秒内将TCP SYN消息发送到第二台服务器。
为了在2s内向第二台服务器发送TCP SYN消息,我想避免TCP SYN重传。
我尝试在/etc/sysctl.conf中设置net.ipv4.tcp_syn_retries = 0。但是我获得了1次TCP SYN重传。
那么有没有办法在不更改内核源的情况下从用户空间禁用TCP SYN重传?
答案 0 :(得分:2)
我的要求是如果在2s内没有与第一台服务器建立TCP连接,客户端需要与第二台服务器建立连接。
在这种情况下,只需在客户端进行2秒超时连接,如果连接失败,则重试另一台服务器。关闭套接字后,内核将停止尝试连接到第一台服务器。这比特定平台更好,更独立,而不是摆弄TCP的内置可靠性行为和时序。