TCP接続保持パラメータが尊重されない

TCP接続保持パラメータが尊重されない

私のLinuxシステムで実行されているサーバーがあり、サーバーで次のコマンドを実行しました。

$ cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
$ cat /proc/sys/net/ipv4/tcp_keepalive_intvl
75
$ cat /proc/sys/net/ipv4/tcp_keepalive_probes
9

私のサーバーはポート58080でリッスンし、コードでTCP接続を維持し、接続を作成します。その後、この接続を追跡するようにWiresharkを設定しました。出力スクリーンショットは次のとおりです。

データパック

予想される2時間(「tcp_keepalive_time」値)の7200秒後に、最初のコネクション保持パケットが送信されることがわかります。しかし、各プローブが75秒(「tcp_keepalive_intvl」値)で送信されることを望みましたが、各プローブが2時間以内に送信されることを確認しました。

誰かが私の "tcp_keepalive_intvl"設定オプションが尊重されない理由を教えてもらえますか?

修正する

keep-alive時間よりも大きいkeep-alive間隔を指定すると、間隔が順守されるようです。

ベストアンサー1

非常にスマートな同僚と議論した結果、問題を特定したと思いますが、まだ証明していません。何が起こるかは、接続保持ACKが受信されていない場合にのみ接続維持間隔が考慮されることです。したがって、2時間後に最初のコネクション保持パケットのACKが受信されない場合、75秒後に2番目のパケットが送信され、ACKが受信されるまで75秒間隔で繰り返されます。

間隔が接続保持時間より大きい場合にのみ、間隔が考慮されることがわかりました。これは、前述のように、Linux接続維持メカニズムがどのように機能するかによるものです。私の他の質問

おすすめ記事