4. DHCPクライアント-サーバープロトコルの仕様 (Specification of the DHCP Client-Server Protocol)
このセクションでは、DHCPサーバーが新しいアドレスの要求を満たすことができるネットワークアドレスのブロックを持っていることを前提としています。各サーバーは、割り当てられたアドレスとリースのデータベースもローカルの永続ストレージに維持します。
4.1 DHCPメッセージの構築と送信 (Constructing and sending DHCP messages)
DHCPクライアントとサーバーの両方は、メッセージの固定形式セクションのフィールドに入力し、可変長オプション領域にタグ付きデータ項目を追加することによってDHCPメッセージを構築します。オプション領域には、最初に4オクテットの「マジッククッキー」(セクション3で説明)が含まれ、その後にオプションが続きます。最後のオプションは常に「end」オプションでなければなりません。
DHCPはトランスポートプロトコルとしてUDPを使用します。クライアントからサーバーへのDHCPメッセージは「DHCPサーバー」ポート(67)に送信され、サーバーからクライアントへのDHCPメッセージは「DHCPクライアント」ポート(68)に送信されます。複数のネットワークアドレスを持つサーバー(例えば、マルチホームホスト)は、送信DHCPメッセージでそのネットワークアドレスのいずれかを使用できます (MAY)。
「サーバー識別子」フィールドは、DHCPメッセージ内のDHCPサーバーを識別するために使用され、クライアントからサーバーへの宛先アドレスとして使用されます。複数のネットワークアドレスを持つサーバーは、DHCPメッセージでそのサーバーを識別するアドレスとして、そのネットワークアドレスのいずれかを受け入れる準備ができていなければなりません (MUST)。潜在的に不完全なネットワーク接続に対応するために、サーバーは、サーバーの最善の知識によれば、クライアントから到達可能な「サーバー識別子」としてアドレスを選択しなければなりません (MUST)。例えば、DHCPサーバーとDHCPクライアントが同じサブネットに接続されている場合(つまり、クライアントからのメッセージの「giaddr」フィールドがゼロの場合)、サーバーは、そのサブネットでの通信に使用しているIPアドレスを「サーバー識別子」として選択すべきです (SHOULD)。サーバーがそのサブネットで複数のIPアドレスを使用している場合、そのようなアドレスのいずれかを使用できます (MAY)。サーバーがDHCPリレーエージェントを通じてメッセージを受信した場合、サーバーは、メッセージを受信したインターフェースからアドレスを「サーバー識別子」として選択すべきです (SHOULD)(サーバーがその選択を行うための他のより良い情報を持っている場合を除く)。DHCPクライアントは、DHCPサーバーへのユニキャスト要求に対して、「サーバー識別子」オプションで提供されたIPアドレスを使用しなければなりません (MUST)。
クライアントがそのIPアドレスを取得する前にクライアントによってブロードキャストされるDHCPメッセージは、IPヘッダーの送信元アドレスフィールドを0に設定しなければなりません (MUST)。
クライアントからのDHCPメッセージの「giaddr」フィールドが非ゼロの場合、サーバーは、「giaddr」に表示されるアドレスを持つBOOTPリレーエージェントの「DHCPサーバー」ポートに返信メッセージを送信します。「giaddr」フィールドがゼロで「ciaddr」フィールドが非ゼロの場合、サーバーはDHCPOFFERおよびDHCPACKメッセージを「ciaddr」のアドレスにユニキャストします。「giaddr」がゼロで「ciaddr」がゼロで、ブロードキャストビットが設定されている場合、サーバーはDHCPOFFERおよびDHCPACKメッセージを0xffffffffにブロードキャストします。ブロードキャストビットが設定されておらず、「giaddr」がゼロで「ciaddr」がゼロの場合、サーバーはDHCPOFFERおよびDHCPACKメッセージをクライアントのハードウェアアドレスと「yiaddr」アドレスにユニキャストします。すべての場合において、「giaddr」がゼロの場合、サーバーはすべてのDHCPNAKメッセージを0xffffffffにブロードキャストします。
DHCPメッセージのオプションが「sname」および「file」フィールドに拡張される場合、「オプションオーバーロード (Option Overload)」オプションは、RFC 1533で指定されているように、値1、2、または3で「options」フィールドに表示されなければなりません (MUST)。「オプションオーバーロード」オプションが「options」フィールドに存在する場合、「options」フィールドのオプションは「end」オプションで終了されなければならず (MUST)、optionsフィールドを埋めるために1つ以上の「pad」オプションを含むことができます (MAY)。「sname」および「file」フィールドのオプション(「オプションオーバーロード」オプションによって使用中であることが示されている場合)は、フィールドの最初のオクテットから始まらなければならず (MUST)、「end」オプションで終了されなければならず (MUST)、フィールドの残りの部分を埋めるために「pad」オプションが続かなければなりません (MUST)。「options」、「sname」、および「file」フィールドの任意の個々のオプションは、そのフィールドに完全に含まれていなければなりません (MUST)。「options」フィールドのオプションは最初に解釈されなければならず (MUST)、これにより任意の「オプションオーバーロード」オプションが解釈される可能性があります。「file」フィールドは次に解釈されなければならず (MUST)(「オプションオーバーロード」オプションが「file」フィールドにDHCPオプションが含まれていることを示している場合)、その後「sname」フィールドが続きます。
「option」タグで渡される値は、単一のオプションで利用可能な255オクテットに収まるには長すぎる場合があります(例えば、「router」オプション[21]のルーターのリスト)。オプションは、オプションドキュメントで特に指定されていない限り、一度だけ表示できます。クライアントは、同じオプションの複数のインスタンスの値を構成用の単一のパラメータリストに連結します。
DHCPクライアントは、すべてのメッセージの再送信に責任があります。クライアントは、再送信間の遅延を決定するためにランダム化された指数バックオフアルゴリズムを組み込んだ再送信戦略を採用しなければなりません (MUST)。再送信間の遅延は、クライアントとサーバー間のインターネットの特性に基づいて、サーバーからの応答が配信されるのに十分な時間を許可するように選択されるべきです (SHOULD)。例えば、10Mb/secイーサネットインターネットでは、最初の再送信前の遅延は、-1から+1の範囲から選択された一様乱数の値によってランダム化された4秒であるべきです (SHOULD)。1秒未満の解像度粒度を提供するクロックを持つクライアントは、非整数のランダム化値を選択できます (MAY)。次の再送信前の遅延は、-1から+1の範囲から選択された一様な数値の値によってランダム化された8秒であるべきです (SHOULD)。再送信遅延は、最大64秒まで、後続の再送信で2倍にされるべきです (SHOULD)。クライアントは、構成プロセスの進行の指標として、ユーザーに再送信試行の指示を提供できます (MAY)。
「xid」フィールドは、クライアントが着信DHCPメッセージを保留中の要求と照合するために使用されます。DHCPクライアントは、別のクライアントが使用している「xid」と同一の「xid」を使用する機会を最小化する方法で「xid」を選択しなければなりません (MUST)。例えば、クライアントは、クライアントが再起動されるたびに異なるランダムな初期「xid」を選択し、その後、次の再起動まで連続した「xid」を使用できます。再送信ごとに新しい「xid」を選択することは実装の決定です。クライアントは、同じ「xid」を再利用することを選択するか、再送信されたメッセージごとに新しい「xid」を選択することができます (MAY)。
通常、DHCPサーバーとBOOTPリレーエージェントは、ユニキャスト配信を使用してDHCPOFFER、DHCPACK、およびDHCPNAKメッセージをクライアントに直接配信しようとします。IP宛先アドレス(IPヘッダー内)はDHCP「yiaddr」アドレスに設定され、リンク層宛先アドレスはDHCP「chaddr」アドレスに設定されます。残念ながら、一部のクライアント実装は、実装が有効なIPアドレスで構成されるまで、そのようなユニキャストIPデータグラムを受信できません(クライアントのIPアドレスがクライアントがIPアドレスで構成されるまで配信できないというデッドロックにつながります)。
プロトコルソフトウェアがIPアドレスで構成されるまでユニキャストIPデータグラムを受信できないクライアントは、そのクライアントが送信するDHCPDISCOVERまたはDHCPREQUESTメッセージの「flags」フィールドのBROADCASTビットを1に設定すべきです (SHOULD)。BROADCASTビットは、DHCPサーバーとBOOTPリレーエージェントに、クライアントのサブネット上でクライアントにメッセージをブロードキャストするヒントを提供します。プロトコルソフトウェアが構成される前にユニキャストIPデータグラムを受信できるクライアントは、BROADCASTビットを0にクリアすべきです (SHOULD)。BOOTP明確化文書は、BROADCASTビットの使用の影響について議論しています[21]。
DHCPメッセージをDHCPクライアントに直接送信または中継するサーバーまたはリレーエージェント(つまり、「giaddr」フィールドで指定されたリレーエージェントに送信しない)は、「flags」フィールドのBROADCASTビットを調べるべきです (SHOULD)。このビットが1に設定されている場合、DHCPメッセージは、IP宛先アドレスとしてIPブロードキャストアドレス(できれば0xffffffff)を使用し、リンク層宛先アドレスとしてリンク層ブロードキャストアドレスを使用してIPブロードキャストとして送信されるべきです (SHOULD)。BROADCASTビットが0にクリアされている場合、メッセージは、「yiaddr」フィールドで指定されたIPアドレスと「chaddr」フィールドで指定されたリンク層アドレスにIPユニキャストとして送信されるべきです (SHOULD)。ユニキャストが不可能な場合、メッセージは、IP宛先アドレスとしてIPブロードキャストアドレス(できれば0xffffffff)を使用し、リンク層宛先アドレスとしてリンク層ブロードキャストアドレスを使用してIPブロードキャストとして送信できます (MAY)。
4.2 DHCPサーバーの管理制御 (DHCP server administrative controls)
DHCPサーバーは、受信するすべてのDHCPDISCOVERおよびDHCPREQUESTメッセージに応答する必要はありません。例えば、ネットワーク管理者は、ネットワークに接続されたクライアントに対する厳格な制御を維持するために、何らかの外部メカニズムを通じて以前に登録されたクライアントにのみ応答するようにDHCPサーバーを構成することを選択できます。DHCP仕様は、クライアントとサーバーが相互作用することを選択した場合のクライアントとサーバー間の相互作用のみを記述します。システム管理者が使用したいすべての管理制御を記述することは、DHCP仕様の範囲を超えています。特定のDHCPサーバー実装には、ネットワーク管理者が望む制御またはポリシーを組み込むことができます。
一部の環境では、DHCPサーバーは、特定のクライアントの正しいパラメータを決定する際に、DHCPDISCOVERまたはDHCPREQUESTメッセージに含まれるベンダークラスオプションの値を考慮する必要があります。
DHCPサーバーは、クライアントをそのリースに関連付けるために、何らかの一意の識別子を使用する必要があります。クライアントは、「クライアント識別子」オプションを通じて識別子を明示的に提供することを選択できます (MAY)。クライアントが「クライアント識別子」を提供する場合、クライアントは、すべての後続メッセージで同じ「クライアント識別子」を使用しなければならず (MUST)、サーバーはその識別子を使用してクライアントを識別しなければなりません (MUST)。クライアントが「クライアント識別子」オプションを提供しない場合、サーバーは、クライアントを識別するために「chaddr」フィールドの内容を使用しなければなりません (MUST)。DHCPの正しい動作にとって、クライアントが「クライアント識別子」オプションでクライアントが接続されているサブネット内で一意の識別子を使用することが重要です。クライアントの一意の識別子として「chaddr」を使用すると、その識別子が新しいクライアントに移動される可能性があるハードウェアインターフェースに関連付けられている可能性があるため、予期しない結果が生じる可能性があります。一部のサイトは、コンピュータ間でハードウェアインターフェースが転送されることによるクライアントのネットワークアドレスの予期しない変更を避けるために、製造業者のシリアル番号を「クライアント識別子」として使用することを選択できます。サイトは、クライアントのネットワークアドレスを特定のハードウェアボックスではなくDNS名に関連付けるために、DNS名を「クライアント識別子」として使用することを選択することもできます。
DHCPクライアントは、DHCPOFFERメッセージを受信するサーバーの中からDHCPサーバーを選択する際に、任意の戦略を自由に使用できます。DHCPのクライアント実装は、ユーザーが「ベンダークラス識別子」値を直接選択するメカニズムを提供すべきです (SHOULD)。
4.3 DHCPサーバーの動作 (DHCP server behavior)
DHCPサーバーは、そのクライアントのバインディングの現在の状態に基づいて、クライアントからの着信DHCPメッセージを処理します。DHCPサーバーは、クライアントから次のメッセージを受信できます:
- DHCPDISCOVER
- DHCPREQUEST
- DHCPDECLINE
- DHCPRELEASE
- DHCPINFORM
表3は、サーバーによるDHCPメッセージのフィールドとオプションの使用を示しています。このセクションの残りの部分では、各可能な着信メッセージに対するDHCPサーバーのアクションについて説明します。
4.3.1 DHCPDISCOVERメッセージ (DHCPDISCOVER message)
サーバーがクライアントからDHCPDISCOVERメッセージを受信すると、サーバーは要求しているクライアントのネットワークアドレスを選択します。アドレスが利用できない場合、サーバーは問題をシステム管理者に報告することを選択できます (MAY)。アドレスが利用可能な場合、新しいアドレスは次のように選択されるべきです (SHOULD):
- クライアントの現在のバインディングに記録されているクライアントの現在のアドレス、そうでなければ
- クライアントの(現在は期限切れまたは解放された)バインディングに記録されているクライアントの以前のアドレス、そのアドレスがサーバーの利用可能なアドレスのプールにあり、まだ割り当てられていない場合、そうでなければ
- 「要求されたIPアドレス」オプションで要求されたアドレス、そのアドレスが有効でまだ割り当てられていない場合、そうでなければ
- サーバーの利用可能なアドレスのプールから割り当てられた新しいアドレス。アドレスは、メッセージを受信したサブネット(「giaddr」が0の場合)またはメッセージを転送したリレーエージェントのアドレス(「giaddr」が0でない場合)に基づいて選択されます。
セクション4.2で説明されているように、サーバーは、管理上の理由から、要求されたアドレスとは異なるアドレスを割り当てることができ (MAY)、または空きアドレスが利用可能であっても、特定のクライアントにアドレスを割り当てることを拒否することができます (MAY)。
一部のネットワークアーキテクチャ(例えば、物理ネットワークセグメントに複数のIPサブネットが割り当てられているインターネット)では、DHCPクライアントに「giaddr」に記録されているアドレスとは異なるサブネットからアドレスを割り当てる必要がある場合があることに注意してください。したがって、DHCPは、クライアントに「giaddr」のサブネットからアドレスを割り当てることを要求しません。サーバーは他のサブネットを自由に選択でき、割り当てられるIPアドレスが選択される方法を説明することは、DHCP仕様の範囲を超えています。
DHCPの正しい動作には必須ではありませんが、サーバーは、クライアントがサーバーのDHCPOFFERメッセージに応答する前に、選択されたネットワークアドレスを再利用すべきではありません (SHOULD NOT)。サーバーは、クライアントに提供されたものとしてアドレスを記録することを選択できます (MAY)。
サーバーは、次のようにリースの有効期限も選択しなければなりません:
- クライアントがDHCPDISCOVERメッセージで特定のリースを要求しておらず、クライアントに既に割り当てられたネットワークアドレスがある場合、サーバーは、そのアドレスに以前に割り当てられたリース有効期限を返します(クライアントは、以前に割り当てられたアドレスの有効期限を延長するために特定のリースを明示的に要求しなければならないことに注意してください)、そうでなければ
- クライアントがDHCPDISCOVERメッセージで特定のリースを要求しておらず、クライアントに割り当てられたネットワークアドレスがない場合、サーバーは、ローカルに構成されたデフォルトのリース時間を割り当てます、そうでなければ
- クライアントがDHCPDISCOVERメッセージで特定のリースを要求した場合(クライアントに割り当てられたネットワークアドレスがあるかどうかに関係なく)、サーバーは、要求されたリースを返すことを選択できます(リースがローカルポリシーに受け入れられる場合)、または別のリースを選択できます (MAY)。
DHCPサーバーが使用するフィールドとオプションの表 (Fields and options used by DHCP servers)
| フィールド | DHCPOFFER | DHCPACK | DHCPNAK |
|---|---|---|---|
| op | BOOTREPLY | BOOTREPLY | BOOTREPLY |
| htype | (「Assigned Numbers」RFCから) | ||
| hlen | (オクテット単位のハードウェアアドレス長) | ||
| hops | 0 | 0 | 0 |
| xid | クライアントDHCPDISCOVERメッセージからの「xid」 | クライアントDHCPREQUESTメッセージからの「xid」 | クライアントDHCPREQUESTメッセージからの「xid」 |
| secs | 0 | 0 | 0 |
| ciaddr | 0 | DHCPREQUESTからの「ciaddr」または0 | 0 |
| yiaddr | クライアントに提供されるIPアドレス | クライアントに割り当てられたIPアドレス | 0 |
| siaddr | 次のブートストラップサーバーのIPアドレス | 次のブートストラップサーバーのIPアドレス | 0 |
| flags | クライアントDHCPDISCOVERメッセージからの「flags」 | クライアントDHCPREQUESTメッセージからの「flags」 | クライアントDHCPREQUESTメッセージからの「flags」 |
| giaddr | クライアントDHCPDISCOVERメッセージからの「giaddr」 | クライアントDHCPREQUESTメッセージからの「giaddr」 | クライアントDHCPREQUESTメッセージからの「giaddr」 |
| chaddr | クライアントDHCPDISCOVERメッセージからの「chaddr」 | クライアントDHCPREQUESTメッセージからの「chaddr」 | クライアントDHCPREQUESTメッセージからの「chaddr」 |
| sname | サーバーホスト名またはオプション | サーバーホスト名またはオプション | (未使用) |
| file | クライアントブートファイル名またはオプション | クライアントブートファイル名またはオプション | (未使用) |
| options | オプション | オプション |
| オプション | DHCPOFFER | DHCPACK | DHCPNAK |
|---|---|---|---|
| 要求されたIPアドレス | 不可 (MUST NOT) | 不可 (MUST NOT) | 不可 (MUST NOT) |
| IPアドレスリース時間 | 必須 (MUST) | 必須 (MUST) (DHCPREQUEST) 不可 (MUST NOT) (DHCPINFORM) | 不可 (MUST NOT) |
| 'file'/'sname'フィールドを使用 | 可 (MAY) | 可 (MAY) | 不可 (MUST NOT) |
| DHCPメッセージタイプ | DHCPOFFER | DHCPACK | DHCPNAK |
| パラメータ要求リスト | 不可 (MUST NOT) | 不可 (MUST NOT) | 不可 (MUST NOT) |
| メッセージ | 推奨 (SHOULD) | 推奨 (SHOULD) | 推奨 (SHOULD) |
| クライアント識別子 | 不可 (MUST NOT) | 不可 (MUST NOT) | 可 (MAY) |
| ベンダークラス識別子 | 可 (MAY) | 可 (MAY) | 可 (MAY) |
| サーバー識別子 | 必須 (MUST) | 必須 (MUST) | 必須 (MUST) |
| 最大メッセージサイズ | 不可 (MUST NOT) | 不可 (MUST NOT) | 不可 (MUST NOT) |
| その他すべて | 可 (MAY) | 可 (MAY) | 不可 (MUST NOT) |
表3: DHCPサーバーが使用するフィールドとオプション
ネットワークアドレスとリースが決定されると、サーバーは提供された構成パラメータでDHCPOFFERメッセージを構築します。クライアントが選択するサーバーに関係なく、クライアントの動作を予測可能にするために、すべてのDHCPサーバーが(新しく割り当てられたネットワークアドレスの可能性のある例外を除いて)同じパラメータを返すことが重要です。構成パラメータは、以下に示す順序で次のルールを適用することによって選択されなければなりません (MUST)。ネットワーク管理者は、それらのサーバーからの一貫した応答を確保するために、複数のDHCPサーバーを構成する責任があります。サーバーは、クライアントに次を返さなければなりません (MUST):
- このセクションの前半で示されたルールによって決定された、クライアントのネットワークアドレス、
- このセクションの前半で示されたルールによって決定された、クライアントのリースの有効期限、
- 次のルールに従って、クライアントが要求したパラメータ:
- サーバーがパラメータのデフォルト値で明示的に構成されている場合、サーバーは「option」フィールドの適切なオプションにその値を含めなければなりません (MUST)、そうでなければ
- サーバーがホスト要件文書で定義されているパラメータとしてパラメータを認識している場合、サーバーは「option」フィールドの適切なオプションにホスト要件文書で示されているそのパラメータのデフォルト値を含めなければなりません (MUST)、そうでなければ
- サーバーはそのパラメータの値を返してはなりません (MUST NOT)、
- サーバーは、可能な限り多くの要求されたパラメータを提供しなければならず (MUST)、提供できないパラメータを省略しなければなりません (MUST)。サーバーは、DHCPオプションおよびBOOTPベンダー拡張文書で明示的に許可されていない限り、要求された各パラメータを一度だけ含めなければなりません (MUST)。
- ホスト要件文書のデフォルト値と異なる既存のバインディングのパラメータ、
- このクライアント固有のパラメータ(DHCPDISCOVERまたはDHCPREQUESTメッセージの「chaddr」または「クライアント識別子」の内容によって識別される)、例えば、ネットワーク管理者によって構成されたもの、
- このクライアントのクラス固有のパラメータ(DHCPDISCOVERまたはDHCPREQUESTメッセージの「ベンダークラス識別子」オプションの内容によって識別される)、例えば、ネットワーク管理者によって構成されたもの。パラメータは、クライアントのベンダークラス識別子とサーバーで識別されたクライアントクラス間の正確な一致によって識別されなければなりません、
- クライアントのサブネット上のデフォルト値以外の値を持つパラメータ。
サーバーは、DHCPOFFERメッセージのパラメータを決定するために使用された「ベンダークラス識別子」を返すことを選択して、クライアントがどのDHCPOFFERを受け入れるかを選択するのを支援できます (MAY)。サーバーは、DHCPDISCOVERメッセージから「xid」フィールドをDHCPOFFERメッセージの「xid」フィールドに挿入し、要求しているクライアントにDHCPOFFERメッセージを送信します。
4.3.2 DHCPREQUESTメッセージ (DHCPREQUEST message)
DHCPREQUESTメッセージは、サーバーからのDHCPOFFERメッセージに応答するクライアントから、以前に割り当てられたIPアドレスを検証するクライアントから、またはネットワークアドレスのリースを延長するクライアントから来る可能性があります。DHCPREQUESTメッセージに「サーバー識別子」オプションが含まれている場合、メッセージはDHCPOFFERメッセージへの応答です。それ以外の場合、メッセージは既存のリースを検証または延長する要求です。クライアントがDHCPREQUESTメッセージで「クライアント識別子」を使用する場合、すべての後続メッセージで同じ「クライアント識別子」を使用しなければなりません (MUST)。クライアントがDHCPDISCOVERメッセージに要求されたパラメータのリストを含めた場合、すべての後続メッセージにそのリストを含めなければなりません (MUST)。
DHCPACKメッセージ内の構成パラメータは、クライアントが応答している以前のDHCPOFFERメッセージ内のパラメータと競合すべきではありません (SHOULD NOT)。クライアントは、構成のためにDHCPACKメッセージ内のパラメータを使用すべきです (SHOULD)。
クライアントは次のようにDHCPREQUESTメッセージを送信します:
SELECTING状態中に生成されたDHCPREQUEST:
クライアントは、選択されたサーバーのアドレスを「サーバー識別子」に挿入し、「ciaddr」はゼロでなければならず (MUST)、「要求されたIPアドレス」は選択されたDHCPOFFERのyiaddr値で埋められなければなりません (MUST)。
クライアントは、複数のDHCPOFFERメッセージを収集して「最良の」オファーを選択することを選択できることに注意してください (MAY)。クライアントは、DHCPREQUESTメッセージでオファリングサーバーを識別することによってその選択を示します。クライアントが受け入れ可能なオファーを受け取らない場合、クライアントは別のDHCPDISCOVERメッセージを試すことを選択できます (MAY)。したがって、サーバーは、クライアントがオファーを受け入れたかどうかを判断できる特定のDHCPREQUESTを受け取らない可能性があります。サーバーはDHCPOFFERに基づいてネットワークアドレス割り当てをコミットしていないため、サーバーは後続の要求への応答で提供されたネットワークアドレスを自由に再利用できます。実装の詳細として、サーバーは提供されたアドレスを再利用すべきではなく、提供されたアドレスを再利用するタイミングを決定するために実装固有のタイムアウトメカニズムを使用できます (MAY)。
INIT-REBOOT状態中に生成されたDHCPREQUEST:
「サーバー識別子」は埋められてはならず (MUST NOT)、「要求されたIPアドレス」オプションは、以前に割り当てられたアドレスに対するクライアントの概念で埋められなければなりません (MUST)。「ciaddr」はゼロでなければなりません (MUST)。クライアントは、以前に割り当てられたキャッシュされた構成を検証しようとしています。「要求されたIPアドレス」が正しくない場合、または間違ったネットワーク上にある場合、サーバーはクライアントにDHCPNAKメッセージを送信すべきです (SHOULD)。
INIT-REBOOT状態のクライアントが正しいネットワーク上にあるかどうかを判断するには、「giaddr」、「要求されたIPアドレス」オプションの内容、およびデータベース検索を調べることによって行われます。DHCPサーバーがクライアントが間違ったネット上にあることを検出した場合(つまり、ローカルサブネットマスクまたはリモートサブネットマスク(「giaddr」が0でない場合)を「要求されたIPアドレス」オプション値に適用した結果が現実と一致しない場合)、サーバーはクライアントにDHCPNAKメッセージを送信すべきです (SHOULD)。
ネットワークが正しい場合、DHCPサーバーは、クライアントのIPアドレスに対する概念が正しいかどうかを確認すべきです (SHOULD)。正しくない場合、サーバーはクライアントにDHCPNAKメッセージを送信すべきです (SHOULD)。DHCPサーバーにこのクライアントの記録がない場合、沈黙を保たなければならず (MUST)、ネットワーク管理者に警告を出力できます (MAY)。この動作は、同じ回線上の非通信DHCPサーバーの平和的な共存に必要です。
DHCPREQUESTメッセージで「giaddr」が0x0の場合、クライアントはサーバーと同じサブネット上にあります。クライアントは正しいネットワークアドレスまたはサブネットマスクを持っていない可能性があり、クライアントはARP要求に応答していない可能性があるため、サーバーはDHCPNAKメッセージを0xffffffffブロードキャストアドレスにブロードキャストしなければなりません (MUST)。
DHCPREQUESTメッセージで「giaddr」が設定されている場合、クライアントは別のサブネット上にあります。クライアントは正しいネットワークアドレスまたはサブネットマスクを持っていない可能性があり、クライアントはARP要求に応答していない可能性があるため、リレーエージェントがクライアントにDHCPNAKをブロードキャストするように、サーバーはDHCPNAKのブロードキャストビットを設定しなければなりません (MUST)。
RENEWING状態中に生成されたDHCPREQUEST:
「サーバー識別子」は埋められてはならず (MUST NOT)、「要求されたIPアドレス」オプションは埋められてはならず (MUST NOT)、「ciaddr」はクライアントのIPアドレスで埋められなければなりません (MUST)。この状況では、クライアントは完全に構成されており、リースを延長しようとしています。このメッセージはユニキャストされるため、その送信にリレーエージェントが関与することはありません。したがって「giaddr」は埋められないため、DHCPサーバーは「ciaddr」の値を信頼し、クライアントに返信する際にそれを使用します。
クライアントは、T1より前にリースを更新または延長することを選択できます (MAY)。サーバーは、(ネットワーク管理者によるポリシー決定として)リースを延長しないことを選択できますが、いずれにせよDHCPACKメッセージを返すべきです (SHOULD)。
REBINDING状態中に生成されたDHCPREQUEST:
「サーバー識別子」は埋められてはならず (MUST NOT)、「要求されたIPアドレス」オプションは埋められてはならず (MUST NOT)、「ciaddr」はクライアントのIPアドレスで埋められなければなりません (MUST)。この状況では、クライアントは完全に構成されており、リースを延長しようとしています。このメッセージは0xffffffff IPブロードキャストアドレスにブロードキャストされなければなりません (MUST)。DHCPサーバーは、DHCPREQUESTに返信する前に「ciaddr」の正確性を確認すべきです (SHOULD)。
REBINDINGクライアントからのDHCPREQUESTは、複数のDHCPサーバーと、複数のサーバーによって管理されるリース間のバインディングの一貫性を維持するメカニズムを持つサイトに対応することを目的としています。DHCPサーバーは、そうするためのローカル管理権限がある場合にのみ、クライアントのリースを延長できます (MAY)。
4.3.3 DHCPDECLINEメッセージ (DHCPDECLINE message)
サーバーがDHCPDECLINEメッセージを受信した場合、クライアントは何らかの他の手段を通じて、提案されたネットワークアドレスが既に使用されていることを発見しました。サーバーは、ネットワークアドレスを使用不可としてマークしなければならず (MUST)、可能な構成の問題をローカルシステム管理者に通知すべきです (SHOULD)。
4.3.4 DHCPRELEASEメッセージ (DHCPRELEASE message)
DHCPRELEASEメッセージを受信すると、サーバーはネットワークアドレスを未割り当てとしてマークします。サーバーは、クライアントからの後続の要求への応答で可能な再利用のために、クライアントの初期化パラメータの記録を保持すべきです (SHOULD)。
4.3.5 DHCPINFORMメッセージ (DHCPINFORM message)
サーバーは、DHCPINFORMメッセージの「ciaddr」フィールドに示されたアドレスにDHCPACKメッセージを直接送信することによって、DHCPINFORMメッセージに応答します。サーバーは、クライアントにリース有効期限を送信してはならず (MUST NOT)、「yiaddr」を埋めるべきではありません (SHOULD NOT)。サーバーは、セクション4.3.1で定義されているように、DHCPACKメッセージに他のパラメータを含めます。
4.3.6 クライアントメッセージ (Client messages)
表4は、さまざまな状態のクライアントからのメッセージ間の違いを詳述しています。
| INIT-REBOOT | SELECTING | RENEWING | REBINDING | |
|---|---|---|---|---|
| ブロードキャスト/ユニキャスト | ブロードキャスト | ブロードキャスト | ユニキャスト | ブロードキャスト |
| server-ip | 不可 (MUST NOT) | 必須 (MUST) | 不可 (MUST NOT) | 不可 (MUST NOT) |
| requested-ip | 必須 (MUST) | 必須 (MUST) | 不可 (MUST NOT) | 不可 (MUST NOT) |
| ciaddr | ゼロ | ゼロ | IPアドレス | IPアドレス |
表4: 異なる状態からのクライアントメッセージ
4.4 DHCPクライアントの動作 (DHCP client behavior)
図5は、DHCPクライアントの状態遷移図を示しています。クライアントは、サーバーから次のメッセージを受信できます:
- DHCPOFFER
- DHCPACK
- DHCPNAK
DHCPINFORMメッセージは図5には示されていません。クライアントは単にDHCPINFORMを送信し、DHCPACKメッセージを待ちます。クライアントがそのパラメータを選択すると、構成プロセスが完了します。
表5は、クライアントによるDHCPメッセージのフィールドとオプションの使用を示しています。このセクションの残りの部分では、各可能な着信メッセージに対するDHCPクライアントのアクションについて説明します。次のセクションの説明は、セクション3.1で以前に説明された完全な構成手順に対応し、後続のセクションのテキストは、セクション3.2で説明された簡略化された構成手順に対応します。
DHCPクライアントの状態遷移図 (State-transition diagram for DHCP clients)
-------- -------
| | +-------------------------->| |<-------------------+
| INIT- | | +-------------------->| INIT | |
| REBOOT |DHCPNAK/ +---------->| |<---+ |
| |再起動 | | ------- | |
-------- | DHCPNAK/ | | |
| オファー破棄 | -/DHCPDISCOVERを送信 |
-/DHCPREQUESTを送信 | | |
| | | DHCPACK v | |
----------- | (受け入れない)/ ----------- | |
| | | DHCPDECLINEを送信 | | |
| REBOOTING | | | | SELECTING |<----+ |
| | | / | | |DHCPOFFER/ |
----------- | / ----------- | |応答収集 |
| | / | | | |
DHCPACK/ | / +----------------+ +-------+ |
リース記録, T1,T2| | v オファー選択/ |
タイマー設定 ------------ DHCPREQUESTを送信 | |
| +----->| | DHCPNAK, リース期限切れ/ |
| | | REQUESTING | ネットワーク停止 |
DHCPOFFER/ | | | |
破棄 ------------ | |
| | | | ----------- |
| +--------+ DHCPACK/ | | |
| リース記録, T1,T2 -----| REBINDING | |
| タイマー設定 / | | |
| | DHCPACK/ ----------- |
| v リース記録, ^ |
+----------------> ------- /T1,T2設定 | |
+----->| |<---+ | |
| | BOUND |<---+ | |
DHCPOFFER, DHCPACK, | | | T2期限切れ/ DHCPNAK/
DHCPNAK/破棄 ------- | ブロードキャスト ネットワーク停止
| | | | DHCPREQUEST |
+-------+ | DHCPACK/ | |
T1期限切れ/ リース記録, T1,T2 | |
DHCPREQUESTを リースサーバーに送信 | |
リースサーバーに送信 | | |
| ---------- | |
| | |------------+ |
+->| RENEWING | |
| |----------------------------+
----------
図5: DHCPクライアントの状態遷移図
4.4.1 初期化とネットワークアドレスの割り当て (Initialization and allocation of network address)
クライアントはINIT状態から始まり、DHCPDISCOVERメッセージを形成します。クライアントは、起動時のDHCPの使用を非同期にするために、1秒から10秒の間のランダムな時間を待つべきです (SHOULD)。クライアントは「ciaddr」を0x00000000に設定します。クライアントは、「パラメータ要求リスト」オプションを含めることによって特定のパラメータを要求できます (MAY)。クライアントは、「要求されたIPアドレス」および「IPアドレスリース時間」オプションを含めることによってネットワークアドレスおよび/またはリース時間を提案できます (MAY)。DHCP応答メッセージの配信に必要な場合、クライアントは「chaddr」フィールドにそのハードウェアアドレスを含めなければなりません (MUST)。クライアントは、セクション4.2で説明されているように、「クライアント識別子」オプションに別の一意の識別子を含めることができます (MAY)。クライアントがDHCPDISCOVERメッセージに要求されたパラメータのリストを含めた場合、すべての後続メッセージにそのリストを含めなければなりません (MUST)。
クライアントは、ランダムなトランザクション識別子を生成して記録し、その識別子を「xid」フィールドに挿入します。クライアントは、リース有効期限を計算するために後で使用するために、自分のローカル時刻を記録します。次に、クライアントは、ローカルハードウェアブロードキャストアドレス上で、0xffffffff IPブロードキャストアドレスと「DHCPサーバー」UDPポートにDHCPDISCOVERをブロードキャストします。
到着したDHCPOFFERメッセージの「xid」が最新のDHCPDISCOVERメッセージの「xid」と一致しない場合、DHCPOFFERメッセージは静かに破棄されなければなりません。到着したDHCPACKメッセージはすべて静かに破棄されなければなりません。
クライアントは、一定期間にわたってDHCPOFFERメッセージを収集し、(おそらく多数の)着信DHCPOFFERメッセージから1つのDHCPOFFERメッセージを選択し(例えば、最初のDHCPOFFERメッセージまたは以前に使用されたサーバーからのDHCPOFFERメッセージ)、DHCPOFFERメッセージの「サーバー識別子」オプションからサーバーアドレスを抽出します。クライアントがメッセージを収集する時間と1つのDHCPOFFERを選択するために使用されるメカニズムは、実装に依存します。
DHCPクライアントが使用するフィールドとオプションの表 (Fields and options used by DHCP clients)
| フィールド | DHCPDISCOVER DHCPINFORM | DHCPREQUEST | DHCPDECLINE, DHCPRELEASE |
|---|---|---|---|
| op | BOOTREQUEST | BOOTREQUEST | BOOTREQUEST |
| htype | (「Assigned Numbers」RFCから) | ||
| hlen | (オクテット単位のハードウェアアドレス長) | ||
| hops | 0 | 0 | 0 |
| xid | クライアントが選択 | サーバーDHCPOFFERメッセージからの「xid」 | クライアントが選択 |
| secs | 0またはDHCPプロセス開始以降の秒数 | 0またはDHCPプロセス開始以降の秒数 | 0 |
| flags | クライアントがブロードキャスト応答を必要とする場合、「BROADCAST」フラグを設定 | クライアントがブロードキャスト応答を必要とする場合、「BROADCAST」フラグを設定 | 0 |
| ciaddr | 0 (DHCPDISCOVER) クライアントのネットワークアドレス (DHCPINFORM) | 0またはクライアントのネットワークアドレス (BOUND/RENEW/REBIND) | 0 (DHCPDECLINE) クライアントのネットワークアドレス (DHCPRELEASE) |
| yiaddr | 0 | 0 | 0 |
| siaddr | 0 | 0 | 0 |
| giaddr | 0 | 0 | 0 |
| chaddr | クライアントのハードウェアアドレス | クライアントのハードウェアアドレス | クライアントのハードウェアアドレス |
| sname | オプション (「sname/file」オプションで示されている場合); それ以外は未使用 | オプション (「sname/file」オプションで示されている場合); それ以外は未使用 | (未使用) |
| file | オプション (「sname/file」オプションで示されている場合); それ以外は未使用 | オプション (「sname/file」オプションで示されている場合); それ以外は未使用 | (未使用) |
| options | オプション | オプション | (未使用) |
| オプション | DHCPDISCOVER DHCPINFORM | DHCPREQUEST | DHCPDECLINE, DHCPRELEASE |
|---|---|---|---|
| 要求されたIPアドレス | 可 (MAY) (DISCOVER) 不可 (MUST NOT) (INFORM) | 必須 (MUST) (SELECTINGまたはINIT-REBOOT中) 不可 (MUST NOT) (BOUNDまたはRENEWING中) | 必須 (MUST) (DHCPDECLINE), 不可 (MUST NOT) (DHCPRELEASE) |
| IPアドレスリース時間 | 可 (MAY) (DISCOVER) 不可 (MUST NOT) (INFORM) | 可 (MAY) | 不可 (MUST NOT) |
| 'file'/'sname'フィールドを使用 | 可 (MAY) | 可 (MAY) | 可 (MAY) |
| DHCPメッセージタイプ | DHCPDISCOVER/ DHCPINFORM | DHCPREQUEST | DHCPDECLINE/ DHCPRELEASE |
| クライアント識別子 | 可 (MAY) | 可 (MAY) | 可 (MAY) |
| ベンダークラス識別子 | 可 (MAY) | 可 (MAY) | 不可 (MUST NOT) |
| サーバー識別子 | 不可 (MUST NOT) | 必須 (MUST) (SELECTING後) 不可 (MUST NOT) (INIT-REBOOT, BOUND, RENEWINGまたはREBINDING後) | 必須 (MUST) |
| パラメータ要求リスト | 可 (MAY) | 可 (MAY) | 不可 (MUST NOT) |
| 最大メッセージサイズ | 可 (MAY) | 可 (MAY) | 不可 (MUST NOT) |
| メッセージ | 非推奨 (SHOULD NOT) | 非推奨 (SHOULD NOT) | 推奨 (SHOULD) |
| サイト固有 | 可 (MAY) | 可 (MAY) | 不可 (MUST NOT) |
| その他すべて | 可 (MAY) | 可 (MAY) | 不可 (MUST NOT) |
表5: DHCPクライアントが使用するフィールドとオプション
パラメータが受け入れ可能な場合、クライアントは「サーバー識別子」フィールドからパラメータを提供したサーバーのアドレスを記録し、DHCPREQUESTブロードキャストメッセージの「サーバー識別子」フィールドでそのアドレスを送信します。サーバーからのDHCPACKメッセージが到着すると、クライアントは初期化され、BOUND状態に移動します。DHCPREQUESTメッセージには、DHCPOFFERメッセージと同じ「xid」が含まれています。クライアントは、元の要求が送信された時刻とDHCPACKメッセージからのリース期間の合計として、リース有効期限を記録します。クライアントは、アドレスがまだ使用されていないことを確認するために、提案されたアドレスのチェックを実行すべきです (SHOULD)。例えば、クライアントがARPをサポートするネットワーク上にある場合、クライアントは提案された要求に対してARP要求を発行できます (MAY)。提案されたアドレスに対してARP要求をブロードキャストする場合、クライアントは、同じサブネット上の他のホストのARPキャッシュを混乱させないように、自分のハードウェアアドレスを送信者のハードウェアアドレスとして埋め、送信者のIPアドレスとして0を埋めなければなりません (MUST)。ネットワークアドレスが使用中であるように見える場合、クライアントはサーバーにDHCPDECLINEメッセージを送信しなければなりません (MUST)。クライアントは、クライアントの新しいIPアドレスを通知し、クライアントのサブネット上のホストの古いARPキャッシュエントリをクリアするために、ARP応答をブロードキャストすべきです (SHOULD)。
4.4.2 既知のネットワークアドレスでの初期化 (Initialization with known network address)
クライアントはINIT-REBOOT状態から始まり、DHCPREQUESTメッセージを送信します。クライアントは、DHCPREQUESTメッセージに「要求されたIPアドレス」オプションとして既知のネットワークアドレスを挿入しなければなりません (MUST)。クライアントは、「パラメータ要求リスト」オプションを含めることによって特定の構成パラメータを要求できます (MAY)。クライアントは、ランダムなトランザクション識別子を生成して記録し、その識別子を「xid」フィールドに挿入します。クライアントは、リース有効期限を計算するために後で使用するために、自分のローカル時刻を記録します。クライアントは、DHCPREQUESTメッセージに「サーバー識別子」を含めてはなりません (MUST NOT)。次に、クライアントは、ローカルハードウェアブロードキャストアドレス上で「DHCPサーバー」UDPポートにDHCPREQUESTをブロードキャストします。
任意のサーバーから、「xid」フィールドがクライアントのDHCPREQUESTメッセージの「xid」と一致するDHCPACKメッセージが到着すると、クライアントは初期化され、BOUND状態に移動します。クライアントは、DHCPREQUESTメッセージが送信された時刻とDHCPACKメッセージからのリース期間の合計として、リース有効期限を記録します。
4.4.3 外部割り当てネットワークアドレスでの初期化 (Initialization with an externally assigned network address)
クライアントは、DHCPINFORMメッセージを送信します。クライアントは、「パラメータ要求リスト」オプションを含めることによって特定の構成パラメータを要求できます (MAY)。クライアントは、ランダムなトランザクション識別子を生成して記録し、その識別子を「xid」フィールドに挿入します。クライアントは、自分のネットワークアドレスを「ciaddr」フィールドに配置します。クライアントは、リース時間パラメータを要求すべきではありません (SHOULD NOT)。
クライアントは、サーバーのアドレスを知っている場合、DHCPサーバーにDHCPINFORMをユニキャストし、それ以外の場合は限定(すべて1)ブロードキャストアドレスにメッセージをブロードキャストします。DHCPINFORMメッセージは、「DHCPサーバー」UDPポートに向けられなければなりません (MUST)。
任意のサーバーから、「xid」フィールドがクライアントのDHCPINFORMメッセージの「xid」と一致するDHCPACKメッセージが到着すると、クライアントは初期化されます。
クライアントが合理的な時間内(60秒または、セクション4.1で提案されたタイムアウトを使用している場合は4回の試行)にDHCPACKを受信しない場合、ユーザーに問題を通知するメッセージを表示すべきであり (SHOULD)、その後、附属書Aに従って適切なデフォルトを使用してネットワーク処理を開始すべきです (SHOULD)。
4.4.4 ブロードキャストとユニキャストの使用 (Use of broadcast and unicast)
DHCPクライアントは、DHCPサーバーのアドレスを知っている場合を除き、DHCPDISCOVER、DHCPREQUEST、およびDHCPINFORMメッセージをブロードキャストします。クライアントは、DHCPRELEASEメッセージをサーバーにユニキャストします。クライアントは、サーバーによって提供されたIPアドレスの使用を拒否しているため、DHCPDECLINEメッセージをブロードキャストします。
DHCPクライアントがINITまたはREBOOTING状態でDHCPサーバーのアドレスを知っている場合、クライアントは、DHCPDISCOVERまたはDHCPREQUESTでIPブロードキャストアドレスの代わりにそのアドレスを使用できます (MAY)。クライアントは、既知のDHCPサーバーにDHCPINFORMメッセージを送信するためにユニキャストを使用することもできます (MAY)。既知のDHCPサーバーのIPアドレスに送信されたDHCPメッセージに対する応答をクライアントが受信しない場合、DHCPクライアントはIPブロードキャストアドレスの使用に戻ります。
4.4.5 再取得と期限切れ (Reacquisition and expiration)
クライアントは、クライアントがそのネットワークアドレスのリースを延長しようとする時刻を指定する2つの時刻T1とT2を維持します。T1は、クライアントがRENEWING状態に入り、元々クライアントのネットワークアドレスを発行したサーバーに連絡しようとする時刻です。T2は、クライアントがREBINDING状態に入り、任意のサーバーに連絡しようとする時刻です。T1はT2より早くなければならず (MUST)、T2はクライアントのリースが期限切れになる時刻より早くなければなりません (MUST)。
同期されたクロックの必要性を回避するために、T1とT2はオプションで相対時間として表されます[2]。
時刻T1に、クライアントはRENEWING状態に移動し、(ユニキャストを介して)サーバーにDHCPREQUESTメッセージを送信してリースを延長します。クライアントは、DHCPREQUESTの「ciaddr」フィールドを現在のネットワークアドレスに設定します。クライアントは、リース有効期限を計算するために、DHCPREQUESTメッセージが送信されたローカル時刻を記録します。クライアントは、DHCPREQUESTメッセージに「サーバー識別子」を含めてはなりません (MUST NOT)。
クライアントのDHCPREQUESTメッセージの「xid」と一致しない「xid」で到着するDHCPACKメッセージは、静かに破棄されます。クライアントがサーバーからDHCPACKを受信すると、クライアントは、クライアントがDHCPREQUESTメッセージを送信した時刻とDHCPACKメッセージからのリース期間の合計として、リース有効期限を計算します。クライアントはそのネットワークアドレスを正常に再取得し、BOUND状態に戻り、ネットワーク処理を続けることができます。
時刻T2の前にDHCPACKが到着しない場合、クライアントはREBINDING状態に移動し、(ブロードキャストを介して)DHCPREQUESTメッセージを送信してリースを延長します。クライアントは、DHCPREQUESTの「ciaddr」フィールドを現在のネットワークアドレスに設定します。クライアントは、DHCPREQUESTメッセージに「サーバー識別子」を含めてはなりません (MUST NOT)。
時刻T1とT2は、オプションを通じてサーバーによって構成可能です。T1はデフォルトで (0.5 * duration_of_lease) です。T2はデフォルトで (0.875 * duration_of_lease) です。時刻T1とT2は、クライアントの再取得の同期を避けるために、固定値の周りにランダムな「ファジー」を使用して選択されるべきです (SHOULD)。
クライアントは、T1より前にリースを更新または延長することを選択できます (MAY)。サーバーは、ネットワーク管理者によって設定されたポリシーに従って、クライアントのリースを延長することを選択できます (MAY)。サーバーは、T1とT2を返すべきであり (SHOULD)、それらの値は、リースの残り時間を考慮するために元の値から調整されるべきです (SHOULD)。
RENEWINGおよびREBINDING状態の両方で、クライアントがそのDHCPREQUESTメッセージに対する応答を受信しない場合、クライアントは、DHCPREQUESTメッセージを再送信する前に、T2までの残り時間の半分(RENEWING状態)と残りリース時間の半分(REBINDING状態)、最小60秒まで待つべきです (SHOULD)。
クライアントがDHCPACKを受信する前にリースが期限切れになった場合、クライアントはINIT状態に移動し、他のすべてのネットワーク処理を直ちに停止しなければならず (MUST)、クライアントが初期化されていないかのようにネットワーク初期化パラメータを要求します。クライアントがその後、そのクライアントに以前のネットワークアドレスを割り当てるDHCPACKを受信した場合、クライアントはネットワーク処理を続けるべきです (SHOULD)。クライアントに新しいネットワークアドレスが与えられた場合、以前のネットワークアドレスを使用し続けてはならず (MUST NOT)、ローカルユーザーに問題を通知すべきです (SHOULD)。
4.4.6 DHCPRELEASE
クライアントが割り当てられたネットワークアドレスを使用する必要がなくなった場合(例えば、クライアントが正常にシャットダウンされる場合)、クライアントはサーバーにDHCPRELEASEメッセージを送信します。DHCPの正しい動作は、DHCPRELEASEメッセージの送信に依存しないことに注意してください。