9. DHCP Unique Identifier (DUID) (DHCP一意識別子)
9. DHCP Unique Identifier (DUID) (DHCP一意識別子)
各DHCPクライアントとサーバーには、DUIDがあります。DHCPサーバーは、DUIDを使用してクライアントを識別し、構成パラメータの選択とIAとクライアントの関連付けで使用します。DHCPクライアントは、サーバーを識別する必要があるメッセージでDUIDを使用してサーバーを識別します。DHCPメッセージ内のDUIDの表現については、セクション22.2と22.3を参照してください。
クライアントとサーバーは、DUIDを不透明な値として扱い、DUIDを等価性についてのみ比較する必要があります。クライアントとサーバーは、DUIDを他の方法で解釈してはなりません。クライアントとサーバーは、DUIDをこの文書で定義されているタイプに制限してはなりません。将来、追加のDUIDタイプが定義される可能性があるためです。
DUIDは、可変長である可能性があり、すべてのDHCPメッセージで必要とされないため、オプションで運ばれます。DUIDは、すべてのDHCPクライアントとサーバー間で一意であり、特定のクライアントまたはサーバーに対して安定するように設計されています。つまり、クライアントまたはサーバーによって使用されるDUIDは、可能な限り時間の経過とともに変更されるべきではありません。たとえば、デバイスのDUIDは、デバイスのネットワークハードウェアの変更の結果として変更されるべきではありません。
複数のタイプのDUIDを持つ理由は、DUIDがグローバルに一意である必要があり、生成が容易である必要があるためです。任意のデバイスに対して生成が容易なグローバル一意識別子の種類は、大きく異なる可能性があります。また、一部のデバイスには永続ストレージが含まれていない場合があります。このようなデバイスで生成されたDUIDを保持することは不可能であるため、DUIDスキームはこのようなデバイスに対応する必要があります。
9.1. DUID Contents (DUID内容)
DUIDは、ネットワークバイト順で表現された2オクテットのタイプコードで構成され、その後に実際の識別子を構成する可変数のオクテットが続きます。DUIDの長さは128オクテットを超えることはできません (タイプコードを含まない)。現在、以下のタイプが定義されています:
- リンク層アドレスと時刻
- エンタープライズ番号に基づくベンダー割り当て一意ID
- リンク層アドレス
上記の各タイプのDUIDの可変フィールドの形式を以下に示します。
9.2. DUID Based on Link-layer Address Plus Time [DUID-LLT] (リンク層アドレスと時刻に基づくDUID)
このタイプのDUIDは、値1を含む2オクテットのタイプフィールド、2オクテットのハードウェアタイプコード、時刻値を含む4オクテット、およびDUIDが生成された時点でDHCPデバイスに接続されている任意の1つのネットワークインターフェースのリンク層アドレスで構成されます。時刻値は、DUIDが生成された時刻で、2000年1月1日午前0時 (UTC) からの秒数として表現され、モジュロ2^32です。ハードウェアタイプは、RFC 826 [14] で説明されているように、IANAによって割り当てられた有効なハードウェアタイプである必要があります。時刻とハードウェアタイプの両方は、ネットワークバイト順で格納されます。リンク層アドレスは、RFC 2464 [2] で説明されているように、正規形式で格納されます。
以下の図は、DUID-LLTの形式を示しています:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 | hardware type (16 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| time (32 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. link-layer address (variable length) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ネットワークインターフェースの選択は完全に任意である可能性があります。そのインターフェースがリンクタイプに対してグローバルに一意のリンク層アドレスを提供し、DUID-LLTの生成に使用されたインターフェースのリンク層アドレスに関係なく、デバイスに接続されているすべてのネットワークインターフェースの構成に同じDUID-LLTを使用する必要があります。
このタイプのDUIDを使用するクライアントとサーバーは、DUID-LLTを安定したストレージに格納し、DUID-LLTの生成に使用されたネットワークインターフェースが削除された場合でも、このDUID-LLTの使用を継続する必要があります。安定したストレージを持たないクライアントとサーバーは、このタイプのDUIDを使用してはなりません。
このDUIDを使用するクライアントとサーバーは、可能であれば、DUIDを生成する前に時刻を構成しようとし、DUIDを生成する際に何らかの時刻ソース (たとえば、リアルタイムクロック) を使用する必要があります。DUIDを生成する前にその時刻ソースを構成できなかった場合でもです。時刻ソースの使用により、ネットワークインターフェースがクライアントから削除され、別のクライアントが同じネットワークインターフェースを使用してDUID-LLTを生成した場合、2つの同一のDUID-LLTが生成される可能性が低くなります。DUIDを生成する前にクロックが構成されていなかった場合でも、2つのDUID-LLT間の衝突は非常にまれです。
このDUID生成方法は、デスクトップコンピューターやラップトップコンピューターなどのすべての汎用コンピューティングデバイス、および何らかの形式の書き込み可能な不揮発性ストレージを含むプリンター、ルーターなどのデバイスに推奨されます。
最善を尽くしても、DUIDを生成するこのアルゴリズムがクライアント識別子の衝突をもたらす可能性があります。このメカニズムを使用してDUID-LLTを生成するDHCPクライアントは、既存のDUIDを新しく生成されたDUID-LLTに置き換える管理インターフェースを提供する必要があります。
9.3. DUID Assigned by Vendor Based on Enterprise Number [DUID-EN] (エンタープライズ番号に基づくベンダー割り当てDUID)
この形式のDUIDは、ベンダーによってデバイスに割り当てられます。IANA [6] によって維持されているベンダーの登録プライベートエンタープライズ番号と、ベンダーによって割り当てられた一意識別子で構成されます。以下の図は、DUID-ENの構造をまとめています:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 2 | enterprise-number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| enterprise-number (contd) | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
. identifier .
. (variable length) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
識別子のソースは、それを定義するベンダーに任されていますが、各DUID-ENの各識別子部分は、それを使用するデバイスに対して一意である必要があり、デバイスが製造された時点でデバイスに割り当てられ、何らかの形式の不揮発性ストレージに格納される必要があります。生成されたDUIDは、消去不可能なストレージに記録される必要があります。エンタープライズ番号は、IANA [6] によって維持されているベンダーの登録プライベートエンタープライズ番号です。エンタープライズ番号は、符号なし32ビット数として格納されます。
このタイプのDUIDの例は、次のようになります:
+---+---+---+---+---+---+---+---+
| 0 | 2 | 0 | 0 | 0 | 9| 12|192|
+---+---+---+---+---+---+---+---+
|132|221| 3 | 0 | 9 | 18|
+---+---+---+---+---+---+
この例には、2オクテットのタイプ2、エンタープライズ番号 (9)、その後に8オクテットの識別子データ (0x0CC084D303000912) が含まれています。
9.4. DUID Based on Link-layer Address [DUID-LL] (リンク層アドレスに基づくDUID)
このタイプのDUIDは、DUIDタイプ3を含む2オクテット、2オクテットのネットワークハードウェアタイプコード、およびクライアントまたはサーバーデバイスに永続的に接続されている任意の1つのネットワークインターフェースのリンク層アドレスで構成されます。たとえば、削除されて他の場所で使用される可能性が低いチップに実装されたネットワークインターフェースを持つホストは、DUID-LLを使用できます。ハードウェアタイプは、RFC 826 [14] で説明されているように、IANAによって割り当てられた有効なハードウェアタイプである必要があります。ハードウェアタイプは、ネットワークバイト順で格納されます。リンク層アドレスは、RFC 2464 [2] で説明されているように、正規形式で格納されます。以下の図は、DUID-LLの形式を示しています:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 3 | hardware type (16 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. link-layer address (variable length) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ネットワークインターフェースの選択は完全に任意である可能性があります。そのインターフェースが一意のリンク層アドレスを提供し、DUID-LLが生成されているデバイスに永続的に接続されている限りです。DUIDの生成に使用されたインターフェースのリンク層アドレスに関係なく、デバイスに接続されているすべてのネットワークインターフェースの構成に同じDUID-LLを使用する必要があります。
DUID-LLは、リンク層アドレスを持つ永続的に接続されたネットワークインターフェースを持ち、不揮発性の書き込み可能な安定ストレージを持たないデバイスに推奨されます。ネットワークインターフェースがDHCPクライアントが実行されているデバイスに永続的に接続されているかどうかを判断できないDHCPクライアントまたはサーバーは、DUID-LLを使用してはなりません。