1. 序章

私たち人間には、会話を始めるためのいくつかの異なる方法があります。 しかし、一般的に言って、会話は1人の人が自分の話をする意図を示すことから始まります。もう1人の人は、会話をすることに興味を持って、または興味を持って戻ってきます。の上。

ネットワークに接続されたマシン間の接続を開始するプロセスはそれほど違いはありません。 マシンが通信できるようにする複数のプロトコルがあります。 それらのいくつかは、UDPなどの通信を開始するのが非常に簡単です。 TCPなどのハンドシェイクプロセスが必要なものもあります。

TCPシナリオでは、マシンは接続を要求することによって導入します。 このプロセスには、関連するマシンによってアクティブにトリガーされ、パッシブに応答されるいくつかのタスクが含まれます。

このチュートリアルでは、TCP接続の作成におけるアクティブマシンとパッシブマシンの役割について学習します。 まず、TCP接続について簡単に説明します。 したがって、TCP接続を開く際のアクティブマシンとパッシブマシンのアクションを詳細に調べます。 次に、パッシブ/アクティブマシンの誤ったアクションが原因で発生する可能性のある接続開放の問題を確認します。 最後に、体系的な要約で記事を締めくくります。

2. TCP接続の簡単なレビュー

TCPはコネクション型プロトコルです。これは、関係するマシンがデータを交換する前に接続を作成する必要があることを意味します。 TCP接続を開くには、起動するマシンと通信を待機するマシンの間で制御メッセージを交換することが含まれます。

TCPでのこの開始接続プロセスは、 3ウェイハンドシェイク。 要約すると、ハンドシェイクプロセスは SYNおよびACKメッセージ TCPクライアントとTCPサーバー間の通信を確立します。

まず、サーバーはSYNメッセージをサーバーに送信します。 次に、サーバーが使用可能な場合、サーバーはSYN-ACKでクライアントに応答します。 したがって、クライアントはサーバーにACKを送信してSYN-ACKを確認します。 最後に、接続が確立され、マシンはデータを交換できます。

次の画像は、3ウェイハンドシェイクプロセスを示しています。

3. TCP接続のアクティブおよびパッシブオープニング

クライアント/サーバーモデルはTCP/IPのベースです。 このように、TCP接続を開くには、クライアントとサーバーの複数の操作が含まれます。 次に、ソケットの作成後にクライアントとサーバー(またはその両方)によって実行される関連操作について説明します。

  • 練る:ソケットにIPアドレスとポート番号を割り当てる操作。 サーバー側のソケットは、必然的にアドレスとポートに明示的にバインドされます。 ただし、クライアント側のソケットを明示的にバインドすることはオプションです
  • 聞く:サーバー側のソケットを接続モードに設定する操作。 たとえば、ソケットがリスニングキューでサポートする接続の数を定義します
  • 承認:サーバー側ソケットが接続キューの最初の要求を受け入れるようにする操作。 したがって、サーバー側でサーバーとクライアント間の接続を作成するプロセスをトリガーします
  • 接続:特定のTCP/IPサーバーに接続要求を送信するクライアント側で実行される操作

TCP接続を開くために、サーバー側とクライアント側で異なる操作が実行されていることに注意してください。 したがって、このコンテキストでは、クライアントとサーバーが異なる役割を果たしていると想定できます。 これらの異なる役割は、TCP接続のアクティブまたはパッシブな開始を定義するものです。

  • アクティブ:クライアントは、TCP接続をアクティブに開く責任があります。 これは、クライアントが接続要求(SYN)を既知のサーバー(IPおよびポート)にプロアクティブに送信する必要があることを意味します。 接続 手術
  • 受け身:サーバーはTCP接続のパッシブオープンを担当します。 したがって、サーバーは、を使用してクライアントからの要求(SYN)を待機します。 受け入れる 手術。 実際に接続を受け入れるには、サーバーは以前に定義されたIPとポートで応答する必要があります(練る)そして新しい接続を保持するためのスロットがあります(聞く)

次の画像は、アクティブおよびパッシブTCP接続の開始を示しています。

3.1. トランスミッションコントロールブロック

TCP接続を受動的または能動的に開くかどうかに関係なく、クライアントとサーバーは、伝送制御ブロック(TCB)を使用して、接続に関する関連データを保持します。

クライアント側のTCBは非常に単純です。クライアントはすでに自分のアドレスを知っており、接続をアクティブに作成するにはサーバーアドレスを知っている必要があるため、このアドレスのペアを介してTCBを直接定義できます。

サーバー側のTCBはより複雑です。 サーバーはパッシブ接続の開始を実行するため、2つのシナリオが考えられます。サーバーが任意の接続要求を受け入れるか、サーバーが特定のクライアントの接続要求のみを受け入れるかです。

最初のシナリオでは、サーバーはクライアントアドレスまたはソケット番号なしでTCBを作成します。 したがって、クライアントがアクティブに接続を要求すると、この情報はTCBにバインドされます。 2番目のシナリオでは、サーバーはすでにクライアントアドレスを認識しており、接続要求を識別して、予期されたものだけを受け入れることができます。

4. 潜在的な接続の問題

TCP接続を開くときに、さまざまな問題が発生する可能性があります。 これらの問題は主に、SYNおよびACKメッセージの送信中のエラーに関連しています。 それらのいくつかについてもう少し見てみましょう:

  • 接続試行の失敗:この問題は、SYNパケットを送受信するソケットが接続中に異常な状態になると発生します。 これは、たとえば、SYN_SENT状態のクライアント(サーバーのSYN-ACKを待機している)がRSTメッセージを受信したときに発生します。
  • 受信した不良セグメント:この問題は、リクエストが破損またはなりすましの場合にいくつかの状況で発生します。 たとえば、サーバーがスプーフィングされた可能性のあるSYN要求を受信した場合、それは不良セグメントとして理解され、チャレンジACK軽減戦略が採用されます。

5. 体系的な要約

TCPでのアクティブおよびパッシブ接続の開始について調査しました。 これらの接続開始の役割は、TCP/IPのベースとなるサーバー/クライアントモデルに本質的に関連していることがわかりました。

要約すると、クライアントはサーバーへの接続をアクティブに要求する責任があります。 操作 接続 既知のサーバーアドレス(IPおよびポート)にSYNメッセージを送信することにより、この要求をトリガーします。

次に、サーバーは接続要求を受動的に待機します。 これは、操作acceptを実行することによって実行されます。 ただし、この操作を実行する前に、サーバーはアドレスにバインドし、サポートする接続の数を定義する必要があります。

次の表は、TCPのアクティブおよびパッシブ接続開口部の特性をまとめたものです。

6. 結論

この記事では、アクティブおよびパッシブTCP接続が開くことについて学びました。 まず、TCP接続の確立プロセスに焦点を当てて、TCPプロトコルを確認しました。 そこで、アクティブおよびパッシブTCP接続を開くという概念を詳しく調べました。 また、TCPの潜在的な接続の問題についても調査しました。 最後に、調査したすべての概念を体系的な要約にまとめました。

TCP接続を開くためのパッシブおよびアクティブの役割は、TCPのベースとなるクライアント/サーバーモデルに完全に準拠していると結論付けることができます。 このようにして、複数のクライアントがオンデマンドで利用可能なサーバーに接続し、いつでもタスクを実行できるようになります。