3. Spécification
Ce chapitre fournit la spécification complète du Protocole Internet (Internet Protocol, IP), incluant le format de l'en-tête, les descriptions détaillées des champs, les procédures opérationnelles et les définitions d'interface.
3.1. Format de l'en-tête Internet
Un résumé du contenu de l'en-tête internet suit :
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
||Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Exemple d'en-tête de datagramme Internet (Figure 4)
Notez que chaque marque représente une position de bit.
Descriptions des champs
Version : 4 bits
Le champ Version indique le format de l'en-tête internet. Ce document décrit la version 4.
IHL (Internet Header Length, Longueur de l'en-tête Internet) : 4 bits
La longueur de l'en-tête Internet est la longueur de l'en-tête internet en mots de 32 bits, et pointe ainsi vers le début des données. Notez que la valeur minimale pour un en-tête correct est 5.
Type of Service (Type de service) : 8 bits
Le Type de service fournit une indication des paramètres abstraits de la qualité de service souhaitée. Ces paramètres doivent (are to) être utilisés pour guider la sélection des paramètres de service réels lors de la transmission d'un datagramme à travers un réseau particulier.
Bits 0-2: Priorité (Precedence)
Bit 3: 0 = Délai normal, 1 = Faible délai
Bit 4: 0 = Débit normal, 1 = Débit élevé
Bit 5: 0 = Fiabilité normale, 1 = Fiabilité élevée
Bits 6-7: Réservé pour usage futur
0 1 2 3 4 5 6 7
+-----+-----+-----+-----+-----+-----+-----+-----+
| | | | | | |
| PRIORITÉ | D | T | R | 0 | 0 |
| | | | | | |
+-----+-----+-----+-----+-----+-----+-----+-----+
Valeurs de priorité :
- 111 - Network Control
- 110 - Internetwork Control
- 101 - CRITIC/ECP
- 100 - Flash Override
- 011 - Flash
- 010 - Immediate
- 001 - Priority
- 000 - Routine
Total Length (Longueur totale) : 16 bits
La longueur totale est la longueur du datagramme, mesurée en octets, incluant l'en-tête internet et les données. Ce champ permet qu'un datagramme ait une longueur maximale de 65 535 octets. Tous les hôtes doivent (must) être préparés à accepter des datagrammes jusqu'à 576 octets. Il est recommandé (recommended) que les hôtes n'envoient des datagrammes plus grands que 576 octets que s'ils ont l'assurance que la destination est préparée à accepter les datagrammes plus grands.
Identification : 16 bits
Une valeur d'identification assignée par l'expéditeur pour aider à assembler les fragments d'un datagramme.
Flags (Drapeaux) : 3 bits
Divers drapeaux de contrôle.
- Bit 0 : réservé, doit (must) être zéro
- Bit 1 : (DF) 0 = Peut fragmenter (May Fragment), 1 = Ne pas fragmenter (Don't Fragment)
- Bit 2 : (MF) 0 = Dernier fragment, 1 = Plus de fragments
Fragment Offset (Décalage de fragment) : 13 bits
Ce champ indique où dans le datagramme ce fragment appartient. Le décalage de fragment est mesuré en unités de 8 octets (64 bits). Le premier fragment a un décalage de zéro.
Time to Live (Durée de vie) : 8 bits
Ce champ indique le temps maximum que le datagramme est autorisé à rester dans le système internet. Si ce champ contient la valeur zéro, alors le datagramme doit (must) être détruit. Ce champ est modifié dans le traitement de l'en-tête internet. Le temps est mesuré en unités de secondes, mais puisque chaque module qui traite un datagramme doit (must) décrémenter le TTL d'au moins un même s'il traite le datagramme en moins d'une seconde, le TTL doit (must) être pensé uniquement comme une limite supérieure sur le temps qu'un datagramme peut (may) exister.
Protocol (Protocole) : 8 bits
Ce champ indique le protocole de niveau suivant utilisé dans la portion de données du datagramme internet. Les valeurs pour divers protocoles sont spécifiées dans « Assigned Numbers » [9].
Valeurs communes :
- 1 = ICMP
- 6 = TCP
- 17 = UDP
Header Checksum (Somme de contrôle d'en-tête) : 16 bits
Une somme de contrôle sur l'en-tête uniquement. Puisque certains champs d'en-tête changent (par exemple, la durée de vie), ceci est recalculé et vérifié à chaque point où l'en-tête internet est traité.
L'algorithme de somme de contrôle est : Le champ de somme de contrôle est le complément à un sur 16 bits de la somme en complément à un de tous les mots de 16 bits dans l'en-tête. Pour les besoins du calcul de la somme de contrôle, la valeur du champ de somme de contrôle est zéro.
Source Address (Adresse source) : 32 bits
L'adresse source.
Destination Address (Adresse de destination) : 32 bits
L'adresse de destination.
Options : variable
Les options peuvent apparaître ou non (may) dans les datagrammes. Elles doivent (must) être implémentées par tous les modules IP (hôtes et passerelles). Ce qui est optionnel est leur transmission dans un datagramme particulier, pas leur implémentation.
3.2. Discussion
Adressage
Pour fournir de la flexibilité dans l'attribution d'adresses aux réseaux et permettre un grand nombre de petits à moyens réseaux, l'interprétation du champ d'adresse est codée pour spécifier un petit nombre de réseaux avec un grand nombre d'hôtes, un nombre modéré de réseaux avec un nombre modéré d'hôtes, et un grand nombre de réseaux avec un petit nombre d'hôtes.
Formats d'adresse :
|| Bits de poids fort | Format | Classe | ||-------------------|--------|--------| || 0 | 7 bits de réseau, 24 bits d'hôte | a | || 10 | 14 bits de réseau, 16 bits d'hôte | b | || 110 | 21 bits de réseau, 8 bits d'hôte | c | || 111 | échappement vers le mode d'adressage étendu | - |
Fragmentation et réassemblage
Le champ d'identification internet (ID) est utilisé avec les adresses source et destination, et le champ de protocole, pour identifier les fragments de datagramme pour le réassemblage.
Le bit de drapeau More Fragments (MF) est défini si le datagramme n'est pas le dernier fragment. Le champ Fragment Offset identifie l'emplacement du fragment, relatif au début du datagramme original non fragmenté. Les fragments sont comptés en unités de 8 octets.
Chaque module internet doit (must) être capable de transmettre un datagramme de 68 octets sans fragmentation supplémentaire. Ceci est dû au fait qu'un en-tête internet peut faire jusqu'à 60 octets, et le fragment minimum est de 8 octets.
Chaque destination internet doit (must) être capable de recevoir un datagramme de 576 octets soit en un morceau soit en fragments à réassembler.
3.3. Interfaces
La description fonctionnelle des interfaces utilisateur avec IP est, au mieux, fictive, puisque chaque système d'exploitation aura des facilités différentes. Cependant, tous les IP doivent (must) fournir un certain ensemble minimum de services pour garantir que toutes les implémentations IP peuvent (can) supporter la même hiérarchie de protocoles.
Exemple d'interface de niveau supérieur
Les deux exemples d'appels suivants satisfont les exigences pour la communication entre l'utilisateur et le module de protocole internet (« => » signifie retourne) :
SEND (ENVOYER)
SEND (src, dst, prot, TOS, TTL, BufPTR, len, Id, DF, opt => result)
où :
- src = adresse source
- dst = adresse de destination
- prot = protocole
- TOS = type de service
- TTL = durée de vie
- BufPTR = pointeur de tampon
- len = longueur du tampon
- Id = Identificateur
- DF = Ne pas fragmenter (Don't Fragment)
- opt = données d'option
- result = réponse
- OK = datagramme envoyé correctement
- Error = erreur dans les arguments ou erreur de réseau local
RECV (RECEVOIR)
RECV (BufPTR, prot, => result, src, dst, TOS, len, opt)
où :
- BufPTR = pointeur de tampon
- prot = protocole
- result = réponse
- OK = datagramme reçu correctement
- Error = erreur dans les arguments
- len = longueur du tampon
- src = adresse source
- dst = adresse de destination
- TOS = type de service
- opt = données d'option
Résumé
Cette spécification définit le Protocole Internet version 4 (IPv4), qui fournit :
- Livraison de datagrammes sans connexion
- Service au meilleur effort (aucune garantie de fiabilité)
- Capacités de fragmentation et réassemblage
- Adressage pour jusqu'à 2^32 hôtes
- Routage à travers les réseaux interconnectés
- Indication du type de service
- Gestion de la durée de vie
- Options pour le traitement spécial
Le protocole est conçu pour être simple, scalable et flexible, permettant à l'Internet de supporter diverses applications et technologies de réseau.
Pour des détails complets sur toutes les options IP, les procédures de fragmentation, les algorithmes de réassemblage et les exigences d'implémentation, veuillez consulter le texte intégral de RFC 791.
Note : Ceci est une version condensée de la section 3 de RFC 791. Pour la spécification complète incluant les formats détaillés d'options, le pseudocode de fragmentation/réassemblage et tous les cas limites, consultez le document officiel RFC 791.