大きな画面での利用をおすすめします — アニメーションと操作がより快適になります。
入力

TCP ハンドシェイク

通常の能動・受動オープンは SYN、SYN-ACK、ACK の三セグメントで双方の初期シーケンス番号 ISN を交換・確認する。両端は別々の状態機械で、同時刻に確立するわけではない。

双方向の手紙の番号を確認する例で考えられる。クライアントは 1000 から、サーバーは次に 1001 を期待すると答え、自分は 5000 からと伝える。最後にクライアントが 5001 を期待すると確認し、両方向の提案が受領される。

仕組み

最初はサーバーが LISTEN、クライアントが CLOSED で、今回の接続状態はない。クライアントは ISN=1000、SYN-SENT となり SYN seq=1000 を送る。

受信側は今回の状態を作って SYN-RECEIVED となり、SYN-ACK seq=5000, ack=1001 を返す。SYN は自身の開始、ACK は相手の開始の確認だ。SYN はアプリデータなしでも一番号を消費し、1000 の次は 1001 を期待する。

クライアントは SYN-ACK で自分の SYN が確認されたと知り、ESTABLISHED へ進み、ACK seq=1001, ack=5001 を送る。サーバーは最後の ACK を受け入れて初めて ESTABLISHED になる。その間、片側は確立済みでも他方は確認待ちだ。

ステップ実行

既定は clientIsn=1000、serverIsn=5000。

  1. クライアント CLOSED、サーバー LISTEN。
  2. クライアントは今回の試行の開始 1000 を選ぶ。
  3. 相手がまだ知らない段階で SYN-SENT へ変わる。
  4. SYN seq=1000 を送る。
  5. サーバーへ到着し、まず到着を見せる。
  6. SYN-RECEIVED へ変わり、最終確認を待つ。
  7. SYN の一番号を含め ack=1001 を計算する。
  8. サーバーの ISN=5000 を選ぶ。
  9. SYN-ACK seq=5000, ack=1001 を送る。
  10. クライアントが受け、自分の SYN が確認される。
  11. クライアントは ESTABLISHED、サーバーはまだ待機。
  12. ack=5001 を計算する。
  13. 最後の ACK seq=1001, ack=5001 を送る。
  14. サーバーが受け、受理前は SYN-RECEIVED。
  15. 受理して ESTABLISHED になる。
  16. 本課の確立を終え、アプリデータを運べる。

二つの生命線に CLOSED→SYN-SENT→ESTABLISHED と LISTEN→SYN-RECEIVED→ESTABLISHED を残す。移動カードの flags、seq、ack を読み、配達済みは薄くする。送信場面は記帳より長く見せる。

通常三段になる理由

論理的にはクライアントの SYN 提案、その ACK、サーバーの SYN 提案、その ACK の四仕事だ。中央二つを SYN-ACK に同乗させ、三段で終える。最後の ACK がなければサーバーは自身の SYN の受理を知らず、待機・再送・最終タイムアウトを行う。両端完了とは言えない。

通常のデータなし握手の説明であり、全拡張や同時オープンが同じ三段とは限らない。

境界ケース

Lost SYN-ACK は第 9 の返信を落とす。クライアントは SYN-SENT のまま期限を迎え、同じ SYN seq=1000 を再送し、ISN を選び直さない。

本課のサーバーは SYN-RECEIVED で同試行の重複と認識し、新しい会話を作らず seq=5000, ack=1001 を再送する。今度は届き、10–16 と同じく終える。一回の喪失は時間を増やすが、継続喪失なら失敗し得て、必ず接続できる保証ではない。

接続識別には双方のアドレスとポートも必要で、同じ ISN だけで同一とはしない。ISN を変えても同じ端点組に必ず二つ目の接続が割り当てられるわけではない。

よくある間違い

  • ACK を受けた直前の番号と読む。次に期待する番号で、ここは 1001 と 5001。
  • SYN の一番号消費を忘れる。
  • 両端が同時に ESTABLISHED になると思う。クライアントが先で、半開きの資源保持は SYN flood のような問題にも関係する。
  • 同じ試行の再送を新しい交渉とする。端点組と今回のシーケンス状態で扱う。
  • ISN が常に丸い数と思う。1000 と 5000 は説明用で、実スタックは予測困難性のある選択と旧接続の番号空間を扱う規則で干渉を減らす。

モデルの範囲

TCP オプション、受信窓、SYN cookies、同時オープン、早期データ拡張、RTT に基づく実タイマーは省く。通常の状態経路と番号規則を示し、時間は簡略化する。