UDPは,IPネットワークを介してアプリケーション同士をつなぎ,データをやりとりするためのプロトコルである。

 IPネットワークの役割は,IPパケットを通信相手のパソコンに届けること。しかし,IPだけでは通信は成り立たない。受信側のパソコンは,ただIPパケットを受け取っただけでは,送られてきたデータをどのアプリケーションに渡せばいいのか判断できないからだ。

 そこで登場するのがUDPである。

アプリごとに固有の番号で識別

 UDPは,IPパケットの中身のデータがどのアプリケーションからどのアプリケーションあてに送られたものかを伝える役割を持つ。このとき使うのが「ポート番号」だ。0~65535の値をとる。アプリケーションごとに異なるポート番号を使うことで,通信相手のパソコンは受け取ったデータを適切なアプリケーションに届けられるようになる。複数のアプリケーションが同時に通信したときでも,データがごちゃ混ぜになる事態を避けられる。

 それでは,アプリケーション同士がUDPを使って通信する様子を具体例で見てみよう(図1-1)。

図1-1●UDPはアプリケーション間の通信を橋渡しするプロトコル
図1-1●UDPはアプリケーション間の通信を橋渡しするプロトコル
ネットワーク・アプリケーション同士がTCP/IPで通信するには,やりとりするIPパケットがどのアプリからどのアプリあてに送られているのかを識別する必要がある。UDPはその識別に使うポート番号を管理するために特化したプロトコルだ。  [画像のクリックで拡大表示]

 アクセス元のパソコンAではまず,アプリケーションがUDPを処理するソフトウエア・モジュール「UDPスタック」に対してデータ送信を依頼する。例えば,UDPを使う典型的なアプリケーションであるDNSの場合なら,DNSクライアントがUDPスタックに「このデータを53番ポートあてに送ってください」と依頼するわけだ

 依頼を受けたUDPスタックは,受け取ったデータにあて先ポート番号などの情報を付けてUDPパケットを作り,IPネットワークに送り出す。パソコンAのUDPスタックが行う処理は基本的にこれだけだ。

 一方,データを受信するパソコンBのUDPスタックが受け持つ仕事は,届いたUDPパケットに書かれているあて先ポート番号をチェックしてアプリケーションに振り分けること。あて先ポート番号が53番なら,サーバーとして53番ポートでアクセスを待っているDNSサーバー・ソフトへデータを渡すという具合だ。

 UDPの通信はこれで完了だ。このやりとりを繰り返すことで,UDPを使うアプリケーションの通信は進んでいく。

たった4項目の情報がすべて

 実は,ポート番号によるアプリケーションの対応付けは,UDPの専売特許ではない。UDPと対になるプロトコルであるTCPもまったく同じ役割を持っている。

 では,「UDPならでは」といえる機能はほかにあるのだろうか。UDPを初めて学ぶ人にとっては少々驚きかもしれないが,そのようなものは何もない。ポート番号の管理以外は何もしないことがUDPの最大の特徴であり,これこそがUDPを使うメリットなのだ(この意味についてはあとのLessonでおいおい説明する)。

 ほかに何の機能もないことは,UDPのパケット・フォーマットを見れば明らかだ(図1-2)。

図1-2●ポート番号はUDPヘッダーに書き込んでやりとりする
図1-2●ポート番号はUDPヘッダーに書き込んでやりとりする
UDPパケットは,IPパケットのデータ部分に入れて運ばれる。UDPパケットはUDPヘッダーとUDPデータで構成され,UDPヘッダーにはアプリケーション識別用のポート番号など四つのフィールドがある。
[画像のクリックで拡大表示]

 UDPパケットは,UDPヘッダーとUDPデータで構成する。UDPデータには個別のアプリケーションが使うデータが入る。UDPが果たす機能はUDPヘッダーを使う。

 といっても,UDPヘッダーには,(1)送信元ポート番号,(2)あて先ポート番号,(3)長さ,(4)チェックサム──という四つのフィールドしかない。長さは8バイト固定だ。TCPヘッダーが持つ通信の制御にかかわるフィールドは,UDPヘッダーには一切ない。あとから機能を追加できる余地すら残していない。データをアプリケーションに届けるために必要な最低限の情報以外はすべて削ってしまっているのだ。

 これほど割り切ったプロトコルであるUDPを使うことにいったいどんなメリットがあるのか。続くLesson2~4で見ていこう。