9. DHCP-Eindeutiger Bezeichner (DUID)
9. DHCP-Eindeutiger Bezeichner (DUID)
Jeder DHCP-Client und -Server hat einen DUID. DHCP-Server verwenden DUIDs, um Clients für die Auswahl von Konfigurationsparametern und bei der Zuordnung von IAs zu Clients zu identifizieren. DHCP-Clients verwenden DUIDs, um einen Server in Nachrichten zu identifizieren, in denen ein Server identifiziert werden muss. Siehe Abschnitte 22.2 und 22.3 für die Darstellung eines DUID in einer DHCP-Nachricht.
Clients und Server MÜSSEN DUIDs als opake Werte behandeln und DUIDs NUR auf Gleichheit vergleichen. Clients und Server DÜRFEN DUIDs auf keine andere Weise interpretieren. Clients und Server DÜRFEN DUIDs nicht auf die in diesem Dokument definierten Typen beschränken, da zusätzliche DUID-Typen in Zukunft definiert werden können.
Der DUID wird in einer Option übertragen, da er variabler Länge sein kann und da er nicht in allen DHCP-Nachrichten erforderlich ist. Der DUID ist so konzipiert, dass er über alle DHCP-Clients und -Server hinweg eindeutig ist und für jeden spezifischen Client oder Server stabil ist - das heißt, der von einem Client oder Server verwendete DUID SOLLTE sich im Laufe der Zeit nicht ändern, wenn überhaupt möglich; zum Beispiel sollte der DUID eines Geräts sich nicht als Ergebnis einer Änderung in der Netzwerkhardware des Geräts ändern.
Die Motivation für mehr als einen Typ von DUID ist, dass der DUID global eindeutig sein muss und auch einfach zu generieren sein muss. Die Art von global eindeutigem Bezeichner, der für jedes gegebene Gerät einfach zu generieren ist, kann sehr unterschiedlich sein. Außerdem können einige Geräte keinen persistenten Speicher enthalten. Das Beibehalten eines generierten DUID in einem solchen Gerät ist nicht möglich, daher muss das DUID-Schema solche Geräte berücksichtigen.
9.1. DUID-Inhalt
Ein DUID besteht aus einem zweioctetigen Typecode, dargestellt in Netzwerk-Byte-Reihenfolge, gefolgt von einer variablen Anzahl von Octets, die den tatsächlichen Bezeichner bilden. Ein DUID kann nicht länger als 128 Octets sein (ohne den Typecode). Die folgenden Typen sind derzeit definiert:
- Link-Layer-Adresse plus Zeit
- Vom Anbieter zugewiesene eindeutige ID basierend auf Enterprise Number
- Link-Layer-Adresse
Formate für das variable Feld des DUID für jeden der oben genannten Typen sind unten gezeigt.
9.2. DUID basierend auf Link-Layer-Adresse plus Zeit [DUID-LLT]
Dieser Typ von DUID besteht aus einem zweioctetigen Typfeld, das den Wert 1 enthält, einem zweioctetigen Hardware-Typecode, vier Octets, die einen Zeitwert enthalten, gefolgt von der Link-Layer-Adresse einer beliebigen Netzwerkschnittstelle, die zum Zeitpunkt der Generierung des DUID mit dem DHCP-Gerät verbunden ist. Der Zeitwert ist die Zeit, zu der der DUID generiert wurde, dargestellt in Sekunden seit Mitternacht (UTC), 1. Januar 2000, modulo 2^32. Der Hardware-Typ MUSS ein gültiger Hardware-Typ sein, der von der IANA zugewiesen wurde, wie in RFC 826 [14] beschrieben. Sowohl die Zeit als auch der Hardware-Typ werden in Netzwerk-Byte-Reihenfolge gespeichert. Die Link-Layer-Adresse wird in kanonischer Form gespeichert, wie in RFC 2464 [2] beschrieben.
Das folgende Diagramm veranschaulicht das Format eines 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) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Die Wahl der Netzwerkschnittstelle kann völlig beliebig sein, solange diese Schnittstelle eine global eindeutige Link-Layer-Adresse für den Link-Typ bereitstellt, und derselbe DUID-LLT SOLLTE bei der Konfiguration aller mit dem Gerät verbundenen Netzwerkschnittstellen verwendet werden, unabhängig davon, welche Link-Layer-Adresse der Schnittstelle zur Generierung des DUID-LLT verwendet wurde.
Clients und Server, die diesen Typ von DUID verwenden, MÜSSEN den DUID-LLT in stabilem Speicher speichern und MÜSSEN diesen DUID-LLT weiterhin verwenden, auch wenn die Netzwerkschnittstelle, die zur Generierung des DUID-LLT verwendet wurde, entfernt wird. Clients und Server, die keinen stabilen Speicher haben, DÜRFEN diesen Typ von DUID NICHT verwenden.
Clients und Server, die diesen DUID verwenden, SOLLTEN versuchen, die Zeit vor der Generierung des DUID zu konfigurieren, wenn das möglich ist, und MÜSSEN eine Art Zeitquelle (z.B. eine Echtzeituhr) bei der Generierung des DUID verwenden, auch wenn diese Zeitquelle vor der Generierung des DUID nicht konfiguriert werden konnte. Die Verwendung einer Zeitquelle macht es unwahrscheinlich, dass zwei identische DUID-LLTs generiert werden, wenn die Netzwerkschnittstelle vom Client entfernt wird und ein anderer Client dann dieselbe Netzwerkschnittstelle verwendet, um einen DUID-LLT zu generieren. Eine Kollision zwischen zwei DUID-LLTs ist sehr unwahrscheinlich, auch wenn die Uhren vor der Generierung des DUID nicht konfiguriert wurden.
Diese Methode der DUID-Generierung wird für alle allgemeinen Computergeräte wie Desktop-Computer und Laptop-Computer empfohlen und auch für Geräte wie Drucker, Router usw., die eine Form von beschreibbarem nichtflüchtigem Speicher enthalten.
Trotz unserer besten Bemühungen ist es möglich, dass dieser Algorithmus zur Generierung eines DUID zu einer Client-Bezeichner-Kollision führen könnte. Ein DHCP-Client, der einen DUID-LLT mit diesem Mechanismus generiert, MUSS eine administrative Schnittstelle bereitstellen, die den vorhandenen DUID durch einen neu generierten DUID-LLT ersetzt.
9.3. DUID zugewiesen vom Anbieter basierend auf Unternehmensnummer [DUID-EN]
Diese Form von DUID wird vom Anbieter dem Gerät zugewiesen. Sie besteht aus der registrierten Private Enterprise Number des Anbieters, wie von IANA [6] geführt, gefolgt von einem eindeutigen Bezeichner, der vom Anbieter zugewiesen wurde. Das folgende Diagramm fasst die Struktur eines DUID-EN zusammen:
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) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Die Quelle des Bezeichners bleibt dem Anbieter überlassen, der ihn definiert, aber jeder Bezeichnerteil jedes DUID-EN MUSS für das Gerät, das ihn verwendet, eindeutig sein und MUSS dem Gerät zum Zeitpunkt seiner Herstellung zugewiesen und in einer Form von nichtflüchtigem Speicher gespeichert werden. Der generierte DUID SOLLTE in nicht löschbarem Speicher aufgezeichnet werden. Die enterprise-number ist die registrierte Private Enterprise Number des Anbieters, wie von IANA [6] geführt. Die enterprise-number wird als vorzeichenlose 32-Bit-Zahl gespeichert.
Ein Beispiel-DUID dieses Typs könnte so aussehen:
+---+---+---+---+---+---+---+---+
| 0 | 2 | 0 | 0 | 0 | 9| 12|192|
+---+---+---+---+---+---+---+---+
|132|221| 3 | 0 | 9 | 18|
+---+---+---+---+---+---+
Dieses Beispiel enthält den zweioctetigen Typ 2, die Enterprise Number (9), gefolgt von acht Octets von Bezeichnerdaten (0x0CC084D303000912).
9.4. DUID basierend auf Link-Layer-Adresse [DUID-LL]
Dieser Typ von DUID besteht aus zwei Octets, die den DUID-Typ 3 enthalten, einem zweioctetigen Netzwerk-Hardware-Typecode, gefolgt von der Link-Layer-Adresse einer beliebigen Netzwerkschnittstelle, die dauerhaft mit dem Client- oder Servergerät verbunden ist. Zum Beispiel könnte ein Host, der eine Netzwerkschnittstelle in einem Chip implementiert hat, der unwahrscheinlich entfernt und woanders verwendet wird, einen DUID-LL verwenden. Der Hardware-Typ MUSS ein gültiger Hardware-Typ sein, der von der IANA zugewiesen wurde, wie in RFC 826 [14] beschrieben. Der Hardware-Typ wird in Netzwerk-Byte-Reihenfolge gespeichert. Die Link-Layer-Adresse wird in kanonischer Form gespeichert, wie in RFC 2464 [2] beschrieben. Das folgende Diagramm veranschaulicht das Format eines 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) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Die Wahl der Netzwerkschnittstelle kann völlig beliebig sein, solange diese Schnittstelle eine eindeutige Link-Layer-Adresse bereitstellt und dauerhaft an dem Gerät angeschlossen ist, auf dem der DUID-LL generiert wird. Derselbe DUID-LL SOLLTE bei der Konfiguration aller mit dem Gerät verbundenen Netzwerkschnittstellen verwendet werden, unabhängig davon, welche Link-Layer-Adresse der Schnittstelle zur Generierung des DUID verwendet wurde.
DUID-LL wird für Geräte empfohlen, die eine dauerhaft verbundene Netzwerkschnittstelle mit einer Link-Layer-Adresse haben und keinen nichtflüchtigen, beschreibbaren stabilen Speicher haben. DUID-LL DARF NICHT von DHCP-Clients oder -Servern verwendet werden, die nicht feststellen können, ob eine Netzwerkschnittstelle dauerhaft an dem Gerät angeschlossen ist, auf dem der DHCP-Client läuft.