-------------------------------------
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.