Apparence
Uubu.fr

Les systèmes Linux, l’open source, les réseaux, l’interopérabilité, etc.
« Il vaut mieux viser la perfection et la manquer que viser l’imperfection et l’atteindre. » (Bertrand Arthur William RUSSEL)
09 juin 2010

réseaux           Protocoles Réseaux


rfc951

rfc951

bootp

   BOOTP est un protocole d'amorçage permettant à une machine sans disque dur de découvrir sa propre adresse IP, l'adresse d'un hôte serveur, et le nom d'un fichier à charger en mémoire pour exécution. Une telle opération d'amorçage se déroule en 2 phases. La première permet de déterminer l'adresse puis le fichier à télécharger, et la 2eme phase consiste à transférer ce fichier via TFTP généralement, mais n'est pas une obligation, il est possible d'utiliser FTP ou SFTP. TFTP est préféré puisque les 2 phases résident dans la PROM du client. Le logiciel PROM devrait fournit un moyen d'effectuer un amorçage complet sans intervention de l'utilisateur. Un mécanisme devrait cependant permettre à l'utilisateur de fournir manuellement l'adresse et le nom de fichier, permettant de passer outre le protocole BOOTP et d'entrer directement dans la phase de transfert de fichier.

Aperçu du protocole

- Un seul échange de paquets est effectué. Des temporisateurs sont utilisés pour la retransmission jusqu'à la réception d'une réponse. La même composition de paquet est utilisée dans les 2 directions. Des champs de longueur fixée à un maximum raisonnable sont utilisés pour simplifier la définition de structure et l'analyse syntaxique.
- Un champ Opcode existe et comprend 2 valeurs. Le client diffuse un paquet bootrequest, le serveur répond avec un paquet bootreply. La requête d'amorçage contient l'adresse matérielle du client et son IP, s'il la connait.
- La requête peut optionnellement contenir le nom du serveur à partir duquel le client veut obtenir une réponse. C'est prévu afin que le client puisse exiger l'amorçage depuis un hôte spécifique.
- La requête peut optionnellement contenir le nom de fichier « générique » à partir duquel démarrer.
- Dans le cas d'un client qui ne connait pas son adresse IP, le serveur doit également disposer d'une base de données associant adresses matérielles et adresses IP. Cette IP est ensuite placée dans un champ de la requête d'amorçage.
- Il est possible d'utiliser des agents relai, permettant aux clients de démarrer depuis des serveurs situés sur une autre réseau.

Format des paquets

   Un paquet BOOTP est encapsulé dans un datagramme UDP. Dans l'en-tête IP d'une requête d'amorçage, le client fournit sa propre adresse IP s'il la connaît, ou zéro sinon. Quand l'adresse du serveur est inconnue, l'adresse IP destination sera l'adresse de diffusion 255.255.255.255. L'en-tête UDP contient les numéros de port source et destination. Le protocole BOOTP utilise le port 68 « client BOOTP » et le port 67 « serveur BOOTP ». Le client envoie une requête en utilisant le port 67 en port de destination et 68 en port source.

op (1 octet) Type de message/code opératoire du paquet: 1= BOOTREQUEST, 2= BOOTREPLY
htype (1 octet) Type d'adresse matérielle voir la RFC « Assigned Numbers » section ARP.
hlen (1 octet) Longueur de l'adresse matérielle (ex : 6 pour Ethernet)
hops (1 octet) Fixé par le client à 0 ; peut être utilisé par des passerelles lors d'amorçages au travers de passerelles
xid (4 octets) ID de transaction : nombre aléatoire utilisé pour associer cette requête de démarrage avec la réponse qu'elle génère.
secs (2 octets) Rempli par le client, secondes aléatoire utilisé pour associer cette requête de démarrage avec la réponse qu'elle génère.
ciaddr (4 octets) Adresse IP du client ; remplie par le client dans la requête d'amorçage si elle est connue
yaddr (4 octets) Votre adresse IP (Client) ; remplie par le serveur si le client ne connait pas sa propre adresse (si ciaddr valait 0)
siaddr (4 octets) Adresse IP du serveur ; renvoyée dans une réponse d'amorçage par le serveur.
giaddr (4 octets) Adresse IP de la passerelle utilisée dans l'amorçage au travers de passerelles optionnel
chaddr (16 octets) Adresse matérielle du client ; remplie par le client
sname (64 octets) Nom de l'hôte serveur
file (128 octets) Nom du fichier de démarrage
vend (64 octets) Zone optionnelle spécifique au vendeur.

   Si aucune réponse n'est reçue durant une certaine période de temps, le client devrait retransmettre la requête.

Utilisation du serveur bootpd

En général boopd est lancé par /etc/inetd, grâce aux lignes suivante du fichier /etc/inetd.conf :
bootps dgram udp wait root /etc/bootpd bootpd
bootpd est alors lancé uniquement lorsqu'une requête de démarrage arrive. A son démarrage, bootpd lit le fichier de configuration ( par défaut /etc/bootptab). Les ports utilisés sont spécifiés dans /etc/services
-c répertoire
Force bootpd à travailler dans le répertoire

Configuration

   Le fichier de configuration de bootpd a un format dans lequel des symboles sensibles à la casse de deux caractères sont utilisé pour représenter les paramètres des hôtes. Ces déclarations de paramètres sont séparés par des « : ». Le format général est:

  hôte:tg=valeur:tg=valeur:tg=valeur

bf Fichier de démarrage
bs Taille du fichier de démarrage en bloc de 512 octets
bc Liste des adresse des serveurs de cookies
ds Liste des serveurs de nom de domaine
gw Liste des adresses de passerelles
ha Adresse matérielle de l'hôte
hd Répertoire racine du fichier de démarrage
hn Envoi le nom de l'hôte
ht Type de matériel de l'hôte
im Liste des adresses des serveurs d'impression
ip Adresse IP de l'hôte
ig Liste des adresses des serveurs de journalisation
lp Liste des adresses lpr
ns Liste des adresses des serveurs de noms IEN-116
rl Liste des adresses des serveurs de protocole de localisation des ressources
sm Masque de sous-réseau de l'hôte
tc Suite de table
to Décalage horaire en secondes par rapport à UTC
ts Liste d'adresses de serveurs d'heure
vm Sélecteur de cookie magique du revendeur.

   Il existe également le relai bootp: bootpgw qui utilise les même options sauf -c. bootptest est un utilitaire permettant de tester bootpd et bootpgw.