Linux

是什麼導致“SYN to LISTEN 套接字失去”?

  • March 1, 2019

一個非常繁忙的代理伺服器有很多“SYNs to LISTEN sockets drop”。

我了解到一個原因可能是積壓工作太小。但在這種情況下,“套接字的偵聽隊列溢出的次數”值應該相等(事實並非如此)。

那麼導致這種行為的原因是什麼?也許是壞了的網卡?

我們有 5 個代理,其中兩個數字不相等,所以這個問題似乎在那裡發生。

這裡是 netstat 的輸出:

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

伺服器有 ipv4 和 ipv6 流量,也許這有幫助?

這些計數器最終來自核心並映射到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 }

因此,您至少可以看到一個原因是廣播或多播地址的 SYN。

引用自:https://serverfault.com/questions/646604