UDPとは、TCP/IPにおけるトランスポート層プロトコルの1つである。
なお、ウリジン二リン酸のことを指すこともある。
概要
UDPは1980年8月に、RFC768として公開されている。関連リンクにあるRFC768のページを見てもらえばわかるが、UpdatesもUpdated byもObsoletesもObsoleted byもない。
- Updates - 参照先のRFCの一部を更新する。参照先のRFCは生きたまま
- Updated by - 参照先のRFCによって一部が更新されている。このRFCは生きたまま
- Obsoletes - 参照先のRFCを廃止し、このRFCに置き換える
- Obsoleted by - 参照先のRFCによって廃止され、置き換えられている
つまり、最初からここに書かれた文書から一切更新されてない、ということである。
内容
- 最初の16ビットが送信元ポート番号
- 次の16ビットが送信先ポート番号
- 次の16ビットがヘッダも含めたセグメントのオクテット数(なのでここの値の下限は8)
- 次の16ビットはチェックサム
- 以降はデータ
チェックサムの求め方は以下の通り。
- 頭に擬似ヘッダとして、以下の内容をつける
- IPv4の場合
- 送信元IPアドレス(32ビット)
- 送信先IPアドレス(32ビット)
- 0(8ビット)
- プロトコル番号(17、8ビット)
- UDP長(セグメントのオクテット数)
- IPv6の場合
- 送信元IPアドレス(128ビット)
- 送信先IPアドレス(128ビット)
- ペイロード長(セグメントのオクテット数)
- 0(24ビット)
- 次ヘッダ(17、8ビット)
- 全体の長さが16ビットの倍数でない場合、末尾に0をつけ、16ビットの倍数にする
- 16ビットごとに1の補数をとって、それらを加算する
- 3の結果の1の補数がチェックサムである。ただし、そのチェックサムが0の場合は、0xFFFFをチェックサムとする
受信側は、受信用のポート作ってそこから読み取って、データ・送信元IPアドレス・送信元ポートを受け取る。一方、送信側は送信用のポート、送信先のポートを指定してデータを送信する。
あと、IPとのやりとりと、UDPの用途の具体例が書いてある。
内容はこれでおしまいである。
UDPを使う具体例
- Domain Name System - 短い応答の場合、基本的にUDPを使う。TCPだと3ウェイハンドシェイクで遅くなるなど、パフォーマンス面で問題があるため
- TFTP - 少量のデータのファイル転送用。主にネットワークブートのブートストラップ用に用いられるが、これはTCPが実装面で極めて重厚なため、メモリなどが不足しやすいことなどが理由としてある(UDPは見ての通り非常にシンプルなので、実装コストはすごい安い)
- DHCP - IPアドレスなどの情報の自動取得。ブロードキャストが必要という理由から、UDPである必要がある(TCPでは確実に送信元もIPアドレスを持っていないと通信ができないが、UDPはブロードキャストで受け取るなら必ずしも送信元IPアドレスは設定されていなくても良い)。
- NTP - TCPでは3ウェイハンドシェイクという手続きを踏んでからでないと処理ができず、遅延が非常に大きい。また、確認応答を挟むことから、処理時間の遅延も大きいことから、時間同期のような処理には不向き。一方、UDPであれば確認応答を挟まないため、高速な処理が可能
関連静画
ウリジン二リン酸の構造式
関連リンク
関連項目