3ウェイ・ハンドシェイクとは?ゆるーくわかりやすく解説


はるか
3ウェイ・ハンドシェイクって、知ってる?

ふゅか
もちろん!デバイス同士が通信を始めるときに使う手順のことよね!TCP通信で使われるよね?

はるか
そう。通信の信頼性を確保するための方法。
目次
1. 3ウェイ・ハンドシェイクの要点
3ウェイ・ハンドシェイクとは・・・
- 接続を確立する手段
- SYN、SYN-ACK、ACKのステップに分かれる。
2. 3ウェイ・ハンドシェイクとは?
3ウェイ・ハンドシェイク(Three-Way Handshake)は、デバイス同士が通信を始める際に、接続を確立するための手順のことです。主にインターネット通信で使用されるプロトコルであるTCP(Transmission Control Protocol)で利用されます。データの送受信を行う前に、信頼性の高い通信を実現するための仕組みです。
3. 3ウェイ・ハンドシェイクの手順
3ウェイ・ハンドシェイクは以下の3つのステップで構成されています。
- SYN:送信側が接続要求を送る。
- SYN-ACK:受信側が要求を受け入れたことを送信側に伝える。
- ACK:送信側が応答を確認し、通信を開始する。
3.1. クライアントからサーバーへのリクエスト(SYN)
通信を始めたいクライアント(データを送りたい側)がサーバー(データを受け取る側)に対して、「通信を始めてもよいか」というリクエストを送ります。このリクエストは「SYN(synchronize)」フラグが設定されたパケットで行われます。
例:
クライアント:「これから通信を開始したい。準備はいいですか?」(SYN)
3.2. サーバーからクライアントへの応答(SYN/ACK)
サーバーはクライアントからのSYNを受け取ると、通信の準備ができたことを示す応答を返します。この応答には以下の2つが含まれます:
- クライアントからのリクエストに対する承認(ACK)
- サーバー自身も通信を開始したいというリクエスト(SYN)
例:
サーバー:「了解しました。こちらも通信の準備ができました。」(SYN/ACK)
3.3. クライアントからサーバーへの最終確認(ACK)
クライアントはサーバーからの応答を受け取り、最後に通信の準備が完了したことをサーバーに知らせます。この応答は「ACK」フラグが設定されたパケットで行われます。
例:
クライアント:「了解しました。通信を始めましょう!」(ACK)
4. 3ウェイ・ハンドシェイクの図解
以下のような流れをイメージしてください:
- クライアント → サーバー:SYN(通信開始リクエスト)
- サーバー → クライアント:SYN/ACK(リクエスト承認と通信開始リクエスト)
- クライアント → サーバー:ACK(最終確認)
5. なぜ3ステップが必要なのか?
通信の信頼性を確保するためです。
- データの到達確認:送信元と受信先が互いに通信の準備が整っていることを確認します。
- エラー防止:ネットワーク上の障害や遅延による誤った接続を防ぎます。
例えば、SYNやACKが途中で紛失してしまった場合でも、タイムアウトの仕組みで再送されるため、安全な通信が可能になります。
PR