 | |  |
| Tutoriel
Chapitre 2 - Théorie des opérations
Utilisation des sockets en mode connecté
Le comportement et l'utilisation des sockets varient selon le type de protocole. En mode non connecté (style UDP), la séquence d'opérations à réaliser pour envoyer un paquet de données reste relativement simple. Celui qui veut recevoir crée un socket lié à un certain port de la machine. Celui qui veut envoyer des données doit alors connaitre l'adresse IP de son correspondant et le port derrière lequel un socket a été créé.
Toutefois, le protocole se contente seulement d'envoyer le paquet demandé à l'adresse demandée sans se poser plus de questions. Il se peut donc que le paquet soit perdu en cours de route sans que l'expéditeur n'en soit informé.
Le mode orienté connexion (TCP), quant à lui, introduit la notion de transport fiable. Quand un paquet est envoyé d'un correspondant A vers un correspondant B, ce dernier renvoie un petit message à A disant qu'il a bien reçu le paquet. De son coté, A s'attend à recevoir cet accusé de réception de la part de B. S'il n'est pas reçu avant un délai donné, le paquet sera réexpédié et ce jusqu'à enfin recevoir l'accusé de réception. Au bout de n tentatives infructueuses A peut finalement décider que B n'a plus l'air d'être joignable au bout de la ligne et il fermera la connexion. Le protocole gère aussi le cas où les multiples tentatives d'envoi du paquet arrivent finalement à B. En effet dans ce cas, celui-ci ne doit prendre en considération qu'un seul des paquets reçus plusieurs fois. Tous ces mécanismes permettent de savoir, soit que les données envoyées l'ont été réellement, soit qu'un problème nécessitant de fermer la connexion est survenu.
On voit donc que cette notion de "connexion" est plus symbolique que physique. Elle traduit le fait que deux sockets connectés l'un à l'autre gèrent des compteurs, des timers et des accusés de réception pour déterminer si le lien physique qui les relie permet toujours de s'échanger des données. Ainsi, même si l'utilisateur ne reçoit et n'envoie plus aucun message, les 2 sockets continueront de s'échanger de petits messages pour se prouver l'un à l'autre qu'ils sont encore en vie. S'ils ne sont plus reçus, un timer statuera au bout d'un temps donné que la connexion a été interrompue.
Un exemple simple des mécanismes mis en oeuvre dans le protocole TCP/IP est illustré par la figure qui suit. Le premier message M envoyé de A vers B arrive sans encombre, tout comme son accusé de réception. Le message N est plus problématique. Il est tout d'abord perdu, B ne peut donc pas se rendre compte de ce qui se passe. Au bout d'un certain temps (expiration timer) A décide de réenvoiyer le message qui, cette fois, arrive à bon port. Toutefois, l'accusé de réception retourné par B met du temps à arriver (réseau encombré par exemple). Au final, il arrive après que le timer de A expire à nouveau. Ce dernier a donc réémis une troisième fois le paquet. B le recevra un peu plus tard et devra l'ignorer puisqu'il correspond à un message déjà reçu.

La mise en place d'une liaison avec connexion requiert que celle-ci soit établie (voir figure qui suit). Il faut pour cela désigner un serveur, c'est à dire celui qui va se mettre en écoute sur un port connu des futurs clients (fonction "bind" et fonction "listen"). Les clients peuvent alors se connecter sur le port en question (fonction "connect"). Si le serveur accepte la connexion (fonction "accept"), s'en suivra un échange automatique de messages qui permettront d'établir la connexion ainsi que le port du client qui sera utilisé pour la communication. En effet, le serveur à besoin de connaitre le numéro de port du client pour correspondre avec lui. Le numéro de port du serveur, quant à lui, reste celui sur lequel l'écoute à lieu. L'utilisateur n'est pas maître du numéro de port client négocié durant la connexion. En fait, la machine choisit le sien parmi ceux qui sont non utilisés et le transmet au serveur.

Au final, on se retrouve avec trois sockets. Le premier est celui créé initialement par l'utilisateur pour l'écoute tandis que les deux autres sont ceux utilisés pour la nouvelle connexion.
Chapitres : Intro 01 02 03 04
Dernière mis à jour : 05/2008 |     |
| |
| Copyright (C) 2010 Quantic-Storm, tous droits réservés | |
 | |  |