![]() |
guill.net
-
La page des réseaux
|
![]() ![]() |
Eléments constitutifs du réseau
L'environnement réseau
est constitué de machines raccordées sur des réseaux,
eux-mêmes interconnectés par l'intermédiaire de routeurs.
Ces réseaux peuvent être des réseaux locaux (ex., Ethernet)
ou réseaux étendus (ex., ARPAnet), mais sont dans tous les
cas des réseaux de type "à commutation de paquets" ou "asynchrones".
Les éléments actifs qui consomment et produisent des paquets
sont appelés des processus. Un certain nombre de niveaux de protocoles
réseau, au niveau des machines ou des routeurs, permettent d'établir
une chaîne complète de communication entre les processus actifs
de n'importe quelle machine.
Le terme paquet, générique,
désigne les données d'une transaction unitaire entre un processus
et le réseau. Le format physique des données à l'intérieur
du réseau est en dehors du champ d'application de ce document.
Les "hosts" sont des ordinateurs
raccordés au réseau, et, du point de vue de ce dernier, sont
les sources et destinations des paquets. Les processus sont identifiés
comme les éléments actifs dans ces machines (conformément
à la définition courante de "programme en cours d'exécution").
Les terminaux, fichiers, et autres périphériques d'entrée/sortie
peuvent être identifiés comme "éléments communicants"
par l'intermédiaire d'un processus. De ce fait, toute communication
reste identifiée comme un échange inter-processus.
Comme un processus particulier
doit pouvoir discerner des communications distinctes avec d'autres processus,
nous avons imaginé que chaque processus puisse disposer d'un certain
nombre de "ports" d'entrée/sortie, chacun attribué à
une communication unique avec un autre processus.
Modèle de fonctionnement
Les processus transmettent
les données en faisant appel à TCP et en passant des tampons
de données comme arguments. TCP met en forme les données
de ces tampons, les segmente afin de les transférer au protocole
Internet qui a son tour les acheminera vers le TCP distant. Celui-ci reçoit
les segments, les copie dans un tampon temporaire, et en avise l'émetteur.
Le protocole TCP inclut les informations nécessaires à la
"reconstruction" en bon ordre des données originales.
Le modèle d'une communication
Internet fait qu'il existe pour chaque TCP actif un module de protocole
Internet chargé de l'acheminement de données. Ce module Internet
"encapsule" à son tour les paquets TCP sous la forme de paquets
Internet, transmis à un module Internet distant via des "routeurs".
Pour transmettre le paquet ainsi constitué à travers un réseau
local, une troisième couche de protocole, spécifique au réseau,
est ajoutée.(Cf mécanisme d'encapsulation)
Les paquets peuvent alors
subir un grand nombre de transformations, fragmentations, ou autres opérations
pendant leur acheminement au module Internet distant.
A l'arrivée dans
un routeur, le paquet Internet est décapsulé et analysé.
Ses informations sont examinées pour savoir vers quel réseau
le paquet doit être acheminé. Un nouveau paquet Internet est
constitué, selon les spécifications du segment de réseau
désigné, puis transmis sur ce réseau.
Un routeur peut procéder
à une segmentation plus fine des paquets, si le réseau en
sortie n'a pas les performances suffisantes pour véhiculer le paquet
d'origine. Pour réaliser ceci, le routeur exécute une nouvelle
segmentation en "fragments". Ces mêmes fragments peuvent à
leur tour être redécoupés en chemin par un autre routeur.
Le format de paquets fragmentés est standardisé de sorte
que le réassemblage soit toujours possible, étape par étape,
jusqu'à restitution des données originales.
Le module Internet d'arrivée
extrait le datagramme de niveau supérieur, pour nous, TCP (après
défragmentation du paquet si nécessaire) et le passe à
la couche TCP.
Cette description rapide
du protocole ignore certains détails. Le type de service en est
un d'importance. Celui-ci indique au routeur (ou au module Internet) quels
paramètres de service doivent être utilisés pour traverser
la section suivante. L'un de ces paramètres est la priorité
du paquet. Un autre est le codage de sécurité du paquet,
permettant aux réseaux traitant des aspects de sécurité
de discriminer les paquets conformément aux exigences établies.
Les Hosts
TCP est conçu sous la forme d'un module du système d'exploitation. L'utilisateur exploitera ses fonctions comme une autre ressource système (ex. le système de fichiers). TCP pourra lui-même invoquer d'autres ressources système, par exemple pour utiliser les structures de données locales. Actuellement, l'interfaçage vers le réseau est implémentée sous la forme d'un pilote de périphérique. TCP n'adresse pas le pilote directement, mais transfère le paquet à IP qui prendra en charge à son tour les transactions avec le pilote.
Interfaces
L'interface TCP/application
fournit l'accès à des commandes OPEN ou CLOSE pour l'ouverture
et la fermeture d'une communication, SEND ou RECEIVE pour l'émission
ou la réception de données, ou STATUS pour connaître
l'état d'une communication. Ces commandes seront appelées
comme toute autre primitive système, par exemple celle qui permet
l'ouverture ou la fermeture de fichiers.
L'interface TCP/Internet
dispose de commandes pour recevoir et émettre des paquets vers des
modules TCP où qu'ils soient sur le réseau. Ces appels ont
des paramètres tels qu'adresses, type de service, priorité,
sécurité, et autres informations de contrôle.
Relations avec d'autres protocoles
Le diagramme suivant montre la place de TCP dans la hiérarchie de protocoles:
+------+ +-----+ +-----+ +-----+
|Telnet| | FTP | |Voice| ... | |
Couche applicative
+------+ +-----+ +-----+ +-----+
| | |
|
+-----+ +-----+
+-----+
| TCP | | RTP | . |
| Couche machine
+-----+ +-----+
+-----+
| |
|
+--------------------------------------------+
| Internet Protocol & ICMP
| Couche réseau
+--------------------------------------------+
|
|
+--------------------------------------------+
| Local Network Protocol
| Couche physiaqye
+--------------------------------------------+
Fiabilité de communication
Un flux de donnée
s'appuyant sur une connexion TCP doit être pouvoir considéré
comme "fiable".
La fiabilité de cette
transmission s'appuie sur l'utilisation de numéros de séquence
et sur un mécanisme d'accusés de réception. Dans le
concept, à chaque octet de données est attribué un
numéro de séquence. Le numéro de séquence du
premier octet transmis dans un segment est appelé le numéro
de séquence du segment. Celui-ci est explicitement transmis avec
le segment. En retour, l'accusé de réception est constitué
du numéro de séquence du prochain octet à transmettre.
Lorsque TCP transmet un segment contenant des données, celui-ci
est copié dans une pile de réémission et une temporisation
est lancée; lorsque l'accusé de réception est reçu,
la copie dans la pile de retransmission est supprimée. Dans le cas
contraire, le paquet est réémis une nouvelle fois.
L'accusé de réception
ne garantit pas que les données sont effectivement arrivées
à l'utilisateur final. Il indique simplement que le FTP destinataire
à bien pris en charge ces données, en vue de les transmettre
à cet utilisateur.
Pour contrôler le
débit de données entre les deux TCP, un mécanisme
dit de "contrôle de flux" est employé. Le TCP récepteur
aménage une "fenêtre de réception" pour le TCP émetteur.
Cette "fenêtre" indique le nombre d'octets, à partir du numéro
de séquence inscrit dans l'accusé de réception, que
le TCP distant est capable de recevoir.
Etablissement et rupture des connexions
TCP indique un identificateur
de port. Comme ces identificateurs sont choisis indépendamment par
chaque extrémité, ils peuvent se révéler identiques.
L'adresse unique d'une communication TCP est obtenue par la concaténation
de l'adresse Internet avec l'identificateur du port sélectionné,
constituant ainsi ce que l'on nome une "socket". Cette socket est alors
unique dans l'ensemble du réseau.
Une connexion de base est
définie par un couple de sockets, l'un définissant l'émetteur,
l'autre le récepteur. Un socket peut devenir le destinataire ou
la source pour plusieurs sockets distinctes. La connexion est résolument
bidirectionnelle, et prend la dénomination de "full-duplex".
TCP est libre d'associer
ses ports avec les processus exécutés sur sa machine. Cependant,
quelques règles ont été établies pour l'implémentation.
Ont été définis un certain nombre de sockets "réservées"
que TCP ne doit associer qu'avec certains processus bien identifiés.
Ceci revient à dire que certains processus peuvent s'attribuer la
propriété de certains ports, et ne pourront initier de communication
que sur ceux-ci.
Une connexion est demandée
par activation de la commande OPEN indiquant le port local et les paramètres
du socket distant. En retour, TCP répond par un nom local (court)
symbolique que l'application utilisera dans ses prochains appels. Plusieurs
choses doivent être retenues à propos des connexions. Pour
garder la trace de cette connexion, nous supposons l'existence d'une structure
de données appelée Transmission Control Block (TCB). Une
des stratégies d'implémentation est de dire que le nom local
donné est un pointeur vers le TCB associé à cette
connexion. La commande OPEN spécifie en outre si le processus de
connexion doit être effectué jusqu'à son terme, ou
s'il s'agit d'une ouverture en mode passif.
Une ouverture passive signifie
que le processus de connexion se met en attente d'une demande de connexion
plutôt que de l'initier lui-même. Dans la plupart des cas,
ce mode est utilisé lorsque l'application est prête à
répondre à tout appel. Dans ce cas, le socket distant spécifié
n'est composé que de zéros (socket indéfini). Le socket
indéfini ne peut être passé à TCP que dans le
cas d'une connexion passive.
Un utilitaire désireux
de fournir un service à un processus non identifié pourra
initier une connexion passive. Tout appelant effectuant une requête
de connexion sur le socket local sera reconnu. Il sera bon de garder en
mémoire que ce socket est associé à ce service.
Les sockets "réservés"
sont un bon moyen d'associer à priori des ports à des applications
standard. Par exemple, le serveur "Telnet" est en permanence associé
à un socket particulier, d'autres étant réservés
pour les transferts de fichiers, sessions de terminal distant, générateur
de texte, écho (ces deux pour des besoins de test), etc. Un socket
est aussi réservé à la fonction de serveur de domaines,
transcodant les "noms explicites" de services en sockets Internet. Si le
concept même de l'assignation à priori de sockets fait partie
de TCP, l'assignation concrète des sockets "réservées"
est définie dans un autre document.
La procédure de connexion
utilise le bit de contrôle de synchronisation (SYN) et suppose la
transmission de trois messages. Cet échange est appelé "négociation
ternaire".
La connexion suppose le
rendez-vous d'un segment marqué du bit SYN et d'une requête
locale (TCB), chacun des deux étant créé par l'exécution
d'une commande de connexion. La correspondance entre le socket arrivé
et le socket attendu détermine l'opportunité de la connexion.
Celle-ci ne devient réellement établie que lorsque les deux
numéros de séquence ont été synchronisés
dans les deux directions.
La rupture d'une connexion
suppose l'émission de segments, marqués du bit FIN.
Communication de données
Les données circulant
dans la connexion ouverte doivent être vues comme un flux d'octets.
L'application indique dans la commande SEND si les données soumises
lors de cet appel (et toutes celles en attente) doivent être immédiatement
émises par l'activation du flag PUSH.
Par défaut, TCP reste
libre de stocker les données soumises par l'application pour les
émettre à sa convenance, jusqu'à ce que le signal
PUSH soit activé. Dans ce dernier cas, toutes les données
non émises doivent être envoyées. Symétriquement,
lorsque le TCP récepteur voit le flag PUSH marqué, il devra
passer immédiatement toutes les données collectées
à l'application destinataire.
Il n'y a à priori
aucune corrélation entre la fonction PUSH et les limites des segments.
Les données d'un segment peuvent être le résultat d'une
seule commande SEND, en tout ou partie, ou celui de plusieurs appels SEND.
La fonction de la fonction
push et du flag PUSH est de forcer la transmission immédiate de
toutes les données latentes entre les deux TCP. Il ne s'agit aucunement
d'une fonction d'enregistrement
Il y a par contre une relation
entre la fonction push et l'usage des tampons dans l'interface TCP/application.
Chaque fois qu'un flag PUSH est associé à des données
stockées dans le tampon de réception, celui-ci est intégralement
transmis à l'application même s'il n'est pas plein. Si le
tampon est rempli avant qu'un flag PUSH soit vu, les données sont
transmises à l'application par éléments de la taille
du tampon.
TCP dispose d'un moyen d'avertir
l'application que, dans le flux de données qu'il est en train de
lire, au delà de la position de lecture courante, des données
de caractère urgent sont apparues. TCP ne définit pas ce
que l'application est sensée faire lorsqu'elle est avisée
de la présence de ces données. En général,
c'est l'implémentation de l'application qui traitera ces données
urgentes selon ses besoins propres.