Data-communication-computer-network-transmission-control-protocol

提供:Dev Guides
移動先:案内検索

DCN-伝送制御プロトコル

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

特徴

  • TCPは信頼できるプロトコルです。 つまり、受信者は常にデータパケットに関する肯定的または否定的な確認応答を送信者に送信するため、送信者は常にデータパケットが宛先に到達するか、再送信する必要があるかについて明るい手がかりを得ることができます。
  • TCPは、データが送信されたのと同じ順序で目的の宛先に到達することを保証します。
  • TCPはコネクション型です。 TCPでは、実際のデータを送信する前に2つのリモートポイント間の接続を確立する必要があります。
  • TCPは、エラーチェックおよび回復メカニズムを提供します。
  • TCPはエンドツーエンド通信を提供します。
  • TCPは、フロー制御とサービス品質を提供します。
  • TCPは、クライアント/サーバーポイントツーポイントモードで動作します。
  • TCPは全二重サーバーを提供します。 受信者と送信者の両方の役割を実行できます。

ヘッダ

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

TCPヘッダー

  • 送信元ポート(16ビット)-送信側デバイスのアプリケーションプロセスの送信元ポートを識別します。
  • 宛先ポート(16ビット)-これは、受信デバイス上のアプリケーションプロセスの宛先ポートを識別します。
  • シーケンス番号(32ビット)-セッション内のセグメントのデータバイトのシーケンス番号。
  • 確認番号(32ビット)-ACKフラグが設定されている場合、この番号には予想されるデータバイトの次のシーケンス番号が含まれ、受信した前のデータの確認として機能します。
  • データオフセット(4ビット)-このフィールドは、TCPヘッダーのサイズ(32ビットワード)とTCPセグメント全体の現在のパケットのデータのオフセットの両方を意味します。
  • 予約済み(3ビット)-将来の使用のために予約されており、デフォルトではすべてゼロに設定されています。
  • フラグ(各1ビット)
  • 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サイズ*-このフィールドは2つのステーション間のフロー制御に使用され、レシーバーがセグメントに割り当てたバッファーの量(バイト単位)を示します。 受信者が期待するデータ量。
  • チェックサム-このフィールドには、ヘッダー、データ、および疑似ヘッダーのチェックサムが含まれます。
  • 緊急ポインタ-URGフラグが1に設定されている場合、緊急データバイトを指します。
  • オプション-通常のヘッダーではカバーされない追加オプションを容易にします。 オプションフィールドは常に32ビットワードで記述されます。 このフィールドに32ビット未満のデータが含まれる場合、32ビット境界に達するまで残りのビットをカバーするためにパディングが使用されます。

アドレッシング

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

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

接続管理

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

TCPハンドシェイク

確立

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

リリース

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

帯域幅管理

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

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

確認を逃した場合、すなわち トランジットネットワークでデータが失われるか、NACKを受信すると、ウィンドウサイズが半分になり、スロースタートフェーズが再び開始されます。

エラー制御とフロー制御

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

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

多重化

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

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

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

輻輳制御

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

  • 加算的増加、乗法的減少
  • スロースタート
  • タイムアウト反応

タイマー管理

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

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

  • このタイマーは、接続の整合性と有効性を確認するために使用されます。
  • キープアライブ時間が経過すると、ホストはプローブを送信して、接続がまだ存在するかどうかを確認します。

再送信タイマー:

  • このタイマーは、送信されたデータのステートフルセッションを維持します。
  • 送信データの確認応答が再送信時間内に受信されない場合、データセグメントが再度送信されます。

持続タイマー:

  • TCPサイズは、ウィンドウサイズ0を送信することにより、どちらのホストでも一時停止できます。
  • セッションを再開するには、ホストはより大きな値でウィンドウサイズを送信する必要があります。
  • このセグメントがもう一方の端に到達しない場合、両方の端が無限の時間互いに待機する可能性があります。
  • 持続タイマーの期限が切れると、ホストはそのウィンドウサイズを再送信して、相手に通知します。
  • 持続タイマーは、通信のデッドロックを回避するのに役立ちます。

時限待機:

  • 接続を解放した後、ホストのいずれかは、接続を完全に終了するためにTimed-Wait時間待機します。
  • これは、相手側が接続終了要求の確認応答を受信したことを確認するためです。
  • タイムアウトは最大240秒(4分)です。

クラッシュ回復

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

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