BOOTP: Alle Informationen zum DHCP-Wegbereiter
Um in Netzwerken wie dem Internet miteinander kommunizieren zu können, benötigen teilnehmende Systeme eine IP-Adresse. Diese lässt sich zwar grundsätzlich manuell vergeben, doch in der Praxis beziehen die meisten Geräte ihre Adresse inzwischen automatisch. Grundlage hierfür ist das Kommunikationsprotokoll DHCP, das verbindungssuchende Systeme bei der Beschaffung der notwendigen Informationen unterstützt. In den Anfängen von Computer, Netzwerk und Co. hat das Bootstrap Protocol, das auch als BOOTP bekannt ist, noch die Funktion des Adress-Managers übernommen.
Was ist BOOTP (das Bootstrap Protocol)?
Im September 1985 veröffentlichte die Stanford University Network Group in RFC 951 die erste Version des Bootstrap Protocols (BOOTP). Dies Kommunikationsprotokoll, das in Zusammenarbeit mit einem Team des Computerherstellers Sun Microsystems entstand, ermöglichte es den damals eingesetzten Terminals und festplattenlosen Workstations erstmals, neben der IP-Adresse auch Informationen wie die Adresse des Gateways, die Adresse des Bootservers und das Verzeichnis der Boot-Datei (notwendig für das Laden des Betriebssystems) zu beziehen. Es ersetzte das bis dahin verwendete Reverse Address Resolution Protocol (RRP), das ausschließlich Netzwerkadressen liefern und nur in Subnetzen eingesetzt werden konnte.
Das Bootstrap Protocol ist Teil der Internetprotokollfamilie und funktioniert – wie viele andere Protokolle des Stacks – nach dem Client-Server-Modell. Der Nachrichtenaustausch zur Übermittlung der Netzwerkinformation findet also zwischen einem BOOTP-Client und dem BOOTP-Server statt. Als Protokoll für den Transport der entsprechenden Datenpakete ist das minimale, verbindungslose User Datagram Protocol (UDP) vorgesehen (Port 67 und 68). Selbiges ist im Vergleich zu TCP nicht nur weniger komplex, sondern unterstützt im Gegensatz zu dem Standardprotokoll für Datentransport auch Broadcasting. Da der Client beim Verbindungsaufbau weder seine eigene Adresse noch die des BOOTP-Servers kennt, ist diese Nachrichtenmethode, bei der alle Netzwerkteilnehmer kontaktiert werden, die einzige Lösung für den automatischen Adressbezug.
So funktioniert der Austausch von Netzwerkinformationen über BOOTP
Die Adresszuordnung via BOOTP basiert auf einem simplen Zwei-Schritte-Nachrichtenaustausch zwischen Client und Server, wobei die Client-Komponente der Initiator ist. Da dieser zu Beginn weder seine eigene IP-Adresse noch die des BOOTP-Servers kennt, schickt er einen allgemeinen Request („BOOTREQUEST“) an die Broadcast-Gruppenadresse 255.255.255.255. Der Server, der auf UDP-Port 67 lauscht, empfängt und verarbeitet diese Anfrage. Dabei besteht die Hauptaufgabe darin, der MAC-Adresse des Client-Systems die passende IP-Adresse zuzuordnen. Anschließend wird die Antwort („BOOTREPLY“) inklusive weiterer Netzwerkinformationen via Broadcast zurück an den Client gesendet, der infolgedessen das Betriebssystem über das Netzwerk beziehen kann.
Wenn der Client die Adresse des BOOTP-Servers bereits kennt, kann er den Request auch direkt per Unicast-Verbindung an diesen schicken.
So sieht der Aufbau der Nachrichten aus, die Client und Server bei der Kommunikation via Bootstrap Protocol verschicken:
Jede BOOTP-Nachricht beginnt mit dem 8 Bit langen op-Feld, das den Typ der Operation bzw. der Nachricht definiert. Bei Anfragen durch den Client wird an dieser Stelle der Wert 1 (für BOOTREQUEST) gesetzt, während die Antworten des Servers den Wert 2 (für BOOTREPLY) aufweisen. Es folgen jeweils 8 Bit, die den Typ („htype“) sowie die Länge der Hardware-Adresse („hlen“) kennzeichnen. Das ebenfalls 8 Bit lange Feld „hops“ gibt die Zahl an Zwischenstationen an, die das Paket auf dem Weg zum Empfänger durchquert. Bei Client-Anfragen ist der Wert immer 0.
Der nächste Block enthält eine zufällige, 32 Bit lange Transaktions-ID, die vom Client generiert und später auch in der Antwort des Servers verwendet wird, damit der Client diese eindeutig zuordnen kann. Der Client füllt außerdem das Feld „secs“ (16 Bit) aus, das die Sekunden angibt, die seit dem Bootversuch des Clients vergangen sind. Den Abschluss der einleitenden Informationen bildet ein weiteres 16-Bit-Feld, das gänzlich leer bleibt. Bei den weiteren Einträgen des BOOTP-Pakets handelt es sich nun um die eigentlichen Netzwerkinformationen, die in der folgenden Auflistung näher erläutert werden:
- IP-Adresse des Clients (ciaddr): Mit dem Label „ciaddr“ (client ip address) wird das 32-Bit-Feld ausgezeichnet, in das der Client seine eigene IP-Adresse einträgt, sofern er diese bereits kennt. Ist dies nicht der Fall, erhält das Feld den Wert 0.
- IP-Adresse des Clients (yiaddr): Das Feld „yiaddr“ (your ip address) ist ebenfalls für die IP-Adresse des Clients reserviert. Im Gegensatz zu dem zuvor genannten Abschnitt des Pakets wird dieses 32-Bit-Feld jedoch durch den Server ausgefüllt, falls der Client seine IP-Adresse zum Zeitpunkt der Erstellung der Netzwerkabfrage nicht kannte.
- IP-Adresse des Servers (siaddr): In der 32-Bit-Sequenz „siaddr“ (server ip address) teilt der BOOTP-Server dem Client seine eigene IP-Adresse mit.
- IP-Adresse des Gateways (giaddr): Ist ein Gateway (z. B. ein Router) in den Kommunikationsprozess eingebunden, wird dessen Adresse in das Feld „giaddr“ (gateway ip address) eingetragen.
- Hardware-Adresse des Clients (chaddr): Die Hardware-Adresse (128 Bit) zählt zu den Pflichtangaben des Clients beim Austausch von Bootstrap-Protocol-Nachrichten. Ohne diese auch Geräte- oder MAC-Adresse genannte ID kann der Server dem Client weder die richtige Adresse noch die passenden Netzwerkparameter zuordnen.
- Hostname des Servers (sname): Optional kann der Server in der BOOTP-Antwort außerdem seinen Hostnamen angeben. Hierfür steht ein bis zu 512 Bit großes Feld zur Verfügung, in das er eine entsprechende nullterminierte Zeichenkette (ein Nullzeichen markiert das Ende der Kette) einfügen kann.
- Name der Bootdatei (file): Ebenfalls optional ist die Angabe einer konkreten Bootdatei, die der Client zum Starten des Betriebssystems auf dem jeweiligen Terminal bzw. der jeweiligen Workstation benötigt. Auch dieses Feld sieht eine nullterminierte Zeichenkette vor, die in diesem Fall den vollständigen Verzeichnis-Pfad der Datei wiedergibt. Die Zeichensequenz kann dabei bis zu 1024 Bit lang sein. In der Request des Clients steht hier entweder der Wert 0 oder ein generischer Name.
- Herstellerspezifische Informationen (vend): Den potenziellen Abschluss der BOOTP-Protokoll-Nachricht bilden herstellerspezifische Informationen, die nicht durch das Protokoll abgedeckt werden. Dabei kann es sich beispielsweise um die Angabe spezieller Hardware-Typen und -Seriennummern handeln. Ferner kann dieser 512 Bit lange Informationsbereich für einen dritten Bootstrap- oder Kernelprozess reserviert werden.
Insgesamt können die BOOTP-Nachrichten also eine Länge von bis zu 2400 Bit (300 Bytes) haben. Das komplette UDP/IP-Datagramm inklusive eingebundener Bootstrap-Protocol-Anfrage bzw. -Antwort hat folgenden Aufbau:
BOOTP vs. DHCP: Warum das Bootstrap Protocol heute nicht mehr zum Einsatz kommt
Für Terminal-Clients und festplattenlose Workstations war BOOTP die perfekte Lösung, um eine persönliche IP-Adresse im gewünschten Netzwerk zu erhalten und auf diese Weise das Betriebssystem zu beziehen. Dass der Adressbezug durch das Kommunikationsprotokoll gleichzeitig mit dem Bootprozess erledigt werden konnte, war für die stationären Computer, die in Netzwerken überschaubarer Größen zum Einsatz kamen, sowohl praktisch als auch unkompliziert. So war es beispielsweise auch kaum problematisch, dass der Administrator die Netzwerkinformationstabellen des BOOTP-Servers manuell konfigurieren musste.
Als die Netzwerke jedoch immer größer und die Computer immer eigenständiger und – durch die Entwicklung tragbarer Geräte – auch mobiler wurden, machte sich die fehlende Möglichkeit zur Automatisierung des Konfigurationsprozesses negativ bemerkbar. Es wurde der Wunsch nach einem neuen Protokoll laut. Mit dem Dynamic Host Configuration Protocol (DHCP) fand man im Jahr 1993 einen solchen Nachfolger (endgültige Spezifikation in RFC 2131). DHCP basiert zwar zum Großteil auf der Struktur des Bootstrap Protocols, ergänzt dieses aber durch verschiedene zusätzliche Konfigurationsoptionen und bietet die Möglichkeit, verbindungssuchenden Clients wiederverwendbare Netzwerkadressen zuzuweisen. Zudem funktioniert die Zuordnung von Adressinformationen mit DHCP auch während des aktuellen Systembetriebs – ein Neustart wie bei BOOTP ist nicht erforderlich.
„BOOTP vs. DHCP“ – nachfolgend die wichtigsten Unterschiede:
BOOTP | DHCP | ||
---|---|---|---|
Auto-Konfiguration | Zuordnung von IP-Adressen setzt manuelle Konfiguration der Adress-Tabellen voraus | unterstützt automatische Zuordnung und automatischen Bezug von IP-Adressen (aber auch manuelle Konfiguration) | |
Temporäre IP-Adressen | nicht möglich | für einen limitierten Zeitraum möglich | |
Unterstützung mobiler Geräte | IP-Konfiguration und Zugriff auf Netzwerkinformationen sind nicht möglich | unterstützt die Mobilität von Netzwerkclients | |
Fehleranfälligkeit | Aufgrund manueller Konfiguration sehr fehleranfällig | nahezu fehlerimmun dank automatisierter Konfiguration der Netzwerkkomponenten | |
Systemvoraussetzungen | keine | setzt Festplatte zur Speicherung und Weiterleitung der Informationen voraus |
Dank der diversen Optimierungen ist DHCP schnell zum Standardprotokoll für das IP-Management in Netzwerken geworden, während das BOOTP-Protokoll inzwischen nur noch von historischem Wert ist. Da DHCP das Bootstrap Protocol unterstützt, können DHCP-Server prinzipiell aber auch jegliche Anfragen beantworten, die von einem BOOTP-Client gestellt wurden.