DCN-伝送制御プロトコル

伝送制御プロトコル(TCP)は、インターネットプロトコルスイートの最も重要なプロトコルの1つです。これは、インターネットなどの通信ネットワークでのデータ伝送に最も広く使用されているプロトコルです。

特徴

  • TCPは信頼できるプロトコルです。つまり、受信者は常にデータパケットに関する肯定的または否定的な確認応答を送信者に送信するため、送信者はデータパケットが宛先に到達したか、再送信する必要があるかについて常に明るい手がかりを得ることができます。

  • TCPは、データが送信されたのと同じ順序で目的の宛先に到達することを保証します。

  • TCPはコネクション型です。TCPでは、実際のデータを送信する前に、2つのリモートポイント間の接続を確立する必要があります。

  • TCPは、エラーチェックと回復のメカニズムを提供します。

  • TCPはエンドツーエンドの通信を提供します。

  • TCPは、フロー制御とサービス品質を提供します。

  • TCPは、クライアント/サーバーのポイントツーポイントモードで動作します。

  • TCPは全二重サーバーを提供します。つまり、受信者と送信者の両方の役割を実行できます。

ヘッダ

TCPヘッダーの長さは、最小20バイト、最大60バイトです。

  • Source Port (16-bits)  -送信デバイス上のアプリケーションプロセスの送信元ポートを識別します。

  • Destination Port (16-bits) -受信デバイス上のアプリケーションプロセスの宛先ポートを識別します。

  • Sequence Number (32-bits) -セッション内のセグメントのデータバイトのシーケンス番号。

  • Acknowledgement Number (32-bits)  -ACKフラグが設定されている場合、この番号には、予期されるデータバイトの次のシーケンス番号が含まれ、前に受信したデータの確認応答として機能します。

  • Data Offset (4-bits)  -このフィールドは、TCPヘッダーのサイズ(32ビットワード)と、TCPセグメント全体の現在のパケット内のデータのオフセットの両方を意味します。

  • Reserved (3-bits)  -将来の使用のために予約されており、デフォルトではすべてゼロに設定されています。

  • Flags (1-bit each)

    • NS -Nonce Sumビットは、明示的輻輳通知シグナリングプロセスによって使用されます。

    • CWR -ホストがECEビットが設定されたパケットを受信すると、ECEが受信したことを確認するように輻輳ウィンドウを削減します。

    • ECE -これには2つの意味があります。

      • SYNビットが0にクリアされている場合、ECEは、IPパケットのCE(輻輳エクスペリエンス)ビットが設定されていることを意味します。

      • SYNビットが1に設定されている場合、ECEはデバイスがECT対応であることを意味します。

    • URG -緊急ポインタフィールドに重要なデータがあり、処理する必要があることを示します。

    • ACK-確認フィールドに意味があることを示します。ACKが0にクリアされた場合、パケットに確認応答が含まれていないことを示します。

    • PSH -設定されている場合、データをバッファリングせずに受信アプリケーションに(データが到着するとすぐに)プッシュすることは、受信ステーションへの要求です。

    • RST -リセットフラグには次の機能があります。

      • 着信接続を拒否するために使用されます。

      • セグメントを拒否するために使用されます。

      • 接続を再開するために使用されます。

    • SYN -このフラグは、ホスト間の接続を設定するために使用されます。

    • FIN-このフラグは接続を解放するために使用され、それ以降はデータが交換されません。SYNフラグとFINフラグのあるパケットにはシーケンス番号があるため、正しい順序で処理されます。

  • Windows Size  -このフィールドは、2つのステーション間のフロー制御に使用され、レシーバーがセグメントに割り当てたバッファーの量(バイト単位)、つまりレシーバーが期待するデータの量を示します。

  • Checksum -このフィールドには、ヘッダー、データ、および疑似ヘッダーのチェックサムが含まれます。

  • Urgent Pointer  -URGフラグが1に設定されている場合は、緊急データバイトを指します。

  • Options  -通常のヘッダーではカバーされない追加オプションを容易にします。オプションフィールドは常に32ビットワードで記述されます。このフィールドに32ビット未満のデータが含まれている場合、残りのビットをカバーして32ビット境界に到達するためにパディングが使用されます。

アドレッシング

2つのリモートホスト間のTCP通信は、ポート番号(TSAP)を使用して行われます。ポート番号の範囲は0〜65535で、次のように分割されます。

  • システムポート(0〜1023)
  • ユーザーポート(1024 – 49151)
  • プライベート/ダイナミックポート(49152 – 65535)

接続管理

TCP通信はサーバー/クライアントモデルで機能します。クライアントが接続を開始し、サーバーが接続を受け入れるか拒否します。接続管理には、スリーウェイハンドシェイクが使用されます。

確立

クライアントは接続を開始し、シーケンス番号を付けてセグメントを送信します。サーバーは、独自のシーケンス番号と、クライアントのシーケンス番号より1つ多いクライアントのセグメントのACKでそれを確認します。セグメントのACKを受信した後のクライアントは、サーバーの応答の確認応答を送信します。

リリース

サーバーとクライアントのどちらも、FINフラグを1に設定してTCPセグメントを送信できます。受信側がFINのACKnowledgingによって応答すると、TCP通信のその方向が閉じられ、接続が解放されます。

帯域幅管理

TCPは、ウィンドウサイズの概念を使用して、帯域幅管理のニーズに対応します。ウィンドウサイズは、リモートエンドの送信者に、このエンドの受信者が受信できるデータバイトセグメントの数を通知します。TCPは、ウィンドウサイズ1を使用してスロースタートフェーズを使用し、通信が成功するたびにウィンドウサイズを指数関数的に増加させます。

たとえば、クライアントはWindowsサイズ2を使用し、2バイトのデータを送信します。このセグメントの確認応答が受信されると、ウィンドウサイズは2倍の4になり、次に送信されるセグメントは4データバイトの長さになります。4バイトのデータセグメントの確認応答を受信すると、クライアントはウィンドウサイズを8などに設定します。

確認応答が失われた場合、つまり、トランジットネットワークでデータが失われた場合、またはNACKを受信した場合、ウィンドウサイズは半分に縮小され、スロースタートフェーズが再開されます。

エラー制御とフロー制御

TCPはポート番号を使用して、データセグメントをハンドオーバーするために必要なアプリケーションプロセスを認識します。それに加えて、シーケンス番号を使用してリモートホストと同期します。すべてのデータセグメントは、シーケンス番号で送受信されます。送信者は、ACKを取得したときに受信者が最後に受信したデータセグメントを認識しています。受信者は、最近受信したパケットのシーケンス番号を参照することにより、送信者によって送信された最後のセグメントを認識します。

最近受信したセグメントのシーケンス番号が受信者が期待していたシーケンス番号と一致しない場合、それは破棄され、NACKが送り返されます。2つのセグメントが同じシーケンス番号で到着した場合、TCPタイムスタンプ値が比較されて決定されます。

多重化

1つのセッションで2つ以上のデータストリームを組み合わせる手法は、多重化と呼ばれます。TCPクライアントがサーバーとの接続を初期化するとき、TCPクライアントは常にアプリケーションプロセスを示す明確に定義されたポート番号を参照します。クライアント自体は、プライベートポート番号プールからランダムに生成されたポート番号を使用します。

TCP多重化を使用すると、クライアントは1つのセッションでさまざまなアプリケーションプロセスと通信できます。たとえば、クライアントがさまざまなタイプのデータ(HTTP、SMTP、FTPなど)を含むWebページを要求すると、TCPセッションのタイムアウトが増加し、セッションが長時間開いたままになるため、3者間ハンドシェイクのオーバーヘッドが可能になります。避けてください。

これにより、クライアントシステムは単一の仮想接続を介して複数の接続を受信できます。タイムアウトが長すぎる場合、これらの仮想接続はサーバーには適していません。

輻輳制御

処理できないシステムに大量のデータが送られると、輻輳が発生します。TCPは、ウィンドウメカニズムによって輻輳を制御します。TCPは、送信するデータセグメントの量を相手側に通知するウィンドウサイズを設定します。TCPは、輻輳制御に3つのアルゴリズムを使用する場合があります。

  • 加法的な増加、乗法的な減少

  • スロースタート

  • タイムアウト反応

タイマー管理

TCPは、さまざまなタイプのタイマーを使用して、さまざまなタスクを制御および管理します。

キープアライブタイマー:

  • このタイマーは、接続の整合性と有効性をチェックするために使用されます。

  • キープアライブ時間が経過すると、ホストはプローブを送信して、接続がまだ存在するかどうかを確認します。

再送信タイマー:

  • このタイマーは、送信されたデータのステートフルセッションを維持します。

  • 送信されたデータの確認応答が再送信時間内に受信されない場合、データセグメントは再度送信されます。

永続タイマー:

  • TCPセッションは、ウィンドウサイズ0を送信することにより、どちらのホストでも一時停止できます。

  • セッションを再開するには、ホストはウィンドウサイズをより大きな値で送信する必要があります。

  • このセグメントがもう一方の端に到達しない場合、両端は無限の時間互いに待機する可能性があります。

  • Persistタイマーが期限切れになると、ホストはウィンドウサイズを再送信して、相手側に通知します。

  • 永続タイマーは、通信のデッドロックを回避するのに役立ちます。

時限待機:

  • 接続を解放した後、いずれかのホストは、接続を完全に終了するためにTimed-Wait時間待機します。

  • これは、もう一方の端が接続終了要求の確認応答を受信したことを確認するためです。

  • タイムアウトは最大240秒(4分)になる可能性があります。

クラッシュリカバリ

TCPは非常に信頼性の高いプロトコルです。セグメントで送信される各バイトにシーケンス番号を提供します。これはフィードバックメカニズムを提供します。つまり、ホストがパケットを受信すると、次のシーケンス番号が期待されるパケットをACKにバインドします(最後のセグメントでない場合)。

TCPサーバーが通信の途中でクラッシュし、プロセスを再開すると、TCPサーバーはすべてのホストにTPDUブロードキャストを送信します。その後、ホストは、確認応答されなかった最後のデータセグメントを送信して、続行することができます。