プログラマーの視点から理解する: UDP プロトコル

こんにちは、皆さん〜私はあなたの古い友人です: Xiao Zhou ღ を保護するために 、この号ではネットワークの基本原理における UDP プロトコルについて説明します。どのプロトコルから来ていますか? 、UDP プロトコル、UDP メッセージ形式、大きなファイルを転送するときの UDP の戦略、および UDP プロトコルのワークフローを理解します。私たちプログラマーは、ネットワークの知識を知らなくても十分ではありません。絶対に見ないでください。 ~~
さらなるハイライトにご期待ください: 小州を守る ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★*'

 1. 合意とは何ですか

データがネットワーク上で (送信元から送信先へ) 送信されるためには、ネットワーク通信の参加者は、接続の確立方法、送信方法、相互の情報の解析方法など、同じルールに従う必要があります。の上。この規則に従うことによってのみ、コンピューターは相互に通信できます。このような規則はプロトコルと呼ばれ、最終的にはネットワーク上で送信されるデータ パケットの形式に反映されます。

プロトコルは層と層間の呼び出し関係を規定しており、上位層のプロトコルは下位層のプロトコルを呼び出し、下位層のプロトコルは上位層のプロトコルをサポートしており、層を越えた通話はできません。

詳細を見る:プログラマーの視点から見たプロトコル: TCP/IP 5 層ネットワーク モデル_Protect Xiao Zhouღ のブログ - CSDN ブログ

実際のネットワーク プロトコルは、現在最も広く使用されているネットワーク モデルでもあるTCP/IP 5 層ネットワーク モデルを使用します。

今回説明するUDPプロトコルはトランスポート層でよく使われるプロトコルです。

もう一つのより強力なプロトコルTCP、次のブログをお楽しみに〜


次に、UDP プロトコルを理解する

UDP(User Datagram Protocol)はコネクションレス型のトランスポート層プロトコルであり、データ伝送の信頼性を保証するものではありませんが、伝送速度が速く、オーバーヘッドが低いという特徴があります。UDP プロトコルは主に、オンライン ゲーム、分散システム情報の伝送など、高速なデータ伝送が必要であり、高いデータ信頼性は必要としないシナリオで使用されます (短距離伝送 UDP 伝送効率は非常に高い)。

2.1 UDP プロトコルの特徴:

  1. コネクションレス型: UDPプロトコルはデータ送信前にコネクションを確立する必要がなく、接続状態を維持する必要がなく、頭脳1つで送信できるため、通信速度が速い。

  2. 信頼性が低い: UDP プロトコルは、再送メカニズム、例外処理などの機能を備えていないため、データ伝送の信頼性を保証するものではなく、伝送中にデータが失われたり間違っていたりした場合、UDP プロトコルは一切の処理を実行しません。

  3. データグラム指向: データグラムは、ヘッダー (ヘッダー) とデータ自体を含むネットワーク上で送信されるデータの基本単位であり、ヘッダーはデータの宛先と「ロード」データとの関係を記述します。UDP プロトコルのヘッダーはわずか 8 バイトで、TCP プロトコルのヘッダーよりもはるかに小さく、オーバーヘッドも比較的小さいです。この知識点については、以下で詳しく紹介します。

  4. 全二重通信:電話など、双方が同時に話すことができる通信では、データを同時に両方向に送信できます。

  5. ブロードキャストとマルチキャストのサポート: UDP プロトコルはブロードキャストとマルチキャストをサポートし、複数のホストに同時にデータを送信できます。

黒板をノックするインタビューの質問: TCP と UDP の違いは何ですか?

TCP は、バイト ストリーム送信と信頼性の高いデータ送信を使用するコネクション指向の全二重通信プロトコルです。

UDP は、データグラム送信と信頼性の低いデータ送信を使用するコネクションレス型の全二重通信プロトコルです。


2.2 UDPプロトコルのメッセージフォーマット

プロトコルを学習する上で重要なのは、プロトコル メッセージの形式と、プロトコルが具体的にどのようにデータを編成するかを理解することです。

 UDP メッセージ本体は 2 つの部分に分かれています: UDP ヘッダー (8 バイトのデータ) + UDP データ/UDP ペイロード

  • ロード:比較的理解しやすく、アプリケーション層のデータグラムが格納されます。

  • UDPヘッダ:送信元ポート、宛先ポート、パケット長、チェックサム、構成、各部は2バイトを占め、記述できるデータ範囲は[0,65535]です。

メッセージを解析します。

  1. ソース ポート:データの送信元を示します。ポート番号はプロセスの識別子 (ソフトウェアによって送信される情報) と見なすことができます。結局のところ、トランスポート層はアプリケーション層にサービスを提供します。

  2. 宛先ポート:データの送信先を示します。データグラムが指定されたホストに到着した後、データグラムは分析のためにそのソフトウェアに送信されます (このプロセスでは、通信当事者が統一プロトコル形式に同意し、その後データをそれぞれ解析できます)他の)。

  3. トランスポート層のデータグラムがネットワーク層に入った後、ネットワーク層ヘッダーが追加されます。ネットワーク層ヘッダーには、送信元IPと宛先IPが記述されます。この層のプロトコルは、巨大なネットワークからターゲットホストを見つけるために使用できます。ネットワーク環境。

  4. メッセージ長: UDP データグラムのバイト サイズを記述します。長さは 2 バイトのみを占めるため、記述できるデータ範囲は [0, 65535] です。したがって、UDP データグラムの最大長は 65536 文字セクション = 64KB です。

  5. チェックサム:ネットワーク伝送は完全に安定しているわけではなく、情報伝送にはさまざまな方法があり、悪天候、強い磁界干渉、伝送媒体、信号の減衰などの理由で事故が避けられないため、チェックサムの目的は次のとおりです。現在送信されているデータが間違っているかどうかを判断するために使用されますチェックサムが間違っている場合は、送信されたデータも間違っているはずですチェックサムが正しくても、一定の確率でデータが間違っている可能性がありますチェックサムの検証方法は通常使用されますデータの内容(テキストペイロード内のデータ)をパラメータとしてアルゴリズムを計算し、受信側がUDPデータグラムを取得すると、ペイロード内のデータを取り出してチェックサムアルゴリズムに代入し、結果とチェックサムを比較します。同一であるかどうかを確認することで、データ送信が正確かどうかを判断することができます。(入力内容が同一であり、統一アルゴリズムにより得られるチェックサム結果も同一であることが前提となります)。データが信頼できるかどうかを判断できるのは受信側だけであり、UDP プロトコルには再送の仕組みがありません。間違っている場合は間違っていて、そのまま送信してください。

  6. UDPデータグラム本体\ペイロード:アプリケーション層のデータグラム、UDP パケット長 (最大値) の情報が含まれます。UDP ヘッダーはペイロード サイズを取得でき、最大パケット長は 64 バイトを記述でき、UDP ヘッダー全体は 8 バイトを占めます。したがって、最大ペイロード記憶域 (UDP データグラムが伝送できる最大アプリケーション層情報) は 64 - 8 = 56 バイトです。

ポート番号の詳細:

いわゆるポートはアプリケーションのハウス番号とみなすことができ、クライアントは IP アドレスを通じて対応する宛先を見つけることができますが、宛先には多数のアプリケーション ポートがあり、各アプリケーションはポート番号に対応します。

たとえば、私のコンピュータ qq があなたにメッセージを送信しました。このメッセージはネットワークを通じてあなたのコンピュータに送信されます。あなたのコンピュータに入った後、このメッセージはどのアプリケーション プログラム (プロセス) に送信されるべきかをどのようにして知ることができるのでしょうか? WeChat も Tencent によって所有されており、QQ によって送信されたメッセージは見たことがありません。重要な点は、アプリケーションが起動時にポート番号をバインドすることです (ポート番号は特定の範囲内でランダムに使用できます)。ホスト内の番号 この番号は繰り返すことができないため、メッセージがホストに入ると、ポート番号に従って指定されたアプリケーション プログラムに情報が送信され、アプリケーション プログラムはアプリケーションのデータグラム プロトコルに従って情報を分析します。層 (これは、通信当事者によって合意されたプロトコル、または qq 独自のプロトコルである可能性があります)。

ポート番号は2バイトしかなく、記述できるデータ範囲は[0,65535]と限られており、使用できるポート番号は限られています。1024未満のポート番号を「ウェルノウンポート」と呼びます。たとえば、http サーバーのポート番号は 80、ssh のポート番号は 22、ftp サーバーのポート番号は 21 です。したがって、プログラム設計ではポートのこの部分の使用を避けるようにする必要があります。


2.3 UDP プロトコルを使用して大きなファイルを転送する戦略

上で述べたように、UDP データグラムは最大 64 バイトを送信できます。ヘッダーを削除した後、有効なメッセージ ペイロードはわずか 56 バイトです。つまり、UDP データグラムは最大 56 バイトのコンテンツを送信できます。小さすぎます。 、曲の容量は何メガバイト (M) ですか。

大規模なファイル転送に直面して、UDP は大規模なデータグラムを複数の部分に分割し、複数の UDP データグラムを使用して送信します。受信側 (アプリケーション層) として、送信側 (アプリケーション層) と通信する必要があります。)データグラム。

例: 私はガールフレンドに小さな構成 (アプリケーション層データグラム) の大きな部分を送信しました。これは数百 KB であり、UDP プロトコルを使用して送信されます。1 つの UDP データグラムでは明らかに不十分なので、複数の部分に分割できます。データグラムを送信する場合、受信者 (ガールフレンド) としての qq は、送信された UDP データグラムを解析してアプリケーション層のデータグラムに分割する必要がありますが、このとき、相互に合意されたプロトコルに従って解析することができます。

受信側として、複数の UDP データグラムから上記のデータを 1 つのアプリケーション層データグラムに結合するにはどうすればよいでしょうか?

UDP データグラムのいわゆるカプセル化とアプリケーション層データグラムのセグメント化は、本質的には文字列の結合です。つまり、データグラムの本質は文字列であり、プロトコルはこれらの文字列をカプセル化、分割、解析する方法を記述します

UDP プロトコルでは分割されたデータグラムの再構築は規定されておらず、これはアプリケーション層プロトコルによって実装されるため(アプリケーション層が UDP プロトコルを使用することを選択するため)、データグラムの長さに応じてアプリケーション層のデータを設計する必要があります。一般的に、アプリケーション層プロトコルは、送信側で関連する処理を実行し、元のデータを複数の UDP データグラムに分割して送信し、受信側で受信した後に再組み立てします。たとえば、シリアル番号とその他の情報が UDP ヘッダーに添付され、受信側はこれらの情報を使用して、アプリケーション層のデータグラムを区別するための特別な区切り文字の使用など、データグラムを結合します。アプリケーション層によって制御されます。

いくつかの特別な区切り文字を使用した例:

これは、アプリケーション層プロトコルによって合意された戦略にすぎず、通信の双方がそのプロトコルを採用している場合に限り、カスタマイズできます。


大きなファイルを転送するためにUDPプロトコルを使用する必要がある場合は、TCPプロトコルを直接使用して送信する方法もあります(笑)UDPほど高速ではなくても、データ送信の信頼性は高く、それほど面倒ではありませんTCP は文字指向です 送信を調整するには、情報の分析を容易にするために、通信当事者がアプリケーション層プロトコルについて合意することも必要です。


 2.4 UDPプロトコルのワークフロー

  1. アプリケーションは、アプリケーション層のデータグラムを UDP プロトコルに送信します。

  2. UDP プロトコルは、送信元ポート番号、宛先ポート番号、データ長などの情報を含むデータを UDP データグラムにカプセル化します (アプリケーション層データグラムに基づいて UDP パケットを直接追加します)。

  3. UDP プロトコルは、UDP データグラムを IP プロトコルに送信します。

  4. IP プロトコルは、送信元 IP アドレスや宛先 IP アドレスなどの情報を含む、UDP データグラムを IP データグラムにカプセル化します。

  5. IP データグラムはネットワークを介して宛先ホストに送信されます。

  6. 宛先ホストの IP プロトコルは、IP データグラムを UDP データグラムにカプセル化解除します。

  7. UDP プロトコルは UDP データグラムをアプリケーションに送信します。

概要: UDP プロトコルは、シンプルで高速な伝送プロトコルであり、高速データ伝送を必要とするリアルタイム アプリケーションやアプリケーション シナリオに適しています。ただし、データ伝送の信頼性を保証するものではないため、重要なデータを伝送する場合にはTCPなどの他のプロトコルを使用する必要があります。


現在のところ、ネットワーク プログラミングにおける UDP プロトコルのブロガーによる共有は終了しています。皆様のお役に立てれば幸いです。何か間違っている場合は、批判と修正をお願いします。 

この問題は、プログラミング初心者に適したブロガーのコラム「JavaEE」に含まれており、興味のある友人は購読して他の「JavaEE の基礎」を閲覧することができます。

次の時間

この記事を読んでくださった皆さんに感謝します。これからも楽しいイベントが続きます: 暁州を守る ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* 

君に会えたよ、私の頭の上に星が全部落ちてくる…

おすすめ

転載: blog.csdn.net/weixin_67603503/article/details/130108983