Cet article présente principalement en détail les informations pertinentes sur l'analyse des protocoles TCP, UDP et IP. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer
Au début d'Internet, l'hôte. L'interconnexion entre eux utilise le protocole NCP. Ce protocole lui-même présente de nombreux défauts, tels que : il ne peut pas interconnecter différents hôtes, il ne peut pas interconnecter différents systèmes d'exploitation et il n'a pas de fonction de correction d'erreurs. Afin de remédier à cette lacune, Daniel a imaginé le protocole TCP/IP. Presque tous les systèmes d'exploitation implémentent désormais la pile de protocoles TCP/IP.
La pile de protocoles TCP/IP est principalement divisée en quatre couches : couche application, couche transport, couche réseau et couche liaison de données. Chaque couche a un protocole correspondant, comme indiqué ci-dessous
<.>1. Protocole TCP
1.Analyse de l'en-tête TCP
RST signifie généralement déconnecter une connexion
SYN Le numéro de séquence de synchronisation est utilisé pour initier une connexion
FIN L'expéditeur termine la tâche d'envoi (c'est-à-dire déconnecte la connexion)
(6)Taille de la fenêtre (fenêtre) [16bit]
La taille de la fenêtre, indiquant le nombre maximum d'octets que la méthode source peut accepter. .
(7) Somme de contrôle [16 bits]
La somme de contrôle couvre l'intégralité du segment du message TCP : en-tête TCP et données TCP. Il s'agit d'un champ obligatoire qui doit être calculé et stocké par l'expéditeur et vérifié par le destinataire.
(8) Pointeur d'urgence [16bit]
Le pointeur d'urgence n'est valide que lorsque le drapeau URG est réglé sur 1. Le pointeur urgent est un décalage positif, ajouté à la valeur dans le champ du numéro de séquence, pour représenter le numéro de séquence du dernier octet de données urgentes. Le mode d'urgence de TCP permet à l'expéditeur d'envoyer des données urgentes à l'autre extrémité.
(9) L'option TCP
est facultative, nous y jetterons un oeil lors de la capture des paquets plus tard
2 . Détails clés
(1) Prise de contact à trois pour établir la connexion
a L'extrémité requérante (généralement appelée le client) envoie un segment SYN à. indiquez le client Le port du serveur auquel vous souhaitez vous connecter et le numéro de séquence initial (ISN, dans ce cas 1415531521). Ce segment SYN est le segment de message 1.
b. Le serveur renvoie un segment SYN (segment 2) contenant le numéro de séquence initial du serveur en réponse. En même temps, le numéro de séquence de confirmation est défini sur l'ISN du client plus 1 pour confirmer le segment de message SYN du client. Un SYN occupera un numéro de séquence
c. Le client doit définir le numéro de séquence de confirmation à l'ISN du serveur plus 1 pour confirmer le segment SYN du serveur (segment 3)
Ces trois segments complètent la connexion d'établissement. Ce processus est également appelé poignée de main à trois
Utilisez Wirshark pour capturer les paquets comme suit :
Vous pouvez voir que la poignée de main à trois détermine le numéro de séquence des paquets entre les deux parties, la taille maximale des données reçues (fenêtre) et le MSS (taille maximale du segment).
MSS = MTU - En-tête IP - En-tête TCP. Nous en parlerons lors de l'analyse de l'en-tête IP. Elle fait généralement 1500 octets. L'en-tête IP et l'en-tête TCP font 20 octets avec des options facultatives. Dans ce cas MSS=1500 - 20 -20 = 1460.
MSS limite la taille des données transportées par les paquets TCP. Cela signifie que lorsque la couche application soumet des données à la couche transport pour transmission via le protocole TCP, si les données de la couche application > MSS, elle doit le faire. être segmenté, divisé en plusieurs segments et envoyé un par un.
Par exemple : la couche application soumet 4096 octets de données à la couche transport à la fois, l'effet de capture de paquets via Wirshark est le suivant :
b. Une fois que le serveur a reçu la demande de déconnexion FIN du client, la pile de protocoles du noyau enverra immédiatement un paquet ACK en réponse, indiquant que la demande du client a été reçue
c. pendant un certain temps, il s'éteint lui-même. À ce stade, la pile de protocoles du noyau enverra un paquet FIN au client, demandant la déconnexion
d Une fois que le client aura reçu la demande de déconnexion FIN du serveur, il enverra un ACK en réponse, indiquant la demande de. le serveur a été reçu
TCP utilise une technologie appelée « accusé de réception positif avec retransmission » comme base pour fournir des services de transmission de données fiables. Cette technologie nécessite que le récepteur renvoie les informations de confirmation ACK à la station source après avoir reçu les données. L'expéditeur conserve une trace de chaque paquet envoyé et attend la confirmation avant d'envoyer le paquet suivant. L'expéditeur démarre également un temporisateur lors de l'envoi du paquet et renvoie le paquet qui vient d'être envoyé lorsque le temporisateur expire mais que les informations d'accusé de réception ne sont pas arrivées. La figure 3-5 montre la situation de transmission de données du protocole d'accusé de réception positif avec fonction de retransmission, et la figure 3-6 montre le délai d'attente et la retransmission provoqués par la perte de paquets. Afin d'éviter les accusés de réception tardifs et les accusés de réception en double dus aux retards du réseau, le protocole stipule que les informations d'accusé de réception contiennent un numéro de séquence de paquet afin que le récepteur puisse associer correctement le paquet à l'accusé de réception.
Comme le montre la figure 3-5, bien que le réseau ait la capacité d'effectuer une communication bidirectionnelle en même temps, puisque l'envoi du prochain paquet doit être reporté avant de recevoir les informations de confirmation du paquet précédent, le simple protocole de confirmation positive. Une grande partie de la précieuse bande passante du réseau est gaspillée. À cette fin, TCP utilise un mécanisme de fenêtre glissante pour améliorer le débit du réseau tout en résolvant le contrôle de flux de bout en bout.
(4) Technologie de fenêtre coulissante
La technologie de fenêtre coulissante est un simple mécanisme de confirmation positive avec retransmission Un mécanisme plus complexe variante qui permet à l'expéditeur d'envoyer plusieurs paquets avant d'attendre un accusé de réception. Comme le montre la figure 3-7, l'expéditeur souhaite envoyer une séquence de paquets. Le protocole de fenêtre glissante place une fenêtre de longueur fixe dans la séquence de paquets, puis envoie tous les paquets dans la fenêtre lorsque l'expéditeur reçoit le message d'un paquet ; les informations de confirmation sont reçues, elles peuvent reculer et envoyer le paquet suivant ; à mesure que les confirmations continuent d'arriver, la fenêtre continue de reculer.
2. Protocole UDP
Le protocole UDP est également un protocole de connexion de couche transport. , des protocoles de couche transport qui ne garantissent pas la fiabilité. Son en-tête de protocole est relativement simple, comme suit :
Le numéro de port ici n'est pas expliqué, il a la même signification que le numéro de port TCP.
Length occupe 2 octets et identifie la longueur de l'en-tête UDP. Somme de contrôle : somme de contrôle, y compris l'en-tête UDP et les parties de données.
3. Protocole IP
IP est le protocole principal de la famille des protocoles TCP/IP. Toutes les données TCP, UDP, ICMP et IGMP sont transmises au format datagramme IP. Ses caractéristiques sont les suivantes :
Peu fiable (peu fiable) signifie qu'il ne peut pas garantir que le datagramme IP puisse atteindre avec succès la destination. IP ne fournit que les meilleurs services de transmission. Si une erreur se produit, par exemple si un routeur manque temporairement de mémoire tampon, IP dispose d'un algorithme de gestion des erreurs simple : supprimez le datagramme, puis envoyez un message ICMP à la source. Toute fiabilité requise doit être fournie par les couches supérieures (telles que TCP).
Le terme sans connexion signifie qu'IP ne conserve aucune information d'état sur les datagrammes ultérieurs. Chaque datagramme est traité indépendamment les uns des autres. Cela signifie également que les datagrammes IP peuvent être reçus dans le désordre dans l'ordre dans lequel ils ont été envoyés. Si une source envoie deux datagrammes consécutifs (d'abord A, puis B) au même récepteur, chaque datagramme est acheminé indépendamment, en empruntant éventuellement un itinéraire différent, de sorte que B peut arriver avant l'arrivée de A.
1. Format d'en-tête IP
(1) La version occupe 4 chiffres et fait référence au Version du protocole IP. Les versions du protocole IP utilisées par les deux parties communicantes doivent être cohérentes. Le numéro de version du protocole IP actuellement largement utilisé est 4 (IPv4). Concernant IPv6, il est encore au stade de projet.
(2) La longueur de l'en-tête occupe 4 chiffres et la valeur décimale maximale représentable est de 15. Veuillez noter que l'unité du nombre représenté par ce champ est une longueur de mot de 32 bits (une longueur de mot de 32 bits est de 4 octets). Par conséquent, lorsque la longueur de l'en-tête IP est de 1 111 (c'est-à-dire 15 en décimal), l'en-tête est défini sur 32 bits. la longueur atteint 60 octets. Lorsque la longueur de l'en-tête du paquet IP n'est pas un multiple entier de 4 octets, il doit être rempli avec le dernier champ de remplissage. Par conséquent, la partie données commence toujours par un multiple entier de 4 octets, ce qui est plus pratique lors de la mise en œuvre du protocole IP. L’inconvénient de limiter la longueur de l’en-tête à 60 octets est que cela peut ne pas être suffisant dans certains cas. Mais cela est fait dans l’espoir que les utilisateurs minimisent les frais généraux. La longueur d'en-tête la plus couramment utilisée est de 20 octets (c'est-à-dire que la longueur d'en-tête est 0101) et aucune option n'est utilisée pour le moment.
(3) Services différenciés : 8 bits sont utilisés pour obtenir de meilleurs services. Ce champ était appelé type de service dans l’ancienne norme, mais n’a jamais été utilisé en pratique. En 1998, l'IETF a renommé ce domaine DS (Differentiated Services). Ce champ ne prend effet que lors de l'utilisation de services différenciés.
(4) Longueur totale La longueur totale fait référence à la longueur de l'en-tête et des données, en octets. Le champ de longueur totale est de 16 bits, donc la longueur maximale du datagramme est de 216-1 = 65 535 octets.
Chaque couche de liaison de données située sous la couche IP possède son propre format de trame, qui inclut la longueur maximale du champ de données dans le format de trame, appelée unité de transfert maximale (MTU). Lorsqu'un datagramme est encapsulé dans une trame de couche liaison, la longueur totale du datagramme (c'est-à-dire l'en-tête plus la partie données) ne doit pas dépasser la valeur MTU de la couche liaison de données sous-jacente.
(5) L'identification (identification) occupe 16 chiffres. Le logiciel IP maintient un compteur en mémoire. Chaque fois qu'un datagramme est généré, le compteur est incrémenté de 1 et cette valeur est affectée au champ d'identification. Mais cette « identification » n’est pas un numéro de séquence, car IP est un service sans connexion, et il n’y a aucun problème de réception des datagrammes dans l’ordre. Lorsqu'un datagramme doit être fragmenté car sa longueur dépasse le MTU du réseau, la valeur de ce champ d'identification est copiée dans le champ d'identification de tous les datagrammes. La même valeur de champ d'identification permet à chaque fragment de datagramme fragmenté d'être correctement réassemblé dans le datagramme d'origine.
(6) Flag (drapeau) occupe 3 chiffres, mais actuellement seuls 2 chiffres ont un sens.
●Le bit le plus bas dans le champ du drapeau est enregistré comme MF (More Fragment). MF=1 signifie qu'il y aura des datagrammes "fragmentés" plus tard. MF=0 signifie qu'il s'agit du dernier de plusieurs fragments de datagramme
● Le bit au milieu du champ du drapeau est enregistré comme DF (Don't Fragment), ce qui signifie "ne peut pas être fragmenté". La fragmentation n'est autorisée que lorsque DF=0.
(7) le décalage de tranche occupe 13 bits. Le décalage de tranche souligne : après la fragmentation d'un paquet plus long, la position relative d'une certaine tranche dans le paquet d'origine. C'est-à-dire l'endroit où commence la tranche par rapport au point de départ du champ de données utilisateur. Le décalage de tranche est exprimé en unités de décalage de 8 octets. Cela signifie que la longueur de chaque fragment doit être un multiple entier de 8 octets (64 bits).
(8) Time to Live occupe 8 bits. L'abréviation anglaise couramment utilisée du champ time to live est TTL (Time To Live), qui indique la durée de vie du datagramme dans le réseau. Ce champ est défini par l'origine du datagramme. Son objectif est d'empêcher que des datagrammes non distribuables circulent indéfiniment sur Internet, consommant ainsi en vain les ressources du réseau. La conception originale consistait à utiliser les secondes comme unité de TTL. Chaque fois qu'il passe par un routeur, le TTL est soustrait de la période de temps consommée par le datagramme dans le routeur. Si le datagramme prend moins d'1 seconde au niveau du routeur, la valeur TTL est décrémentée de 1. Lorsque la valeur TTL est 0, le datagramme est ignoré.
(9) Protocole Occupe 8 bits. Le champ protocole indique quel protocole est utilisé pour les données transportées dans ce datagramme, afin que la couche IP de l'hôte de destination sache quel processus de traitement la partie données doit être transmise. .
(10) La première somme de contrôle occupe 16 places. Ce champ vérifie uniquement l'en-tête du datagramme, mais pas la partie données. En effet, chaque fois qu'un datagramme passe par un routeur, celui-ci doit recalculer la somme de contrôle de l'en-tête (certains champs, tels que la durée de vie, les indicateurs, les décalages de fragments, etc., peuvent changer). Ne pas vérifier certaines parties des données réduit l’effort de calcul.
(11) L’adresse IP source occupe 32 bits.
(12) L'adresse IP de destination occupe 32 bits.
2. Explication de la fragmentation
La fragmentation signifie que lorsque les données à transmettre sont supérieures à l'unité de transmission maximale (MTU), elles sont nécessaire Divisez-le en plusieurs paquets et envoyez-les à l'autre partie un par un. Quand on parle de TCP, lorsqu'il s'agit de MSS, beaucoup de gens ne parviennent pas à les distinguer. A travers l'image ci-dessous, je pense qu'on peut tout à fait les distinguer.
Personnellement, je pense que si les données sont transmises via le protocole TCP, la fragmentation n'est certainement pas nécessaire lorsqu'elles atteignent la couche IP. La fragmentation n'est requise que lors de la transmission de données volumineuses via le protocole UDP.
Par exemple : utilisez le protocole UDP pour transmettre 10 240 octets de données
Vous pouvez le voir, mais lorsque les données sont soumises à la couche réseau, car les données dépassent le maximum. L'unité de transmission est fragmentée. Divisez-le en plusieurs paquets et envoyez-les à l'autre partie via le protocole IP. L'octet maximum de chaque paquet est MTU - en-tête IP = 1 500 - 20 = 1 480.
4. En-tête Ethernet
Il se compose de trois parties : source Adresse MAC | Adresse MAC de destination | Le protocole utilisé.
Ainsi en Ethernet, les formats des paquets de données sont les suivants :
Le protocole ARP obtient l'adresse MAC correspondante via l'adresse IP, appelée protocole de résolution d'adresse
Le protocole RARP obtient l'adresse IP correspondante via l'adresse MAC, appelée protocole de résolution d'adresse inversée
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!