Services offerts par la couche 4 : contrôle du transport Un message est identifié par sa source et sa destination ; comment distinguer plusieurs applications/flux sur une même machine? => la notion de port, voir plus tard (UDP, TCP) Gestion des (TCP) : pertes (=> retransmission) duplications (=> effacement des dupliqués) déséquencements (=> réordonnancement) ressources (vitesse du récepteur, bande passante disponible sur le réseau etc.) 1
Notion de port dans un transfert Il y a des machines (e.g. gtr-serv) qui sont à la fois serveurs SSH, WWW etc. Comment différencier ces services au sein d'une même machine? Sur une machine, l'application/flux destinataire d'un paquet est identifiée de manière unique par un numéro, appelé port (fichier /etc/services) serveur web/http/www : 80 serveur ssh : 22 serveur dns : 53 2
Utilisation du port Quand un navigateur demande la page de google, il envoie un paquet avec destination le couple (66.249.93.104, 80) de plus, avant d'envoyer ses paquets, le navigateur demande au SE un port local, pour que les messages de retour de google soient identifiés de manière unique sur sa machine si deux pages chargées en même temps, il y a deux flux, donc deux ports! => Les extrémités d'un paquet sur le réseau sont identifiées de manière unique avec : (adresse IP source, port source, adresse IP 3 destination, port destination)!
4, protocoles de transport, introduction : UDP, TCP UDP, User Datagram Protocol fournit un numéro de port dans son en-tête ne sait pas s'il y a eu des pertes, des paquets dupliqués etc. orienté paquet sans connexion TCP, Transmission Control Protocol fournit un numéro de port dans son en-tête gère les paquets perdus, dupliqués, désordonnés, voir plus tard orienté flux (ou binaire) avec connexion 4
UDP, fonctionnement Une application avec port PA sur A veut envoyer un fichier à une application avec port PB sur B Si le fichier est grand, l'application le découpe (de manière logique) en morceaux (égaux, pour des raisons de simplicité) elle doit faire attention à ce qu'aucun morceau ne dépasse la taille des paquets autorisée sur le médium, par ex. 1500 octets (en-tête IP compris) Elle envoie à la couche UDP du SE chaque morceau l'un après l'autre, qui à son tour l'envoie à la couche IP envoi = appel à une fonction fournie par le SE 5
UDP, utilisation Pour des services simples, e.g. : DNS, TFTP,... Récemment, pour des services où TCP est trop contraignant, e.g. : streaming vidéo, jeux en ligne, VoIP,... 6
TCP, fonctionnement sur la source La même application, envoi d'un fichier Elle envoie tout simplement le fichier à la couche TCP du SE (par un appel d'une fonction de TCP) La couche TCP le découpe en morceaux, appelés segments (=> orienté flux d'octets) Elle envoie, un par un, les morceaux à la couche IP etc., qui arrivent finalement sur le réseau Algorithme très complexe pour le calcul du temps d'envoi des segments (contrôle de congestion TCP, voir plus tard) 7
TCP, fonctionnement sur le réseau Source A veut envoyer des paquets à destin. B Chaque fois que A envoie un paquet à B, B répond à A avec un accusé de réception => A sait quels paquets ont été perdus, et les retransmet L'en-tête TCP contient la taille des buffers de la machine => A peut se rendre compte si B est surchargé par ses paquets (contrôle de flux) L'en-tête TCP contient un numéro de séquence => B peut réordonner les paquets s'ils sont arrivés en désordre => B peut se rendre compte des paquets dupliqués 8
TCP, contrôle de congestion, le problème A veut envoyer 1000 paquets, quand les envoyer? l'un après l'autre tout de suite : engorgement du réseau espacés de 1 ms : sous-utilisation du réseau, qui accepte par ex. 10 paquets / seconde De plus, la bande passante entre A et B change à chaque instant, e.g. : flux qui commencent ou qui se terminent flux qui augmentent le débit routeurs qui deviennent chargés 9
TCP, contrôle de congestion, notions Géré entièrement par la source ssthresh, la bp que la source croit disponible entre A et B cwnd, congestion window, est une sous-fenêtre du buffer de données elle permet de savoir quand envoyer des paquets À chaque accusé reçu à gauche, cwnd est déplacée (à droite) À chaque fois que cwnd permet, un nouveau paquet est envoyé 10
TCP, contrôle de congestion, fonctionnement (approximatif) de cwnd Au début, cwnd = 1 et ssthresh = au hasard Deux étapes : si cwnd < ssthresh : démarrage lent (slow start) : on incrémente cwnd pour chaque accusé reçu sinon : évitement de congestion (congestion avoidance) : on incrémente cwnd à chaque cwnd accusés reçus Si un paquet n'arrive pas après un certain temps, on le considère perdu et : on le retransmet cwnd = 1 (car si perte, alors congestion du réseau) on revient en slow start 11
Notion de pile TCP/IP (TCP/IP stack) s Internet application Machine A Données à envoyer Machine B Données reçues s Internet application transport transport réseau réseau liaison + physique Réseau liaison + physique Pile = LIFO 12