初級

3-way handshake (3ウェイハンドシェイク)

3ウェイハンドシェイクは、TCP通信を開始する前に、クライアントとサーバの間でコネクション(仮想的な通信路)を確立するために行われる3段階の確認手順です。これにより、双方が通信可能な状態であることを確実にします。

#ネットワーキング#セキュリティ
公開: 2025年8月29日更新: 2025年9月6日

これから「確実な」通信を始めようというのに、相手の都合も聞かずにいきなり話し始める馬鹿はいない。3ウェイハンドシェイクは、TCP通信における、そのための礼儀作法であり、お互いの生存確認を行う極めて重要な事前手続きだ。

3ウェイハンドシェイクとは

  • 信頼性が求められるTCP通信において、データを送り始める前に、通信相手と「今から通信を始めますよ」「はい、いいですよ」「では、始めます」という3ステップのやり取りを行うこと。
  • この手続きを踏むことで、送信側・受信側双方が、これからデータが送受信されることを認識し、準備を整えることができる。

3つのステップ

このやり取りでは、TCPヘッダの中にある「SYN(シン)」と「ACK(アック)」という制御ビット(フラグ)が重要な役割を果たす。

  1. クライアント → サーバ:SYN
    • クライアントがサーバに対し、「そちらと通信したいのですが、接続よろしいか?」という意味を込めて、SYNフラグをONにしたパケットを送信する。
  2. サーバ → クライアント:SYN/ACK
    • サーバは、クライアントからの要求を受け入れると、「接続OKです。こちらも準備万端ですよ」という意味で、SYNとACKの両方のフラグをONにしたパケットを返信する。
  3. クライアント → サーバ:ACK
    • クライアントは、サーバからの承諾を受け取ると、「了解。では、これからデータを送ります」という意味で、ACKフラグをONにしたパケットを送信する。

この3ステップが完了して初めて「コネクション確立」となり、実際のデータ送受信が開始される。

なぜこれが重要なのか

  • この手続きにより、通信経路上の問題や、相手側のサーバがダウンしていないことを確認できる。もしサーバからSYN/ACKが返ってこなければ、クライアントは「相手は通信できる状態にないな」と判断できる。
  • SYNパケットを大量に送りつけてサーバからのSYN/ACKを誘発し、最後のACKを返さないことで、サーバのリソースを枯渇させる「SYNフラッド攻撃」という古典的なDoS攻撃も存在する。

この一見地味なやり取りが、TCPの信頼性の根幹を支えている。この基本を理解せずして、ネットワークのトラブルシューティングやセキュリティを語ることはできない。