什么原因导致“SYN丢失套接字”?

一个相当繁忙的代理服务器有很多“SYN到LISTEN套接字丢失”。

我了解到一个原因可能是积压太小。 但是在这种情况下,“套接字溢出的侦听队列的时间”值应该是相等的(事实并非如此)。

那么,这可能是导致这种行为的原因? 也许是坏的网吧?

我们有5个代理,其中两个是不相等的,所以这个问题似乎正在发生。

这里来自netstat的输出:

$ netstat -s | grep -i list 238627 times the listen queue of a socket overflowed 8610307 SYNs to LISTEN sockets dropped 

服务器有ipv4和ipv6stream量,也许有帮助?

这些计数器最终来自内核并映射到LINUX_MIB_LISTENOVERFLOWSLINUX_MIB_LISTENDROPS计数器。 你可以从net / ipv4 / tcp_ipv4.c(tcp_v4_syn_recv_sock)的第1392行看到,当LINUX_MIB_LISTENOVERFLOWS递增时, LINUX_MIB_LISTENDROPS也会增加,但是有退出条件,只有后者可以递增,所以它不是一个错误他们不匹配。

在同一个文件中,你可以看到这个代码:

 1291 int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb) 1292 { 1293 /* Never answer to SYNs send to broadcast or multicast */ 1294 if (skb_rtable(skb)->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST)) 1295 goto drop; 1296 1297 return tcp_conn_request(&tcp_request_sock_ops, 1298 &tcp_request_sock_ipv4_ops, sk, skb); 1299 1300 drop: 1301 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); 1302 return 0; 1303 } 

所以你可以看到至less有一个原因是一个广播或多播地址的SYN。