# Bootstrap Protocol

Das Bootstrap Protocol (englisch; kurz BOOTP oder auch Bootstrap-Protokoll genannt) dient dazu, einem Computer in einem TCP/IP-Netzwerk eine IP-Adresse und eine Reihe von weiteren Parametern zuzuweisen.
Verwendet wird BOOTP zum Beispiel zur Zuweisung der Netzwerkadresse von Terminals und festplattenlosen Workstations, die ihr Betriebssystem von einem Bootserver beziehen. Die Übertragung des Betriebsprogramms geschieht dann üblicherweise über TFTP. Daneben können einige Peripheriegeräte wie beispielsweise Netzwerkdrucker BOOTP zur Ermittlung ihrer IP-Adresse und Netzwerkkonfiguration (Subnetz/Gateway) verwenden.
Früher wurde RARP zur Ermittlung der IP-Adresse bei festplattenlosen Geräten verwendet. Im Gegensatz zu RARP, das ausschließlich die IP-Adresse liefert, besitzt BOOTP eine Vielzahl von weiteren 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 Dynamic Host Configuration Protocol (DHCP) stellt eine Erweiterung von BOOTP dar und ergänzt es um Funktionen wie zum Beispiel die dynamische Zuweisung („Lease“) von wiederverwendbaren IP-Adressen. Ein abwärtskompatibler DHCP-Server kann mit BOOTP-Clients kommunizieren.

## Ablauf einer BOOTP-Anfrage

Eine BOOTP-Anfrage besteht aus einer Client-Anforderung und einer Server-Antwort.

### Die BOOTP-Anforderung

Beim Einschalten des Gerätes kennt dieses weder seine eigene IP-Adresse noch die des BOOTP-Servers. Es wird ein boot request gesendet. Dies ist ein normales UDP-Paket. Als Absender wird, da bisher nichts anderes bekannt ist, die Adresse 0.0.0.0 eingesetzt. Die Empfängeradresse ist die 255.255.255.255, was als Broadcast im eigenen Netz interpretiert wird, da der BOOTP-Client auch nicht die lokale Adresse des Netzwerkstrangs kennt.
Ein boot request von einem Client wird immer auf den Zielport 67 (BOOTP Server) gesendet. Anschließend lauscht der Client auf dem Port 68 (BOOTP Client), auf den die Antwort (boot reply) gesendet wird.
Dass zwei reservierte Ports verwendet werden, ist nicht bei jeder IP-Verbindung so. Die meisten Protokolle verwenden als abgehenden Port (der Port des Clients) eine zufällige Portnummer. Auf diesem Port wird dann auch die Antwort des Servers erwartet. Bei BOOTP 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, könnte es vorkommen, dass ein anderer Host gerade auf dem gleichen Port lauscht, jedoch etwas ganz anderes erwartet.
Mit dem boot request 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 boot reply wieder auftauchen muss. Weiterhin ist ein Timer vorgesehen, der zählt, wie lange der Client schon auf sein boot reply 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-Adresse aus der Anfrage wird mit einer Datenbank verglichen, in der den MAC-Adressen IP-Adressen zugeordnet sind. Wird für die Anfrage ein Eintrag gefunden, sendet der Server eine Antwort (boot reply). Meist wird die Antwort auch einfach als Broadcast gesendet, es ist jedoch auch möglich, die ARP-Tabelle des Servers 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.
* Die IP-Adresse der Client-Maschine.
Die folgenden Parameter sind optional und werden nur übermittelt, wenn der BOOTP-Server entsprechend konfiguriert ist:
* 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-Verzeichnis / eingebunden werden soll.
Der 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 der Netzwerkschnittstelle zugewiesen.