Après avoir abordé le modèle OSI et ses différentes couches, intéressons au nous au modèle TCP/IP. (Protocole de contrôle de transmission) (Protocole Internet).
Composé de deux protocoles un pour le transport et un pour l’adressage, le modèle tcp est plus ancien et plus simple que le modèle OSI, il se divise en 4 couches.
Le schéma suivant présente les correspondances entre les couches du modèle OSI et du modèle TCP :
Pour bien comprendre, les protocoles de plus haut niveau tels que HTTP se basent sur le protocole TCP pour fonctionner. Il existe un autre protocole de transport moins fiable et plus léger que nous verrons plus tard : UDP.
Le protocole TCP s’encapsule et se désencapsule (tout dépend si l’ordinateur est émetteur ou récepteur) vers la couche suivante d’un en-tête qui contient des informations cruciales telles que la source et la destination.
Les cinq premières couches totalisent 160 bits. Chaque couche est donc de 32 bits soit 4 octets, on trouve 5 couches dont le numéro de séquence, le numéro d’acquittement, une autre couche pour la taille de l’en-tête, une réservation et les flags qui sont des bits de contrôle ou signalisation qui représentent 4 bits chacune. Il est très important de souligner le protocole TCP ouvre des ports logiques sur l’ordinateur. Ces ports sont complémentaires de l’adresse IP et tous ensemble : 192.168.1.100:41340 cela représente ce que l’on appelle un socket.
Attachons nous à décrire le protocole TCP en détail en analysant son en-tête :
Mais qu’est ce qui se passe quand vous utilisez concrètement le protocole TCP ? Je vous invite à consulter les RFC (Request for comments) de l’IETF (Internet Engineering Task Force) :
Ce schéma est assez difficile à lire mais il a le mérite d’être très fidèle à ce qui se produit quand deux ordinateurs communiquent via TCP.
SYN, ACK, FIN sont donc les flags, bits de contrôle ou signalisations comme les panneaux du code de la route que j’ai évoqué qui sont les indicateurs clés du fonctionnement du protocole.
Les encadrés sont les différents états de TCP que vous pouvez retrouver en tapant encore une fois « netstat » via une invite de commande sur votre ordinateur.
Il existe encore d’autres bits de contrôles ou signalisation tels que PSH pour push, RST pour reset, URG pour urgent, CWR pour la congestion réseau, la congestion réseau est étudiée via une RFC à elle seule (3168).
Le protocole IP a également son propre en-tête :
Qu’est-ce qu’une adresse IP ?
Une IP par exemple 192.168.100.254 interprété ici dans sa forme décimale mesure 32 bits soit 4 octets :
Si vous savez lire le binaire encodé sur un octet cela fait :
192 = 11000000
168 = 10101000
L’en-tête se lit de haut (départ) en bas (fin) en fonction si vous êtes l’émetteur ou le récepteur voir modèle OSI.
1ère ligne :
Version : 4 bits | Donne des informations sur le type d’en-tête, savoir si vous êtes V4 ou V6 par exemple. Le format présenté est celui de la V4.
Longueur de l’en tête : 4 bits | code la longueur de l’en-tête, l’unité étant un mot de 32 bits, il indique le commencement de la donnée.
Type de service : 8 bits | donne une indication sur la qualité de service demandée cependant cela reste un paramètre abstrait. Cette option est utilisée pour guider le choix de paramètres quand un datagramme transite a partir d’un réseau spécifique. Certains réseaux offrent un mécanisme de priorité. Certains types de trafic vont êtres traités préférablement plutôt qu’un autre. Le choix principal obéit à trois contraintes : un court délai, un débit d’erreur bas, ou un gros volume de sortie.
Taille totale : 16 bits | Le champ taille totale est un la longueur du message de données complet ou datagramme incluant l’en-tête et la data mesurées en octets. Ce champs peut seulement coder un datagramme de 65,535 octets. Une telle longueur serait impossible à gérer pour la majorité des réseaux. L’hôte acceptera un datagramme d’une longueur d’environ 576 octets que ce soit un datagramme ou un fragment. Il est par ailleurs recommandé de ne pas envoyer de datagramme de plus de 576 bits à moins qu’ils soient sure que la destination est capable de les accepter.
2ème ligne :
Identification : 16 bits | Une valeur d’identification, allouée par l’émetteur pour identifier les fragments d’un seul datagramme ou message.
Flags : 3 bits | Ce sont des bits de signalisations ou contrôle : le bit 0 est réservé il doit rester à 0. Le bit 1 pour (DF) (Don’t fragment) à 0 indique que la fragmentation est possible, à 1 il indique que le bit est non-fractionnable donc il sera détruit. Le bit 2 pour (MF) More fragments : si il est à 0 c’est le dernier fragment, si il est à 1 on a un fragment intermédiaire.
Fragment offset : 13 bits | Ce champ indique l’écart du premier bit de fragment en lien avec tout le message. Cette position relative est mesuré en 64 bits soit 8 octets. L’écart du premier fragment est égal à 0.
3ème ligne :
Time to live : TTL : 8 bits | Ce champ limite le temps qu’un datagramme reste dans le réseau, si ce champ est égal à zéro, le message doit être détruit. Ce champ est modifié durant le traitement de l’en tête Internet. Chaque module Internet (routeur) doit retourner au moins une unité une fois de ce champ durant la transmission d’un paquet même si la prise en charge de ce message par le module dure moins d’une second. Ce temps de vie doit être vue comme la durée de temps maximum pour qu’un datagramme existe . Ce mécanisme existe par nécessité de détruire n’importe quel message qui n’a pas été correctement transmis au réseau.
Protocol : 8 bits | Ce champ indique quelle version du niveau supérieur de protocole est utilisée dans la section de donnée du message Internet. Les différentes valeurs allouées pour des protocoles variés sont listés dans les nombres assignés de la RFC 1060.
CRC(contrôle de redondance cyclique) 16 bits | Somme de redondance cyclique calculée uniquement dans l’en-tête. Certain des champs de l’en-tête sont modifiés durant leur transit a travers le réseau, cette somme de contrôle doit être recalculée et vérifié à chaque endroit du réseau ou l’en-tête est réinterprété.
Adresse Source : 32 bits : Adresse IP
Adresse de Destination : 32 bits : Adresse IP
La notation CIDR
Toute adresse IP est masquée par un masque de sous réseau, lorsque l’on lit 192.168.100.0/24, cela veut dire que comme l’adresse est codée sur 32 bits que 24 bits sont masqués. En fait mon masque compte 24 bits en binaire ce qui veut dire que mon masque est 255.255.255.0 soit 11111111.11111111.11111111.00000000
La partie /24 correspond à la notation CIDR. Si 24 bits sont masqués, les 8 derniers sont disponibles mais les autres constituent ce qu’on appelle le net id ou l’adresse réseau.
J’obtiens donc une adresse réseau en 192.168.100.X avec 8 bits soit 2^8 hôtes disponibles. Dans ce plan d’adressage, je ne pourrai avoir que 255 machines qui communiquent entre elles : le dernier octet mis en gras.
Mon sous réseau correspond a 192.168.100.X et me donne un nombre d’hôtes disponibles soit 255 ce qui correspond au nombre d’hôtes ou machines qui pourront avoir une adresse dans ce plan d’adressage. En effet je peux avoir une machine en 192.168.100.1 ou en 192.168.100.2.
Ces deux machines étant sur le réseau 192.168.100.X elles pourront communiquer entre elles.
Une métaphore simple pour comprendre : l’adresse réseau ou net id est le nom de la rue, le reste de l’IP ou host id est le numéro de la rue et le nom du bâtiment, et les ports sont les étages et les numéros d’appartements.
Les classes d’adresses :
Il existe cinq classes d’adresses IP toutes définies par le premier octet de l’adresse :
- Une adresse IP de classe A dispose d’une partie net id comportant uniquement un seul octet.
- Une adresse IP de classe B dispose d’une partie net id comportant deux octets.
- Une adresse IP de classe C dispose d’une partie net id comportant trois octets.
- Les adresses IP de classes D et E correspondent à des adresses IP particulières.