3ウェイハンドシェイクとは

すりーうぇいはんどしぇいく

TCPでコネクションを確立する手順。クライアントのSYN、サーバのSYN+ACK、クライアントのACKの3回のやり取りで、互いの初期シーケンス番号を確かめ合う。

「3ウェイハンドシェイク」は、1分野の2問の練習問題に出てきます(ネットワークの基礎など)。

この用語の分野: ネットワークの基礎

3回のやり取りの意味

クライアントはSYNで接続を求め、自分の初期シーケンス番号を伝えます。サーバはSYN+ACKで、その番号を受け取ったことを確認すると同時に、自分の初期シーケンス番号を伝えます。クライアントがACKでそれを確認すると、両方向とも「相手が自分の番号を知っている」ことが確かめられ、データを送れるようになります。番号を確かめ合うことで、ネットワークに残っていた古いパケットによる誤った接続を防ぎます。

接続にかかる時間

データを送り始めるまでに、少なくとも1往復の時間(RTT)がかかります。HTTPSではその後にTLSのハンドシェイクも必要で、TLS 1.3なら合わせて2往復、TLS 1.2なら3往復の後に、ようやくリクエストを送れます。遠いサーバほどRTTが大きいので、接続を使い回す(持続的な接続)、HTTP/3のQUICのようにハンドシェイクをまとめる、といった工夫で往復の回数を減らします。

終了とSYNフラッド

コネクションの終了は、両方向がそれぞれFINとACKで閉じるので、一般に4回のやり取りになります。また、送信元を偽ったSYNを大量に送り、サーバに確立途中の接続をため込ませて資源を使い果たさせる攻撃をSYNフラッドと呼びます。対策として、状態を保持せずに応答できるSYN cookieなどが使われます。

3ウェイハンドシェイクの練習問題に挑戦

TCPでコネクションを確立する3ウェイハンドシェイクで、やり取りされるパケットの順序として正しいものはどれか。

  1. ASYN → ACK → FIN
  2. BACK → SYN → SYN+ACK
  3. CSYN → SYN+ACK → ACK
答えと解説を見る

正解:C. SYN → SYN+ACK → ACK

3ウェイハンドシェイクでは、まずクライアントがSYNで接続を求め、自分が送るデータの最初の番号(初期シーケンス番号)を伝えます。サーバはSYN+ACKで、それを受け取ったことを確認(ACK)すると同時に、自分の初期シーケンス番号を伝えます。最後にクライアントがACKを返すと、両方向の通信の準備が整います。3回のやり取りで両方の向きの番号を確かめ合うことで、遅れて届いた古いパケットによる誤った接続などを防ぎます。このため、TCPではデータを送り始めるまでに少なくとも1往復の時間(RTT)がかかります。FINはコネクションを終了するときに使います。

よくある質問

なぜ2回ではなく3回のやり取りが必要なのですか?

両方向の初期シーケンス番号を、それぞれ相手が受け取ったことを確かめる必要があるためです。2回では、サーバの番号がクライアントに届いたことをサーバが確かめられません。

UDPにも3ウェイハンドシェイクはありますか?

ありません。UDPはコネクションを確立しないので、すぐにデータを送れます。UDPの上で動くQUICは、暗号の鍵の交換と合わせた独自のハンドシェイクを行います。

解説の中の「3ウェイハンドシェイク」

「3ウェイハンドシェイク」が出てくる問題(2問)

  1. TCPでコネクションを確立する3ウェイハンドシェイクで、やり取りされるパケットの順序として正しいものはどれか。
  2. RTT(往復の時間)が100 msのWebサーバに、HTTPS(TCPの上のTLS 1.3)で新しく接続し、最初のリクエストを送って応答を受け取り始めるまでにかかる時間に最も近いものはどれか。DNSの名前解決は済んでおり、サーバの処理時間とデータの転送時間は無視する。

ネットワークの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

TLS DNS HTTP ARP OSI参照モデル CIDR サブネットマスク CSMA/CA DHCP デフォルトゲートウェイ

用語集の一覧へ