Tech Bytes

短くて分かりやすい技術情報を記事として共有します。みなさんにとって学びになれば幸いです。

ネットワークにおける3ウェイハンドシェイクとは

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

3ウェイハンドシェイクは、主にコンピュータネットワーキングやセキュリティのコンテキストで使用される用語です。
一般的には、ネットワークデバイス間での通信の確立や認証の手順を指します。

通常のハンドシェイクは、2つのエンティティ(通信相手)がお互いに通信する前に相互に確認し合う手順です。
しかし、3ウェイハンドシェイクでは、通信の確立に3つのステップが必要です。

要求 (SYN):
通信を確立したいデバイスが相手に通信を始める意思を示すSYN(同期)パケットを送信します。

確認 (SYN/ACK):
相手のデバイスがSYNを受け取り、通信を受け入れる意志がある場合、SYN/ACK(同期/確認)パケットを返します。

完了 (ACK):
最後に、最初のデバイスが相手の確認を受け取り、通信が確立されたことを示すACK(確認)パケットを送信します。
この3ウェイハンドシェイクは、通信の確立と同時に通信相手の正当性を確認するセキュリティ上の利点があります。
例えば、TCP(Transmission Control Protocol)において、3ウェイハンドシェイクはコネクションの確立に使用されます。

TCPにおける3ウェイハンドシェイク

TCP(Transmission Control Protocol)における3ウェイハンドシェイクは、TCP接続の確立時に行われる手順です。
以下に、具体的なステップを示します。

要求 (SYN - Synchronize):
送信者(クライアント)が接続を確立するために、相手(サーバ)に対してSYNパケットを送信します。
このパケットには、通信の初期シーケンス番号が含まれています。この段階では、まだ相手は通信の受け入れの意志を表明していません。

確認 (SYN/ACK - Synchronize/Acknowledge):
受信者(サーバ)は、SYNパケットを受け取り、通信の受け入れ意思を示すために、SYN/ACKパケットを送信します。
このパケットには、受信者が受け取ったSYNパケットのシーケンス番号に1を加えた値が含まれます。

完了 (ACK - Acknowledge):
送信者(クライアント)は、最後にACKパケットを送信して、相手のSYN/ACKパケットを受け入れたことを通知します。
このACKパケットには、受信者が送信者のSYNパケットに対して期待する次のシーケンス番号が含まれます。

この3つのステップが完了することで、通信は確立され、データの送受信が可能となります。
このプロセスにより、通信相手が正当なものであることが確認され、通信の信頼性が向上します。
3ウェイハンドシェイクはTCPの特徴的な手法であり、データの信頼性や順序付けを確保する役割を果たしています。

ちなみにTCPとは

TCP(Transmission Control Protocol)は、コンピュータネットワークにおいて、データを信頼性のある方法で転送するための通信プロトコルの一つです。
TCPは、インターネットプロトコルスイートの中で重要な位置を占めており、データの信頼性、順序性、エラー検出・修正機能を提供します。

以下は、TCPの主な特徴や機能です。

信頼性のある通信:
TCPは、データの確実な転送を目指す信頼性のある通信プロトコルです。
データが送信されると、受信者は確認応答を返すことで、送信が正常に行われたことを通知します。
送信者は、確認応答が得られない場合やデータが欠落した場合に再送を行います。

順序性:
TCPはデータの順序を保持します。
データは送信された順番通りに受信者に届きます。
これにより、上位レイヤーのアプリケーションが正確なデータの流れを期待できます。

フロー制御:
TCPは、通信の速度調整を行うためのフロー制御機構を備えています。
これにより、送信者と受信者のデータ処理速度の不一致を調整し、ネットワークの過負荷を防ぎます。

エラー検出と修正:
TCPは、データのエラー検出と修正機能を提供します。
CRC(Cyclic Redundancy Check)などの手法を使用して、データの整合性を確保し、必要に応じて再送信を行います。

コネクション指向:
TCPはコネクション指向のプロトコルです。
通信の開始から終了までの間、双方向に確立されたコネクションが存在します。
これにより、データの信頼性や順序性が向上します。

TCPは、Webブラウジングやファイル転送など、多くのアプリケーションで使用されています。
対照的に、UDP(User Datagram Protocol)などのプロトコルは、信頼性や順序性を犠牲にして通信を高速化することを目指しています。