原文:ftp://ftp.rfc-editor.org/in-notes/rfc3396.txt

2004/08/23 0.1.0 初版
2006/02/04 0.2.0 一年以上ぶりに全体的に見直し。


サイト内関連リンク:RFC 2131 DHCP


Network Working Group
Request for Comments: 3396
Updates: 2131
Category: Standards Track


T. Lemon
Nominum, Inc.
S. Cheshire
Apple Computer, Inc.
November 2002

動的ホスト構成プロトコル(DHCPv4)における長いオプションの符号化

この文書の位置付け

この文書はインターネットコミュニティのためのインターネット標準トラックプロトコルについて述べており、改良に向けての議論と提案を求めている。このプロトコルの標準化の状態と状況は "Internet Official ProtocolStandards"(STD 1)を参照してほしい。この文書の配布は無制限である。

著作権情報

Copyright (C) The Internet Society (2002). All Rights Reserved.

要約

この文書は、動的ホスト構成プロトコル(DHCPv4)において同じメッセージ内に複数回現れるオプションを扱うための規則を規定している。同じオプションの複数のインスタンスは、オプションが 255 オクテット(単独オプションでの最大サイズ)を超える場合、または DHCP オプションのオーバーロードの利点を得るためにオプションを分割する必要がある場合に生成される。オプション(DHCP パケット中の file フィールド かつ/または snameフィールド)内に同じオプションの複数のインスタンスがある場合、それらのオプションがひとつのオプションを形成するように、処理に先立って連結される。

1. 導入

RFC 2131[3] のセクション 4.1 に記述されているオプションの連結規則を明らかにすることにより、この文書は RFC 2131 を更新する。読者は RFC 2131 の該当部分を熟知していることを期待される。RFC 2131 のセクション 4.1 に書かれている "オプションは、そのオプションに関する文書で別に指定されていない限り、一度だけ現れることが許される。(Options may appear only once, unless otherwise specified in the options document.)" は削除されたと見なされるべきである。

DHCP プロトコル[3]は DHCP プロトコルエージェント間で情報を受け渡すための、DHCPv4 パケット中に符号化される "オプション" と呼ばれるものを規定している。これらのオプションは、タイプコードを表す 1 バイト、長さを表す 1 バイト、そしてその長さのバイト数(0 から 255)から構成されるバッファとして符号化される。

しかしながら 255 バイトを超えるオプションを送ることが有用な場合もあるだろう。ある特定のタイプコードを伴う二つ以上のオプションが DHCP パケット中に現れた場合、RFC 2131[3] ではそれらのオプションは全て連結されるべきであると規定しているが、その連結が行われるべき順序に関しては規定していない。

私たちはここで、255 バイトを超えるオプションを送信する場合に DHCP プロトコルエージェントによって使用されなければならない(MUST)順序付けの規則を規定する。何らかの理由によりプロトコルエージェントが 255 バイトより短いオプションを分割する場合にも、この規則が使用されなければならない(MUST)。ある特定のオプションタイプが二つ以上現れる DHCP パケットを受け取った場合にはいつでも、DHCP プロトコルエージェントはこの規則を用いなければならない(MUST)。

2. 用語

DHCP
この文書全体を通して "DHCP" という用語は、RFC 2131[3] と RFC 2132[4] とで規定されている動的ホスト構成プロトコルを示すために使用される。
DHCPv4
この文書の中で "DHCPv4" という用語は、RFC 2131 と RFC 2132 とで定義されている IPv4 向け DHCP プロトコルと、IPv6 向けDHCP プロトコル(この文書が書かれた時点ではまだ開発中)とを区別するために抽象的に使用されている。
DHCP プロトコルエージェント
DHCP パケットを送受信するネットワーク上のデバイス(DHCP クライアント、DHCP サーバー、DHCP リレーエージェント)を表す。この規定にとってこれらのデバイスの種類は重要ではない。
符号化エージェント
送信される DHCP パケットを作る DHCP プロトコルエージェント。
復号エージェント
受信した DHCP パケットを処理する DHCP プロトコルエージェント。
オプション
DHCP オプションは、そのオプションがどのように使用されるべきかを示すタイプコードの付いたデータの集合である。オプションは DHCP プロトコルに必要とされる情報(クライアントの IP スタック構成パラメータや、クライアントが DHCP サーバーと出会うことを可能にする情報など)を特定することが出来る。
オプションオーバーロード
DHCP パケットのフォーマットは RFC 951[1] で定義されている BOOTP パケットのフォーマットに基づいている。DHCP プロトコルエージェントによって使用される場合、BOOTP パケットはオプションを含むことの出来る三つのフィールドを持つ。任意のパラメータフィールド、sname フィールド、filename フィールドである。DHCP オプション規約[4]は DHCP オーバーロードオプションを定義しており、DHCP オプションを格納するためにこれら三つのフィールドの内のどれが DHCP メッセージ内で実際に使用されているのかを特定する。

3. 要求を表す言葉

この文書では、キーワード "MAY" "MUST" "MUST NOT" "OPTIONAL" "RECOMMENDED" "SHOULD" "SOULD NOT"は、BCP 14,RFC 2119[2] で説明されている通りに解釈される。

4. 適用

複数に分割しなければならないオプションを含むパケットを DHCP エージェントが符号化する場合にこの規約は適用される。この分割には二つの理由がある。第一に、送信しなければならないオプション値が 255 バイトを超える場合である。この場合符号化エージェントはここで規定するアルゴリズムに従わなければならない(MUST)。第二に、現在の出力バッファにはオプションを格納するための十分な空きが無いが、オプションの一部を格納する空きはあり、オプションの残りの部分を格納するために別の出力バッファにも空きがあるという場合がありうる。この場合、符号化エージェントはこのアルゴリズムに従うか、そのオプションを全く送信しないかの何れかでなければならない(MUST)。

また、ある特定のタイプのオプションの複数のインスタンスを含む DHCP パケットを DHCP エージェントが受け取った場合にもこの規約は適用される。この場合そのエージェントは、ここで規定されている方法に従って分割されたオプションを連結しなければならない(MUST)。

このオプションは Dynamic Host Configuration Protocol [3] と DHCP Options and BOOTP vendor extensions [4] とを更新する。しかしながら現状出回っている DHCP プロトコルエージェントの多くはオプションの連結機能を実装していないため、受信側がオプションを正しく再構築できるかどうかが問題にならないか、受信側が連結機能を実装していることが確実な場合を除き、DHCP プロトコルエージェントは分割されたオプションを送信しないように注意するべきである。

ここで全ての DHCP オプションを二つのカテゴリに分類する - この文書で定義されているメカニズムの実装を必要とするものと、それ以外とである。私たちは前者を要連結オプション、後者を非要連結オプションとして言及する。要連結オプションになり得るオプションを定義するプロトコル規約では、明確にこの文書への参照を付けることにより、この文書で説明されているオプションの分割と連結とを実装することを要求しなければならない。

他に選択肢がないか、分割したオプションを相手側が適切に処理できることが分かっている場合を除き、DHCP プロトコルエージェントはこの文書で説明されているようなオプションの分割を行うべきではない(SHOULD NOT)。少なくともひとつの要連結オプションを提供するか要求するかした場合に、その通信相手は分割されたオプションを適切に処理できるものと見なされる。あるいはオプションを生成するエージェントの管理者は、この文書で説明されているような分割されたオプションを受信者が正しく連結できるものと仮定するように、明示的にそのエージェントを構成してもよい。

一部の実装は、要分割オプションだけを分割し、非要分割オプションを決して分割しないのが最も簡単であると考えるかもしれない。それは許容される。しかしながら何らかの連結オプションをサポートする実装は、要連結オプションと非要連結オプションとの両方を処理する能力を持たなければならない(MUST)。

DHCP エージェントが DHCP メッセージを受信する際のオプションの連結に対する制限は無い。この文書で説明されているメカニズムを実装している DHCP プロトコルエージェントは、同じタイプの二つのオプションを受信した時、それらを連結するべきである。

5. 集合オプションバッファ

DHCP オプションは DHCP パケット内の三つの部分に格納することが出来る。それらは RFC 2131[3] で説明されている任意のパラメータフィールド・sname フィールド・file フィールドである。分割されるオプションが置かれても良いフィールドが三つに分かれているため、オプション分割のメカニズムの説明は複雑になっている。

さらに問題を複雑にすることに、ひとつのフィールドに納まらないオプションは別のオプションへの境界をまたぐことが許されず、代わりに符号化エージェントはそのオプションを二つに分け、各バッファにひとつずつを格納しなければならない。

議論を簡単にするために、私たちは三つのバッファの集合である集合オプションバッファについて書くことにする。これは論理的な集合であり、そのバッファは RFC 2131[3] で説明されている DHCP パケット内の各位置に現れなければならない(MUST)。

集合オプションバッファは、任意のオプションパラメータフィールド、file フィールド、sname フィールドから構成され、並び順もこの通りである。

警告: これは DHCP パケット内における三つのフィールドの物理的な並びとは異なる。

集合オプションバッファ内の三つのフィールド間の何れかの境界をまたぐような方法でオプションが格納されてはならない(MUST NOT)。

符号化エージェントは sname フィールドと file フィールドの両方、またはどちらか一方を使用することを自由に選択できる。符号化エージェントがこれら二つのフィールドを使用しないことを選択をした場合、この二つのフィールドは集合オプションバッファの一部であるとみなされてはならない(MUST NOT)。

6. 符号化エージェントの振る舞い

"適用" と題した先のセクションで説明した理由に基き、符号化エージェントはオプションを分割することを決定する。

オプションは任意のオクテット境界で分割されてよい。分割された各部分が 255 オクテットを超えることは出来ない。分割されたオプションの各部分は集合オプションバッファに順番に格納されなければならない(MUST) - 最初の部分が集合オプションバッファの最初に、次に二番目の部分というように格納されなければならない(MUST)。符号化エージェントはオプションの分割方法に意味情報を含めようとしてはならない(MUST NOT)。

集合オプションバッファは DHCP パケットの物理的な並びを表していない。そのため、例えば三つに分割されたオプションの各部分がオプションフィールドに格納されるとき、最初の部分は任意のパラメータフィールドに、二番目の部分は file フィールドに、三番目の部分は sname フィールドに格納されることに注意してほしい。これは RFC 2131[3] との一貫性を維持している。

分割されたオプションの各部分は、それが RFC 2132[4] で説明されている通常の長さのオプションであるかのように集合オプションバッファに格納されなければならない(MUST)。分割されたオプションの各部分のフィールド長の合計が、そのオプション全体の長さに等しくならなければならない(MUST)。また分割された各部分のオプションコードフィールドの値は同じでなければならない。(MUST)

7. 復号エージェントの振る舞い

DHCP パケットのオプションバッファを読み取った複合エージェントが、その中に同じオプションコードを持つ二つ以上のオプションを見つけた場合、復号エージェントはそれを分割されたオプションと見なさなければならない(MUST)。

分割されたオプションを見つけた復号エージェントは、それらのオプションの内容を単一のオプションとして扱われなければならず(MUST)、前述の符号化エージェントの振る舞いの項で説明した順序でその内容を再構築しなければならない(MUST)。

オプションの値を使用するとき、復号エージェントは自分が動作しているマシンのアーキテクチャ特有のアラインメントの問題に対して確実に責任を負えるべきである。符号化エージェントがオプションのアラインを要求されることはない。

オプションが分割される位置に特別な意味はなく、符号化エージェントはどこでも自由にオプションを分割してよい。復号エージェントは分割されたオプションを単一のオブジェクトに再構築しなければならず(MUST)、分割されている各部分を別々のオブジェクトとして扱ってはならない(MUST NOT)。

8. 例

"/diskless/foo" という値を持つオプション Bootfile name(オプションコード 67)を考える。通常これは、以下のように単一のオプションとして符号化される。

      +----+----+---+---+---+---+---+---+---+---+---+---+---+---+---+
      | 67 | 13 | / | d | i | s | k | l | e | s | s | / | f | o | o |
      +----+----+---+---+---+---+---+---+---+---+---+---+---+---+---+

オプションバッファに合わせるために符号化エージェントがこのオプションを分割する場合、以下のように二つのオプションとして符号化し、この順序で集合オプションバッファに格納することが出来る。

      +----+---+---+---+---+---+---+---+---+
      | 67 | 7 | / | d | i | s | k | l | e |
      +----+---+---+---+---+---+---+---+---+

      +----+---+---+---+---+---+---+---+
      | 67 | 6 | s | s | / | f | o | o |
      +----+---+---+---+---+---+---+---+

9. セキュリティ考察

この文書は新たなセキュリティ問題を提起しない。DHCP プロトコルにおける攻撃の潜在的な脅威は、DHCP プロトコル仕様のセクション 7 と DHCP メッセージの認証(Authentication for DHCP Messages)[5] とで議論されている。

認証オプション自身も分割され得ることに注意してほしい。そのような場合実装は、(MAC の生成または照合に先立って)認証フィールドにゼロをセットするとき、それが複数のオプションにまたがって分割されても良いように注意しなければならない。

10. 参考文献

10.1. 引用規格

[1] Croft, W. and J. Gilmore, "BOOTSTRAP PROTOCOL (BOOTP)", RFC 951, September 1985.

[2] Bradner, S., "Key words for use in RFCs to indicate requirement levels", BCP 14, RFC 2119, March 1997.

[3] Droms, R., "Dynamic Host Configuration Protocol", RFC 2131, March 1997.

[4] Alexander, S. and Droms, R., "DHCP Options and BOOTP Vendor Extensions", RFC 2132, March 1997.

10.2. 参考規格

[5] Droms, R. and W. Arbaugh, "Authentication for DHCP Messages", RFC 3118, June 2001.

11. 知的所有権宣言(Intellectual Property Statement)

The IETF takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on the IETF's procedures with respect to rights in standards-track and standards-related documentation can be found in BCP-11. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification can be obtained from the IETF Secretariat.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to practice this standard. Please address the information to the IETF Executive Director.

12. 著者のアドレス

Ted Lemon
Nominum, Inc.
2385 Bay Road
Redwood City, CA 94043
USA

EMail: mellon@nominum.com


Stuart Cheshire
Apple Computer, Inc.
1 Infinite Loop
Cupertino
California 95014
USA

Phone: +1 408 974 3207
EMail: rfc@stuartcheshire.org

13. 完全な著作権宣言(Full Copyright Statement)

Copyright (C) The Internet Society (2002). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

謝辞

RFC 編集者の働きへの資金拠出は、現在 Internet Society によって提供されている。