8.7 TCP

8.7.2 The TCP communication end-point - a finite state machine

サーバ側。

  1. プロセス自身がlisten() 関数を呼ぶことによってLISTEN 状態になる。
  2. SYN を含むセグメントが受信され、SYN/ACK を含むものが送信側に返される。このプロセスは、通信相手からの最後のACK のために待っている。
  3. ACK が受信され、接続が確立された。

クライアント側。

  1. クライアントはconnect() 関数を使いサーバへ接続し始める。これは相手の通信の終端へFIN を送る。
  2. ACK が受信されたがFIN はない。ここで再び、他の位置さらにデータが到着する可能性がある。
  3. FIN/ACK が受信された。しかし、ネットワーク内にまだ残っているセグメントが正しく処理されることを保証するため、指定の間隔で待機する。もしFIN/ACK がFIN_WAIT1 状態の間で受信されたなら、FIN_WAIT2 はスキップされる。
  4. 接続はたった今終了した。これに関連するすべての情報は削除される。この通信の終端は再利用できる。
  5. リモートステーションからFIN を受信している。バッファされたデータを送り、プログラムに接続の解放の開始を報告する。
  6. プログラムが接続の解放を知らされた。FIN が送信される。このFIN を認識している相手からのACK を待つ。
  7. 他方の通信の終端は、ACK を通じて、すでに通信が解放されていることを知らせる。この終端に対し新しい接続を開始できる。