TCPの状態一覧
LISTEN(聴取)
TCPモジュールはリモートホストからのコネクション要求を待っている。パッシブオープンの後で入る状態と同じ。
SYN-SENT(SYN送信済み)
TCPモジュールは自分のコネクション要求の送信を終え、応答確認と対応するコネクション要求を待っている。
SYN-RECEIVED(SYN受信済み)
TCPモジュールは同期(SYN)セグメントを受信し、対応する同期(SYN/ACK)セグメントを送って、コネクション応答確認を待っている。
ESTABLISHED(確立済み)
コネクションが開かれ、データ転送が行える通常の状態になっている。受信されたデータは全てアプリケーションプロセスに渡せる。
FIN-WAIT-1(FIN待機1)
TCPモジュールはリモートホストからのコネクション終了要求か、すでに送った終了要求の応答確認を待っている。
FIN-WAIT-2(FIN待機2)
この状態に入るのは、TCPモジュールがリモートホストからの終了要求を待っているときである。
CLOSE-WAIT(閉鎖待機)
TCPモジュールはアプリケーションプロセスからのコネクション終了要求を待っている。
CLOSING(閉鎖処理中)
TCPモジュールはリモートホストからのコネクション終了要求を待っている。
LAST-ACK(最終ACK)
リモートホストに送ったコネクション終了要求について、TCPモジュールがその応答確認を待っている
TIME-WAIT(時間待機)
コネクション終了要求応答確認をリモートホストが確実に受取るのに必要な時間が経過するまで、TCPモジュールは待機している
CLOSED(閉鎖)
コネクションは全く存在せず、確立段階にも入っていない
TCPの状態遷移図
アクティブオープンの場合
- CLOSED : SYNを送信し、SYN-SENTへ遷移
- SYN-SENT : SYN-ACKを受信。応答確認のACKを送信し、ESTABLISHEDへ遷移
- ESTABLISHED : コネクション確立完了
パッシブオープンの場合
- CLOSED : LISTENへ遷移
- LISTEN : リモートホストから接続確立要求を受け取り、SYN-RECEIVEDへ遷移
- SYN-RECEIVED : 対応する同期(SYN/ACK)セグメントを送信、コネクション確立要求(ACK)を待つ。ACKを受信したらESTABLISHEDへ遷移
- ESTABLISHED : コネクション確立完了
アクティブクローズの場合
パターン1
- ESTABLISHED : FINを送信し、FIN-WAIT1に遷移
- FIN-WAIT1 : 送信したFINのACKを受信し、FIN-WAIT2へ遷移
- FIN-WAIT2 : リモートホストからFINを受信し、ACKを送信。TIME-WAITに遷移
- TIME_WAIT : コネクション終了要求応答確認(送信したACK)がリモートホストが確実に受取るのを待つ。待機時間が終了したらCLOSEDに遷移。
- CLOSED : コネクション閉鎖完了
パターン2
- ESTABLISHED : FINを送信し、FIN-WAIT1に遷移
- FIN_WAIT1 : FINを送信したが、リモートホストからもFINを受信したので、これに応答確認をする。その後CLOSINGへ遷移
- CLOSING : 送信したFINの応答確認を待つ。応答確認を受信し次第、TIME-WAITに遷移。
- TIME_WAIT : コネクション終了要求応答確認(送信したACK)がリモートホストが確実に受取るのを待つ。待機時間が終了したらCLOSEDに遷移。
- CLOSED : コネクション閉鎖完了
パッシブクローズの場合
- ESTABLISHED : FINを受信し、ACKを送信する。CLOSE-WAITに遷移
- CLOSE-WAIT : FINを送信する。LAST-ACKに遷移
- LAST-ACK : ACKを受信したらCLOSEDに遷移
- CLOSED : コネクション閉鎖完了