Bootstrap Protocol (BOOTP)

Das Bootstrap Protocol (BOOTP) dient dazu, einem Computer in einem TCP/IP-Netzwerke eine IP-Adresse und eine Reihe von weiteren Parametern zuzuweisen.


Verwendet wird BOOTP zum Beispiel zur Einstellung der Netzwerkadresse von Terminals und plattenlosen Workstations, die ihr Betriebssystem von einem Bootserver beziehen. Die Übertragung des Betriebsprogramms geschieht dann üblicherweise über das TFTP-Protokoll. Daneben können einige Peripheriegeräte wie beispielsweise Netzwerkdrucker das BOOTP-Protokoll zur Ermittlung ihrer IP-Adresse und Netzwerkkonfiguration (Subnetz/Gateway) verwenden.

 
BOOTP im TCP/IP-Protokollstapel
Anwendung BOOTP
Transport UDP
Netzwerk IP
Netzzugang Ethernet Token
Ring
FDDI ...

Früher wurde das RARP-Protokoll (Address Resolution Protocol, quasi das »umgekehrte« ARP) zur Ermittlung der IP-Adresse bei plattenlosen Geräten verwendet. Im Gegensatz zu RARP, das ausschließlich die IP-Adresse liefert, besitzt BOOTP eine ganze Reihe von Parametern, insbesondere können Subnetzmaske, Gateway sowie Bootserver übermittelt werden. Zur Konfiguration von Workstations und PCs reichen diese jedoch nicht aus, da hier zusätzliche Einstellungen wie Drucker, Zeitserver und andere nötig sind. Das DHCP-Protokoll stellt eine Erweiterung der BOOTP-Parameter dar.

Der Ablauf einer BOOTP Anfrage besteht aus einer Anforderung und einer Antwort:

Die BOOTP-Anforderung

Beim Einschalten des festplattenlosen Rechners kennt dieser weder seine eigene IP-Adresse noch die des BOOTP-Servers. Es wird ein Bootrequest gesendet. Dies ist ein normales IP/UDP Paket. Als Absender wird, da nichts anderes bekannt ist, die Adresse 0.0.0.0 eingesetzt. Die Empfängerandresse ist die 255.255.255.255, was als Broadcast im eigenen Netz interpretiert wird. (Der BOOTP-Client kennt schließlich auch die Netznummer nicht.)

Ein Bootrequest von einem Client wird immer auf dem Zielport 67 (BOOTP Server) gesendet. Anschließend lauscht der Client auf dem Port 68 (BOOTP Client), auf dem die Bootreply gesendet wird.

Dass zwei reservierte Ports verwendet werden ist nicht bei jeder IP-Verbindung so. Die meisten Protokolle verwenden als abgehenden Port (der Port vom Client) eine zufällige Portnummer. Auf diesem Port wird dann auch die Antwort des Servers erwartet. Beim BOOTP-Protokoll würde dies jedoch nicht funktionieren, da die Antwort des BOOTP-Servers (Bootreply) nicht unbedingt auf eine bestimmte Zieladresse gesendet wird, sondern auch als Broadcast an alle Stationen im eigenen Subnetz gehen kann. Würden keine festen Portnummern verwendet werden, könnte es vorkommen dass ein anderer Host gerade auf dem gleichen Port lauscht, jedoch etwas ganz anderes erwartet.

Mit dem Bootrequest sendet der Client einige Informationen über sich: Das wichtigste ist die eigene Hardware-Adresse der Netzwerkkarte (MAC-Adresse). Dies ist das einzige Erkennungsmerkmal der Station. Der Client generiert außerdem eine 4 Byte lange Zufallszahl, die im Bootreply wieder auftauchen muss. Weiterhin ist ein Timer vorgesehen, der zählt wie lange der Client schon auf sein Bootreply wartet.

Die BOOTP-Antwort

Bekommt der BOOTP-Server eine gültige Anfrage auf dem entsprechenden Port, so betrachtet dieser zunächst die MAC-Adresse. Die MAC aus der Anfrage wird mit einer Datenbank verglichen, in der MACs IPs zugeordnet sind. Wird für die Anfrage ein Eintrag gefunden, gibt der Server eine Antwort (Bootreply). Meist wird die Antwort auch einfach als Broadcast gesendet, es ist jedoch auch möglich die ARP-Tabelle des Clients manuell zu bearbeiten. Die Möglichkeit hierfür muss jedoch der Kernel bieten. Wird die Antwort als Broadcast gesendet, enthält diese folgende Informationen:

  • Die Hardware-Adresse des Clients. Der Client erwartet eine Antwort mit seiner Hardware-Adresse, um zu erkennen, dass das Paket für ihn ist.

  • Die Zufallszahl, die in der Anfrage vom Client erzeugt wurde.

  • Das wichtigste überhaupt: Die IP-Adresse der Client-Maschine.

  • Die IP-Adresse und der Hostname des Boot-Servers. Von dort kann im nächsten Schritt über TFTP ein Betriebssystem geladen werden.

  • Der Name und die Pfadangabe der Bootdatei. Die Bootdatei enthält den Kernel, der anschließend mit TFTP übertragen wird.

  • Name des Verzeichnisses, das vom Kernel über NFS als root (/) Partition eingebunden werden soll.

Der festplattenlose BOOTP-Client lauscht also auf dem vorgegebenen Port, und wartet auf eine Antwort vom Server. Empfängt er ein Paket, wird die MAC-Adresse mit der eigenen, sowie die Zufallszahl mit der gesendeten verglichen. Erkennt der Client, dass die Antwort für ihn gedacht ist, wird die IP-Adresse dem Netzwerk-Interface zugewiesen.