-------------------------------------
ETUDES
DE PROTOCOLES - POUR LES NULS
-------------------------------------
Les
machines ne communiqueront pas uniquement parce qu'on a conçu un réseau,
tirer
des câbler et mis à jour les fichiers de configuration! Nous allons
ici
étudier les protocoles, que l'on peut définir comme un ensemble
de
régles (dans le but de faire communiquer deux machines ou plus).
Avant
cela, révison des notions fondamentales.
PARTIE 1 : INTRODUCTION
I.
ARCHITECTURE DES RESEAUX, PROTOCOLES ET SERVICES
----------------------------------------------------
Afin de communiquer sur un réseau, les machines utilisent un ensemble
de
règles, conventions, appelées "protocoles". Compte tenu
de
leur complexité (et si l'on se base sur le principe de modularité),
les
protocoles ont une structure en couches afin de faciliter et contrôler
leurs
implémentations. Cela a pour principal atout d'isoler les différents
protocoles
: tout changement introduit dans l'un de ces protocoles n'affecteront
donc
par les fonctionnalités des autres.
Ce modèle offre des interfaces
entre les différentes couhes afin de
permettre aux protocolesd'une couche
donnée d'interagir avec ceux des couches
qu'il lui sont directement
adjacentes. Ces interfaces sont conventionnelles.
Cela a pour avantage que
si deux protocoles de deux couches différentes
ont une structure internes
totalement différentes (car différents contructeurs,
etc.), ils
pourront quand même communiquer ensemble car leur interface
est générique
: on élimine donc d'emblée les éventuels problèmes
d'incompatibilité.
Chacune des couches s'appuie sur des services offerts
par une couche
inférieure et vise à offrir ses services à
la couche qui lui est supérieure.
II.
MODELE OSI
---------------
L'ISO (International Standards Organization)
est un organisme de standardisation
qui a défini une architecture normalisée
pour les réseaux : le modèle OSI
(Open Systems Interconnection).
C'est donc le modèle ISO OSI;) Elle est
décomposée en
7 couches (nous n'en reparlerons pas, le modèle OSI a déjà
été
cité x fois dans THJ) : la couche physique, la couche liaison de données
(divisée
en deux sous-couches : MAC (Medium Access Control) et LLC (Logical
Link Control),
la couche réseau, la couche transport, la couche session,
la couche
présentation et la couche application.
Etudions maintenant le but de
cet article, les protocoles.
NB: Nous excepterons ici l'étude de la
couche physique (qui comprend les
paramètres électriques du médium
etc.) et la couche 2, peut intéressante
dans cet article (notons que
le protocole utiliser pour la couche 2 est
CSMA/CD (norme ISO 802.3)).
III.
LE PROTOCOLE ARP
--------------------
Le protocole ARP (Address Resolution
Protocol) permet à une machine
A de trouver, si elle existe, l'adresse
Ethernet d'une autre machine B,
connectée sur le même réseau,
en donnant uniquement l'adresse Internet
de celle-ci. SOn rôle est de
masquer l'adresse physiques des machines
aux pplications opérant à
un niveau supérieur pourqu'elle ne manipule que
les adresses Internet.
A l'opposé, le protocole RARP (Reverse-ARP), sert
à retrouver
l'adresse Internet d'une machine du réseau dès lors que l'on
a
son adresse Ethernet (ce qui peut être intéressant pour booter une
machine
via le réseau par exemple). On notera que l'utilisateur n'a
pas accès à
ces deux protocoles mais le protocole IP les utilise
quand il en a besoin.
III.
LE PROTOCOLE IP
---------------------
Gardons à l'esprit la différence
en un réseau local LAN et un réseau
étandu WAN (bien qu'on
regroupe souvent ces deux expressions sous le terme
générique
"réseau". Un LAN regroupe un ensemble de machines géographiquement
proche
(aussi appelé "réseau d'entreprise") relié par
un câble
physique : c'est le cas d'un réseau Ethernet. Un WAN
est un amas de LAN
interconnectés entre eux.
Ainsi, le protocole
IP permet au couches supérieures de faire abstraction
de l'ensemble
des LAN qu'il faut parfois traverser pour acheminer un paquet
dans un WAN.
Ces couches supérieures n'ont donc pas à se soucier du trajet
que
les paquets doivent suivre : pour elles, la liaison est directe. Cette
gestion
des routes dans un WAN est appelé "routage". En outre,
les
LAN qui forme le WAN peuventn utiliser des protocoles et des trames
différents
(ils sont alors dits "hétérogènes"). Le protocole
IP
aura alors pour but de découper, puis réassembler ces paquets (ce
mécanisme
est appelé "fragmentation")..
Le service
principal offert par IP est l'émission et la réception de
paquets
de données appelés "datagrammes". Ce service est dit
"non
fiable" dans la mesure où la perte/altération d'un paquet
pendant
son transport ne génère aucun mécanisme permettant de récupérer
ces
erreurs. Les protocoles TCP et UDP se basent dessus.
Je ne redonnerais pas
l'entête d'un paquet IP, déjà expliqué en détail
par
Redils dans le Manuel 7 (Raws Sockets, Part 1).
IV.
LE PROTOCOLE ICMP
-----------------------
IP offre un service non fiable,
nous l'avons dit. Si donc un paquet
est perdu ou qu'une anonmalie se produit
au niveau des fonctionnalités
de IP, celui-ci ne rapporte aucune information
quant à l'erreur.
Afin de parer à cette faiblesse, les concepteurs
ont introduit dans
la famille des protocoles TCP/IP un mécanisme appelé
ICMP (Internet Control
Message Protocol). Sa fonctionnalité principale
est de rapporter, à la
station émettrice du paquet, les erreurs
qui peuvent se produire au niveau
IP. Ainsi, s'il arrive que le protocole IP
n'arrive pas à remplir son rôle
correctement, il l'indique au
protocole ICMP qui émet alors un parquet
à destination de la
station source notifiant la nature qui informe le protocole
IP de l'occurence
de cette erreur. Ce dernier avisera alors. ICMP est aussi
utilisé pour
tester un réseau.
Il existe une douzaine de type de messages ICMP et
chacun est encapsulé
dans un paquet IP. Les plus couramment utilisés
sont :
- ECHO REQUEST & ECHO REPLY sont utilisés pour voir si une
destination
donnée(une station) est accessible et opérationnelle.
A la réception d'un
message ECHO REQUEST, le destinataire doit répondre
ECHO REPLY. (le premier
est un ping et le seconde un pong (réponse à
un ping)).
- DESTINATION UNREACHABLE est généré quand
le protocole IP ne sait pas
comment joindre la station à qui est destiné
un datagramme (quand, par
exemple, il n'y a pas de réponse, du protocole
ARP).
- SOURCE QUENCH est utilisé pour "brider" des stations
qui envoient
un trop grand nombre de datagrammes. A la réception de
ce message, la station
devrait modérer sa cadence d'émission
des datagrammes (une sorte d'anti-flood).
- TIME EXCEEDED est envoyé
quand un datagramme à son TTL 5Time To Live,
osn compteur) à
zéro : il est donc détruit par le routeur par lequel il
transite.
C'est un tout bête time out.
- PROBLEM PARAMETER indique qu'une valeur
illégale a été détectée dans
un champ de
l'entête d'un datagramme.
En ce qui concerne le mécanisme de
fragmentation des paquets IP, si
la machine a laquelle sont envoyés
les datagrammes ne possède pas un mécanisme
de réassemblage
au niveau IP, il faut interdire la fragmentation des datagrammes
qui lui sont
destinés. Le flag DF (Don't Fragment) est utilisé à cet effet
:
positionné à 1, la fragmentaiton est interdite pour les routeurs
suivants.
Il se peut alors qu'il soit impossible d'acheminer un paquet.
PROTOCOLE
DE COUCHE 4 => TCP/UDP
---------------------------------
V. LE PROTOCOLE
TCP
--------------------
Le service offert par TCP (Transmission Control
Protocol) peut être
comparé au téléphone : quand
vous téléphonez à quelqu'un, le dialogue ne
peut s'instaurer
qu'à partir du moment ou l'interlocuteur décroche son
combiné
et dit "Allo" (la connexion est alors rétablie) : on
peut
dialoguer.
Un protocole offrant un tel service est dit "orienté
connexion"
: cela signifie que si deux processus veulent s'échanger
des données par
TCP, ils doivent préalablement établir
une connexion virtuelle. Une fois
celle-ci établit, le TCP garantit
que toutes les données envoyées par le
premier processus seront
reçues sans la moindre erreur par le deuxième
: on aura donc
aucune perte ni modification de données lors du transit.
En outre, TCP
garde l'ordre des données : elles arrive de manière séquentielle.
utre cela, le service offert par TCP possède la caractéristique
d'être
de type "byte-stream" (flux d'octets): si le premier
processus
envoi 5 puis 15 caractères, ceux-ci peuventêtre récupérés
de différentes
manières par le processus distant :
- un lecture
de 20 caractères
- deux lectures de 10 caractères
- deux lectures
de 7 et une lecture de 6 caractères...
Par conséquente, il n'y
a pas de découpage fixe dans le flux de données
véhiculées.
A
noter qu'un même processus peut gérer simultanément plusieurs
connexion
TCP (il peut, par exemple, ouvrir deux connexions avec deux processus
s'exécutant
sur deux machines différentes).
Voici
son entête:
-------
SCHEMA1
-------
Le champ Code bits est composé
des 6 flags : URG, ACK, PSH, RST, SYN, FIN.
Sémantique des champs:
-
SOURCE PORT ET DESTINAITON PORT : no comment.
- SEQUENCE NUMBER et ACK NUMBER
Sont utilisés pour le séquencement et le
contrôle d'erreur
des données (le flag ACK indique si le champ ACK NUMBER
contient une
valeur valide).
- HLen indique la taille du header TCP en mots de 4 octets
(la taille de
la socket TCP ets variable : elle peut être complétée
par une ou plusieurs
options de 4 octets chacunes).
- CHECKSUM est la somme
de contrôle.
- URGENT POINTER (flag URG) est utilisé pour le transport
de "données
urgentes" (le flag URG indique si le champ URGENT
POINTER contient
une valeur valide).
- les flags SYN et FIN sont utilisés
pour l'établissement et la fermeture
des connexions virtuelles.
-
le flag RST sert à signaler au destinataire une demande de re-initialisation
des
connexions qui sont dans un état incertain (SYN dupliqués, panne...)
-
le flag PSH : on ne l'étudiera pas.
- le champ WINDOWS est utilisé
par le contrôle de flux.
VI.
LE PROTOCOLE UDP
--------------------
Le service offert par le protocole
UDP peut être comparé à celui offert
par la poste : quand
vous postez une lettre, et si vous demandez le tarif
habituel, il peut arriver
qu'une lettre se perde. Par ailleurs, il se peut
qu'elle arrive à destination
après une autre lettre qui avait pourtant
été postée
après elle... Pareillement, deux processus peuvent aussi utiliser
le
protocole UDP pour s'envoyer des données. Avec UDP, aucune conneixon
préalable
n'est nécessaire, mais, à l'inverse de TCP, UDP ne donne aucune
garantie
quant à la qualité du service proposé : des données
peuvent être
perdues, arriver dans le désordre, éventuellement
modifiées... C'est à
l'utilisateur d'éventuellement effectuer
ces contrôles. UDP est très différent
de TCP par sa fonction
: il véhicule des paquets de données (alors que
TCP véhicule
un flux de données). Ainsi, si un process envoi 5 puis 15
caractères
par UDP, le process distant ne pourra les lire qu'en deux paquets
séparément.
Ainsi, l'unité d'information avec UDP est le MESSAGE ; avec
TCP, c'est
L'OCTET.
Une
question peut se poser : pourquoi un process choisirait le protocole
TCP ou
UDP. Les criètres de sélection dépendant évidemment
des caractéristique
de TCP et UDP. Par exemple, si l'on veut absolument
un communication fiable
à 100%, on préfèrera TCP... On
prendra aussi en compte le type de données
échangées.
AInsi, le protocole UDP sera plus adpaté pour un process serveur
dont
les messages sont de types "REQUEST-REPLY". Par contre,
un transfert
de fichier étant assimilé à un envoi de flux d'octets, on
choisira
plutôt TCP pour une telle communication.
Finalement, quant au protocole UDP, retenons qu'il ne garantit pas une
communication
fiable et l'unité de transfert est le paquet de données.
VII.
VOILA
-----------
J'espère que cet article qui reprenait, pour les
newbie, les protocoles
de communication vous aura été fort utile.
Il est, certes, bien incomplet
sur certains points et parfois très superficiel,
mais, e pense qu'il constituera
une très bonne base pour ceux voulant
avoir un vision global des ces protocoles
avant un éventuel approfondissement.
Pour tout question, n'hésitez pas,
lâchez vous sur le forum.