3ウェイハンドシェイク:状態が遷移する
TCP は SYN → SYN-ACK → ACK の3ステップで、両端の状態機械を CLOSED から ESTABLISHED まで点灯遷移させます。パケットを落とすとタイムアウトで再送が起きます。
1.2×
0 %
1.8 s
クライアント状態
CLOSED
サーバ状態
LISTEN
セグメント数
0
再送回数
0
SYN → SYN-ACK → ACK ⇒ ESTABLISHED
通信ログ
TCP 状態機械(点灯=現在の状態)
クライアント ⇄ サーバ(パケットアニメ)
TCP は通信を始める前に、両端で「これから話すよ/聞こえてるよ」を確認し合います。これが3ウェイハンドシェイクです。
クライアントが
パケットが失われると、送り手はタイムアウト(RTO)まで待ってから再送します。損失率を上げて、状態が先へ進まず再送が増える様子を観察しましょう。
クライアントが
SYN(接続したい+自分の初期シーケンス番号 x)を送り、サーバが SYN-ACK(了解 ack=x+1+自分の番号 y)を返し、最後にクライアントが ACK(ack=y+1)を返すと、双方が ESTABLISHED になります。パケットが失われると、送り手はタイムアウト(RTO)まで待ってから再送します。損失率を上げて、状態が先へ進まず再送が増える様子を観察しましょう。
いま何が起きている?
「接続開始」を押すと、クライアントが SYN を送って
SYN-SENT に遷移します。ここがポイント
- 3つのセグメントで両端が同期 ── SYN / SYN-ACK / ACK が届くたびに、状態が CLOSED → … → ESTABLISHED へ点灯遷移する。
- 状態は片側ずつ進む ── クライアントとサーバは独立した状態機械で、相手のパケットを受け取って初めて次へ進む。
- 損失=タイムアウト再送 ── パケットが落ちると相手は無反応。送り手は RTO 経過後に同じセグメントを再送する。
- ACK 番号は「次に欲しいバイト」 ── 受け取った
seq=xに対してack=x+1を返し、確かに届いたことを伝える。