最初のホストでは
root@xxx:~# netstat -natup | grep xxx
tcp 0 0 10.2.5.3:40740 xxx:10051 ESTABLISHED 1482/zabbix_proxy:
リモートホストとの接続が確立されていることを確認できます。
root@xxx:~# ps -eo uid,pid,etime | grep 1482
106 1482 18-17:10:17
約18日間接続が確立されました。 SSHを介してリモートホストに接続し、次を実行すると:
root@xxx:~# netstat -natup | grep 10.2.5.3
アイテムが絶対にありません!
どうやってこれができますか?
答え1
最初のホストがトラフィックを開始しない場合、ローカルプロセスが接続を閉じるか、リモートホストが接続を閉じるまで、接続は永久に「ESTABLISHED」のままです。
それでは、ホスト間のネットワークの中断を想像してみてください。リモートホストのパケットが最初のホストに到達できません。この中断の間、リモートホストは最初のホストからACKパケットを受信しないため、タイムアウトし、最初のホストに何かを送信しようとします。しばらくすると、接続がタイムアウトし、リモートホストが接続を閉じます。ただし、最初のホストは他のホストで何が起こっているのかわからないため、接続は「ESTABLISHED」のままです。
リモートホストが停電して再起動しても同じ状況が発生し、既存のネットワーク接続を最初にシャットダウンすることはできません。
これを防ぐには、ソケットレベルでtcp keepaliveをオンにする必要があります。これにより、ホスト間でKeepaliveパケットが定期的に交換されるため、正常なトラフィックがない場合でもネットワークの中断を検出できます。
答え2
まず、このetime
フィールドはプロセスの開始時期を示します。これは、必ずしも接続がその時点でバインドされていることを意味するわけではありません。
次に、ある種のネットワークアドレス変換が使用されていますか?その場合は、grep
リモートホストのポート番号を入力してnetstat -natup|grep 40740
返される内容を確認してください。