TCP/IP Vol.1 プロトコル
11 章 UDP
Seibe (Arch, Murai Lab.)
村井研究会TCP/IP輪講会2015.01.22
目次
はじめに 仕様と概要データグラム データグラムとヘッダフィールド 断片化
IP
フラグメンテーション経路
MTU
探索UDP
を用いた経路MTU
探索UDP
とARP UDP
によるARP
の氾濫 まとめ まとめおまけ
UDPv6
上位層プロトコル、派生プロトコル
はじめに UDP (User Datagram Protocol)
•
トランスポート層プロトコルの1
種。RFC 768
に定義されている。•
信頼性を保証しない、シンプルでデータグラム指向なプロトコル。検査和オプションはあるが、再送・フロー・輻輳は制御しない。
Aside
よく比較されるTCPは、ストリーム指向と言われる。
実装がシンプルなら仕様書もシンプルで、RFC 768は5,896バイトしかない。
UDP データ グラム
発信元IPアドレス(32) 宛先IPアドレス (32)
0 (8) プロトコル (8) UDPデータ長 (16)
発信元ポート番号 (16) 宛先ポート番号 (16)
UDPデータ長 (16) UDP検査和 (16)
データ
パッドバイト
0 7 8 15 16 23 24 31
UDP ヘッダ Source/Destination Port ( ポート番号 )
•
発信元と宛先それぞれのポート番号が格納される•
アプリケーションがデータの転送先を識別(デマルチプレクス)するた めにあるAside
UDPをデマルチプレクスする前にIPデータグラムがデマルチプレクスされ ているために、UDPのポート番号がTCPによって覗かれることはない。
UDP ヘッダ Length (UDP データ長 )
• UDP
ヘッダとUDP
データを合わせた長さをバイト単位で示す• 0
バイトのデータが許されるため、最小値は8
バイトとなる•
理論上の最大値は65535 (2^16 - 1)
バイトAside
UDPデータ長は、全データ長からIPヘッダ長を引くことで算出できるため、
冗長であるといえる。
UDP ヘッダ Checksum (UDP 検査和 )
• UDP
ヘッダとUDP
データをカバーする検査和•
正しい宛先に到着したことをダブルチェックし、さらにUDP
データが正 しいことをチェックするために用いる•
このフィールドはオプションである。利用しない場合は0
で埋める•
受け手がエラーを検出しても、エラーメッセージは生成されず、ただ破棄される。また、そもそも受け手が計算しない場合もある。
UDP ヘッダ Checksum (UDP 検査和 )
•
利用する場合は、UDP
ヘッダの前にUDP
疑似ヘッダを付け加える。データ長が奇数バイトの場合は、データグラムの末尾にパッドバイト も付け加える。
•
それ以外は、IP
検査和と同じ計算方法であるAside
IP検査和はIPデータ(つまりプロトコル層)をカバーしていないため、エンド ツーエンドのチェックサムとしてUDP検査和が用意された
断片化 IP Fragmentation (IP 断片化 )
•
下位層におけるフレームサイズ上限(MTU)
に対応するための措置• IP
データグラムが経路MTU
より大きいとき、断片化を行う•
断片化された各データグラムは、IP
ヘッダを持つ独立したパケットに なる。パケットは、最終宛先に到達するまで再構築されないAside
一般にMTUが大きいほど転送効率が良い。通信品質が低い環境では、
MTUが小さいほうがエラーによる再送が減り、転送効率が改善する場合 もある
断片化
バージョン (4) ヘッダ
長 (4) サービスタイプ (8) 全長 (16) 識別子 (16) ビットフ
ラグ (3) フラグメントオフセット (13)
生存時間 (8) プロトコル (8) ヘッダ検査和 (16) 発信元IPアドレス(16)
宛先IPアドレス (16) オプション
データ
0 7 8 15 16 23 24 31
断片化 Identification ( 識別子 )
•
送り手が転送する各IP
データグラムにおいて一意の値•
断片化される際に、全て同じ値がコピーされる•
これを用いて、受け手は複数のフラグメントのまとまりを把握できる断片化 Fragment Offset ( フラグメントオフセット )
•
オリジナルのデータグラムの先頭からどの程度オフセットされている かを示す•
これにより、受け手がフラグメントの順序を把握できるAside
各フラグメントのデータ長フィールドは、そのフラグメントのサイズに変更 される
断片化 Flag: more fragments ( MF フラグ )
•
このビットがON
のデータグラムは、最後のフラグメント以外のフラグ メントであることを示す•
これにより、受け手がフラグメントの終わりを把握できるAside
断片化は、生成されたフラグメントのデータ部分(IPヘッダ以外)が、最後 のフラグメント以外は、すべて8バイトの倍数にならなければならない
断片化 Flag: don’t fragment ( DF フラグ )
•
このビットがON
のデータグラムは、断片化してはいけないことを示す•
もしも、断片化が必要なデータグラムにDF
フラグが設定されていた 場合、それは破棄され、ICMP
到達不可エラー(フラグメンテーション 要求)が返されるAside
通常のICMP到達不可エラーとの違いは、エラーに次のホップのMTUが 含まれる点である。もしルーターがこのICMPエラー形式に対応していな い場合は、通常のICMP到達エラーが返される
経路 MTU
探索
UDP による経路 MTU 探索
•
割愛Aside
とくになし
UDP と ARP UDP による ARP の氾濫
• UDP
は突然送信される(
送信前のコネクションなど無い)
• ARP
キャッシュが空の場合、ARP
応答より前にUDP
が送信され、ことごとく失敗しデータが破棄される場合がある
•
詳細は割愛Aside
ARP応答を待つ間、宛先向けのパケットのうち最後の1つだけを保持する 実装がほとんどである
まとめ UDP は役に立つ(盲信)
• IP
断片化の仕組みを知るのに、UDP
は役立った•
経路MTU
探索にも、UDP
は役立った• ARP
実装を観測するのにも、UDP
は役立った• UDP
は、単純なトランスポート層プロトコルであった•
ユーザープロセスに提供するサービスは、ポート番号と、オプショナ ルな検査和であったおまけ UDP に関連するプロトコル
•
上位プロトコルDNS
、TFTP
、SSDP
、DTLS
、DCCP-UDP
、SOAP/UDP
•
派生プロトコルUDP-Lite
UDPv6
• UDP
検査和が必須フィールドになった• IPv6
アドレスが128
ビットな分、疑似ヘッダも肥大化したおまけ
発信元IPv6アドレス(128)宛先IPv6アドレス(128) UDPデータ長 (32)
0 (24) プロトコル (8)
発信元ポート番号 (16) 宛先ポート番号 (16)
UDPデータ長 (16) UDP検査和 (16)
データ
パッドバイト
0 7 8 15 16 23 24 31