(Translated by https://www.hiragana.jp/)
User Datagram Protocol - Wikipedia コンテンツにスキップ

User Datagram Protocol

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
UDPから転送てんそう

User Datagram Protocol(ユーザ データグラム プロトコル、UDP)はIPネットワークうえのアプリケーションあいだデータグラム送信そうしん実現じつげんする通信つうしんプロトコルである[1]

概要がいよう

[編集へんしゅう]

UDPはインターネットはじめとしたInternet Protocolネットワークじょう利用りようされる通信つうしんプロトコルである[2]。ホストあいだ通信つうしんになうIPじょうでアプリケーションあいだ通信つうしん可能かのうにする[3]通信つうしんデータグラム方式ほうしき、すなわち到達とうたつ保証ほしょう流量りゅうりょう制御せいぎょ順序じゅんじょ制御せいぎょをせず、データグラムをステートレスコネクションレス相手あいてがわへと送信そうしんする。またブロードキャストマルチキャストをサポートしている[4]

デイヴィッド・P・リード英語えいごばんが1980ねん設計せっけいし、RFC 768定義ていぎした(STD番号ばんごう: 6)。非常ひじょうにシンプルに設計せっけいされており公式こうしき仕様しようRFC 768はわずか3ページである。インターネット・プロトコル・スイート観点かんてんではトランスポートそうプロトコルにぞくする。IPヘッダにおけるプロトコル番号ばんごうは17である。OSI参照さんしょうモデルてはめるのであればトランスポートそう相当そうとうする。しばしば対比たいひされるプロトコルにTCPSCTPがある。

適時てきじせいひくレイテンシ要求ようきゅうされるサービスで利用りようされる[5]とく途中とちゅうでデータがちても問題もんだいすくない音声おんせい画像がぞうストリーム形式けいしきでの配信はいしんVoIPMPEG-TSIP放送ほうそうなど)、ちいさなデータをリアルタイムで大量たいりょう転送てんそうするオンラインゲームなどで活用かつようされる。上位じょういプロトコルとしてはSNMPTFTPDNSDHCPRTPなどがげられる。

設計せっけい方針ほうしんとして輻輳ふくそう制御せいぎょたないため、ネットワークが輻輳ふくそうする原因げんいんとなるケースが問題もんだいてんとして存在そんざいする。

機能きのう

[編集へんしゅう]

UDPはInternet Protocolうえ利用りようされるプロトコルであり[2]、IPとわせてUDP/IPスタックとして機能きのうする。一方いっぽうでUDPはそれ単体たんたいでプロトコルであり、UDP自体じたい提供ていきょうする明確めいかく機能きのうがある。以下いかはこの2つの観点かんてんもとづいた機能きのう説明せつめいである。

UDP/IPスタック

[編集へんしゅう]

つぎひょうはIP、UDP/IPスタック、TCP/IPスタックが提供ていきょうする機能きのう比較ひかくである。

ひょう. IP, UDP/IP, TPC/IP 比較ひかく
IP UDP/IP TCP/IP
ホストあいだ通信つうしん by アドレス
アプリあいだ通信つうしん by ポート -
パケットトランザクション [6]
バイトストリーム送信そうしん - -
信頼しんらいせい/到達とうたつ保証ほしょう - -
流量りゅうりょう制御せいぎょ - -
順序じゅんじょ制御せいぎょ - -
輻輳ふくそう制御せいぎょ - -

すなわちUDP/IPは「ネットワークのネットワークにおけるトランザクション指向しこうのアプリケーションあいだデータグラム送信そうしん[1]」を実現じつげんする。UDPはこれを最小限さいしょうげんのプロトコルで実現じつげんするよう意図いとされているため[7]、UDP/IPはTCP/IPよりすくない機能きのうのみを提供ていきょうする。単一たんいつパケットの到達とうたつ保証ほしょう複数ふくすうパケットにわた流量りゅうりょう制御せいぎょ順序じゅんじょ制御せいぎょはサポートしていない(データグラムモデル)。このため、UDPを Unreliable Datagram Protocol信頼しんらいできないデータグラム・プロトコル)とぶこともある[8]

UDPは2つの機能きのうのみを提供ていきょうする。  

  • ホストない通信つうしんけ: ポート
  • データグラム完全かんぜんせいチェック: チェックサム

IPはホストあいだ通信つうしん可能かのうにするが、そのままだとホストへのぜん信号しんごうを1つのアプリケーションのみがる。UDPはポート機能きのう提供ていきょうすることで1ホストない複数ふくすうアプリケーションへの通信つうしんけを可能かのうにする。またIPはヘッダチェックサムによる宛先あてさきあやま検出けんしゅつ可能かのうにするが、そのままだとペイロードの破壊はかい検出けんしゅつできない。UDPはIPアドレス・ポート・ペイロードにもとづくチェックサムを提供ていきょうすることで単一たんいつデータグラムのルーティングあやまりおよびデータ破壊はかいを (100%ではないが) 検出けんしゅつできる[9]

すなわちUDPはアプリケーションあいだ通信つうしん可能かのうにし[3]、パケットトランザクション(all-or-nothing通信つうしん[10])を提供ていきょうする[11][12]

仕組しく

[編集へんしゅう]

パケット構造こうぞう

[編集へんしゅう]

UDPの送受信そうじゅしん単位たんいユーザデータグラムえい: user datagram)であり、UDPヘッダえい: UDP header)およびデータえい: data)から構成こうせいされる。ビット列びっとれつとしてつぎ構造こうぞうつ。

オフセット(ビット) 0 – 15 16 – 31
0 送信そうしんもとポート番号ばんごう 宛先あてさきポート番号ばんごう
32 データちょう チェックサム
64+  
データ
 

UDPヘッダには4つのフィールドがあり、それぞれ2バイト(16ビット)である[5]。そのうち2つ(ピンク色ぴんくいろ部分ぶぶん)はIPv4ではオプションである。IPv6では送信そうしんもとポート番号ばんごうだけがオプションである(後述こうじゅつ)。

送信そうしんもとポート

[編集へんしゅう]

送信そうしんもとポートえい: Source Port)は送信そうしんがわプロセスのポートである[13]

送信そうしんもとポートはUDPヘッダの任意にんいフィールドである[14]使用しようはゼロめされる[15]追加ついか情報じょうほうがなければ返信へんしん宛先あてさきポートはこの番号ばんごう想定そうていされる[16]送信そうしんもとがクライアントの場合ばあいエフェメラルポート番号ばんごうということがおおい。送信そうしんもとがサーバの場合ばあい、ウェルノウンポート番号ばんごうということがおお[4]

宛先あてさきポート

[編集へんしゅう]

宛先あてさきポートえい: Destination Port)は受信じゅしんがわプロセスのポートである。

宛先あてさきポートはUDPヘッダの必須ひっすフィールドである。送信そうしんもとポート番号ばんごう同様どうよう宛先あてさきがクライアントならエフェメラルポート、サーバならウェルノウンポートということがおお[4]

データちょう

[編集へんしゅう]

データちょうえい: Length)はユーザーデータグラム(UDPヘッダ + データ)のオクテットすうである[17]

データちょうはUDPヘッダの必須ひっすフィールドである。UDPヘッダが8バイト固定こていであるため最小さいしょうは 8 である[18]理論りろんじょう上限じょうげんは65,535バイト(ヘッダ8バイト + データ65,527バイト)である。下位かいそうIPv4場合ばあい実際じっさい上限じょうげんは65,507バイト(IPヘッダ20バイトとUDPヘッダ8バイトをいた)となる[4]IPv6のジャンボグラム機能きのうでは、65,535バイトをえるサイズのUDPパケットをあつかえる[19]。この場合ばあい、IPv6のオプションヘッダでサイズを指定していし、最大さいだい4,294,967,295バイト(232 - 1)を指定していできるので、ヘッダの8バイトをくと最大さいだい4,294,967,287バイトのデータをあつかえる。

チェックサム

[編集へんしゅう]

チェックサムえい: Checksum)は「IP疑似ぎじヘッダ + ユーザーデータグラム + パディング」にたいするチェックサムである[20]

チェックサムはUDPヘッダの条件じょうけん任意にんいフィールドである[21]使用しようはゼロめされる[22]。ヘッダとデータのあやま検出けんしゅつ使用しよう。IPv6ではオプションではないので、ゼロにはできない[23][24] チェックサムの計算けいさんほうRFC 768以下いかのように定義ていぎされている。

IPヘッダからの情報じょうほうつくられる擬似ぎじヘッダとUDPヘッダとデータをながさが2オクテットの倍数ばいすうになるように(必要ひつようなら)がゼロのオクテットでパディングし、かく2オクテットの1の補数ほすう総和そうわの1の補数ほすう下位かい16ビットをチェックサムとする[25]

つまり、ぜん16ビットワードを1の補数ほすう演算えんざんしあわせる。その合計ごうけいを1の補数ほすうすればUDPのチェックサム・フィールドのになる。

チェックサム計算けいさん結果けっかがゼロになる場合ばあい(16ビット全部ぜんぶが0)、チェックサムを省略しょうりゃくする場合ばあい区別くべつするため、その1の補数ほすうぜんビットが1)を設定せっていする。

IPv4IPv6ではチェックサム計算けいさん使つかうデータに差異さいがある。

IPv4 擬似ぎじヘッダ
[編集へんしゅう]

IPv4じょうのUDPでは、実際じっさいのIPv4ヘッダからの情報じょうほうからつくった擬似ぎじヘッダをチェックサム計算けいさん使用しようする。擬似ぎじヘッダは実際じっさいのIPv4ヘッダそのものではない。以下いかにチェックサム計算けいさんにのみ使用しようする擬似ぎじヘッダをしめす。

bits 0 – 7 8 – 15 16 – 23 24 – 31
0 送信そうしんもとIPアドレス
32 あてさきIPアドレス
64 ゼロ プロトコル番号ばんごう UDPちょう
96 送信そうしんもとポート番号ばんごう 宛先あてさきポート番号ばんごう
128 データちょう チェックサム
160+  
データ
 

送信そうしんもとIPアドレスとあてさきIPアドレスはIPv4ヘッダにあるである。プロトコル番号ばんごうはUDPをあらわすので17 (0x11) である。UDPちょうフィールドはUDPのヘッダとデータの全長ぜんちょうである。

UDPチェックサム計算けいさんはIPv4ではオプションである。チェックサムを使つかわない場合ばあいはゼロを設定せっていする。

IPv6 擬似ぎじヘッダ
[編集へんしゅう]

IPv6じょうのUDPでは、チェックサムは基本きほんてき必須ひっすである。ただしUDPじょうでトンネリングプロトコルを利用りようする場合ばあい例外れいがいてき計算けいさん省略しょうりゃくしゼロに設定せっていして[26]。チェックサムの計算けいさんほうRFC 2460つぎのように文書ぶんしょされている。

トランスポートそうかそれより上位じょういのプロトコルで、IPヘッダないのアドレスをチェックサム計算けいさん使つか場合ばあい、IPv6では128ビットのIPv6のアドレスを使用しようする[23]

チェックサム計算けいさんでは、実際じっさいのIPv6ヘッダを真似まねつぎのような擬似ぎじヘッダをもちいる。

bits 0 – 7 8 – 15 16 – 23 24 – 31
0 送信そうしんもとIPアドレス
32
64
96
128 あてさきIPアドレス
160
192
224
256 UDPちょう
288 ゼロ つぎのヘッダ
320 送信そうしんもとポート番号ばんごう 宛先あてさきポート番号ばんごう
352 データちょう チェックサム
384+  
データ
 

送信そうしんもとIPアドレスはIPv6ヘッダにある使つかう。あてさきIPアドレスは最終さいしゅうてきなあてさきであり、IPv6パケットにルーティングヘッダがなければIPv6ヘッダないのあてさきIPアドレスを使つかい、さもなくば送信そうしんがわではルーティングヘッダの最後さいご要素ようそを、受信じゅしんがわではIPv6ヘッダのあてさきIPアドレスを使つかう。つぎのヘッダというフィールドはプロトコル番号ばんごう意味いみし、UDPなので17を指定していする。UDPちょうフィールドはUDPのヘッダとデータをわせたながさである。

伝達でんたつしたい情報じょうほう収納しゅうのうされる。

UDPモジュール

[編集へんしゅう]

UDPモジュールはソケットかいしてプログラムからアクセスする場合ばあいおおい。ポート番号ばんごう0は送信そうしんがわプロセスが応答おうとう期待きたいしていない場合ばあい使つかうこともゆるされている。

用途ようと

[編集へんしゅう]

UDPを利用りようするインターネットの重要じゅうようなアプリケーションはいくつもある。以下いかはそのれいである。

UDPじょう信頼しんらいせい保証ほしょうプロトコルをせて利用りようするケースも存在そんざいする。TFTPなどのアプリケーションでは、アプリケーションそう必要ひつようおうじて基本きほんてき信頼しんらいせい機構きこう付与ふよしている[4]消失しょうしつ訂正ていせい符号ふごう英語えいごばんひとつの選択肢せんたくしである。

問題もんだいてん

[編集へんしゅう]

UDPは設計せっけい方針ほうしんとして輻輳ふくそう制御せいぎょ提供ていきょうしない。これがネットワーク全体ぜんたいへの負荷ふかこすケースがある。

帯域たいいきおおきな部分ぶぶん消費しょうひして輻輳ふくそうこしやすいUDPアプリケーションは、インターネットの安定あんていせい危険きけんにさらす可能かのうせいがあり、実際じっさい帯域たいいき大幅おおはばめる事態じたい発生はっせいしている。制御せいぎょできないUDPトラフィックによって輻輳ふくそう崩壊ほうかいになる可能かのうせい低減ていげんするためのネットワーク機構きこう提案ていあんされてきた。現状げんじょうでは、ルーターなどのネットワーク機器ききでのパケット・キューイングやパケット・ドロッピングが過度かどなUDPトラフィックをスローダウンさせる唯一ゆいいつ手段しゅだんとなっている。Datagram Congestion Control Protocol (DCCP) はこの問題もんだい部分ぶぶんてき解決かいけつすべく設計せっけいされたプロトコルで、ストリーミングなどのこう転送てんそうレートのUDPストリームにたいしてTCPのような輻輳ふくそう制御せいぎょ追加ついかするものである。

POS会計かいけいデータベースなどのTCPを使つかっているシステムはUDPトラフィックに圧迫あっぱくされつつある。TCPでパケットを喪失そうしつすると、輻輳ふくそう制御せいぎょはたらいて転送てんそうレートをおさえるというのも一因いちいんである。リアルタイム・アプリケーションもビジネス・アプリケーションもビジネスには重要じゅうようなので、Quality of Service のソリューション開発かいはつ大切たいせつだとするものもいる[27]

規格きかく

[編集へんしゅう]
ひょう. UDP 規格きかく
規格きかく書名しょめい 規格きかく種別しゅべつ 発行はっこう
RFC 768 User Datagram Protocol RFC Internet Standard 1980-08-28

脚注きゃくちゅう

[編集へんしゅう]
  1. ^ a b "User Datagram Protocol ... make available  a datagram mode of packet-switched computer communication in the environment of an interconnected set of computer networks. ... provides a procedure for application programs to send messages to other programs ... is transaction oriented"RFC 768より引用いんよう
  2. ^ a b "This protocol  assumes  that the Internet  Protocol ... is used as the underlying protocol."RFC 768より引用いんよう
  3. ^ a b "This protocol provides a procedure for application programs to send messages to other programs"RFC 768より引用いんよう
  4. ^ a b c d e Forouzan, B.A. (2000). TCP/IP: Protocol Suite, 1st ed. New Delhi, India: Tata McGraw-Hill Publishing Company Limited.
  5. ^ a b c Kurose, J. F.; Ross, K. W. (2010). Computer Networking: A Top-Down Approach (5th ed.). Boston, MA: Pearson Education. ISBN 9780131365483 
  6. ^ IP header のみトランザクション成立せいりつ
  7. ^ "This protocol provides a procedure ...with a minimum of protocol mechanism"RFC 768より引用いんよう
  8. ^ content@ipv6.com. “UDP Protocol Overview”. Ipv6.com. 2012ねん2がつ27にち閲覧えつらん
  9. ^ "UDP header contains ... the destination  address ... This information gives protection against misrouted datagrams."RFC 768より引用いんよう
  10. ^ 正常せいじょうかわからないパケット」が存在そんざいせず、「こわれた/とどかないパケット」と「正常せいじょうなパケット」のみからなる
  11. ^ "The protocol is transaction oriented" UDP specification.
  12. ^ Clark, M.P. (2003). Data Networks IP and the Internet, 1st ed. West Sussex, England: John Wiley & Sons Ltd.
  13. ^ "Source Port ... indicates the port of the sending proces"RFC 768より引用いんよう
  14. ^ "Source Port is an optional field"RFC 768より引用いんよう
  15. ^ "If not used, a value of zero is inserted."RFC 768より引用いんよう
  16. ^ "Source Port ... may be assumed to be the port to which a reply should be addressed in the absence of any other information."RFC 768より引用いんよう
  17. ^ "Length is the length in octets of this user datagram"RFC 768より引用いんよう
  18. ^ "the minimum value of the length is eight."RFC 768より引用いんよう
  19. ^ RFC 2675
  20. ^ "Checksum is of a pseudo header of information from the IP header, the UDP header, and the data, padded"RFC 768より引用いんよう
  21. ^ "no checksum  (for debugging or for higher level protocols that don't care)"RFC 768より引用いんよう
  22. ^ "An all zero transmitted checksum value means that the transmitter generated no checksum"RFC 768より引用いんよう
  23. ^ a b Deering S. & Hinden R. (December 1998). RFC 2460: Internet Protocol, Version 6 (IPv6) Specification. Internet Engineering Task Force. Retrieved from //tools.ietf.org/html/rfc2460
  24. ^ 井上いのうえ直也なおや松山まつやまこうたもて荒井あらいとおる苅田かりた幸雄ゆきお『マスタリング TCP/IP 入門にゅうもんへん だい6はんム社むしゃ、2019ねん、260-261ぺーじISBN 978-4-274-22447-8 
  25. ^ Postel, J. (August 1980). RFC 768: User Datagram Protocol. Internet Engineering Task Force. Retrieved from //tools.ietf.org/html/rfc768
  26. ^ Eubanks, M., Chimento, P., and M. Westerlund, "IPv6 and UDP Checksums for Tunneled Packets", RFC 6935, April 2013.
  27. ^ The impact of voice/video on data applications”. Networkperformancedaily.com. 2011ねん8がつ17にち閲覧えつらん

関連かんれん項目こうもく

[編集へんしゅう]

外部がいぶリンク

[編集へんしゅう]