Le protocole TCP/IP définit un paquet transmis sur Internet, appelé datagramme IP, qui est constitué d'un en-tête et de données. La première partie de l'en-tête est de longueur fixe, totalisant 20 octets, et est requise par tous les datagrammes IP ; à la suite de la partie fixe de l'en-tête se trouvent quelques champs facultatifs dont la longueur est variable.
L'environnement d'exploitation de ce tutoriel : système Windows 7, ordinateur Dell G3.
Le protocole TCP/IP définit un paquet transmis sur Internet, appelé IP Datagram. Il s'agit d'un paquet virtuel qui n'a rien à voir avec le matériel et se compose d'un en-tête et de données. longueur, totalisant 20 octets, et est requis par tous les datagrammes IP. Après la partie fixe de l'en-tête se trouvent quelques champs facultatifs, dont la longueur est variable
Le protocole IP ne fournit aucun service fiable de transmission de datagrammes sans connexion. Le service fourni par la couche IP est réalisé en encapsulant et décapsulant les datagrammes par la couche IP. Le format du datagramme IP est divisé en deux parties : la zone d'en-tête et la zone de données. La zone d'en-tête contient diverses informations de contrôle ajoutées pour la transmission correcte des données de haut niveau. La zone de données comprend les données dont les protocoles de haut niveau ont besoin. transmettre.
Le format du datagramme IP est le suivant :
Notez que dans les données présentées ci-dessus, le bit le plus élevé est à gauche et est enregistré comme 0 ; le bit le plus bas est à droite, enregistré comme 31 bits. Lors de la transmission de données sur le réseau, les bits 0 à 7 sont transmis en premier, suivis des bits 8 à 15, puis des bits 16 à 23 et enfin des bits 24 à 31. Étant donné que tous les nombres binaires de l’en-tête du protocole TCP/IP doivent être dans cet ordre lorsqu’ils sont transmis sur le réseau, on parle d’ordre des octets du réseau. Dans la programmation réelle, les nombres binaires stockés sous d'autres formes doivent utiliser les fonctions correspondantes de l'API de programmation réseau pour convertir l'en-tête dans l'ordre des octets du réseau avant de transmettre les données.
Les fonctions de chaque champ du datagramme IP sont les suivantes :
1) Numéro de version : Il occupe un nombre binaire à 4 chiffres et indique la version du protocole IP utilisée par le datagramme IP. Actuellement, Internet utilise principalement le protocole IP avec la version numéro 4 de la suite de protocoles TCP/IP.
2) Longueur de l'en-tête : occupe 4 bits binaires. Ce champ indique la longueur de l'en-tête entier (y compris les options). La longueur est basée sur un nombre binaire de 32 bits comme unité de comptage. calculez-le via ce champ. Où se termine l’en-tête sortant et où commence la lecture des données. Pour les datagrammes IP normaux (sans aucune option), la valeur de ce champ est de 5 (soit une longueur de 20 octets).
3) Type de service (TOS, type de service) : occupe 8 bits binaires et permet de préciser la méthode de traitement de ce datagramme. Les 8 bits du champ type de service sont divisés en 5 sous-champs :
(1)—Plus le numéro de priorité (0-7) est grand, plus la priorité du datagramme. Les routeurs du réseau peuvent utiliser des priorités pour le contrôle de la congestion. Par exemple, lorsqu'une congestion se produit dans le réseau, la priorité des datagrammes peut être utilisée pour décider quel datagramme choisir.
(2) — Bit de délai court D (Délai) : Lorsque ce bit est à 1, la demande de datagramme est transmise sur un canal à délai court, et 0 indique un délai normal.
(3)—Bit haut débit T (Débit) : Lorsque ce bit est à 1, le datagramme demande à être transmis sur un canal haut débit, 0 signifie normal.
(4)—Bit R haute fiabilité (Fiabilité) : Lorsque ce bit est à 1, le datagramme demande à être transmis sur un canal haute fiabilité, 0 signifie normal.
(5)—bit réservé.
Dans la plupart des cas, le protocole TCP/IP actuellement utilisé sur Internet ne traite pas le TOS, mais dans la programmation réelle, il existe des fonctions spéciales pour définir chaque domaine de ce champ. Certains protocoles d'application Internet importants ont défini des valeurs TOS recommandées :
Comme le montre le tableau ci-dessus, pour les applications qui interagissent directement avec les utilisateurs, des délais courts sont généralement utilisés. pour les applications où une grande quantité de données doit être transmise, un débit élevé est généralement sélectionné ; pour les applications où les datagrammes doivent transmettre des informations de contrôle, une fiabilité élevée est généralement sélectionnée. Si TOS n'est pas pris en charge pendant la durée de vie du datagramme, le champ TOS est défini sur 0x00.
4) Longueur totale : Occupant 16 bits binaires, le champ longueur totale fait référence à la longueur de l'intégralité du datagramme IP (zone d'en-tête + zone de données), en octets. La position de départ et la longueur du contenu des données dans le datagramme IP peuvent être calculées à l'aide du champ de longueur d'en-tête et du champ de longueur totale. Étant donné que la longueur de ce champ est un nombre binaire de 16 bits, le datagramme IP théorique peut atteindre 65 536 octets (en fait, en raison des limitations du réseau physique, il est beaucoup plus petit que cette valeur).
5) Time to live (TTL, time to live) : Occupant 8 bits binaires, il précise la durée maximale pendant laquelle un datagramme peut être transmis dans le réseau. Dans les applications réelles, le champ Durée de vie est défini sur le nombre maximum de routeurs par lesquels le datagramme peut passer. La valeur initiale du TTL est définie par l'hôte source (généralement 32, 64, 128 ou 256), et sa valeur est décrémentée de un une fois qu'elle passe par un routeur qui le gère. Lorsque ce champ est égal à 0, le datagramme est rejeté et un message ICMP est envoyé pour avertir l'hôte source. Cela empêche le datagramme d'être transmis sans fin lors de l'entrée dans une boucle.
6) Identificateur de protocole de couche supérieure : occupant 8 bits binaires, le protocole IP peut transporter divers protocoles de couche supérieure. L'extrémité cible peut envoyer le datagramme IP reçu à la couche supérieure telle que TCP ou UDP qui traite le message en fonction du. identifiant du protocole. Accord conclu.
Numéros de protocole Internet couramment utilisés :
7) Somme de contrôle : occupe un nombre binaire de 16 bits, utilisé pour vérifier la validité des données d'en-tête du protocole. Assurez l’exactitude et l’intégrité de la zone d’en-tête IP pendant la transmission. Le champ de somme de contrôle d'en-tête est une somme de contrôle calculée sur la base de l'en-tête du protocole IP. Il ne calcule pas les données suivant l'en-tête.
Principe : L'expéditeur définit d'abord le champ de somme de contrôle sur 0, puis effectue une opération de somme complémentaire sur chaque nombre binaire de 16 bits dans l'en-tête et stocke le résultat dans le champ de somme de contrôle. Étant donné que le récepteur inclut la somme de contrôle placée dans l'en-tête par l'expéditeur pendant le processus de calcul, si aucune erreur ne se produit dans l'en-tête pendant la transmission, le résultat du calcul du récepteur ne devrait être que des 1.
8) Adresse source : Elle occupe un nombre binaire de 32 bits et représente l'adresse IP d'envoi.
9) Adresse de destination : Occupe un nombre binaire de 32 bits, exprimant l'adresse IP de destination.
======================Fragmentation et réassemblage de datagrammes IP================= = ======
Unité de transmission maximale :
Lorsque des datagrammes IP sont transmis sur Internet, ils peuvent devoir passer par plusieurs réseaux physiques pour être transmis de la source à la destination. Différents réseaux ont des caractéristiques physiques différentes de la couche de liaison et du support, donc lors de la transmission de données, il existe une limite sur la longueur maximale de la trame de données. Cette valeur limite est l'unité de transmission maximale (MTU).
Quand. communiquant entre deux hôtes sur le même réseau, la valeur MTU du réseau est déterminée et il n'y a pas de problème de fragmentation. Les problèmes de fragmentation n'existent généralement que sur Internet avec des valeurs MTU différentes. Étant donné qu’Internet utilise désormais principalement des routeurs pour les connexions réseau, le travail de partitionnement est généralement pris en charge par les routeurs.
Lorsque la communication entre deux hôtes passe par plusieurs réseaux avec des valeurs MTU différentes, le goulot d'étranglement MTU est la plus petite valeur MTU sur le chemin de communication, appelée chemin MTU. Étant donné que le routage n'est pas nécessairement symétrique (la route de A vers B peut être différente de la route de B vers A), la MTU du chemin n'est pas nécessairement cohérente dans les deux sens. Le tableau suivant présente la valeur MTU de plusieurs réseaux couramment utilisés.
Fragmentation :
Le processus de division d'un datagramme en plusieurs datagrammes pour s'adapter à la transmission réseau est appelé fragmentation et est fragmenté. Chaque datagramme IP ultérieur peut atteindre le hôte cible via différents chemins.
Un datagramme IP peut ou non être fragmenté lors de la transmission. S'il est fragmenté, le datagramme IP fragmenté a la même structure que le datagramme IP d'origine sans fragmentation, c'est-à-dire qu'il se compose également de deux parties : en-tête IP et zone de données IP :
Dans le datagramme IP fragmenté, la zone de données est une partie continue de la zone de données du datagramme IP d'origine. L'en-tête est une copie de l'en-tête du datagramme IP d'origine, mais il est différent du datagramme IP d'origine non fragmenté. Il existe deux différences principales. dans l'en-tête : drapeau et décalage du fragment :
(1) – Drapeau : il y a un champ appelé "drapeau" dans l'en-tête du datagramme IP, qui est représenté par un nombre binaire à 3 chiffres :
Si l'indicateur DF (Ne pas fragmenter) est défini sur 1, le datagramme ne peut pas être fragmenté pendant la transmission. Par exemple, la commande de test de connectivité réseau ping peut être utilisée. Le paramètre -F est. configuré pour ne pas se fragmenter pendant la transmission des données, mais lorsque les données ne peuvent pas passer par un réseau avec une MTU plus petite, une erreur d'inaccessibilité des données se produit.
Si l'indicateur MF (More Fragment) incomplet est mis à 1, cela signifie que le datagramme n'est pas le dernier datagramme après fragmentation, et le bit du dernier datagramme est mis à 0.
(2) — Décalage de fragment : une fois le datagramme IP fragmenté, la position de chaque zone de données de fragment dans la zone de données IP d'origine est représentée par un décalage de fragment de 13 bits. Dans la figure ci-dessus, le décalage du fragment 1 est 0, le décalage du fragment 2 est 600 et le décalage du fragment 3 est 1200. En fait, dans l'adresse IP, puisque le décalage est calculé en unités de 8 octets, donc , le décalage du fragment 1 dans le datagramme IP est 0 ; le décalage du fragment 2 est 75 et le décalage du fragment 3 est 150 ;
Réassemblage :
Lorsque le datagramme IP fragmenté atteint l'hôte cible final, l'hôte cible assemble chaque fragment et le restaure dans le datagramme IP lorsqu'il est envoyé par l'hôte source. Ce processus est appelé réassemblage. de datagrammes IP.
Dans l'en-tête du datagramme IP, l'identifiant est représenté par un nombre binaire de 16 bits, qui identifie de manière unique chaque datagramme envoyé par l'hôte. Lorsqu'un datagramme est fragmenté, chaque fragment copie uniquement la valeur du champ « identification » du datagramme, donc tous les fragments d'un datagramme ont la même identification.
Le principe du réassemblage du datagramme par l'hôte cible est le suivant :
(1)—Selon le champ « identification », vous pouvez déterminer à quel datagramme IP appartient le fragment reçu
;(2)—Vous pouvez déterminer si le fragment est le dernier fragment selon le sous-champ "MF inachevé" du champ "Drapeau"
(3)—Vous pouvez le déterminer selon le " ; Champ "Offset" La position du fragment dans le datagramme original.
Pour plus de connaissances liées à l'informatique, veuillez visiter la rubrique FAQ !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!