TCPのCLOSE_WAITとは?
netstatをしていると、CLOSE_WAITのステータス表示がなかなか消えず残っていることがあります。
なんだろうと思い調べました。
通信相手から自分への通信はcloseしたが、自分側は完全にcloseしていない状態の場合に
自分のステータスがCLOSE_WAITに、相手はFIN_WAITとなります。
この状態をハーフクローズの状態と言い、CLOSE_WAIT側は通信を続けられます。
CLOSE_WAIT側が終了をさせると、コネクションは終わります。
CLOSE_WAITのステータスは、ホストのやり取りで消えていくことになりますが、
CLOSE_WAITの状態のまま応答が無い場合は一定時間がたつと自動で消えるようです。
FIN_WAIT2: tcp_fin_timeout で設定。デフォルトは60秒。この値でタイムアウト。
CLOSE_WAIT: tcp_keepalive_time で設定(デフォルトは2時間)。接続が有効かどうかを相手に確認する(keep-aliveプローブを送信)。
こちらサイトの図が分かり易いです。
こせきの技術日記
http://koseki.hatenablog.com/entries/2007/03/31
[amazonjs asin=”4274068765″ locale=”JP” title=”マスタリングTCP/IP 入門編 第5版”]
[amazonjs asin=”4274062562″ locale=”JP” title=”マスタリングTCP/IP 応用編”]