net.ipv4.tcp_syn_retries的设置,表示应用程序进行connect()系统调用时,在对方不返回SYN + ACK的情况下(也就是超时的情况下),第一次发送之后,内核最多重试几次发送SYN包;并且决定了等待时间.
Linux上的默认值是 net.ipv4.tcp_syn_retries = 6 ,也就是说如果是本机主动发起连接,(即主动开启TCP三次握手中的第一个SYN包),如果一直收不到对方返回SYN + ACK ,那么应用程序最大的超时时间就是127秒
iptables -A INPUT --protocol tcp --dport 5000 --syn -j DROP 1
tcpdump -i lo -Ss0 -n src 127.0.0.1 and dst 127.0.0.1 and port 5000 1
新开一个窗口
date '+ %F %T'; telnet 127.0.0.1 5000; date '+ %F %T'; 1
可以看到当net.ipv4.tcp_syn_retries=6的时候
发起了7次请求 然后6次重试 且每次间隔时间是上一次间隔的2倍
参考 https://www.dazhuanlan.com/2019/10/20/5dab43fbaadb1/