ハンドシェイクとは?通信を始める“握手”の仕組みをTCP・TLSでわかりやすく解説

結論/要点まとめ

  • ハンドシェイクとは、通信を始める前に機器同士が「これから通信しますよ」と確認し合う事前の挨拶(握手)のこと。
  • もっとも代表的なのがTCPの3ウェイハンドシェイクで、SYN → SYN/ACK → ACKの3回のやり取りでコネクションを確立する。
  • HTTPS通信では、TCPの握手のあとにTLSハンドシェイクが続き、暗号化の準備を整える。両者は別の段階の握手で役割が異なる。
  • この握手の仕組みを悪用したのがSYNフラッド攻撃で、半端な握手を大量に送りつけてサーバーを機能不全にする。

Webサイトを開いたりファイルを送ったりするとき、機器はいきなりデータを送り始めるわけではありません。まず「相手はちゃんと聞ける状態か」を確かめる短いやり取りを行います。これがハンドシェイクです。この記事では、日常の握手のイメージから始めて、TCPの3ウェイハンドシェイク、TLSハンドシェイク、そしてセキュリティとの関わりまでを、図解を交えてわかりやすく解説します。

ハンドシェイクとは?「通信を始める前の握手」

一言でいうと:通信の準備を整える事前確認

ハンドシェイク(handshake)とは、2つの機器が本格的なデータ通信を始める前に、通信できる状態かどうかを確認し、通信の条件をすり合わせるためのやり取りを指します。日本語では「握手」と直訳されます。

人が初対面であいさつと握手を交わしてから会話を始めるように、コンピュータも「これから通信します」「了解、準備できています」といった合図を交換してから、本番のデータをやり取りします。

ここがポイント

ハンドシェイクはデータ本体を送る前の準備段階です。ここで相手の応答や通信条件を確認しておくことで、その後の通信を確実かつ効率的に進められます。

なぜ「握手」と呼ばれるのか

人間の握手は「敵意はありません」「あなたを認識しました」という合意の合図です。ネットワークのハンドシェイクも同じで、お互いの存在を確認し、通信のルールに合意する行為です。この振る舞いが握手に似ているため、この名前が使われています。

なぜハンドシェイクが必要なのか

相手が応答できる状態か確認する

通信相手のサーバーが停止していたり、混雑していたりすると、データを送っても受け取ってもらえません。ハンドシェイクで先に「応答できるか」を確認しておけば、無駄なデータ送信を避けられます。

通信条件(パラメータ)をすり合わせる

通信を始めるには、データの順番を管理する番号や、一度に送れるデータ量、暗号化の方式など、いくつかの取り決めが必要です。ハンドシェイクの段階でこれらを交換し合意しておくことで、双方が同じルールで通信できるようになります。

  • 相手が起動していて応答できるかを確認する
  • 通信の開始番号(シーケンス番号)を共有する
  • 一度に送受信できるデータ量などの条件を決める
  • (暗号化通信の場合)暗号方式や鍵を決める

TCPの3ウェイハンドシェイク(最も基本的な握手)

「ハンドシェイク」という言葉で真っ先に挙げられるのが、TCPの3ウェイハンドシェイクです。TCPは信頼性の高い通信を担うプロトコルで、通信を始める前に必ずこの3回の握手でコネクション(論理的な通信路)を確立します。

SYN → SYN/ACK → ACK の3ステップ

クライアント(例:ブラウザ)とサーバーは、次の3つのパケットを順番にやり取りします。

1

SYN(接続要求)

クライアント → サーバー。「通信を始めたい」という要求を送る。

2

SYN/ACK(要求の受理+接続要求)

サーバー → クライアント。「了解、こちらも準備できた」と応答する。

3

ACK(受理の確認)

クライアント → サーバー。「確認した、通信を始めよう」と応じる。

この3回のやり取りが完了すると、コネクションが確立され、ここから実際のデータ通信が始まります。3回で完結するため「3ウェイ(three-way)ハンドシェイク」と呼ばれます。

各ステップの役割(表)

順番 送信方向 フラグ 意味
1 クライアント → サーバー SYN 通信を開始したいという要求
2 サーバー → クライアント SYN + ACK 要求を受理し、自分側の接続も要求
3 クライアント → サーバー ACK 受理を確認しコネクション確立

SYNは「Synchronize(同期)」、ACKは「Acknowledge(確認応答)」の略です。

シーケンス番号とは

3ウェイハンドシェイクでは、単に握手するだけでなく、シーケンス番号(順序番号)という値も交換します。これは送るデータの順番を管理するための番号で、通信の途中でデータが欠けたり順序が入れ替わったりしても、正しく組み立て直せるようにするためのものです。ハンドシェイクの段階で開始番号を双方で共有しておくことで、以降の通信の信頼性が保たれます。

通信終了時の4ウェイハンドシェイク

通信を始めるときが3ウェイなのに対し、通信を終えるときは4回のやり取り(4ウェイハンドシェイク)を行います。終了は双方向で行う必要があり、FINとACKを互いにやり取りしてコネクションを閉じます。開始時と終了時で回数が異なる点は、試験でもよく問われるポイントです。

TLS/SSLハンドシェイク(暗号化のための握手)

HTTPS通信(鍵マークの付いた安全な通信)では、TCPの3ウェイハンドシェイクだけでは終わりません。その後にTLSハンドシェイクという別の握手が続き、通信を暗号化するための準備を行います。TLSは、以前SSLと呼ばれていた仕組みの後継で、現在の主流です。

TLSハンドシェイクで決めること

TLSハンドシェイクでは、主に次のようなことを取り決めます。

  • どの暗号方式(暗号スイート)を使うか
  • 通信相手が本物かを確認するためのサーバー証明書の検証
  • 実際の暗号化に使う共通鍵を安全に共有すること

大まかな流れ

クライアントが対応可能な暗号方式を提示し、サーバーが方式を選んで証明書を提示、双方で鍵を共有してから暗号化通信に切り替わる、という流れです。この握手が完了して初めて、盗聴されても内容がわからない安全な通信が始まります。

つまり

HTTPSでは、TCPの握手(土台の接続)TLSの握手(暗号化の準備)という2段階の握手を経てから、実際のWebページのデータがやり取りされます。

TCPハンドシェイクとTLSハンドシェイクの違い(比較表)

2つのハンドシェイクは混同されがちですが、目的も担当する層も異なります。違いを整理しておきましょう。

項目 TCP 3ウェイハンドシェイク TLSハンドシェイク
目的 通信路(コネクション)の確立 通信内容の暗号化の準備
主なやり取り SYN・ACK 暗号方式の合意・証明書検証・鍵共有
実行の順番 先(土台) 後(TCPの上)
担当する層 トランスポート層 トランスポート層とアプリ層の間
暗号化 しない する

TCPハンドシェイクは「回線をつなぐ」、TLSハンドシェイクは「その回線で安全に話す準備をする」とイメージすると分かりやすいです。

ハンドシェイクとセキュリティ:SYNフラッド攻撃

ハンドシェイクの仕組みは、悪用されることもあります。代表例がSYNフラッド攻撃で、3ウェイハンドシェイクの性質を突いたサービス妨害(DoS)攻撃の一種です。

攻撃の仕組み

攻撃者は大量のSYN(接続要求)だけをサーバーに送りつけ、サーバーがSYN/ACKで応答したあとに続くはずのACKをわざと返しません。サーバーは「まだ握手が完了していない接続」を保持したまま待ち続け、これが大量に積み重なると、正規の利用者の接続を受け付けられなくなります。

主な対策

  • SYN Cookieを用いて、握手完了まで接続情報を保持しない仕組みにする
  • ファイアウォールやIPS/IDSで異常なSYNの流入を検知・遮断する
  • 接続待ちの上限やタイムアウトを適切に設定する

その他のハンドシェイク

ハンドシェイクはTCP/TLS以外の場面でも登場する、汎用的な概念です。

Wi-Fi(無線LAN)の接続時

無線LANでアクセスポイントに接続する際にも、暗号化のための鍵を交換するハンドシェイクが行われます。WPA2で使われる4ウェイハンドシェイクなどが代表例で、正しいパスワードを持つ端末だけが接続できるよう認証と鍵共有を行います。

モデム・シリアル通信での利用

機器同士の速度や送受信のタイミングを合わせる制御も、広い意味でハンドシェイクと呼ばれます。送る側と受け取る側のペースを合わせ、データの取りこぼしを防ぐ役割を持ちます。フロー制御と呼ばれる仕組みの一部です。

TCPの状態遷移(ハンドシェイク中に何が起きているか)

3ウェイハンドシェイクの間、TCPは内部で状態(ステート)を少しずつ変化させています。この状態遷移は基本情報技術者試験やネットワークスペシャリスト試験でも問われるポイントです。主な状態を握手の流れに沿って見てみましょう。

状態 どちら側 意味
LISTEN サーバー 接続要求を待ち受けている状態
SYN-SENT クライアント SYNを送り、応答を待っている状態
SYN-RECEIVED サーバー SYNを受け取りSYN/ACKを返した状態
ESTABLISHED 双方 握手が完了しデータ通信できる状態
TIME-WAIT 切断側 終了処理後、遅延パケットに備えて一定時間待つ状態

最終的に双方がESTABLISHEDになった瞬間から、実際のデータ通信が始まります。

ハンドシェイクと通信速度の関係

ハンドシェイクは通信の信頼性を支える一方で、やり取りの回数が増えるほど通信開始までに時間がかかります。表示速度を気にするWeb運用では、この「握手のコスト」を知っておくと役立ちます。

RTT(往復遅延)とは

RTT(Round Trip Time)とは、データを送ってから応答が返ってくるまでの往復時間のことです。3ウェイハンドシェイクは1往復(1 RTT)、その後のTLSハンドシェイクはさらに往復が必要になるため、遠いサーバーほど通信開始が遅くなります。

ハンドシェイクを速くする技術

この遅延を減らすため、握手を簡略化・統合する技術が登場しています。

技術 対象 効果
TLS 1.3 TLSハンドシェイク 1往復で完了。再接続時は0往復(0-RTT)も可能
TCP Fast Open TCPハンドシェイク 2回目以降の接続でデータ送信を前倒しできる
QUIC(HTTP/3) TCP+TLSを統合 接続確立と暗号化の握手をまとめ、大幅に高速化

QUICはUDPを土台にしつつ、信頼性と暗号化を独自に実現する新しい仕組みで、HTTP/3で採用されています。

ハンドシェイクを実際に確認する方法

ハンドシェイクは目に見えませんが、ツールを使えば実際のやり取りを観察できます。学習や動作確認に役立つ代表的な方法を紹介します。

curlで通信の流れを見る

コマンド一つで、接続からTLS握手、証明書の情報までを段階的に表示できます。

curl -v https://example.com

出力の中に、TCP接続の確立やTLSハンドシェイク(使用された暗号方式・証明書)に関する行が表示されます。

Wiresharkでパケットを観察する

パケットキャプチャツールのWiresharkを使うと、SYN・SYN/ACK・ACKの3つのパケットを実際に目で確認できます。次のような表示フィルタを使うと、握手だけを抽出できます。

tcp.flags.syn == 1

SYNフラグの立ったパケットだけを絞り込めるため、3ウェイハンドシェイクの開始を見つけやすくなります。

用語・略語の早見表

ハンドシェイク周辺でよく登場する略語をまとめました。意味を押さえておくと、他の記事や試験問題を読むときにも役立ちます。

略語 正式名称 意味
SYN Synchronize 接続開始の同期要求
ACK Acknowledge 受信したことの確認応答
FIN Finish 接続終了の要求
TCP Transmission Control Protocol 信頼性の高い通信を担うプロトコル
TLS Transport Layer Security 通信を暗号化する仕組み(SSLの後継)
RTT Round Trip Time データ往復にかかる時間

よくある質問(FAQ)

ハンドシェイクとコネクションの違いは何ですか?

ハンドシェイクは通信を始めるための「やり取り(手順)」を指し、コネクションはその結果として確立される「論理的な通信路」を指します。3ウェイハンドシェイクという手順を経て、コネクションが確立される、という関係です。

なぜ握手は3回なのですか?2回では足りませんか?

双方が「相手にデータが届き、相手も準備できている」ことを互いに確認するには3回のやり取りが必要です。2回だと、要求を出した側は相手の準備を確認できても、応答した側は自分の応答が相手に届いたかを確認できません。3回目のACKで、双方向の到達確認が完成します。

SSLハンドシェイクとTLSハンドシェイクは同じものですか?

ほぼ同じ役割を指します。SSLはTLSの前身にあたる古い規格で、現在は安全性の理由から使われず、TLSが主流です。慣習的に「SSL」と呼ばれることが多いですが、実際に動いているのはTLSであるケースがほとんどです。

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

UDPは高速性を優先するプロトコルで、TCPのような事前のハンドシェイクは行いません。コネクションを確立せずにデータを送るため、信頼性より速度が求められる動画配信やオンラインゲームなどで使われます。

まとめ

ハンドシェイクは、通信を始める前に機器同士が交わす「握手(事前の挨拶)」であり、通信を確実に進めるための土台となる仕組みです。最後に要点を振り返ります。

  • ハンドシェイクは、本格的な通信の前に応答確認と条件のすり合わせを行うやり取り。
  • TCPの3ウェイハンドシェイクはSYN → SYN/ACK → ACKでコネクションを確立する。
  • HTTPSではTCPの握手のあとにTLSハンドシェイクが続き、暗号化の準備を整える。
  • この仕組みを悪用したのがSYNフラッド攻撃で、対策も含めて理解しておきたい。

「握手してから話し始める」というシンプルなイメージを押さえておけば、TCPからTLS、Wi-Fiまで、さまざまな場面のハンドシェイクを同じ考え方で理解できます。