Le protocole IP (rfc 791)
Le protocole IP fait partie de la couche
Internet de la suite de protocoles TCP/IP. C'est un des protocoles les plus
importants d'Internet car il permet l'élaboration et le transport des datagrammes
IP (les paquets de données), sans toutefois en assurer la
"livraison". En réalité le protocole IP traite les datagrammes
(paquets) IP indépendamment les uns des autres en définissant leur
représentation, leur routage et leur expédition.
Le protocole IP détermine le destinataire du
message grâce à 3 champs:
- Le champ adresse IP : adresse de la machine
- Le champ masque de sous-réseau : un masque de sous-réseau permet
au protocole IP de déterminer la partie de l'adresse IP qui concerne le
réseau
- Le champ passerelle par défaut : Permet au protocole Internet de
savoir à quelle machine remettre le datagramme si jamais la machine de
destination n'est pas sur le réseau local
Les datagrammes
Les données circulent sur
Internet sous forme de datagrammes (on parle aussi de paquets). Les datagrammes
sont des données encapsulées, c'est-à-dire des données auxquelles on a ajouté
des en-têtes correspondant à des informations sur leur transport (telles que
l'adresse IP de destination, ...).
Les données contenues dans
les datagrammes sont analysées (et éventuellement modifiées) par les routeurs
permettant leur transit.
Le format des données sous
IP

Signification des différents
champs:
·
Version (4 bits) : il s'agit de la version du protocole IP
que l'on utilise (actuellement on utilise la version 4 IPv4) afin de
vérifier la validité du datagramme. Elle est codée sur 4 bits.
·
Longueur
d'en-tête, ou IHL pour Internet
Header Length (4 bits) : il s'agit du nombre de
mots de 32 bits constituant l'en-tête (nota : la valeur minimale est 5). Ce
champ est codé sur 4 bits.
·
Type
de service (8 bits) : il
indique la façon selon laquelle le datagramme doit être traité.
·
Longueur
totale (16 bits): il indique
la taille totale du datagramme en octets. La taille de ce champ étant de 2
octets, la taille totale du datagramme ne peut dépasser 65536 octets. Utilisé
conjointement avec la taille de l'en-tête, ce champ permet de déterminer où
sont situées les données.
·
Identification,
drapeaux (flags) et déplacement de fragment sont des champs qui permettent la fragmentation des
datagrammes, ils sont expliqués plus bas.
·
Durée
de vie appelée aussi TTL,
pour Time To Live (8 bits) : ce champ indique le nombre maximal de
routeurs à travers lesquels le datagramme peut passer. Ainsi ce champ est décrémenté
à chaque passage dans un routeur, lorsque celui-ci atteint la valeur critique
de 0, le routeur détruit le datagramme. Cela évite l'encombrement du réseau par
les datagrammes perdus.
·
Protocole (8 bits) : ce champ, en notation décimale, permet de
savoir de quel protocole est issu le datagramme
o ICMP : 1
o IGMP : 2
o TCP : 6
o UDP : 17
·
Somme
de contrôle de l'en-tête, ou en anglais header checksum (16 bits) : ce champ contient une valeur codée sur 16 bits qui permet
de contrôler l'intégrité de l'en-tête afin de déterminer si celui-ci n'a pas
été altéré pendant la transmission. La somme de contrôle est le complément à un
de tous les mots de 16 bits de l'en-tête (champ somme de contrôle
exclu). Celle-ci est en fait telle que lorsque l'on fait la somme des champs de
l'en-tête (somme de contrôle incluse), on obtient un nombre avec tous les bits
positionnés à 1
·
Adresse
IP source (32 bits) : Ce champ
représente l'adresse IP de la machine émettrice, il permet au destinataire de
répondre
·
Adresse
IP destination (32 bits) :
adresse IP du destinataire du message
La
fragmentation des datagrammes IP
Comme nous l'avons vu
précédemment, la taille d'un datagramme maximale est de 65535 octets. Toutefois
cette valeur n'est jamais atteinte car les réseaux n'ont pas une capacité
suffisante pour envoyer de si gros paquets. De plus, les réseaux sur Internet
utilisent différentes technologies, si bien que la taille maximale d'un
datagramme varie suivant le type de réseau.
La taille maximale d'une trame est appelée MTU (Maximum Transfer Unit), elle entraînera la fragmentation du
datagramme si celui-ci a une taille plus importante que le MTU du réseau.
|
Type de réseau
|
MTU (en octets)
|
|
Arpanet
|
1000
|
|
Ethernet
|
1500
|
|
FDDI
|
4470
|
La fragmentation d'un
datagramme se fait au niveau des routeurs, c'est-à-dire lors de la transition
d'un réseau dont le MTU est important à un réseau dont le MTU est plus faible. Si
le datagramme est trop grand pour passer sur le réseau, le routeur va le
fragmenter, c'est-à-dire le découper en fragments de tailles inférieures au MTU
du réseau et de telle façon que la taille du fragment soit un multiple de 8
octets.
Pour tenir compte de la
fragmentation, chaque datagramme possède plusieurs champs permettant leur
réassemblage:
- champ déplacement de fragment (13 bits) : champ permettant de connaître la
position du début du fragment dans le datagramme initial. L'unité de mesure
de ce champ est de 8 octets (le premier fragment ayant une valeur de
zéro).
- champ identification (16 bits) : numéro attribué à chaque fragment
afin de permettre leur réassemblage dans le bon ordre.
- champ longueur totale (16 bits) : il est recalculé pour chaque
fragment.
- champ drapeau (3 bits) : il est composé de trois bits:
Le
premier n'est pas utilisé.
Le
second (appelé DF : Don't Fragment)
indique si le datagramme peut être fragmenté ou non. Si jamais un datagramme a
ce bit positionné à un et que le routeur ne peut pas l'acheminer sans le
fragmenter, alors le datagramme est rejeté avec un message d'erreur
Le
dernier (appelé MF : More Fragments, en français Fragments à
suivre) indique si le datagramme est un fragment de donnée (1). Si
l'indicateur est à zéro, cela indique que le fragment est le dernier (donc que
le routeur devrait être en possession de tous les fragments précédents) ou bien
que le datagramme n'a pas fait l'objet d'une
fragmentation
Le protocole ICMP (rfc 792)
La gestion
des erreurs
Le protocole ICMP (Internet
Control Message Protocol) est un protocole qui permet
de gérer les informations relatives aux erreurs aux machines connectées. Etant
donné le peu de contrôles que le protocole IP réalise il permet non pas de
corriger ces erreurs mais de faire part de ces erreurs aux protocoles des
couches voisines. Ainsi, le protocole ICMP est utilisé par tous les routeurs,
qui l'utilisent pour reporter une erreur (appelé Delivery
Problem).
Les
messages ICMP sont encapsulés
Les messages d'erreur ICMP
sont transportés sur le réseau sous forme de datagramme, comme n'importe quelle
donnée. Ainsi, les messages d'erreur peuvent eux-mêmes être sujet d'erreurs.
Toutefois en cas d'erreur sur
un datagramme transportant un message ICMP, aucun message d'erreur n'est
délivré pour éviter un effet "boule de neige" en cas d'incident sur
le réseau.
Message ICMP encapsulé dans
un datagramme IP:
|
En-tête
|
Message ICMP
|
Type
(8 bits)
|
Code
(8 bits)
|
Checksum
(16 bits)
|
Message
(taille variable)
|
|
Exemple :
Message "destinataire
non accessible"
Champs
IP:
|
Adresse destinataire :
|
L'adresse et réseau source
du datagramme original.
|
Champs
ICMP:
|
Type :
|
3
|
|
Code :
|
0 = réseau inaccessible;
1 = hôte inaccessible;
2 = protocole non disponible;
3 = port non accessible;
4 = fragmentation nécessaire mais interdite;
5 = échec d'acheminement source.
|
|
Checksum :
|
Le complément à un sur 16
bits de la somme des compléments à un du message ICMP.
Lors du calcul du Checksum, le champ destiné à recevoir ce Checksum sera
laissé à zéro. Ce mécanisme de Checksum sera changé dans le futur.
|
Le protocole TCP (rfc 793)
Les
caractéristiques du protocole TCP
TCP (qui signifie Transmission
Control Protocol, soit en français: Protocole de
Contrôle de Transmission) est un des principaux protocoles de la couche
transport du modèle TCP/IP. Il permet, au niveau des applications, de gérer les
données en provenance (ou à destination) de la couche inférieure du modèle
(c'est-à-dire le protocole IP). Lorsque les données sont fournies au protocole
IP, celui-ci les encapsule dans des datagrammes IP, en fixant le champ
protocole à 6 (Pour savoir que le protocole en amont est TCP...). TCP est un
protocole orienté connexion, c'est-à-dire qu'il permet à deux machines qui
communiquent de contrôler l'état de la transmission.
Les caractéristiques principales du protocole TCP sont les suivantes:
- TCP permet de remettre en ordre les datagrammes
en provenance du protocole IP
- TCP permet de vérifier le flot de données afin
d'éviter une saturation du réseau
- TCP permet de formater les données en segments de
longueur variable afin de les "remettre" au protocole IP
- TCP permet de multiplexer les données, c'est-à-dire
de faire circuler simultanément des informations provenant de sources
(applications par exemple) distinctes sur une même ligne
- TCP permet enfin l'initialisation et la fin d'une
communication de manière courtoise
Le but de TCP
Grâce au protocole TCP, les
applications peuvent communiquer de façon sûre (grâce au système d'accusés de
réception du protocole TCP), indépendamment des couches inférieures. Cela
signifie que les routeurs (qui travaillent dans la couche Internet) ont pour
seul rôle l'acheminement des données sous forme de datagrammes, sans se
préoccuper du contrôle des données, car celui-ci est réalisé par la couche
transport.
Les machines dans un tel
environnement communiquent en full duplex.
Pour permettre le bon déroulement
de la communication et de tous les contrôles qui l'accompagnent, les données
sont encapsulées.
Une autre particularité de
TCP est de pouvoir réguler le débit des données grâce à sa capacité à émettre
des messages de taille variable, ces messages sont appelés segments.
La
fonction de multiplexage
TCP permet d'effectuer une
tâche importante: le multiplexage/démultiplexage, c'est-à-dire faire transiter
sur une même ligne des données provenant d'applications diverses ou en d'autres
mots mettre en série des informations arrivant en parallèle.

Ces opérations sont réalisées
grâce au concept de ports (ou sockets), c'est-à-dire
un numéro associé à un type d'application, qui, combiné à une adresse IP,
permet de déterminer de façon unique une application qui tourne sur une machine
donnée.
Le format des données sous
TCP
Un segment TCP est constituée
comme suit:

- Les numéros de port permettent de référencer les
applications (voir Annexe).
-
Le numéro de séquence indique le numéro du premier octet transmis dans le
segment.
- Le numéro d’acquittement contient le numéro de
séquence du prochain octet attendu par
l’émetteur.
- La longueur de l’en-tête est codée sur 4 bits et donne
le nombre de mots de 32 bits.
- Les bits de contrôle permettent de définir la
fonction des messages ainsi que la validité de certains champs :
· URG
= 1 si le champ des priorités est
utilisé (pour des demandes d’interruption d’émission par exemple)
· ACK
=
1 si la valeur du
champ acquittement est significative;
· EOM
(ou PSH) indique une fin de message (End of
Message), les données doivent être transmises (pushed)
à la couche supérieure;
· RST
(Reset) demande de réinitialisation de la connexion;
· SYN:
demande d’ouverture de connexion (les numéros de séquence doivent être
synchronisés)
· FIN
: fin de connexion.
- Le champ fenêtre (Windows) indique le
nombre d’octets que le récepteur peut accepter à partir du numéro
d’acquittement.
- Le champ checksum correspond à une somme de
contrôle de l’en-tête et du message.
- Le champ priorité contient lors d’une
interruption d’émission (URG=l) un pointeur sur les octets de données à traiter
en priorité.
- Le champ options permet de définir, par exemple,
la taille maximale d’un segment.
a) Ouverture d’une
connexion
Après autorisation
locale sur chaque station et déclaration d’un identificateur permettant à
l’application de référencer la connexion, la demande d’ouverture de connexion
est transmise à la couche transport qui positionne son bit SYN à 1 (figure
7.17). Le numéro de séquence initial à l’émission (Initial Send Sequence number,
ISS) est délivré, au moment de la demande, par un compteur incrémenté
toutes les 4 ms (la taille du champ séquence étant de 32 bits, la période du
compteur est supérieure à 4 heures).

b) Transfert de
données
Le transfert de
données peut alors commencer avec les numéros de séquence en cours (figure
7.18). Le contrôle de flux est réalisé dans les deux sens par les numéros d’acquittement
(le bit ACK est alors positionné à 1). La taille de la fenêtre de transmission
sans acquittement est fixée par le destinataire avant envoi du premier segment.
Comme pour le protocole HDLC, lorsque l’émetteur n’a pas reçu d’acquittement
après expiration d’un délai programmé, une retransmission des segments non
acquittés est réalisée.

c) Fermeture d’une
connexion
La fermeture d’une
connexion est réalisée lorsque le récepteur reçoit un en-tête TCP dont le bit FIN
est positionné à 1 (figure 7.19). La demande est traitée dans les deux sens au niveaux supérieurs avant acquittement.
Le protocole UDP (rfc 768)
UDP est un protocole sans connexion
et permet à une application d’envoyer des messages à une autre application avec
un minimum de fonctionnalités (pas de garanties d’arrivée, ni de contrôle de séquencement). Il n’apporte pas de fonctionnalités
supplémentaires par rapport à IP et permet simplement de désigner les numéros
de port correspondant aux applications envisagées avec des temps de réponse
courts.
Un message UDP est désigné
dans un paquet IP par une valeur du champ protocole égal à 17.

- Le port source et le port
destination permettent de référencer les applications qui s’exécutent sur les
machines locales et distantes. Les numéros de port des applications UNIX
usuelles (process) sont donnés en Annexe. Les valeurs
supérieures à 1023 correspondent à des ports clients et sont affectées à la
demande par la machine qui effectue une connexion TCP.
- La longueur indique la
longueur totale du message en octets (données et en-téte).
- La somme de contrôle est
calculée comme pour les paquets IP. Une somme à 0 indique qu’elle n’est pas
gérée.
Annexe
“The Well Known Ports are those from 0 through 1023”
“The Registered Ports are those from 1024 through 49151”
“The Dynamic and/or Private Ports are those from 49152 through 65535”
Les ports « bien connus » sont assignés par
l’IANA. Sur la plupart des systèmes ils peuvent être
seulement employés par des processus du système (ou root)
ou par des programmes exécutés par les utilisateurs privilégiés. (liste complète : http://www.iana.org/assignments/port-numbers)
Assignation des ports associés aux processus
serveurs en fonction des protocoles de
transport
Cette liste non exhaustive, indique le port employé
par le processus de serveur comme son port de contact. Le port de contact
s'appelle parfois le port "bien connu".
Processus Port/Proto Description
echo 7/tcp Echo
echo 7/udp Echo
systat 11/tcp Active Users
systat 11/udp Active Users
daytime 13/tcp Daytime (RFC 867)
daytime 13/udp Daytime (RFC 867)
qotd 17/tcp Quote of the Day
qotd 17/udp Quote of the Day
msp 18/tcp Message Send Protocol
msp 18/udp Message Send Protocol
ftp-data 20/tcp File Transfer [Default Data]
ftp-data 20/udp File Transfer [Default Data]
ftp 21/tcp File Transfer [Control]
ftp 21/udp File Transfer [Control]
ssh 22/tcp SSH Remote Login Protocol
ssh 22/udp SSH Remote Login Protocol
telnet 23/tcp Telnet
telnet 23/udp Telnet
24/tcp any private mail system
24/udp any private mail system
smtp 25/tcp Simple Mail Transfer
smtp 25/udp Simple Mail Transfer
msg-icp 29/tcp MSG ICP
msg-icp 29/udp MSG ICP
msg-auth 31/tcp MSG Authentication
msg-auth 31/udp MSG Authentication
time 37/tcp Time
time 37/udp Time
# Jon Postel <postel@isi.edu>
name 42/tcp Host Name Server
name 42/udp Host Name Server
nameserver 42/tcp Host Name Server
nameserver 42/udp Host Name Server
nicname 43/tcp Who Is
nicname 43/udp Who Is
domain 53/tcp Domain Name Server
domain 53/udp Domain Name Server
whois++ 63/tcp whois++
whois++ 63/udp whois++
sql*net 66/tcp Oracle SQL*NET
sql*net 66/udp Oracle SQL*NET
bootps 67/tcp Bootstrap Protocol Server
bootps 67/udp Bootstrap Protocol Server
bootpc 68/tcp Bootstrap Protocol Client
bootpc 68/udp Bootstrap Protocol Client
tftp 69/tcp Trivial File Transfer
tftp 69/udp Trivial File Transfer
gopher 70/tcp Gopher
gopher 70/udp Gopher
finger 79/tcp Finger
finger 79/udp Finger
http 80/tcp World Wide Web HTTP
http 80/udp World Wide Web HTTP
www 80/tcp World Wide Web HTTP
www 80/udp World Wide Web HTTP
www-http 80/tcp World Wide Web HTTP
www-http 80/udp World Wide Web HTTP
kerberos 88/tcp Kerberos
kerberos 88/udp Kerberos
dnsix 90/tcp DNSIX Securit Attribute Token Map
dnsix 90/udp DNSIX Securit Attribute Token Map
npp 92/tcp Network Printing Protocol
npp 92/udp Network Printing Protocol
hostname 101/tcp NIC Host Name Server
hostname 101/udp NIC Host Name Server
rtelnet 107/tcp Remote Telnet Service
rtelnet 107/udp Remote Telnet Service
# Jon Postel <postel@isi.edu>
pop2 109/tcp Post Office Protocol - Version 2
pop2 109/udp Post Office Protocol - Version 2
pop3 110/tcp Post Office Protocol - Version 3
pop3 110/udp Post Office Protocol - Version 3
sunrpc 111/tcp SUN Remote Procedure Call
sunrpc 111/udp SUN Remote Procedure Call
ident 113/tcp
auth 113/tcp Authentication Service
auth 113/udp Authentication Service
audionews 114/tcp Audio News Multicast
audionews 114/udp Audio News Multicast
sftp 115/tcp Simple File Transfer Protocol
sftp 115/udp Simple File Transfer Protocol
sqlserv 118/tcp SQL Services
sqlserv 118/udp SQL Services
nntp 119/tcp Network News Transfer Protocol
nntp 119/udp Network News Transfer Protocol
ntp 123/tcp Network Time Protocol
ntp 123/udp Network Time Protocol
statsrv 133/tcp Statistics Service
statsrv 133/udp Statistics Service
netbios-ns 137/tcp NETBIOS Name Service
netbios-ns 137/udp NETBIOS Name Service
netbios-dgm 138/tcp NETBIOS Datagram Service
netbios-dgm 138/udp NETBIOS Datagram Service
netbios-ssn 139/tcp NETBIOS Session Service
netbios-ssn 139/udp NETBIOS Session Service