我的理解是,reuse 只会抛弃时间戳后退的 fin 包来,而 recycle 会抛弃所有时间戳后退的包,不止 fin 包,这个理解对不对?
如果对,那么如果遇到了 NAT 后面的多个客户端,reuse 打开的情况下为什么能够正确关闭连接?NAT 后面的多个客户端的时钟不一定一致,fin 包有可能时间戳后退,就被抛弃了。
ringa_lee
まず第一に、この質問を Stackoverflow に投稿する必要があります。中国語コミュニティにはまだマスターが非常に少なく、具体的なポイントはさらに少ないです。 net.ipv4.tcp_tw_recycle = {0|1} timewait 高速リサイクルを有効にするかどうか; 注: この機能をオンにすると、NAT 環境で重大な問題が発生する可能性があります。TCP には動作があるため、各接続の最新のタイムスタンプがキャッシュされ、その後の時間がリクエスト スタンプがキャッシュ内のタイムスタンプより小さい場合、スタンプは無効とみなされ、対応するリクエスト メッセージは破棄されます。Linux がこの動作を有効にするかどうかは tcp_timestamp と tcp_tw_recycle に依存し、前者のパラメータはデフォルトで有効になります。次のパラメータを有効にすると、この機能が有効になります。したがって、NAT 環境の場合は、セキュリティ上の理由から無効にする必要があります tcp_tw_recycle。別の解決策: tcp_timestamps を 0 に設定し、tcp_tw_recycle を 1 に設定すると、期待どおりに動作しません。tcp_timestamps が閉じられると、tcp_tw_recycle が開いても、後続のパラメーターは効果がありません。このとき、net.ipv4.tcp_max_tw_bucketsの値を小さくすると、2つの接続数を大幅に減らすことができます。
net.ipv4.tcp_tw_recycle = {0|1}
tcp_timestamp
tcp_tw_recycle
tcp_timestamps
net.ipv4.tcp_max_tw_buckets
net.ipv4.tcp_tw_reuse = {0|1} の再利用を有効にするかどうか、つまり、新しい TCP 接続に TIME-WAIT sockets を使用することを許可するかどうか、つまりデータ構造を収集しないようにするかどうかを変更するだけで継続して使用できます。これはあなたが言及した機能ではありません。
net.ipv4.tcp_tw_reuse = {0|1}
TIME-WAIT sockets
まず第一に、この質問を Stackoverflow に投稿する必要があります。中国語コミュニティにはまだマスターが非常に少なく、具体的なポイントはさらに少ないです。
net.ipv4.tcp_tw_recycle = {0|1}
timewait 高速リサイクルを有効にするかどうか; 注: この機能をオンにすると、NAT 環境で重大な問題が発生する可能性があります。TCP には動作があるため、各接続の最新のタイムスタンプがキャッシュされ、その後の時間がリクエスト スタンプがキャッシュ内のタイムスタンプより小さい場合、スタンプは無効とみなされ、対応するリクエスト メッセージは破棄されます。Linux がこの動作を有効にするかどうかはtcp_timestamp
とtcp_tw_recycle
に依存し、前者のパラメータはデフォルトで有効になります。次のパラメータを有効にすると、この機能が有効になります。したがって、NAT 環境の場合は、セキュリティ上の理由から無効にする必要がありますtcp_tw_recycle
。別の解決策:tcp_timestamps
を 0 に設定し、tcp_tw_recycle
を 1 に設定すると、期待どおりに動作しません。tcp_timestamps
が閉じられると、tcp_tw_recycle
が開いても、後続のパラメーターは効果がありません。このとき、net.ipv4.tcp_max_tw_buckets
の値を小さくすると、2つの接続数を大幅に減らすことができます。net.ipv4.tcp_tw_reuse = {0|1}
の再利用を有効にするかどうか、つまり、新しい TCP 接続にTIME-WAIT sockets
を使用することを許可するかどうか、つまりデータ構造を収集しないようにするかどうかを変更するだけで継続して使用できます。これはあなたが言及した機能ではありません。