ホームページ  >  記事  >  tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

青灯夜游
青灯夜游オリジナル
2022-08-24 16:39:0311355ブラウズ

Tcp と udp は、「トランスポート層」プロトコルに属します。 UDP と TCP はコンピュータのトランスポート層の重要なプロトコルで、TCP はコネクション指向、UDP はコネクションレス指向です。 TCP (Transmission Control Protocol) は、IETF の RFC 793 によって定義された、コネクション指向で信頼性の高いバイト ストリーム ベースのトランスポート層通信プロトコルです。 UDP (ユーザー データグラム プロトコル) は、アプリケーションが接続を確立せずにカプセル化された IP パケットを送信する方法を提供します。

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

このチュートリアルの動作環境: Windows 7 システム、Dell G3 コンピューター。

コンピュータ ネットワーク アーキテクチャとは、コンピュータ ネットワークの階層構造モデルを指します。これは、各層のプロトコルと層間のポートの集合です。コンピュータ ネットワークでの通信は、ネットワーク通信プロトコルに依存する必要があります。1997 年に国際標準化機構 (ISO) によって提案され、広く使用されているオープン システム相互接続 (OSI) 参照モデルは、慣例的に ISO/OSI 参照モデルと呼ばれています。

OSI 7 層参照モデル:

OSI は、ネットワーク システムを機能的に比較的独立した 7 つの順序付けられたサブシステムに論理的に分割します。以下の図に示すように、機能的に比較的独立した 7 つのレベルで構成されます。低いものから高いものへと、物理層、データリンク層、ネットワーク層、トランスポート層、セッション層、プレゼンテーション層、アプリケーション層となります。

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

TCP/IP リファレンス モデル

TCP/IP には、ネットワーク インターフェイス層、インターネット層、トランスポート層とアプリケーション層。 TCP/IP 階層と OSI 階層の比較を次の図に示します。

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

tcp と udp は、コンピュータ ネットワーク アーキテクチャの「トランスポート層」プロトコルに属します。

インターネットのトランスポート層には、相互に補完する 2 つの主要なプロトコルがあります。コネクションレスは UDP であり、アプリケーションにパケットを送信する機能を与え、必要なレベルで独自のプロトコルを構築できるようにすること以外は、特に何も行いません。接続指向のものは TCP で、ほとんどすべてを実行します。

トランスポート層は、ネットワーク層システム全体における重要な層の 1 つです。ネットワーク層は宛先ホストにパケットを送信するだけですが、実際の通信はホストではなく、ホスト内のプロセスです。 。トランスポート層は、その上のアプリケーション層に通信サービスを提供します。通信指向の最上位層に属します。ネットワークのエッジ部分にある 2 つのホストがネットワークのコア部分の機能を使用してエンドツーエンド通信を行う場合に使用されます。 、ホストのプロトコル スタックのみ トランスポート層のみが存在する トランスポート層は、プロセス間の論理通信を提供する トランスポート層は、基礎となるネットワーク層の核となる詳細を高レベルのユーザーから保護し、アプリケーションに終わりがあるかのように見せます2 つのトランスポート層エンティティ間のエンドツーエンド ロジック 通信チャネル;

IP パケットは宛先ホストにパケットを送信できますが、このパケットは依然としてホストのネットワーク層に留まり、配信されません2 台のコンピュータが通信するとき、そのプロセス中に、このホスト上のプロセスは実際には別のホスト上のプロセスとデータを交換します。トランスポート層の観点から見ると、通信の実際のエンドポイントはホストではなくホスト内のプロセス、つまりアプリケーション プロセス間の通信がエンドツーエンド通信です。
トランスポート層の 2 つの重要な機能:

  • 多重化 : 送信側が使用しないアプリケーション プロセスは、同じトランスポート層プロトコルを使用してデータを送信できます
  • ##分離: 受信者のトランスポート層は、メッセージのヘッダーを取り除いた後、宛先アプリケーション プロセスにデータを正しく配信できます。

ネットワーク層とトランスポート層の違い: ネットワーク層はホスト間の論理通信を提供しますが、トランスポート層はアプリケーションにエンドツーエンドの論理通信を直接提供します。

TCP と UDP

UDP と TCP は、コンピュータのトランスポート層の重要なプロトコルです。TCP はコネクション指向であり、UDP はコネクションレス指向です。

TCP/IP 層のトランスポート層は、 16 ビット ポート番号 ポートを表す場合、ポート番号はローカルな意味のみを持ちます。コンピュータ アプリケーション層の各プロセスとトランスポート層の相互作用の間の層間インターフェイスをマークします。異なるネットワーク番号間のポート番号これらは関連していないため、2 つのコンピュータ間のプロセスが相互に通信するには、お互いの IP アドレス (相手のコンピュータを見つけるため) とポート番号 (プロセスを見つけるため) を知っている必要があります。インターネット上の通信はクライアントサーバー方式を採用しており、クライアントが通信要求を行う際には、相手サーバーのIPアドレスとポート番号を知る必要があります。

UDP

ユーザー データグラム プロトコルは、IP メッセージに多重化、逆多重化、およびエラー検出の機能を追加するだけです。

1. UDP の特徴

  • UDP はコネクションレス型です: 送信前に接続は必要ありません。
  • UDP はベストエフォート配信を使用し、信頼性の高い配信を保証しません。
  • UDP はメッセージ指向です。次の図に示すように、完全なメッセージが一度に送信されます。

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

  • UDP には輻輳制御がありません。
  • UDP 1 対 1 および 1 対 1 の対話型通信をサポートします。1 対多、多対 1、および多対多の対話型通信をサポートします。
  • UDP ヘッダーのオーバーヘッドが小さい;

2. UDP メッセージ

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

ヘッダー フィールドは、送信元ポート、宛先ポート、長さ、チェックサムを含むわずか 8 バイトです。 12 バイトの疑似ヘッダは、チェックサムを計算する目的で一時的に追加されます。

TCP

伝送制御プロトコル (TCP、伝送制御プロトコル) は、コネクション指向で信頼性の高いバイト ストリーム ベースのトランスポート層通信プロトコルです。IETF の RFC 793 定義。

TCP: ユーザー メッセージ プロトコル、接続指向、データが送信される前に接続を確立する必要があり、データ送信が完了すると接続が解放されます。TCP はブロードキャスト サービスやマルチキャスト サービスを提供しません。

#1. TCP の特性

    TCP は接続指向であり、信頼性の高い配信を提供します。
  • フロー制御を備えています。
  • 輻輳制御;
  • 全二重通信を提供;
  • バイト ストリーム指向 (アプリケーション層から送信されたメッセージをバイト ストリームとして扱い、バイト ストリームをさまざまなサイズのブロックのデータに編成します) 、各 TCP 接続はポイントツーポイント (1 対 1) のみ可能です。

2. TCP 接続

TCP 接続は 2 つのホスト番号やポート番号ではなく、ソケットです:

ソケット = IP アドレス: ポート番号

3. TCP セグメント ヘッダーの形式

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

    送信元ポートと宛先ポート: それぞれ 2 バイトを占有し、送信元ポートと宛先ポートがそれぞれ書き込まれます;
  • シリアル番号: 4 バイト、TCP はバイト ストリームに向けられており、TCP 接続で送信されるバイト ストリームの各バイトは、番号、つまり開始番号の順序になっています。送信されるバイト ストリーム全体は、送信が確立されたときに設定する必要があります;
  • 確認番号: 受信されることが予想される次のメッセージ セグメントのシーケンス番号。たとえば、A が送信したメッセージ セグメントを B が正しく受信すると、シーケンス番号は 501、データ長は 200 バイトであるため、B は次のメッセージ セグメントのシーケンス番号が 701 であることを期待します。 Aさんへ、確認番号は701です。
  • データ オフセット: メッセージ セグメントの先頭からのデータ部分のオフセットを指し、実際にはヘッダーの長さを指します。
  • 確認 ACK: ACK=1 の場合、確認番号フィールドは有効ですが、それ以外の場合は無効です。 TCP では、接続の確立後、送信されるすべてのメッセージ セグメントの ACK が 1 に設定されている必要があると規定しています。
  • 同期 SYN: 接続の確立時にシーケンス番号を同期するために使用されます。 SYN=1、ACK=0の場合、接続要求セグメントであることを示します。相手が接続の確立に同意した場合、応答メッセージでは SYN=1 および ACK=1 となります。
  • 終了 FIN: 接続を解放するために使用されます。FIN=1 の場合、このセグメントの送信者のデータが送信され、接続を解放する必要があることを意味します。
  • ウィンドウ: ウィンドウ値は、受信者が送信者に送信ウィンドウを設定させるための基礎として機能します。この制限の理由は、受信側のデータ キャッシュ スペースが限られているためです。

4. TCP スリーウェイ ハンドシェイク

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

A がクライアント、B がサーバーであると仮定します。

    まず、B は LISTEN (リスニング) 状態にあり、顧客の接続要求を待っています。
  • A は、接続要求メッセージ (SYN=1、ACK=0) を B に送信し、初期シーケンス番号 x を選択します。
  • B は接続要求メッセージを受信し、接続の確立に同意すると、接続確認メッセージ (SYN=1、ACK=1、確認番号 x 1) を A に送信し、また、初期シーケンス番号 y 。
  • A は、B の接続確認メッセージを受信した後、B にも確認を送信します。確認番号は y 1、シーケンス番号は x 1 です。
  • B が A からの確認を受信すると、接続が確立されます。

5. TCP の 4 つのウェーブ

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

次の説明では、シーケンス番号と確認番号については説明しません。シーケンス番号と確認番号 ルールは比較的単純です。また、接続確立後の ACK は常に 1 であるため、ACK については説明しません。

  • A は接続解放メッセージ FIN=1 を送信します。
  • B は確認を受信後、送信します。このとき、TCP はセミクローズド状態です。B は A にデータを送信できますが、A は B にデータを送信できません。
  • B が接続を必要としなくなったら、接続解放メッセージ (FIN=1) を送信します。
  • A は、確認を受信した後、確認を送信し、TIME-WAIT 状態に入り、2 MSL (最大メッセージ生存時間) 待ってから接続を解放します。
  • B は、A の確認を受け取った後、接続を解放します。

4 回手を振る理由
クライアントが FIN 接続解放メッセージを送信すると、サーバーはメッセージを受信し、CLOSE-WAIT 状態に入ります。この状態は、サーバーが未転送のデータを送信するための状態であり、転送完了後、サーバーは FIN コネクション解放メッセージを送信します。

TIME_WAIT
クライアントは、サーバーから FIN メッセージを受信した後にこの状態に入ります。この時点では、直接 CLOSED 状態にはなりません。また、クライアントは、CLOSED 状態になるまで待つ必要があります。タイマーで設定した時間2MSLです。これを行う理由は 2 つあります。

  • 最後の確認メッセージが確実に届くようにするためです。 B が A からの確認メッセージを受信しない場合、接続解放要求メッセージを再送信し、A はこの状況に対処するために一定時間待機します。
  • 一定時間待機することで、この接続中に生成されたすべてのパケットがネットワークから消えるようになり、次の新しい接続に古い接続要求パケットが存在しなくなります。

TCP の信頼性の高い送信の実装

TCP は、信頼性の高い送信を実現するためにタイムアウト再送信を使用します。送信されたメッセージ セグメントがタイムアウト期間内に利用できない場合、 , 確認を受信した後、セグメントを再送信します;
1. TCP スライディング ウィンドウ
ウィンドウはキャッシュの一部であり、バイト ストリームを一時的に保存するために使用されます。送信者と受信者はそれぞれウィンドウを持ち、受信者は TCP セグメントのウィンドウ フィールドを通じて送信者にウィンドウ サイズを通知し、送信者はこの値とその他の情報に基づいて独自のウィンドウ サイズを設定します。

送信ウィンドウ内のすべてのバイトの送信が許可され、受信ウィンドウ内のすべてのバイトの受信が許可されます。送信ウィンドウの左側のバイトが送信および確認された場合は、左側の最初のバイトが送信および確認されなくなるまで、送信ウィンドウを右に一定距離スライドさせます。受信ウィンドウのスライドも同様です。ウィンドウの左側のバイトが送信および確認され、ホストに配信されたら、受信ウィンドウを右にスライドさせます。

受信ウィンドウは、ウィンドウ内で順番に到着した最後のバイトのみを確認します。たとえば、受信ウィンドウが受信したバイトは {31, 34, 35} で、そのうち {31} は順番に到着します。 {34, 35} はそうではないため、バイト 31 のみが確認されます。送信者はバイトの確認応答を取得すると、このバイトより前のすべてのバイトが受信されたことを認識します。

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

2. TCP フロー制御
TCP のフロー制御は、スライディング ウィンドウを通じて実装されます。一般に、送信者はより高速に送信することが期待されます。データは速ければ速いほど良いのですが、送信側のデータが速すぎると、受信側がそれを受け入れる時間がなくなってしまいますので、送信側のトラフィックを制御する必要があります。TCP でのトラフィック制御は主に、スライディング ウィンドウ サイズ (sliding window size). 受信者によって送信される確認 メッセージ内のウィンドウ フィールドを使用して、送信者のウィンドウ サイズを制御することができ、それによって送信者の送信速度に影響を与えることができます。ウィンドウフィールドを 0 に設定すると、送信者はデータを送信できなくなります。

3. TCP 輻輳制御
ネットワークが輻輳すると、パケットが失われ、送信者は再送信を続けるため、ネットワークの輻輳が増大します。したがって、輻輳が発生した場合には、送信側のレートを制御する必要があります。これはフロー制御に非常に似ていますが、開始点が異なります。フロー制御は受信機が時間内に受信できるようにすること、輻輳制御はネットワーク全体の輻輳レベルを下げることです。
輻輳制御条件:
tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?
輻輳制御はフロー制御とは異なります: 輻輳制御は、ネットワークに過剰なデータが注入されるのを防ぎ、ネットワーク内のルーターやリンクが過負荷または輻輳にならないようにします。制御はグローバル プロセスであり、すべてのホスト、すべてのルーター、およびネットワーク パフォーマンスの低下に関連するすべての要素を含むように設計されています。ただし、フロー制御は多くの場合ポイントツーポイント トラフィックの制御であり、エンドツーエンドの問題です。区別に注意してください。

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

TCP の輻輳制御の主なアルゴリズム: スロー スタート、輻輳回避、高速再送信、高速リカバリ送信側は、輻輳と呼ばれるプログラムを維持する必要があります。ウィンドウの状態変数 (cwnd)。輻輳ウィンドウと送信側ウィンドウの違いに注意してください。輻輳ウィンドウは単なる状態変数であり、実際に動作するのは送信側ウィンドウです。送信者が送信できるデータ量を決定します。
議論の便宜上、次の仮定を立てます:

    受信側には十分な大きさの受信バッファがあるため、フロー制御は発生しません。 TCP ウィンドウはバイトに基づいていますが、ここではウィンドウ サイズの単位がメッセージ セグメントに設定されています。

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

1. スロー スタートと輻輳の回避#​​## 送信の最初の実行はスロー スタートであり、cwnd = 1 とします。送信者は 1 セグメントのみ送信できます。確認応答が受信されると cwnd は 2 倍になるため、送信者が送信できるセグメントの数は次のとおりです: 2、4、8...
スロー スタートは各ラウンドで cwnd になることに注意してください。これにより、cwnd が非常に急速に増大し、送信側の送信速度が速くなりすぎ、ネットワークの輻輳が発生する可能性が高くなります。

スロースタート閾値 ssthresh を設定します。 cwnd >= ssthresh の場合、輻輳回避に入り、ラウンドごとに cwnd のみ 1 ずつ増加します。

タイムアウトが発生した場合は、ssthresh = cwnd / 2 として、再度スロースタートを実行してください。

2. 高速再送信と高速リカバリ 受信側では、メッセージ セグメントを受信するたびに、最後に受信した順序付けされたメッセージ セグメントを処理する必要があります。 。たとえば、M1 と M2 が受信されており、M4 が受信された場合は、M2 に対する確認応答が送信される必要があります。

送信側では、確認応答が3回重複して受信されると、次のセグメントが失われたことが分かり、このとき高速再送が行われ、直ちに次のセグメントが再送されます。たとえば、3 つの M2 が受信された場合、M3 は失われ、M3 はすぐに再送信されます。

この場合、失われるのは個々のセグメントだけであり、ネットワークの輻輳は発生しません。したがって、ssthresh = cwnd / 2、cwnd =ssthresh として高速回復が実行されますが、このとき輻輳回避が直接入力されることに注意してください。

スロースタートと高速リカバリの速度は、cwnd の成長率ではなく、cwnd の設定値を指します。スロースタート cwnd は 1 に設定され、高速リカバリ cwnd は ssthresh に設定されます。

tcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?

参考: Computer Network 第 5 版、Xie Xiren 編

(学習ビデオの共有:

Web フロントエンドの概要)

以上がtcp と udp はコンピュータ ネットワーク アーキテクチャにおいてどのプロトコルに属しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。