1. 序章

ハンドシェイクは、たとえば、ビジネスマン間の会話を開始する典型的なアクションです。 同様に、当社のデバイス/プロセスはハンドシェイクプロトコルを実行して、他のデバイスまたはプロセスとの接続を確立します。 このようにして、接続されたデバイスは、特定の通信に関与するすべての関係者によって合意された適切なパラメータとルールを使用してメッセージを交換できます。

記事上で、 2ウェイハンドシェイクと3ウェイハンドシェイクの一般的な概念を学習します。 したがって、私たちの最終的な目標は、これらのハンドシェイクプロトコルが通常どのように機能するか、それらの利点、およびそれらの欠点を学ぶことです。

2. ハンドシェイクの基本

簡単に言うと、ハンドシェイクプロトコルを使用してパーティを接続するということは、通信がどのように行われるかを定義することを意味します。 具体的には、ハンドシェイクは、完全な通信が開始される前に、メッセージ、データエンコーディング、および最大転送速度を交換するためのプロトコルを確立できます。

いくつかのアプリケーションでは、ハンドシェイクが必要です。 次に、このプロセスが特定のアプリケーションに対してどのように実行されるかを簡単に説明します。

  • 伝送制御プロトコル(TCP):通常のTCP接続を開くには、3ウェイハンドシェイクが必要です。 したがって、TCPは、2者間で交換されるメッセージを同期することにより、信頼性の高い通信を確立することを目的としています。
  • トランスポート層セキュリティ(TLS):A TLS接続では、通信を保護するためにクライアントとサーバー間の一連の合意が必要です。 このように、TLSのハンドシェイクプロトコルは、次のような特定の接続のセキュリティ機能を定義するように設計されています。 暗号化アルゴリズムとキー。
  • Simple Mail Transfer Protocol(SMTP): メッセージを交換するためにTCP接続を確立した後、SMTPサーバーとクライアントは特定のハンドシェイクプロセスを通じて自分自身を識別する必要があります。 したがって、サーバーとユーザーの認証に加えて、このハンドシェイクプロセスは、採用された暗号化プロトコルや最大メッセージサイズなど、他の通信機能もネゴシエートします。
  • ダイヤルアップインターネットアクセス: ダイヤルアップモデムは、音が鳴るため、非常に特徴的なハンドシェイクを介して接続します。 このシナリオでは、一般に、ハンドシェイクは通信プロトコルを定義し、エコー抑制を無効にし、適切な変調を見つけ、接続を最適化します。

3. 双方向ハンドシェイク

双方向ハンドシェイクは、通信を希望する2者間の接続を作成するための単純なプロトコルです。これを行うために、このプロトコルは 同期(SYN)および確認応答(ACK)メッセージ.

簡単に言うと、SYNメッセージには接続が必要であり、データ交換を制御するためのシーケンス番号を相手に通知します。 実際には、TCPシーケンス番号は、特定のストリームを通過するバイトのカウンターです。 次に、ACKメッセージは、着信メッセージの受信を(シーケンス番号を使用して)確認するために使用されます。

を考慮した双方向ハンドシェイクを実現するには クライアント/サーバーモデル、クライアントはシーケンス番号XのSYNメッセージをサーバーに送信します。 次に、サーバーはSYNメッセージを確認(ACK)し、別のシーケンス番号Yを提供して、接続を確立する必要があります。 したがって、シーケンス番号Xはクライアントからサーバーへのメッセージを確認し、シーケンス番号Yはサーバーからクライアントへのメッセージを確認します。

次の図は、前述の双方向ハンドシェイクプロセスを示しています。

特に、サーバーからのACKメッセージの遅延が大きすぎる場合、双方向ハンドシェイクは潜在的な問題を引き起こします。したがって、接続タイムアウトが発生すると、クライアントは新しいシーケンス番号(Z、例)サーバーに。 ただし、サーバーが以前にACKを送信した場合(遅延)、この新しいSYNメッセージは破棄されます。 次に、クライアントは遅延ACKを受信し、最後に送信されたSYNメッセージを参照していると見なします。 エラーが発生する場所は次のとおりです。クライアントはシーケンス番号Zのメッセージを送信しますが、サーバーはシーケンス番号Xに続くメッセージを予期します。

次の図は、概説された問題を示しています。

3ウェイハンドシェイクプロセスは、2ウェイハンドシェイクの説明されている問題を解決します。

4. 3ウェイハンドシェイク

双方向ハンドシェイクと同様に、3ウェイハンドシェイクもSYNメッセージとACKメッセージを使用して2者間の接続を確立します。ただし、サーバーとクライアントは、シーケンス番号を提供するだけでなく、相互にシーケンス番号を確認します。 このシーケンス番号の確認応答により、SYN重複エラーの発生が回避されます。

それで、クライアントがスリーウェイハンドシェイクプロトコルを採用しているサーバーと通信したいと考えてみましょう。 まず、クライアントはシーケンス番号(X)を含むSYNメッセージをサーバーに送信します。 サーバーは、シーケンス(Y)番号を含み、クライアントのシーケンス番号(X)を確認するSYN-ACKで応答します。 その後、クライアントはACKメッセージを送信してサーバーのシーケンス番号(Y)を確認し、最終的に接続を確立します。

次の図は、提示された3ウェイハンドシェイクプロセスを示しています。

5. 結論

この記事では、3ウェイと2ウェイの両方のハンドシェイクプロトコルについて学習しました。 まず、ハンドシェイクの基本的な概念と例を見ていきました。 そこで、双方向ハンドシェイクに関連するプロセスと欠点を確認しました。 最後に、3ウェイハンドシェイクプロトコルの実行を詳細に分析しました。

それらは2者間の信頼できるメッセージ交換を確立するため、ハンドシェイクプロトコルは現在のネットワーク通信の重要なリソースであると結論付けることができます。