La couche Transport
Transcription
La couche Transport
Master Spé MIAGE M1 UE Réseaux La couche Transport Emmanuel Hyon E. Hyon 2 2007-2008 Services et protocoles de transport nd -e network data link physical sp an tr network data link physical t or nd network data link physical network data link physical e al application transport network data link physical ic log Fournit une communication logique entre processus tournant sur des hosts ≠ Les protocoles de transport tournent dans les hôtes Services de couche transport vs réseau : Couche réseau : transfert de données entre hôtes Couche transport : transfert de données entre processus fondé sur les services (de couche) réseau network data link physical application transport network data link physical E. Hyon 2007-2008 Rôle et défis du Transport 3 Transformer les pptés pas tjs désirables du réseau en un service de haut niveau souhaité par les appli Prendre en compte le service fourni par la couche réseau Pertes de paquets Déséquencements Duplications Erreurs MTU Temps de traversée imprévisibles Prendre en compte les besoins des applications Garantie de remise des msg Séquencement Absence de duplications Absence de messages erronés Messages de lg quelconque Synchronisation entre l'émetteur et le récepteur Contrôle de flux par le récepteur sur l'émetteur Support de +ieurs appli sur le même hôte E. Hyon 4 2007-2008 Protocoles de transport Internet network data link physical t or Temps réel Garantie de bande passante Multicast fiable sp an Livraison non fiable (“besteffort”), non séquencée, point à point ou multicast (UDP) Services non disponibles : network data link physical tr nd -e nd Contrôle de congestion Contrôle de flux Mode connecté network data link physical e al network data link physical ic log Services de transport : Livraison fiable, séquencée et point à point (TCP) application transport network data link physical network data link physical application transport network data link physical E. Hyon 5 2007-2008 Multiplexage/démultiplexage un exemple introductif Courrier interne dans une entreprise. Employé d'un service: remise du courrier dans une case courrier Une personne prend courrier amène au service courrier général Le service courrier trie les courriers par service L'employé chargé de la remise prend les courriers destiné à son service Les remets à leur destinataire. E. Hyon 2007-2008 Multiplexage démultiplexage Le but 6 Collecte des données envoyées par les différents processus et encapsulation dans des segments envoyés au medium. +sieurs applis tournent et emettent des données Il faut pouvoir les envoyer par le même canal service de multiplexage Livraison des segments reçus aux bons processus +sieurs applis tournent simultanément sur un même host Il faut pouvoir les identifier de façon non ambiguë ⇒ service de demultiplexage E. Hyon 7 2007-2008 Multiplexage/démultiplexage Rappel : segment - unité de données échangées entre entités de couche transport = TPDU: Transport Protocol Data Unit P3 APDU (message) Entête du segment segment M P1 M Ht M H n segment récepteur application transport network M application transport network P4 M P2 application transport network E. Hyon 8 2007-2008 Implémentation des ports Port En = référence abstraite L'implémentation diffère d'un OS à l'autre ! général, un port = une file de messages processus d'appli processus d'appli processus d'appli ports files UDP démuX arrivée de segments Insertion en queue (par UDP) Si file pleine, rejet msg Retrait en tête (par le processus) Si file vide, le processus se bloque jusqu'à ce qu'un msg soit disponible E. Hyon 9 2007-2008 Numéros de port 3 catégories Ports well-known : de 0 à 1023 Alloués par l'IANA Sur la plupart des systèmes, ne peuvent être utilisés que par des processus système (ou root) ou des programmes exécutés par des utilisateurs privilégiés Ports registered : de 1024 à 49 151 Listés par l'IANA Sur la plupart des systèmes, peuvent être utilisés par des processus utilisateur ordinaires ou des programmes exécutés par des utilisateurs ordinaires Ports dynamic/private : de 49 152 à 65 535 Alloués dynamiquement E. Hyon 2007-2008 Les ports quelques remarques segment donne l'information sur le port local, port distant (ainsi que les adresses IP). Fermeture des ports 10 Chaque Au niveau transport : on ne donne pas le droit à des sockets de se connecter (pas de socket d'accueil en TCP par exemple). Mais les paquets IP peuvent très bien arriver au terminal Fermeture selon le port distant Toutes les sockets dont le port distant est x ne peuvent être connectées Fermeture selon port local Aucune socket dont le port local est y ne sera acceptée E. Hyon 2007-2008 Un Serveur TCP et UDP serveur TCP est GÉNÉRALEMENT concurrent Arrivée d’une requête => le serveur l'accepte et crée un nouveau processus pour gérer le nouveau client (par ex, il fait un fork), cf le cours CAR sur le client/serveur ou le cours système. Identité du nouveau processus ? Son n° de port reste le même que celui du processus d'accueil (i.e. le père) @IP client, n° port client, n° port serveur Un 11 serveur UDP est généralement itératif les segments sont traités les uns à la suite des autres E. Hyon Multiplexage/démultiplexage UDP 2007-2008 multiplexage/démultiplexage : Basé sur les n° de ports source / destination pour une @IP N° de ports source & dest dans chaque segment N° de ports “well-known” pour des applications spécifiques Clé de démultiplexage de UDP = (#port) une fois sur le host 12 32 bits # port source # port dest Autres champs d’entête APDU (message) Format de segment TCP/UDP E. Hyon 13 2007-2008 Le démultiplexage TCP TCP utilise le triplet (n° de port local, @IP distante, n° de port distant) pour démultiplexer (identifier le processus destinataire du segment) Rappel : UDP utilise le n° de port local (destinataire) pour identifier un processus POURQUOI ? E. Hyon 14 Exercice démultiplexage 2007-2008 Pour UDP et TCP un envoi sur un même serveur B de : Plusieurs sockets provenant du même terminal A: • ports locaux (sur A) x et y et distant 80 et 110 Plusieurs sockets provenant de C: Client Web • port distant 80 et locaux x et y host C Source IP: C Dest IP: B source port: y dest. port: 80 Source IP: A Dest IP: B source port: x dest. port: 110 Client Web host A Source IP: A Dest IP: B source port: x dest. port: 80 Source IP: C Dest IP: B source port: x dest. port: 80 Serveur Web B Application Web E. Hyon 15 2007-2008 Le multiplexage TCP Comment identifier chaque processus destinataire ? Le port local sur le serveur distingue ? Regarder les sockets provenants de A Regarder les deux sockets provenants de B Regarder les sockets de même port provenant de A et B Le port distant sur le serveur distingue ? Les adresses IP sources suffisent-elles ? Sur votre terminal tapez la commande netstat tau E. Hyon 16 2007-2008 UDP : User Datagram Protocol [RFC 768] Service “best effort” : les segments UDP peuvent être perdus ou déséquencés Pas de contrôle de congestion Service en mode non connecté Pas d’établissement de connexion entre host émetteur et host récepteur => simplicité Chaque segment UDP est acheminé indépendamment des autres (pour la même communication) => déséquencement E. Hyon 17 2007-2008 Souvent utilisé pour les appli multimédia (flux) Lg en octets, Tolérantes aux pannes Sensibles au débit Autres usages d’UDP Compléments sur UDP du segment UDP entête incluse # port source # port dest length checksum DNS SNMP Transfert fiable avec UDP : ajouter la fiabilité dans la couche application 32 bits APDU (message) Recouvrement d’erreurs spécifique pour l’application Format du segment UDP E. Hyon 18 2007-2008 Le checksum UDP (facultatif en IPv4) But : détecter des “erreurs” (bits erronés) dans le segment émis Portée Le segment UDP L'en-tête UDP Le champ de données UDP Un pseudo-header (qui inclut des champs du datagramme) Champ IP protocol (8 bits cadrés à droite sur 16 bits) Champ IP @source (32 bits) Champ IP @dest. (32 bits) Champ UDP length (16 bits) UDP est indissociable de IP ! ! E. Hyon 19 2007-2008 Calcul du checksum UDP Émetteur : Le champ checksum est initialement mis à 0 La suite à protéger est considérée comme une suite de mots de 16 bits Calcul du Checksum Addition des mots de 16 bits (modulo 65 535) puis Complément à 1 (inverse bit à bit) du résultat de l’addition Insertion du checksum dans l’entête Récepteur : Calcule le checksum du segment reçu Vérifie si le checksum calculé est 11 11... NON - erreur détectée. Le segment est abandonné OUI - pas d’erreur détectée Cas particulier : Le checksum dans le segment reçu est à 0 = il n’a pas été calculé E. Hyon 20 2007-2008 Exercice : Calcul de checksum On suppose que les données à envoyer représentent x mots de 16 bits quel est le checksum ? Le checksum est le complément à 1 de la somme des x mots. Exemple : Les données sont décomposées en 3 mots de 16 bits 0110011001100110 0101010101010101 0000111100001111 Le checksum donné sur le segment UDP est 1. 0010010100110101 2. 0011010100110101 Dans quel(s) cas le segment est corrompu ? E. Hyon 21 2007-2008 Segmentation En En théorie Les segments UDP peuvent être segmentés par IP pratique La plupart des applications utilisant UDP limitent leurs segments à 512 octets Pas de segmentation Pas de risque de message incomplet E. Hyon 2007-2008 22 TCP: Transmission Control Protocol RFCs: 793, 1122, 1323, 2018, 2581 Point à point Un émetteur, un récepteur Fiable, flux d’octets ordonné Full duplex Pas de “délimiteurs de message” Les contrôles de congestion et de flux TCP fixent des tailles de fenêtres Mode pipeline Flux de données bidirectional sur la même connexion Mode connecté Établissement de connexion (handshaking) Contrôle de flux L’émetteur n’inonde pas le récepteur avec ses envois E. Hyon 23 2007-2008 TCP: orienté flux (Byte-oriented) TCP Le processus émetteur "écrit" des octets sur la connexion TCP Le processus récepteur "lit" des octets sur la connexion TCP TCP est orienté flux d'octets ne transmet pas d'octets individuels En émission TCP bufferise les octets jusqu'à en avoir un nombre raisonnable TCP fabrique un segment et l'envoie En réception TCP vide le contenu du segment reçu sans un buffer de réception Le processus destinataire vient y lire les octets à sa guise E. Hyon 24 2007-2008 TCP: orienté flux (Byte-oriented) processus émetteur processus récepteur écrit des octets TCP buffer d'émission lit des octets TCP buffer de réception transmet des segments E. Hyon 25 2007-2008 Construction d'un segment (envoi concret: des segments) Quand est-ce que TCP décide d'envoyer un segment ? Taille du champ de données d’un segment = MSS (MaximumSize Segment) octets Le processus lui demande explicitement Dépend de l’implantation de TCP (1500, 536, 512 oct) Autre contrainte liée à la taille du champ de données d’une trame (MTU) Fonction push Le temporisateur expire Pour éviter d'attendre trop longtemps MSS octets E. Hyon 26 2007-2008 Entête Champ de données (message) TCP Entête IP Champ de données (segment TCP) Entête Champ de données (datagramme IP) Segment TCP (couche 4) Datagramme IP (couche 3) Trame (couche 2) MTU MTU – en-tête IP – en-tête TCP E. Hyon 27 2007-2008 Le segment TCP header data 0 4 8 16 19 24 31 destination port source port sequence number acknowledgment number data offset unused UA P RS F RCSSY I G K H TNN window urgent pointer checksum options padding data E. Hyon 28 2007-2008 Les champs de l'en-tête TCP source port : identifie le processus source sur la machine source destination port : identifie le processus destinataire sur la machine destinataire checksum : obligatoire, calculé sur la totalité du segment et sur le pseudo en-tête data offset : lg de l'en-tête en mots de 32 bits unsused : 6 bits à 0 Fiabilité Contrôle de flux options : MSS, … padding : alignement de l'entête sur 32 bits rcvWindow : # d'octets de données que le destinataire du segment est prêt à recevoir Flags sequence n° : N° du 1er octet de données du segment (sauf si SYN=1 : ISN) acknowledgment n° : acquitte tous les octets de données de N° strictement inférieur RST, SYN et FIN : pour l’établissement et la fermeture de connexion ACK : 1 si le champ acknowledment number est significatif PSH : 1 si fin d'un msg logique (push) URG : 1 si données urgentes urgent pointer : pointe sur la fin (comprise) des données urgentes E. Hyon 29 2007-2008 TCP : fiabilité du transfert de données Fiabiliser le transfert de données sur un « canal » avec erreur et perte processus processus données TCP : protocole de transfert fiable de données segment données TCP : protocole de transfert fiable de données segment Canal non fiable TCP : Contrôle d'erreur et Contrôle de flux E. Hyon Fiabilité 2007-2008 Mécanismes Principe de base: Dire quels sont les paquets reçus et quels sont les paquets non reçus. On identifie ceux qui ne sont pas reçus et on les réemet. Exercice Donner un exemple de protocole qui permette de mettre en place un contrôle des paquets reçu afin de n'en perdre aucun. On supposera tout d'abord qu'il n'y a pas de pertes des paquets de contrôle. Application dans un cadre plus général du contrôle d’erreurs 30 E. Hyon 31 2007-2008 Contrôle d'erreur Repose sur Le champ Checksum : idem à UDP Permet de savoir si un bit est erroné Permet de détecter la perte de segment (si déséquencement) Le champ SequenceNumber Des acquittements Permet de prévenir l’autre extrémité des pertes (sur déséquencement) Des retransmissions Permet de remédier aux pertes de segments et aux réceptions de segments erronés Un temporisateur de retransmission E. Hyon 2007-2008 Sequence number 32 (identifications des octets envoyés) TCP : transport de flux d’octets Numérotation des octets : Sequence number Représente le numéro du 1er octet dans le segment Exercice : donner les n° de séq des deux premiers segments, du 5ème et du dernier pour Un fichier de 500 000 octets émis par A MSS = 1000 octets La numérotation des octets commence à 0 Nb segments = 500, dans 1 segment : 1000 octets 1er segment : de 0 à 999 - 2ème segment : de 1000 à 1999 Le 5ème segment : de 4000 à 4999 Le dernier segment : de 499 000 à 499 999 E. Hyon 2007-2008 Sequence number (suite) 33 Et si le segment a un champ de données vide ? 1er échange : segment d’établissement de connexion SYN = 1 et sequence # = ISN Fin d’échange : segment de fin de connexion Segment d’accusé de réception Sequence # = sequence # +1 E. Hyon 34 2007-2008 ACK number Numéro du prochain octet attendu A B Seq # = 19 99, Ack # = 10 000 2 = # k c A Seq # = 10, Acquitte A a reçu de B les octets de 0 à 9. Le prochain octet attendu par A est 10 B a reçu de A les octets de 0 à 1999. Le prochain octet attendu par B est 2000 (accuse réception) de tous les octets reçus jusqu’à ACK # - 1 (strictement inférieur au ACK #) E. Hyon 35 2007-2008 Exercice Exemple simple d’une application : echo A A initie le dialogue : il saisit B lui renvoie la lettre saisie Représenter B la lettre « C » Le séquence #, le ACK # et le champ data de chaque segment échangé entre A et B avec les hypothèses suivantes : La connexion est déjà établie La numérotation de A commence à 42, celle de B à 79 La lettre « c » = 1 octet E. Hyon 36 2007-2008 Corrigé A B Seq # = 42 , Ack # = 7 9, data=‘c’ ‘c’ = a t a d , 3 4 # = k c A , 9 7 = Seq # Seq # = 43, Ack # = 80 e m ê m e l iser l i t U : es k d c r a e b y y o g Pig env r u o p es t segmen et acquitter d données ées reçues donn E. Hyon 37 2007-2008 La génération des ACK [RFC 1122, RFC 2581] Event Action Arrivée séquencée d’un segment Pas de perte, Tous les octets précédents sont déjà acquittés ACK retardé. Attente jusqu’à 500ms d’un prochain segment à émettre. S’il n’y en a pas, envoi du ACK Arrivée séquencée d’un segment Pas de perte, un ACK en attente d’envoi Émission immédiate d’un ACK cumulatif (un seul ACK accuse réception de +sieurs segments) Arrivée déséquencée d’un segment seq. # > à seq # attendu Perte détectée Envoyer un ACK dupliqué, indiquant le seq. # du prochain octet attendu E. Hyon 2007-2008 38 TCP: scénarios de retransmission Host A Host A Host B =100 K C A X perte Seq=9 2, 8 b ytes d ata =100 K C A time Perte d’acquittement => réemission de A B jette le segment retransmis (il l’a déjà) Seq=100 timeout Seq=92 timeout timeout Seq=9 2, 8 b ytes d ata Host B Seq=9 2, 8 b ytes d ata Seq= 100, 2 0 byte s data 0 10 = K AC 0 =12 K AC Seq=9 2, 8 b ytes d ata 0 =12 K AC time Expiration de temporisateur avant arrivée du ACK => réémission (seul le segment concerné est réémis. Le 2ème segment n’a pas besoin d’être réémis) E. Hyon 39 2007-2008 TCP: scénarios de retransmission Host A Host B Seq=92 timeout Seq=9 2, 8 b ytes d ata 0 10 Seq= = K 100, 2 0 byte AC s data X perte 0 =12 K AC time Perte d’acquittement mais l’ACK cumulatif évite la retransmission du 1er segment E. Hyon 40 2007-2008 Dimensionnement du temporisateur Q: Quelle doit être la valeur du temporisateur ? Suffisament grand pour qu’un aller-retour se produise (émission segment retour ACK) => > RTT Si T trop court : expiration prématurée Attention : le RTT varie Q: Comment estimer le RTT? SampleRTT: temps écoulé entre transmission segment jusqu’à réception ACK Pb : SampleRTT varie, il diffère d’un segment à l’autre Retransmissions inutiles Si T trop long: manque de réactivité à la perte de segment Temps de traversée du réseau dépend du trafic Travailler avec un échantillon de valeurs E. Hyon 2007-2008 Valeur du temporisateur 41 La valeur du temporisateur est une estimation du RTT à laquelle on ajoute une marge de sécurité Plus la variation de EstimatedRTT est grande, plus la marge de sécurité doit l’être également La valeur vaut donc Timeout = EstimatedRTT + 4*Deviation Où Deviation estime la variation de SampleRTT par rapport à EstimatedRTT Et EstimatedRTT : moyenne pondérée entre l'estimation précédente et le dernier échantillon mesuré du RTT L’influence d’un échantillon donné décroit exponentiellement vite EstimatedRTT = α*EstimatedRTT + (1–α)*SampleRTT E. Hyon 42 2007-2008 Dimensionnement du temporisateur Problème un ACK n'acquitte pas une transmission, mais une réception tran tran sm. sm. retr retr ansm ansm . . ACK ACK SampleRTT SampleRTT trop grand trop petit Algorithme de Karn-Partridge ne mesurer SampleRTT que pour les segments envoyés une seule fois calcul de TimeOut à chaque retransmission, doubler la valeur de TimeOut, jusqu'à ce que la transmission réussisse pour les segments suivants, conserver la valeur du TimeOut, jusqu'à ce qu'un segment soit acquitté du 1er coup recalculer TimeOut à partir de EstimatedRTT E. Hyon 2007-2008 43 Contrôle d’erreur : le pipelining Mécanisme d’anticipation des émissions sans acquittement : protocole Go-Back-N (GBN) base nextseqnum Taille de fenêtre N (=14) Déjà acquittés Émis, non acquittés Taille de N ? cf. le contrôle de flux N° utilisables, encore non émis [nextseqnum, base+N-1] N° non utilisables ≥ base+N E. Hyon 44 2007-2008 Contrôle de flux Contrôle de flux L’émetteur n’inonde pas le récepteur en émettant trop, et trop vite RcvBuffer = taille des buffers de réception RcvWindow = espace libre dans les buffers Buffers de réception récepteur: informe explicitement l’émetteur de l’espace disponible dans les buffers (=> nb d’octets qu’il est prêt à recevoir) champ rcvWindow dans le segment TCP émetteur: conserve un volume de données transmises non acquittées inférieur au RcvWindow le plus récemment reçu le b a i r a : v E ! w o d Win AMIQU la même RcvD YN ours de P c ion TC u a e Vari connex E. Hyon 45 2007-2008 Questions Un host B alloue une taille RcvBuffer de buffer en réception pour une connexion TCP avec un host A LastByteRead = n° du dernier octet lu par l’application B dans le buffer LastByteRcvd = n° du dernier octet arrivé par le réseau et placé dans le buffer Quelle est la relation entre ces trois variables ? Soit RcvWindow la taille de la fenêtre (espace disponible dans le buffer de taille RcvBuffer). Exprimer RcvWindow en fonction des trois autres variables E. Hyon 46 2007-2008 Réponses Relation entre RcvBuffer, LastByteRead et LastByteRcvd RcvBuffer LastByteRead … Valeur de RcvWindow LastByteRcvd RcvBuffer LastByteRcvd LastByteRead RcvWindow (Rq : à l’initialisation, RcvWindow = RcvBuffer) E. Hyon 47 2007-2008 Réponses Relation entre RcvBuffer, LastByteRead et LastByteRcvd LastByteRcvd - LastByteRead ≤ RcvBuffer LastByteRead Ex : RcvBuffer = 1000 LastByteRead = 1000 LastByteRcvd = 2000 RcvBuffer … Valeur de RcvWindow LastByteRcvd RcvWindow = RcvBuffer - (LastByteRcvd - LastByteRead) RcvBuffer LastByteRcvd RcvWindow LastByteRead (Rq : à l’initialisation, RcvWindow = RcvBuffer) E. Hyon 48 2007-2008 Côté émetteur L’host émetteur stocke Les données envoyées et en attente d'acquittement Les données passées par le processus émetteur mais non encore émises processus émetteur TCP LastByteWritten LastByteAcked LastByteSent E. Hyon 49 2007-2008 Questions Caractériser le volume de données envoyées non acquittées Caractériser le volume de données passées par le processus et non envoyées Quelle est la relation que A doit vérifier avant d’émettre pour assurer le contrôle de flux ? Soit SentBuffer : taille du buffer émission. Quelle est la relation que A doit vérifier avant d’accepter une écriture de y octets par un processus ? LastByteSent - LastByteAcked LastByteWritten - LastByteSent LastByteSent - LastByteAcked ≤ RcvWindow (LastByteWritten – LastByteAcked) + y ≤ SentBuffer E. Hyon 50 2007-2008 Réouverture de fenêtre Et si la fenêtre est fermée ? RcvWindow=0 => plus de place dispo chez le récepteur L’émetteur fenêtre Et Quand le processus récepteur aura lu des données Déblocage sur réception d’un seg avec RcvWindow > 0 si le récepteur n’a rien à émettre ? Dans TCP, un ACK ne peut être envoyé que sur réception de données (approche smart sender/dumb receiver) Solution est bloqué en attente d’ouverture de Lorsque l'émetteur reçoit une RcvWindow à 0, il envoie périodiquement un segment d’1 octet de données pour provoquer l'envoi d'un ACK E. Hyon 51 2007-2008 Le contrôle de congestion Congestion Informellement : “trop de sources envoient trop de données, trop rapidement, plus que ce que le réseau peut absorber” Différent du contrôle de flux ! Manifestations Un Perte de segments (overflow des buffers aux routeurs) Long retards (temps d’attente élevés dans les buffers des routeurs) des 10 problèmes majeurs en réseau ! E. Hyon 52 2007-2008 Approches pour le contrôle de congestion Deux grandes approches : Contrôle de congestion de bout en bout : Contrôle de congestion assisté réseau : Pas d’informations explicites de la part du réseau La congestion est supposée par le système terminal à partir de l’observation de pertes et de retards Approche mise en œuvre dans TCP Les routeurs fournissent des informations aux systèmes Un bit indicateur de congestion (SNA, DECbit, ATM, une extension deTCP/IP) E. Hyon 2007-2008 TCP : Contrôle de Congestion Contrôle Le 53 de bout en bout IP ne fournit aucune information sur l’état du réseau taux de transmission des segments est limité par la taille de la fenêtre de contrôle de flux w segments, chacun de MSS octets, envoyés chaque RTT sec throughput = Nouvelle w * MSS Bytes/sec RTT donnée : la fenêtre de congestion Congwin Congwin E. Hyon 54 2007-2008 RcvWindow vs CongWin AvecTCP gestion de deux fenêtres Une fenêtre pour le contrôle de flux La taille de la fenêtre a un impact sur le nombre de segments envoyés par anticipation (sans ACK) LastByteSent - LastByteAcked ≤ RcvWindow Une fenêtre pour le contrôle de congestion Pour prendre en compte ces deux fenêtres : LastByteSent - LastByteAcked ≤ min(RcvWindow,CongWin) E. Hyon 2007-2008 TCP : Contrôle de Congestion 55 Calcul de la fenêtre de congestion “idéale » “recherche” de la bande passante utilisable Idéalement : transmettre aussi vite que possible sans perte (Congwin aussi grand que possible) Initialiser Congwin à 1 MSS Augmenter Congwin jusqu’à avoir une perte (congestion) Perte : réinitialiser Congwin, puis recommencer à augmenter Deux “phases” Le slow start L’évitement de congestion Variables importantes Congwin threshold: définit le seuil entre les deux phases (quand finit le slow start et commence l’évitement de congestion) E. Hyon 56 2007-2008 Phase 1 : Le Slowstart Algorithme Slowstart Augmentation exponentielle (par RTT) (1, puis 2, puis 4, puis 8, …) Détection de perte : expiration du temporisateur (algo TCP Tahoe) et/ou trois ACKs dupliqués (algo TCP Reno) RTT Init.: Congwin = 1 for (each segment ACKed) augmenter Congwin until (perte OR CongWin > threshold) Host A Host B un segme nt deux segm ents quatre se gments time E. Hyon 2007-2008 Phase 2 : L’évitement de Congestion Évitement de Congestion /* slowstart terminé */ /* Congwin > threshold */ Until (perte) { chaque w segments ACKed: Congwin++ } threshold = Congwin/2 Congwin = 1 1 Recommencer le slowstart Variante si l’algo Reno TCP est mis en œuvre : il lance le slowstart (fast recovery) après trois ACKs dupliqués 57 E. Hyon 58 2007-2008 TCP : protocole en mode connecté Rappel: émetteur et récepteur TCP établissent une connexion avant d’échanger des segments de données Initialisation de buffers et de variables TCP Buffers Numéros de séquence Variables de contrôle de flux (ex RcvWindow), de contrôle de congestion client : initiateur de connexion Socket clientSocket = new Socket("hostname","port number"); serveur : contacté par le client Socket connectionSocket = welcomeSocket.accept(); E. Hyon 59 2007-2008 Établissement : three way handshake Étape 1: le système client envoie le segment de contrôle SYN au serveur (bit SYN = 1) Spécifie l’ISN Étape 2: le système serveur répond avec un segment de contrôle SYNACK Bit SYN = 1 et bit ACK = 1 Champ ACK# = client_isn +1 Champ SEQ# = son ISN Initialise buffers et variables Étape 3: le système client initialise ses buffers/variables et acquitte le segment du serveur SYN = 0 et champ ACK# = server_isn +1 E. Hyon 60 2007-2008 Établissement : les 3 segments échangés Le client SYN=1, Le serveur SeqNum =client_ 1 + n s i _ t n i snum=clie 1 = K C A N k c A , n SYN=1, s i r_ e v r e s = SeqNum SYN=0, s ACK=1, A eqNum=client_i sn+1, ckNum= server_ isn+1 Rq : bit ACK = 1 quand le champ ACK# est significatif E. Hyon 61 2007-2008 Libération de connexion Fermer une connexion : Les 2 sens de transmission sont fermés séparément. Chacune des 2 extrémités peut avoir l’initiative de fermer. client close Étape 2: le système serveur reçoit le FIN, répond par ACK. Il ferme la connexion, et envoie FIN. FIN timed wait segment FIN au serveur (FIN=1) FIN ACK Ex : Le client ferme la socket: clientSocket.close(); Étape 1: le système client envoie le server closed ACK close E. Hyon 62 2007-2008 Libération de connexion (suite) Étape 3: le client reçoit FIN et client répond par ACK. Il entre en “timed wait” : femera la connexion 30 sec après réception du FIN closing Étape 4: le serveur reçoit ACK. FIN ACK La connexion est fermée. closing FIN timed wait Note: possibilité de gérer des FINs simultanés. server closed ACK closed E. Hyon 2007-2008 Le transport sécurisé 63 (Secure Socket Layer) SSH Cryptage des données par SSL Aucun cryptage des données par l'appli. Mais par contre les protocoles doivent prendre en compte que les données vont être transportées cryptées. Ex: https, pops, imaps. Cryptage par la couche couche application. Transport en utilisant TCP non sécurisé. Cryptage des données par l'appli Transport non crypté transport (ou une couche intermédiaire). E. Hyon 2007-2008 Le transport sécurisé II (Secure Socket Layer) Fonctions assurées Authentification de serveur (contrairement à ssh ou pgp). Authentification de clients (optionnelles) Codage (cryptage) des sessions. Au moyen d'un centre de certification (CA) accréditent signent numériquement des certificats hébergent les clefs publiques associées aux certificats présentation « similaire » ssh clef ass puis clef sym 64 E. Hyon 2007-2008 Soit Auto-évaluation (vrai-faux) 65 un serveur Web HTTP à connexions persistentes. Le serveur gère un processus par client connecté au serveur. Alors chacun de ces processus aura un numéro de port serveur distinct L’host A envoie à l’host B un grand fichier sur une connexion TCP. B n’a pas de données à envoyer à A. B ne pourra pas envoyer d’acquittement à A car il ne peut pas faire de piggyback La taille de RcvWindow ne change jamais pendant une connexion Le segment TCP a un champ dans son entête pour RcvWindow L’host A envoie à B des données et B envoie à A des données (les 2 sur TCP). Deux connexions TCP séparées sont nécessaires. E. Hyon 66 2007-2008 Auto-évaluation (vrai-faux) L’host A envoie à l’host B un grand fichier sur une connexion TCP. Si le numéro de séquence pour un segment de cette connexion est m, alors le numéro de séquence du segment suivant sera m+1 Soit une connexion TCP avec le dernier SampleRTT égal à 1 sec. Alors Timeout pour la connexion sera nécessairement initialisé à une valeur >= 1 sec L’host A envoie à l’host B un segment avec un numéro de séquence égal à 38 et 4 octets de données. Alors dans ce segment, le numéro d’ACK sera forcément 42 Le MSS est la taille maximum d’un segment TCP, entête incluse