UDPとTCP
1. 序章
ユーザーデータグラムプロトコル(UDP)と伝送制御プロトコル(TCP)は、コンピューターネットワーク上で最も重要な2つのデータ伝送プロトコルです。
このチュートリアルでは、それらを詳細に分析します。 次に、それらを比較し、重要な違いについて説明します。
2. UDP
2.1. コアプロパティ
デビッドP。 リードは1980年にUDPプロトコルを設計し、 RFC768で文書化しました。 UDPは、OSIモデルのトランスポート層で機能する単純なプロトコルです。 アプリケーションはUDPを使用して、インターネットプロトコルを介して他のホストにデータを送信できます。 UDPで送信されるメッセージは、データグラムと呼ばれます。 UDPプロトコルのコアプロパティを分析してみましょう。
まず、UDPプロトコルはコネクションレス型です。簡単に言うと、会話を開始、維持、または終了するメカニズムがないことを意味します。 さらに、フロー制御や再送信の手法はありません。 したがって、受信者がすべてのデータグラムを取得すること、またはそれらが有効な順序で送信されることを保証するものではありません。 したがって、UDPは信頼性の低い配信プロトコルと呼ばれることもあります。
UDPの接続と信頼性メカニズムの欠如には特定の理由があります。 データグラムにセキュリティデータの追加バイトを保存する必要はありません。 したがって、UDP伝送は軽量で高速です。 したがって、UDPは、オンラインゲーム、ビデオ会議、音楽ストリーミングソフトウェアなど、伝送速度が重要なアプリケーションでよく使用されます。
さらに、 UDPはステートレスであり、マルチキャストを有効にします。 したがって、多数のホストにメッセージを送信する場合に適しています。 これは、IPTV(インターネットプロトコルテレビ)やライブストリーミングサービスなどのストリーミングアプリケーションで特に役立ちます。 前述したように、UDPを使用して送信されるデータグラムは軽量です。 次のサブセクションでは、UDPのデータグラム構造を指定します。
2.2. データグラム構成
データグラムは、パケット交換ネットワークを介して転送されるデータの自己完結型の基本単位です。 データグラムは通常、ヘッダーとペイロードで構成されます。 UDPヘッダーには4つのフィールドが含まれ、各フィールドは4バイトです。 ペイロードは、ホスト間で転送されたデータを格納します。 データグラム構造を詳細に分析してみましょう。
送信元ポート番号は、送信者ホストのポートを識別します。 使用する場合、必要に応じて応答を送信するポートです。 ただし、このフィールドはオプションであり、使用しない場合の値は0です。
宛先ポート番号は受信者のポートを識別し、必須フィールドです。
長さは、データグラム(そのヘッダーとペイロード)の長さをバイト単位で指定するフィールドです。 ヘッダーの長さは8バイトです。 したがって、これはデータグラムの最小の長さでもあります。 理論的には、単一のデータグラムの最大長は65527バイトです。 ただし、IPv6 ジャンボグラムを使用するなど、その制限を拡張する方法があります。
最後に、チェックサムを使用して、ヘッダーとペイロードの正確性を検証します。長さは16バイトです。 これは、データグラムが破損していないかどうかをチェックするUDPの唯一のメカニズムです。 ただし、チェックサムはオプションのフィールドです。
3. TCP
UDPと同様に、伝送制御プロトコルはOSIモデルのトランスポート層で動作し、ホスト間でデータを転送します。 ただし、ユーザーデータグラムプロトコルとはまったく異なる方法で機能します。 TCPプロトコルの仕様は、1974年に RFC675で公開されました。 伝送制御プロトコルのコアコンセプトについて説明しましょう。
何よりもまず、TCPはコネクション型です。 つまり、送信者と受信者は接続を確立し、データの転送に同意する必要があります。 そのために、TCPはスリーウェイハンドシェイクと呼ばれる手法を使用します。 これについては、次のサブセクションで詳しく説明します。
第二に、伝送制御プロトコルは信頼できます。 エラーがチェックされ、順序付けられたデータのストリームを提供します。 転送されたパケットは、プロトコルスタックの他の層で失われる可能性があります。 TCPはそのような問題を検出することができます。 このような場合、失われたパケットの再送信が必要になります。 さらに、順不同のパケットを再配置できます。 パケットを完了または注文できない場合は、送信者に問題を通知します。
第三に、TCP伝送はユニキャストおよび双方向です。 これは、必要な1対1のハンドシェイクの結果です。 TCPは複数のホストを処理できません。 実装が可能であったとしても、TCPは複雑になりすぎます。 したがって、市場にはマルチキャストTCPベースのソリューションはありません。
全体として、TCPは信頼性が高く、エラーがチェックされた双方向の伝送を提供します。 このような属性を必要とする多数のインターネットアプリケーションは、World Wide Web、セキュアシェル、ファイル転送プロトコル(FTP)などを含むTCPを使用します。
3.1. 接続の確立
TCPは、クライアントとサーバー間の接続を確立するために3ウェイハンドシェイクメカニズムを使用することはすでに説明しました。 以下に、前述の手法を示すフローチャートを示します。
プロセスは次のようになります。
- SYN。 クライアントは、SYNセグメントをサーバーに送信することによってプロセスを開始します。 以前は、セグメントのシーケンス番号にランダムな値(たとえば、100)を割り当てていました。 SYNが送信された後、クライアントはSYN-SENT状態になります。
- SYN-ACK。 サーバーはSYNセグメントを受信し、SYN-RECEIVED状態になります。 応答として、シーケンス番号(300など)とACKセグメントを含むSYNセグメントを送信します。 ACKセグメントのシーケンス番号の値は、クライアントのシーケンス番号+1に設定されます。 この例では、101になります。
- クライアントはSYN-ACKを受信し、ESTABLISHED状態になります。 シーケンス番号がサーバーのシーケンス番号+1に設定されたACKセグメントを送り返します。 この例では、301になります。 サーバーはACKセグメントを受信し、ESTABLISHED状態にもなります。 最後に、データ転送が発生する可能性があります。
接続が成功した場合の3ウェイハンドシェイクの仕組みについて説明しました。 ホストの1つが接続を閉じる状況が存在します。 両方のホストが接続を閉じることができます。 これは、FINフラグを使用してセグメントを送信することで実行できます。 FIN要求はACKセグメントによって確認される必要があります。 ただし、確認なしで緊急シャットダウンを実行するRSTフラグもあります。
3.2. パケット構造
送信元ポートは送信者のポートを識別し、宛先ポートは受信者のポートを識別します。
シーケンス番号は、データの最適化前のディスク上のファイルの場所を指定します。 したがって、それぞれのパケットからファイルをまとめることができます。
確認応答番号は、他のホストがパケットを受信したことを確認します。
データオフセットはヘッダーの長さを表します。 32ビット長のヘッダーの行数を記述します。 したがって、データの先頭を決定する必要があります。
予約済みフィールドは、将来の目的のために予約されたスペースです。 したがって、現時点ではゼロで埋められています。
フラグは、パケットの目的に関する情報を提供します。 ウィンドウサイズは、ホストが受信しようとしているデータのサイズを通知し、チェックサムはデータの整合性を検証します。
最後に、緊急ポインタは、パケットのデータのどれだけが緊急と見なされるかを示し、オプションフィールド(0〜320ビット、32ビットの倍数)には、可能な追加のオプションと命令が含まれます。 オプションが32ビットの単位データであることを確認するために、必要に応じてフィールドにゼロを埋め込むことができます。
4. UDPとTCP
これまで、UDPおよびTCPプロトコルを詳細に分析してきました。 したがって、要約すると、それらを比較して、それらのコアコンセプトが互いにどのように異なるかを見てみましょう。
5. 結論
この記事では、UDPおよびTCPプロトコルについて詳しく説明しました。 まず、UDPのコア機能について説明し、データグラムのビルドを分析しました。 次に、TCPの重要な属性について説明しました。 さらに、TCPの3ウェイハンドシェイクの特性を明らかにしました。 次に、TCPのパケット形式について説明しました。 最後に、両方のプロトコルを比較しました。