BootP:
Das Bootstrap Protocol
(BOOTP) dient dazu, einem Computer in einem
TCP-IP-Netzwerk eine IP-Adresse und eine Reihe weiterer
Parameter zuzuweisen. Verwendet wird BOOTP zum Beispiel zur
Einstellung der Netzwerkadresse von Terminals und plattenlosen
Workstations, die ihr
Betriebssystem von einem Bootserver beziehen.
Erklärung: Bootstrap
ist ein Programm, das dazu dient, das
Betriebssystem zu laden und so das Booten zu vollenden. Das
Bootstrap befindet sich im Bootsektor der
Festplatte /
Diskette, von der der Computer startet.
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.
Früher wurde das RARP-Protokoll 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 Station 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 Verzeichnises, 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.