前回はTCPの仕組み(コネクションの確立・切断)を学びました。
今回は、トランスポート層で動作するもう1つの代表的なプロトコルである UDP(User Datagram Protocol) を学びます。TCPと対比しながら理解することで、それぞれの特徴がより明確になります。
前回学んだTCPの特徴を、簡単におさらいします。
UDP はこの2つの特徴を どちらも持たない、非常にシンプルなプロトコルです。
UDP(User Datagram Protocol) はトランスポート層で動作するプロトコルの1つで、以下のような特徴を持ちます。
一見するとデメリットばかりに思えるかもしれませんが、この「シンプルさ」こそがUDPの最大の特徴であり、後述する通り、用途によってはTCPより適している場面が数多くあります。
UDP header は TCP header と比べて非常にシンプルな構造をしています。

TCP header にあった「シーケンス番号」「確認応答番号」「コントロールビット」「ウィンドウサイズ」といったフィールドは、UDPヘッダには存在せず、非常にコンパクトです。
また、チェックサムがあるため、データが通信の途中で壊れていないかを検出することはできます。
ただし、TCPのように「壊れていた/届いていなかった場合に再送する」という処理は行わず、検出した時点でそのデータは単に破棄されます。
この「検出はするが、回復(再送)はしない」という点が、UDPの信頼性に対するスタンスです。
UDP には TCP のようなコネクション確立の手順がありません。
送信側は相手が受信できる状態かどうかを事前に確認することなく、いきなりデータ(UDP では データグラム:Datagram と呼ばれます)を送信します。

上記は DNS 通信の例です。RT1 は 3 way handshake のような事前準備を行わず、いきなり問い合わせのデータを送信しています。
RT2 も UDP の仕組みとしては「返ってくれば受け取る」というだけであり、TCP の ACK のような、UDP 自体による確認応答の仕組みはありません。
ここまでの内容を踏まえ、TCPとUDPの違いを整理します。

信頼性を保証しない UDP ですが、以下のようなプロトコルでは TCP よりも UDP が適しています。
これらに共通するのは、「多少データが失われても、速度や即時性を優先したい」 という要求です。信頼性が必要なアプリケーションでは、UDP の上にアプリケーション層独自の信頼性確保の仕組みを実装するケースもあります。
これでトランスポート層の代表的な2つのプロトコル(TCP・UDP)について、それぞれの特徴と使い分けを学びました。
次回はいよいよ、これまで学んできた「IPアドレス」「ルーティング」「MACアドレス」「スイッチング」「ARP」「TCP/UDP」の知識をすべて統合し、「異なるセグメント間の通信」 がどのように成立するのかを学びます。
ログインすると、進捗を保存できます。
← ロードマップ に戻る