Le niveau TCP Deux protocoles interviennent dans le transport des datagrammes TCP/IP: TCP (Transmission Control Protocol). Ce protocole a en charge le découpage du message en datagrammes, le réassemblage à l'arrivée avec remise dans le bon ordre, ainsi que la réémission de ce qui a été perdu. IP (Internet Protocol). Il assure le routage des datagrammes. Il semble donc que ce soit TCP qui fasse tout le travail ! c'est vrai dans les petits réseaux, mais dans l'Internet envoyer un datagramme à sa destination peut devenir une tâche complexe. Par exemple, à l'université de Rutgers un datagramme peut traverser plusieurs réseaux de types différents: une ligne série pour aller au centre John von Newman des supercalculateurs, des segments Ethernet, une série de lignes à 56Kb/s vers un autre site de NSFnet et d'autres Ethernets sur un autre campus. Dans ce cas gérer les routes vers toutes ces destinations, prendre en compte les incompatibilités des différents supports de transmission devient un travail complexe. Notez cependant que l'interface entre TCP et IP est relativement simple: TCP passe simplement à IP un datagramme avec une adresse de destination, IP ne connait pas les relations qu'il y a entre ce datagramme et les autres. Vous avez du vous apercevoir qu'il manque quelque chose, en effet on a parlé des adresses Internet, mais on n'a pas expliqué comment repérer les différentes connexions à un système donné. Il ne suffit d'envoyer un datagramme à la bonne adresse, TCP doit également connaître la connexion à laquelle il appartient, c'est ce que l'on appelle le démultiplexage. En fait, il y a plusieurs niveaux de démultiplexage dans TCP/IP, les informations nécessaires à cela sont contenues dans une série SPMlt;<d'en-têtesSPMgt;> (headers). Un en-tête est constitué de quelques caractères placés, par les protocoles, au début de chaque de chaque datagramme, de façon à pouvoir en garder la trace. En gros cela revient à mettre une lettre dans une enveloppe sur laquelle il y a une adresse . Mais dans les réseaux modernes cela est répété plusieurs fois, c'est un peu comme si vous mettiez une lettre dans une petite enveloppe, votre secrétaire la met dans une autre plus grande, le service du courrier du campus la glisse dans une enveloppe encore plus grande Etc... Voici une approche de la représentation des en-têtes inclus dans un message transitant dans un réseau TCP/IP: au départ on a un seul flot de données, par exemple un fichier que l'on essaye d'envoyer : TCP le découpe en morceaux, pour cela il doit connaître la taille des datagrammes que le réseau peut supporter, les TCPs de chaque extrémité négocient cette taille en choisissant la plus petite (si chaque réseau extrême supporte une taille différente): TCP ajoute un en-tête d'au moins 20 caractères au début de chaque datagramme. Les éléments les plus importants de cet en-tête sont le numéro de SPMlt;<port sourceSPMgt;> et de port SPMlt;<destinationSPMgt;> ainsi que le numéro d'ordre. Les numéros de ports sont utilisés pour repérer les différentes SPMlt;<conversationsSPMgt;>, supposez que trois personnes soient entrain de transférer des fichiers, votre TCP pourra allouer les ports 1000, 1001 et 1002 à chacun de ces transferts. Lorsque vous envoyez un datagramme ils deviennent les ports source puisque vous êtes à la source de ce datagramme, il est bien évident que le TCP de l'autre extrémité a alloué son propre numéro de port pour cette conversation et que votre TCP doit le connaître (Il l'obtient au moment de la connexion, comme nous allons le voir), pour le mettre dans le champ port destination. Chaque datagramme a un numéro d'ordre, il est utilisé par l'autre extrémité pour s'assurer qu'elle reçoit les datagrammes dans le bon ordre,et qu'il n'en manque pas. En fait TCP numérote les les octets, ainsi s'il y a 500 octets dans chaque datagramme, le premier aura le numéro 0, le second 500, le troisième 1000, le suivant 1500 etc ... Enfin je mentionnerai le checksum (somme de contrôle), c'est un nombre calculé en ajoutant tous les octets du datagramme, le résultat est mis dans l'en-tête, TCP de l'autre extrémité fait le même calcul, s'ils ne sont pas égaux quelquechose c'est mal passé dans le transport et le datagramme est rejeté. Si on représente l'en-tête TCP par SPMlt;<TSPMgt;>, voici ce que devient le flot de données : Vous noterez qu'il y a dans l'en-tête des éléments que nous n'avons pas décrits, ils concernent en général la gestion de la connexion. Pour s'assurer que le datagramme est bien arrivé il faut que le récepteur renvoie un SPMlt;<acquitementSPMgt;> sous la forme d'un datagramme contenant un numéro d'acquitement. Par exemple, si ce numéro est 1500 cela signifie que le récepteur a tout reçu jusqu'au 1500 octet. L'émetteur renvoie les données s'il ne reçoit pas d'acquitement dans un délai raisonnable. Notez qu'il n'y a pas d'accusé négatif (NAK), c'est une temporisation (Time-out) qui joue ce rôle. La fenêtre est utilisée pour contrôler la taille des données qui peut être envoyée à chaque instant. En effet il n'est pas efficace d'attendre un acquitement pour envoyer le datagramme suivant, mais d'un autre côté vous ne pouvez pas émettre en permanence car, dans ce cas, un ordinateur rapide saturerait une machine plus lente, c'est pourquoi chaque extrémité indique, dans le champ SPMlt;<fenêtreSPMgt;>, la quantité de données qu'elle peut absorber. Lorsqu'une machine est en réception l'espace restant dans sa fenêtre diminue, lorsqu'il devient nul l'émetteur doit s'arrêter, lorsque les données reçues sont traitées le récepteur augmente la taille de sa fenêtre pour indiquer qu'il est en mesure d'en recevoir d'autres. On utilise souvent le même datagramme pour acquiter et également autoriser l'envoi de nouvelles données (en augmentant la taille de la fenêtre). Le champ SPMlt;<Données urgentesSPMgt;> permet à une extrémité de forcer l'autre à traiter un octet particulier, cela permet de gérer les évènements asynchrones comme l'envoi d'un caractère de contrôle ou d'une commande qui interrompt les sorties. Les autres champs n'entrent pas dans le cadre de ce document.
[Precédent] [Sommaire] [Suivant] [Haut] |