Das Boot Service Discovery Protocol (BSDP) ist eine von Apple entwickelte, standardkonforme Ergänzung von DHCP um spezielle Optionen, die eine weitergehende Beschreibung über die im Netzwerk vorhandenen bootbaren Images (Systemabbilder) ermöglichen. Hierzu werden bestimmte DHCP-Optionen, nämlich die „vendor specific information“-Option (Nr. 43, auch „vendor encapsulated options“) und die „vendor class identifier“-Option benutzt (Nr. 60). Beide Optionen sind nach dem DHCP-Standard für Hersteller-eigene Nachrichten, somit also auch für BSDP vorgesehen. Derzeit existieren offenbar drei Versionen von BSDP, benutzt wird aber vorzugsweise Version 1.0. Gemeinsam ist allen Versionen, dass es beispielsweise ermöglicht wird, auf einem Server mehrere bootbare Images vorzuhalten, aus denen am Client ausgewählt werden kann. Die Referenzimplementation von BSDP findet sich im BOOTP-Server von Darwin,[1] der auch in Mac OS X Server enthalten und dort Teil des beworbenen „NetBoot“[2] ist.

Boot Service Discovery Protocol
Familie: Internetprotokollfamilie
Einsatzfeld: Netzwerkboot von Apple-Computern;
Verwaltung verschiedener System-Abbilder für verschiedene Macs
aufbauend auf Port 67/UDP (Anfrage, BOOTP)
Port 68 (Antwort)
BSDP im TCP/IP-Protokollstapel:
Anwendung BSDP
Transport UDP
Internet IP (IPv4, IPv6)
Netzzugang Ethernet Token
Bus
Token
Ring
FDDI

Beschreibung Bearbeiten

Inhalt von Vendor Class Bearbeiten

Bei DHCP-Server und DHCP-Client enthält die Vendor Class-Option „AAPLBSDPC“ (ASCII-codiert), um die BSDP-Fähigkeit anzuzeigen; der Client beschreibt zudem - abgetrennt durch „/“ – seine Architektur („ppc“ oder „i386“) und wiederum abgetrennt durch „/“ eine System-ID. Beispielsweise schickt ein iMac mit Intel-Architektur als Vendor Class:

AAPLBSDPC/i386/iMac4,1

Inhalt der Vendor Encapsulated Options Bearbeiten

Die übrige Kommunikation erfolgt über die Vendor Encapsulated-Option, wobei hier eine oder mehrere Nachrichten zu einer Meldung aneinandergereiht werden. Jede einzelne solche Nachricht ist folgendermaßen aufgebaut:

Byte-Position Inhalt
0 Art der Nachricht
1 Länge n der Nachricht
bis n–2 Nachricht

Die nachfolgende Tabelle beschreibt die möglichen Nachrichten-Arten; die Datentypen aller Nachrichten sind, sofern es sich um Integer-Werte handelt, ohne Vorzeichen (unsigned) und als Big-Endian zu interpretieren.

Wert Bedeutung Datentyp der Nachricht selbst
1 Nachrichten-Klasse 8 Bit int
  • 0x00: keine
  • 0x01: LIST
  • 0x02: SELECT
  • 0x03: Fehler
2 benutzte BSDP-Version 16 Bit int
  • 0x0000: Version 0.0
  • 0x0100: Version 1.0
  • 0x0101: Version 1.1
3 Server-Kennung IP-Adresse des Servers, je 1 Byte für eine Komponente: c0 a8 64 01 entspricht 192.168.100.1
4 Server-Priorität 16 Bit int
5 Port für Antwort 16 Bit int
6 „boot image list path“ String
7 ID des Standard-Boot-Images 32 Bit int

(Vergleicht man dies mit der Apple-Spezifikation[3] über die Anzahl der möglichen IDs, so stellt man fest, dass maximal 65535 IDs vergeben werden können. Dies entspricht gerade 16 Bit, obwohl 32 Bit reserviert wurden. Bei allen bislang verglichenen IDs waren jedoch die höherwertigen 16 Bit gleich 1000 0001 0000 0000 (0x8100), was darauf hinweist, dass dieser Bereich zusätzliche Informationen beinhaltet, möglicherweise über Art und Version des zu bootenden Betriebssystems.)

8 ID des ausgewählten Boot-Images 32 Bit int
9 Liste der Boot-Images ?
10 „netboot 1.0 firmware“ ?
11 Filter-Liste für Image-Attribut ?
128 „shadow mount path“ String (URL)

Möglich ist hier die Angabe einer im Netzwerk erreichbaren Freigabe, auf die dann zum erfolgreichen Start notwendige Daten geschrieben werden. Wird diese Option nicht angegeben und ist lokal auch kein Speichermedium verwendbar, so wird der Boot-Prozess bei Mac OS X abgebrochen. Mac OS X, das 2016 in macOS umbenannt wurde, unterstützt als „shadow mount path“ offiziell nur AFP, allerdings war anscheinend auch einst an die Verwendung von NFS gedacht – dies funktioniert jedoch erst nach einer Modifikation der Startdateien des Systems.

129 „shadow file path“ String (URL)
130 „machine name“ (Name des zu bootenden Systems?) String

Beispiel Bearbeiten

Zur Verdeutlichung des Aufbaus einer Vendor Encapsulated-Option sei hier das nachfolgende Beispiel betrachtet:

0000 01 01 02 08 04 81 00 07 e5 82 0a 4e 65 74 42 6f 6f ........ ..NetBoo
0010 74 30 30 31           t001

Der erste Teil ist hier 01 01 02, die Art dieses ersten Nachrichten-Teils ist also „Nachrichten-Klasse“, die Daten sind ein Byte lang und der Inhalt besagt, dass das gesamte Paket eine „SELECT“-Meldung darstellen wird. Die Folge 08 04 81 00 07 e5 besagt, dass das Boot-Image mit der ID 2164262885 ausgewählt wurde. Schließlich besagt 82 0a 4e 65 74 42 6f 6f 74 30 30 31, dass ein String mit 0x0a = 10 Zeichen, nämlich „NetBoot001“ den Namen des zu bootenden Systems angibt.

Quelle Bearbeiten

  • eigene Kommunikationsmitschnitte, abgehört mit Wireshark

Weblinks Bearbeiten

Einzelnachweise Bearbeiten

  1. opensource.apple.com. (gzip; 272 kB) Ehemals im Original (nicht mehr online verfügbar); abgerufen am 29. September 2022.@1@2Vorlage:Toter Link/www.opensource.apple.com (Seite nicht mehr abrufbar. Suche in Webarchiven)
  2. apple.com: NetBoot und Netzwerk-Installation (Memento vom 10. Mai 2007 im Internet Archive)
  3. Working with architecture-specific NetBoot images. In: Apple Support. 13. Juli 2012, archiviert vom Original (nicht mehr online verfügbar) am 16. März 2016; abgerufen am 8. November 2023 (englisch).