web-dev-qa-db-ja.com

0に設定されたtcp_Orphan_retriesはどういう意味ですか?

Tcp_Orphan_retriesを0に設定すると、再試行に制限がないという意味ですか、それともまったく再試行しないという意味ですか?

8
benjarrell

「永遠に試す」という意味ではなく、「まったくやらない」という意味です。これは、サーバーがソケットを閉じる準備ができていることをクライアントに丁寧に伝えようとしているサーバーです。サーバーが正常に切断するか、さらにデータを送信していただければ、それは素晴らしいことです。クライアントに応答させるためにX回試行し、Xの後でシステム側のソケットを再利用します。

その数を0に設定すると、そのサーバーが頻繁に使用され、孤児に対する許容度ゼロのポリシーがあることがわかります。また、DDOSへの応答であった可能性もあります。ソケット接続を開いてから接続を停止し、何もしないことによるDDOSの多くの作業です。

4
Satanicpuppy

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 }
7
rtxu

まったく再試行しないことを意味します。カーネルソース(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.
 */
0
DictatorBob