速度重視ゆえの超シンプルさ!UDPヘッダーのフィールド構成
「とにかく速く処理したいなら、余計な情報はくれなくていいんですよ…。」
はい、こんにちは!松井真也です。シリーズ「ネットワークからアプリへの橋渡し:トランスポート層の世界」第8回でございます!
前回から、トランスポート層のプロトコルのなかでも「UDP」を紹介していきます。UDPは、コネクションレスかつステートレスであり、低遅延、速度重視のプロトコルでしたね。リアルタイムでの通信が必要なサービス(IP電話など)に使われるのでした。
さて、UDPとはどんなものか分かったところで、UDPのヘッダー構成の話に進んでいきましょう。TCPでも固定部分で20バイトありました。果たして、UDPはどうでしょうか?
早速見てみましょう!
UDPヘッダの構造
UDPでの通信を理解するためには、UDPヘッダの構造を知ることが不可欠であり、また近道でもあります。
UDPヘッダは、送信元と宛先のポート番号、データグラムの長さ、そしてチェックサムから成り立っています。絵にしますか。
うわ、フィールド(ヘッダの構成要素)が少ないですね~。4つだけで、8バイトしかありません。TCPとくらべるとシンプルさが一目瞭然ですな。
まずは、ヘッダが極めてシンプルであることが確認できました。
各フィールドの役割は?
それでは、各フィールドがどんな役割を果たしているか順にみていきましょう!
1)送信元ポートと送信先のポート
ポート番号は、どのアプリケーションがデータを送受信しているかを特定するためのものでしたね。
クライアントがサーバに何かを要求する場合、クライアント側のポートは、エフェメラル(又はダイナミック)ポート、サーバ側はウェルノウンポートになることが基本です。ちょっと復習でした。
2)データ長
ヘッダを含むデータグラム(パケット)全体のサイズを示しています。ですので、ヘッダ自体が8バイトですから、それ以上の値になります。
3)チェックサム
チェックサムは、データが送信途中で誤って変更されたり、損傷したりしていないかを検証できます。これはオプションで省略可能です。
ん?なんかおかしくないですか。TCPと違って再送制御しないんですよ?誤りを検知したところで、何をしようというんですかね?
少し調べました。一つは、クライアントは、エラーを含むデータを破棄することができます。もう一つは、上のレイヤー(アプリケーション層など)で誤りに基づき、必要な対応をとることがあるようです。なるほど、通信全体のプロトコルスタックで考えてないといけないのですね~。
このとおり、フィールドが少ない、即ち、持っている機能が少ないのがUDPです。が、これはUDPがTCPより劣っているプロトコルということをいみするのではなく、オーバヘッドを減らして高速な通信を可能にしているのだということを今一度、強調しておきましょう!
はい、本日はここまで。今回は、UDPヘッダの構成についてお話ししました。
で、次回は、UDPを使ったプロトコルについて深掘りしましょう!
では。