Tcp_Orphan_retriesを0に設定すると、再試行に制限がないという意味ですか、それともまったく再試行しないという意味ですか?
「永遠に試す」という意味ではなく、「まったくやらない」という意味です。これは、サーバーがソケットを閉じる準備ができていることをクライアントに丁寧に伝えようとしているサーバーです。サーバーが正常に切断するか、さらにデータを送信していただければ、それは素晴らしいことです。クライアントに応答させるためにX回試行し、Xの後でシステム側のソケットを再利用します。
その数を0に設定すると、そのサーバーが頻繁に使用され、孤児に対する許容度ゼロのポリシーがあることがわかります。また、DDOSへの応答であった可能性もあります。ソケット接続を開いてから接続を停止し、何もしないことによるDDOSの多くの作業です。
Tcp_Orphan_retriesを0に設定することは特殊なケースです。tcp_timer.cを参照してください
98 /* Calculate maximal number or retries on an orphaned socket. */
99 static int tcp_Orphan_retries(struct sock *sk, int alive)
100 {
101 int retries = sysctl_tcp_Orphan_retries; /* May be zero. */
102
103 /* We know from an ICMP that something is wrong. */
104 if (sk->sk_err_soft && !alive)
105 retries = 0;
106
107 /* However, if socket sent something recently, select some safe
108 * number of retries. 8 corresponds to >100 seconds with minimal
109 * RTO of 200msec. */
110 if (retries == 0 && alive)
111 retries = 8;
112 return retries;
113 }
まったく再試行しないことを意味します。カーネルソース(tcp_timer.c)からのこれらのコメントは、次のことをサポートしています。
/* Do not allow orphaned sockets to eat all our resources.
* This is direct violation of TCP specs, but it is required
* to prevent DoS attacks. It is called when a retransmission timeout
* or zero probe timeout occurs on orphaned socket.
*
* Criteria is still not confirmed experimentally and may change.
* We kill the socket, if:
* 1. If number of orphaned sockets exceeds an administratively configured
* limit.
* 2. If we have strong memory pressure.
*/