スリーウェイハンドシェイク (スリーウェイハンドシェイク) とは | 意味や読み方など丁寧でわかりやすい用語解説
スリーウェイハンドシェイク (スリーウェイハンドシェイク) の読み方
日本語表記
スリーウェイハンドシェイク (スリーウェイハンドシェイク)
英語表記
Three-Way Handshake (スリーウェイ・ハンドシェイク)
スリーウェイハンドシェイク (スリーウェイハンドシェイク) の意味や用語解説
スリーウェイハンドシェイクは、TCP/IPプロトコルを用いた通信において、実際にデータの送受信を開始する前に、通信相手との間で仮想的な通信路であるコネクションを確立するために行われる一連の手順である。この手順は、通信の信頼性を確保する上で極めて重要な役割を担っている。名前が示す通り、3回のパケット交換によって行われるため「スリーウェイ」と呼ばれ、通信開始の合意形成を握手になぞらえて「ハンドシェイク」と表現される。この手続きを通じて、クライアントとサーバーは互いに通信の準備が整っていることを確認し合い、データの順序を管理するために必要な初期情報であるシーケンス番号を交換する。これにより、その後のデータ通信が確実かつ順序正しく行われることが保証される。TCPは信頼性の高い通信を実現するプロトコルであり、このスリーウェイハンドシェイクはその信頼性を担保するための最初のステップとして機能する。 具体的なプロセスは3つのステップで構成される。最初のステップは、通信を開始したい側、すなわちクライアントからサーバーへの接続要求である。クライアントは、TCPヘッダに含まれる制御フラグのうち、「SYN(Synchronize)」フラグを有効(1にセット)にしたパケットをサーバーに送信する。このSYNフラグは、これから通信を開始したいという意思表示を示す信号の役割を持つ。同時に、クライアントは通信データの順序を管理するための初期値である「シーケンス番号」をランダムに生成し、このパケットに含めて送る。シーケンス番号は、送信するデータが何バイト目から始まるかを示すものであり、通信の信頼性を支える根幹となる情報である。この最初のパケットは一般的に「SYNパケット」と呼ばれる。この時点で、クライアントのコネクション状態は「SYN-SENT」となり、サーバーからの応答を待つ状態に移行する。 第2のステップは、サーバーからクライアントへの応答である。SYNパケットを受け取ったサーバーは、クライアントからの接続要求を許可する場合、応答パケットを返信する。このパケットには2つの重要な情報が含まれる。まず、サーバー自身も通信の準備ができたことを示すために、「SYN」フラグを有効にする。次に、クライアントからのSYNパケットを正しく受信したことを伝えるために、「ACK(Acknowledgement)」フラグも有効にする。このACKフラグは、相手からのデータを受け取ったことを確認したという応答信号である。さらに、サーバーも自身のシーケンス番号を生成してパケットに含める。そして、クライアントから受信したシーケンス番号に1を加えた値を「確認応答番号」として設定する。この確認応答番号は、「あなたが送信したシーケンス番号のパケットは正常に受信しました。次に私が受信したいのは、その次のデータです」というメッセージを意味する。このSYNとACKの両方が有効になったパケットは「SYN/ACKパケット」と呼ばれ、サーバーはこのパケットを送信後、コネクション状態を「SYN-RECEIVED」としてクライアントからの最終確認を待つ。 最後の第3ステップは、クライアントからサーバーへの最終確認である。サーバーからのSYN/ACKパケットを受け取ったクライアントは、サーバーが通信を許可したことを確認する。そして、接続確立の最終的な手続きとして、応答パケットをサーバーに送信する。このパケットでは、「ACK」フラグを有効にし、サーバーから受信したシーケンス番号に1を加えた値を確認応答番号として設定して送信する。これは、「あなたのSYN/ACKパケットを確かに受け取りました。これで接続準備は完了です」という最後の意思表示となる。このACKパケットがサーバーに到達した時点で、クライアントとサーバーの双方でコネクションが完全に確立された状態(ESTABLISHED状態)となり、アプリケーション層でのデータ送受信が開始される。この3段階の手順を経ることで、双方が確実に通信可能であることを相互に確認し、安全で信頼性の高い通信路を確立するのである。 スリーウェイハンドシェイクで交換されるシーケンス番号と確認応答番号は、TCPの信頼性を担保する上で不可欠な要素である。TCPはデータをパケットという単位に分割して送信するが、ネットワークの経路上でパケットの順序が入れ替わったり、パケットが消失したりすることがある。シーケンス番号は各パケットに振られる通し番号のような役割を果たし、受信側はこれを見てデータを正しい順序に並べ替えることができる。また、確認応答番号によって、どこまでのデータを正しく受信したかを送信側に伝えることができるため、万が一パケットが消失した場合には、送信側がそのパケットを再送することが可能となる。スリーウェイハンドシェイクは、このシーケンス番号の初期値を双方で同期させるための重要なプロセスでもある。このように、単に通信開始の合図を送るだけでなく、信頼性のある通信の土台を築くための緻密な仕組みがスリーウェイハンドシェイクには組み込まれている。システムエンジニアは、ネットワークトラブルのシューティングを行う際、パケットキャプチャツールなどでこの3回のやり取りを直接確認することが多く、通信が正常に開始できない問題の原因を特定する上で、このプロセスの理解は必須の知識となる。