【はんどしぇいく】

ハンドシェイク とは?

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

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

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

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

ひよこ ひよこ

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

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

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

ひよこ ひよこ

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

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

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

ひよこ ひよこ

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

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

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

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ハンドシェイク」って出てきたら「通信を始める前に双方が接続条件を確認し合う手順」と思えればだいたいOK!
📖 おまけ:英語の意味
「handshake」 = 握手
💬 人間同士が握手で信頼を確認するように、コンピュータも通信前に合意を取り交わすことからこう呼ばれる
← 用語集にもどる