アルアカ - Arcadia Academia

Arcadia Academiaは「エンジニアリングを楽しむ」を合言葉に日本のデジタル競争力を高めることをミッションとするテックコミュニティです。

ハンドシェイクとは?TCP・TLSの仕組みを図解でわかりやすく解説【初心者向け】

Featured image of the post

「ハンドシェイクとは?」——一言で言うと、通信を始める前に、相手と「これから通信しますよ」「この方式でいきましょう」と取り決める“あいさつ”の手続きのことです。人間同士の握手(handshake)が語源です。

よく耳にするのは、TCPの3ウェイハンドシェイク(接続を確立する)と、HTTPSで使われるTLS/SSLハンドシェイク(暗号化通信を確立する)の2つです。この記事では、それぞれの仕組みをシーケンス図で、初心者にもわかるように解説します。

🤝
ハンドシェイクとは(30秒で要点)
通信を始める前に、送り手と受け手が接続の可否や通信条件を確認・合意する手続き。代表は、接続を確立する「TCPの3ウェイハンドシェイク」と、暗号化を確立する「TLSハンドシェイク」。どちらも“本番の通信の前の下準備”と覚えると分かりやすいです。

[目次を開く]

ハンドシェイクとは?

ハンドシェイク(handshake)とは、通信を行う二者が、実際にデータをやりとりするに、接続の可否や通信の条件(速度・暗号方式など)を確認して合意する手続きのことです。

人間でも、初対面の相手といきなり本題に入らず、まず握手して「こんにちは」とお互いを確認します。ネットワークも同じで、いきなりデータを送るのではなく、「これから通信していいですか?」「どのルールで通信しますか?」を先にすり合わせることで、確実で安全な通信を成り立たせています。

代表的な2つのハンドシェイク

「ハンドシェイク」と言っても場面で意味が少し違います。まずは代表的な2つを押さえましょう。

種類 目的 使われる場面
TCP 3ウェイハンドシェイク 通信の接続を確立する Web・メールなどTCP通信全般の最初
TLS/SSLハンドシェイク 通信を暗号化し安全にする HTTPS(鍵マークのつくWebサイト)

実際のHTTPS通信では、まずTCPの3ウェイハンドシェイクで接続を確立し、その上でTLSハンドシェイクを行って暗号化します。つまり2つは順番に行われます。

TCPの3ウェイハンドシェイク(接続の確立)

TCPでは、データを送る前に3回のやりとりで接続を確立します。これが「3ウェイ(3-way)ハンドシェイク」です。

sequenceDiagram
    participant C as クライアント
    participant S as サーバー
    C->>S: ① SYN(接続したい)
    S->>C: ② SYN-ACK(OK、こちらも接続したい)
    C->>S: ③ ACK(了解、接続確定)
    Note over C,S: 接続確立→データ通信を開始
  • ① SYN: クライアントが「接続したい」とリクエスト(SYN = synchronize)。
  • ② SYN-ACK: サーバーが「いいですよ」と承諾しつつ、自分からも接続要求を返す。
  • ③ ACK: クライアントが「確認しました」と応答(ACK = acknowledge)。

この3回の往復でお互いに「送れる・受け取れる」状態を確認できるため、信頼性の高い通信が始められます。

🔎
TCPの3ウェイハンドシェイクをもっと詳しく知りたい方は、専門記事「3ハンドシェイクとは?〜ネットワーク通信の基本を理解しよう〜」もあわせてどうぞ。

TLS/SSLハンドシェイク(暗号化通信の確立)

TCPで接続ができただけでは、通信内容は中身丸見えのままです。そこでHTTPSでは、接続後にTLS(旧名 SSL)ハンドシェイクを行い、通信を暗号化するための鍵を安全に共有します。

sequenceDiagram
    participant C as クライアント
    participant S as サーバー
    C->>S: ClientHello(対応する暗号方式を提示)
    S->>C: ServerHello(暗号方式を決定)
    S->>C: サーバー証明書(身元を提示)
    C->>S: 鍵情報を安全に交換
    C->>S: Finished(以降は暗号化)
    S->>C: Finished
    Note over C,S: 暗号化された安全な通信を確立
  • ClientHello / ServerHello: 使える暗号方式(サイファスイート)を提示し合い、両者で使う方式を決めます。
  • サーバー証明書: 「本物のサーバーか」を認証局(CA)発行の証明書で確かめます(なりすまし防止)。
  • 鍵交換→Finished: 盗み見されても安全な方法で共通鍵を共有し、以降の通信を暗号化します。
上は分かりやすさ重視の簡略版です。最新のTLS 1.3ではやりとりがさらに短縮され(1-RTT)、接続がより高速になっています。

その他のハンドシェイク

TCP・TLS以外にも、接続の確立時にハンドシェイクは登場します。

  • SSHハンドシェイク: リモート接続(SSH)で、バージョン確認・鍵交換・認証を行う。
  • WebSocketのハンドシェイク: HTTPからWebSocketへ接続を「アップグレード」する際の取り決め。

いずれも「本番のやりとりの前に、条件をすり合わせる」という点で共通しています。

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

  • 信頼性: 相手が応答できる状態かを確かめてから通信するので、データの取りこぼしが起きにくい。
  • セキュリティ: TLSハンドシェイクにより、盗聴・改ざん・なりすましを防ぐ。
  • 互換性: 使える通信方式を事前にすり合わせるので、異なる環境同士でも通信できる。

まとめ

ハンドシェイクは、通信を始める前の“あいさつ・取り決め”です。要点を振り返ります。

  • TCP 3ウェイハンドシェイク:SYN→SYN-ACK→ACK の3回で接続を確立
  • TLSハンドシェイク:暗号方式の合意・証明書確認・鍵交換で通信を暗号化
  • HTTPSではこの2つが順番に行われている

普段何気なく開いているWebページの裏でも、この“握手”が瞬時に行われています。

よくある質問(FAQ)

質問をみる

Q: 「ハンドシェイク」と「3ウェイハンドシェイク」は何が違う?

A: 「ハンドシェイク」は接続前の取り決め全般を指す広い言葉です。「3ウェイハンドシェイク」はそのうち、TCPが接続を確立する際の3回の往復を指す具体的な手順です。


Q: TLSハンドシェイクは毎回行われる?

A: 基本は接続のたびに行われますが、セッション再開(session resumption)などの仕組みで、2回目以降のハンドシェイクを省略・短縮できます。TLS 1.3ではさらに高速化されています。


Q: ハンドシェイクが失敗するとどうなる?

A: 接続が確立できず、通信は始まりません。TCPではタイムアウトや再送、TLSでは証明書エラー(期限切れ・不一致など)で失敗することがあります。


Q: SSLとTLSは同じ?

A: SSLはTLSの前身で、現在はすべてTLSに移行しています。慣用的に「SSL」と呼ばれることが多いですが、実体はTLSです。

関連記事

https://ar-aca.tech/posts/what-is-3-handshake/

プログラミング学習でつまずいていませんか?

独学で挫折しそうな方も、プロのメンターがしっかりサポートします。

  • プログラミング学習の進め方がわからない
  • 独学で行き詰まった時の質問相手がほしい
  • 何から始めればいいかわからない
まずは30分の無料相談

相談は完全無料・オンラインで気軽に

あなたを爆速で成長させるメンタリングプログラムはこちら

メンタープログラムバナー

学習・開発のお悩みは現役エンジニアに相談

メンタープログラムの詳細を見る

エンジニアの基礎学習ゲーム

プログラミング学習支援

無料相談はこちら