【はんどしぇいく】

ハンドシェイク とは?

💡 通信の始まりは、まず握手から
📌 このページのポイント
TCP 3ウェイハンドシェイク クライアント サーバー SYN 1 SYN + ACK 2 ACK 3 接続確立
TCP 3ウェイハンドシェイク
ひよこ ひよこ

ハンドシェイクって、コンピュータが握手するの?

ペンギン先生 ペンギン先生

比喩だけど、やってることは本当に似てるよ。通信を始める前に『こんにちは、つながってもいい?』『いいよ、準備できたよ』『じゃあ始めよう!』ってお互いに確認し合うんだ。これがTCPの3ウェイハンドシェイクだね。

ひよこ ひよこ

いきなりデータを送っちゃダメなの?

ペンギン先生 ペンギン先生

ダメではないけど、相手が受け取れる状態かわからないよね。手紙を送るのと電話するのの違いに近くて、電話なら『もしもし』『はい』って確認してから話し始めるでしょ?ハンドシェイクがないと、相手が落ちてるのにデータを送り続ける無駄が発生しちゃうんだ。

ひよこ ひよこ

TLSのハンドシェイクはまた別物なの?

ペンギン先生 ペンギン先生

TCPで接続を確立した後に、さらにTLSハンドシェイクで暗号化の準備をするんだ。『どの暗号方式を使う?』『この証明書で本人確認してね』『暗号鍵を共有しよう』っていうやりとりをしてから、やっと暗号化通信が始まる。HTTPSのサイトにアクセスするとき、裏では毎回このハンドシェイクが行われているよ。

ひよこ ひよこ

毎回やるのって遅くならないの?

ペンギン先生 ペンギン先生

いいところに気づいたね。実際、ハンドシェイクの往復分だけ遅延が増える。だからTLS 1.3では往復回数を減らして高速化してるし、一度つないだ相手との再接続を速くするセッション再開という仕組みもあるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
ハンドシェイクは通信を開始する前に、双方が条件を確認し合うプロセスTCPの3ウェイハンドシェイクで接続を確立し、HTTPSではさらにTLSハンドシェイクで暗号化の設定を行う。信頼性セキュリティを確保するために不可欠な手順だが、往復回数が増えるほどレイテンシに影響するため、HTTP/2TLS 1.3では高速化が進んでいる。
📖 おまけ:英語の意味
「handshake」 = 握手
💬 人間同士が握手で信頼を確認するように、コンピュータも通信前に合意を取り交わすことからこう呼ばれる
← 用語集にもどる