「ハンドシェイクとは?」——一言で言うと、通信を始める前に、相手と「これから通信しますよ」「この方式でいきましょう」と取り決める“あいさつ”の手続きのことです。人間同士の握手(handshake)が語源です。
よく耳にするのは、TCPの3ウェイハンドシェイク(接続を確立する)と、HTTPSで使われるTLS/SSLハンドシェイク(暗号化通信を確立する)の2つです。この記事では、それぞれの仕組みをシーケンス図で、初心者にもわかるように解説します。
通信を始める前に、送り手と受け手が接続の可否や通信条件を確認・合意する手続き。代表は、接続を確立する「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回の往復でお互いに「送れる・受け取れる」状態を確認できるため、信頼性の高い通信が始められます。
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: 盗み見されても安全な方法で共通鍵を共有し、以降の通信を暗号化します。
その他のハンドシェイク
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です。
