La couche transport.

Slides:



Advertisements
Présentations similaires
Réseaux locaux industriels Le BUS CAN
Advertisements

Les protocoles de l'architecture
Le Protocole TCP Chapitre 6.
RSX101 Réseaux et Télécommunications
La Couche Liaison Modèle OSI : couche 2.
La Couche Réseau.
Couche liaison de données
Module Architectures et Administration des réseaux
GEF 435 Principes des systèmes dexploitation Communication Interprocessus (CIP) III (Tanenbaum 2.3)
Protocole PPP* *Point-to-Point Protocol.
- Couche 4 - Couche transport. Sommaire 1) Caractéristiques de la couche transport 2) Les protocoles TCP & UDP 3) Méthode de connexion TCP.
L’acquittement (acknowledgment)
DUDIN Aymeric MARINO Andrès
IPv6 et la Mobilité DESS Réseaux 1-INTRODUCTION
Architecture de réseaux
FLSI602 Génie Informatique et Réseaux
UDP – User Datagram Protocol
La Couche Transport.
Liaison de Données M1/M2 ISV M2 IPS 2006/ Neilze Dorta
La voix IP : Mr.FERGOUGUI Boudouch Ali kmichou Ansar Atrassi Najoua
Le modèle O.S.I..
Transport Control Protocol
ADR Active and Dynamic Routing. Plan Introduction au routage Les réseaux actifs Les agents Mise à jour des matrices de routage Architecture du routage.
Labview Programmation réseau Communication par sockets
Ingénierie des réseaux - Chapitre 3: La couche transport 2 Master 1 SIGLIS Contrôler le débit démission La couche application passe un bloc de données.
TRANSMISSION DES DONNEES.
À l’aide du sniffer Etherpeek
Les Réseaux Informatiques Le Modèle TCP/IP Clients & Serveurs Le protocole FTP Boukli HACENE Sofiane.
Le Modele OSI.
MIDI Sans Frontières Analyse des problèmes relatifs à la communication musicale sur IP Mémoire présenté en vue de lobtention du grade de Licencié en informatique.
VISI - mars 2001, Caen Mécanismes de régulation de débit dune source vidéo pour transmission sur réseaux IP Jérôme VIERON.
TCP – Transmission Control Protocol
Références Computer Networks Andrew S. Tanenbaum Prentice Hall Internetworking Technologies Handbook c/cisintwk/ito_doc/index.htm.
Développement d’application client/serveur
La Couche Liaison Modèle OSI : couche 2.
Cours 5 Le modèle de référence.
Cours n° 2 Liaison de données et trames
User Datagram Protocol
Couche Transport (4) Routeur Messages entre A et B
OSI et TCP/IP CNAM
(Nom du fichier) - D1 - 22/09/2000 Le présent document contient des informations qui sont la propriété de France Télécom. L'acceptation de ce document.
Advisor Advanced IP Présentation Télémaintenance Télésurveillance.
Sif Cours 9 n 7. Communication série u Concepts généraux u Programmation des ports séries n Le matériel u Chapitre 10 CSA u Article dans MSDN: F.
Les Réseaux Informatiques Clients & Serveurs Le protocole FTP Laurent JEANPIERRE DEUST AMMILoR.
Master 1 SIGLIS Ingénierie des réseaux Stéphane Tallard Chapitre 4 – Couche réseau Master 1 SIGLIS1 Ingénierie des réseaux - Chapitre 4 La couche réseau.
1. Introduction Le traitement informatisé de données requiert un dialogue, une communication entre l’homme et la machine, et parfois, entre plusieurs.
http 1.1.  connexion persistante Browser Mozilla Firefox Adresse ip.
Les Réseaux Informatiques
Commutation de circuits
Couche transport du modèle OSI
Réseaux Informatiques
03/05/2004Diffusion vidéo sur l'Internet - Timothy BURK ENS de Lyon 1 Techniques de diffusion vidéo sur l'Internet Streaming avec RTP/RTSP Timothy BURK.
UE3-1 RESEAU Introduction
Ingénierie des réseaux
Les protocoles de niveau message
Chapitre 2 la couche liaison de données
PARTIE II Chapitre I La Liaison de Données.
Les fonctionnalités de base des réseaux
Couche réseau du modèle OSI
Architecture Client/Serveur
Environnement, santé et sécurité « Gestion du procédé d'examen du registre des incidents et des accidents de l'outil Business Workplace »
Description d’une liaison série
GESTION DU BUS Hugo Descoubes - Octobre 2012 Universal Serial Bus.
Synthèse: une journée dans la vie d'une requête Web 5: DataLink Layer5-1.
Chap3: Protocoles de routage
Gestion de la qualité de service (QoS)
Chapitre 12 Surveillance des ressources et des performances Module S41.
Département Informatique Les Réseaux Informatiques Couche Transport Protocoles UDP & TCP Laurent JEANPIERRE.
Le modèle TCP/IP Présentation Couche Interface-Réseau Couche Réseau
Couche Transport Protocoles TCP et UDP
Transcription de la présentation:

La couche transport

La couche Transport Notions de base Création d'une couche de transport fiable transmission fiable des données établissement de la connexion libération de la connexion UDP : un protocole de transport sans connexion TCP : un protocole de transport orienté connexion fiable

La couche Transport objectifs Les services de la couche Transport Segments Transport Network Network Network Datalink Datalink Datalink Physical Physical Physical objectifs Améliore le service fourni par la couche réseau pour lui permettre d'être utilisable par les applications fiabilité multiplexge Les services de la couche Transport service sans connexion non fiable service orienté connexion Fiable

La couche Transport Network Packets Network Packets Network Datalink Datalink Datalink Physical Physical Physical Service de couche réseau (Internet) service sans connexion non fiable Les paquets peuvent être perdus Erreurs de transmission paquets n'arrivent pas en ordre Paquet peut être dupliqué La taille des paquets est limitée (environ 64 Ko)

La couche Transport La couche Transport doit résoudre plusieurs problèmes. La couche application doit permettre aux applications d’échanger les informations. Une méthode pour identifier les applications est nécessaire. Un service de la couche transport doit être utilisable par les applications. Détection des erreurs de transmission correction des erreurs de transmission Résoudre les problèmes des pertes de paquets et les paquets dupliqués.

La couche Transport(2) Organisation interne La couche transport utilise les services fournis par la couche réseau. Deux entités de la couche transport échangent les segments Application Application ADU Segment Transport entity Transport layer Transport entity Packet Network Network

La couche Transport Notions de base Création d'une couche de transport fiable transmission fiable des données établissement de la connexion libération de la connexion UDP : un protocole de transport sans connexion TCP : un protocole de transport orienté connexion fiable

Les protocoles de la couche transport Comment peut-on assurer un service fiable dans la couche transport Hypothèses Les applications envoient des petits SDUs La couche réseau fournit un service parfait Il n’y a pas des erreurs de transmission dans les paquets Il n’y a pas de perte de paquets Les paquets arrivent pas en ordre Il n’y a pas de paquets dupliqués La transmission de données est unidirectionnel

Les protocoles de la couche transport (2) L’environment Notations data.req et data.ind primitives pour les interactions application/transport recv() et send() pour les interactions couche transport/réseau Application Application ADU Segment Entité Transport La couche Transport Entité Transport Packet Network Network

Protocol 1 : Notions de base A B Data.request(a) Segment(a) Data.ind(a)

Protocole 1 :(MEF) émetteur Récepteur Data.req(SDU) send(SDU) Wait for SDU recvd(SDU) Data.ind(SDU) Wait for segment

Protocole 1 : Exemple Problème: A B Data.request(a) Segment(a) Data.ind(a) Data.request(b) Segment(b) Data.ind(b) Data.request(c) Segment(c) Data.ind(c) Problème: Le récepteur est plus lent que l’émetteur!!->???.

Protocol 2 Principe Conséquences Utiliser un segment de contrôle (OK) qui est envoyé par le récepteur après le traitement d’un segment reçu Conséquences Deux type de segments: Un segment de données qui contient un SDU Notation : D(SDU) Un segment de contrôle Notation : C(OK) Format de segment Au moins un bit dans le segment pour indiquer le type de segment Type

Protocole 2 (cont.) Emetteur Récepteur Data.req(SDU) send(D(SDU)) Wait for SDU Wait for OK Recvd(C(OK)) - Recvd(D(SDU)) Data.ind(SDU) Wait for segment Process SDU - Send(C(OK))

Protocole 2 : Exemple A B Data.req(a) D(a) C(OK) Data.req(b) Data.ind(a) D(a) Data.req(a) C(OK) Data.req(b) D(b) C(OK) Data.ind(b)

Les protocoles de la couche transport Comment peut-on assurer un service fiable dans la couche transport Hypothèses Les applications envoient des petits SDUs La couche réseau fournit un service parfait Il y des erreurs de transmission Il n’y a pas de perte de paquets Les paquets arrivent pas en ordre Il n’y a pas de paquets dupliqués La transmission de données est unidirectionnel

Protocole 3a : émetteur Emetteur Recvd(C(NAK)) Data.req(SDU) send(D(SDU,CRC)) Data.req(SDU) send(D(SDU,CRC)) Wait for SDU Wait for OK/NAK Recvd(C(OK)) -

AND Not(IsOK(CRC,SDU)) Protocol 3a : Receiver Récepteur Recvd(D(SDU,CRC)) AND IsOK(CRC,SDU) Data.ind(SDU) Process segment OK Wait for segment Send(C(OK)) - Send(C(NAK)) - Process segment KO Recvd(D(SDU,CRC)) AND Not(IsOK(CRC,SDU)) -

Protocole 3a : Example A B Data.req(a) D(a) C(OK) Data.ind(a) Data.req(b) D(b') Transmission error C(NAK) Invalid checksum Retransmission D(b) C(OK) Data.ind(b)

A Protocol 3b Comment peut-on assurer un service fiable dans la couche transport Hypothèses Les applications envoient des petits SDUs La couche réseau fournit un service parfait Il y des erreurs de transmission Les paquets peuvent être perdus Les paquets arrivent pas en ordre Il n’y a pas de paquets dupliqués La transmission de données est unidirectionnel

Protocole 3a et perte de paquets Comment les pertes des segments affectent le protocole 3a ? A B Data.ind(a) D(a) Data.req(a) C(OK) Data.req(b) D(b) Segment perdu B attend un segment A attend segment de contrôle INTERBLOCAGE

Protocole 3b Modification au niveau de l’émetteur Non modification au niveau du récepteur Data.req(SDU) send(D(SDU,CRC)) start_timer() Recvd(C(NAK)) send(D(SDU,CRC)) restart_timer() Wait for SDU Wait for OK/NAK Recvd(C(OK)) cancel_timer() Timer expires send(D(SDU,CRC)) restart_timer()

Protocole 3b : Exemple Est-ce que ce protocole fonctionne très bien? A B Data.ind(a) D(a) Data.req(a) start timer C(OK) cancel timer Data.req(b) D(b) Segment perdu start timer Data.ind(b) D(b) timer expires C(OK) Est-ce que ce protocole fonctionne très bien?

Data.ind(b) Protocol 3b : Example Comment résoudre ce problème? A B Data.ind(a) D(a) Data.req(a) start timer C(OK) cancel timer Data.req(b) D(b) start timer Lost segment C(OK) Data.ind(b) D(b) timer expires C(OK) Data.ind(b) Comment résoudre ce problème?

Protocole du bit alterné Exemple A B Data.ind(a) D(0,a) Data.req(a) C(OK0) Data.req(b) Retransmission timer D(1,b) Data.ind(b) D(1,b) C(OK1) D(1,b) recvd Duplicate detected C(OK1) D(1,b) recvd Data.req(c) Segment perdu D(0,c) Retransmission timer Data.ind(c) D(0,c)

Performance du protcole du bit alterné Quelle est la performance de ce protocole? Data Ack 520 msec 1000/50000 = 20 msec 250 msec

Comment améliorer la performance du protocole PBA? Utilisation de Pipeline A B Data.ind(a) Data.req(a) ... D(0,a) D(4,e) Data.req(b) Data.req(e) Data.ind(e)

Comment améliorer la performance du protocole PBA? (2) Modifications pour PBA Numéro de séquence (NS) dans chaque segment Chaque segment de données contient son propre NS Chaque segment de contrôle indique le NS (OK/NAK) On doit avoir des buffers pour stocker les segments de données non acquittés Problème: buffers overflow

Sliding window Principe ... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .... seq. num. non autorisés ... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .... Segments acquittés seq. nums disponibles segments non acquittés

Sliding windows : exemple A B Sending window 0 1 2 3 4 5 6 7 8 Data.req(a) Data.ind(a) D(0,a) 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 Data.req(b) Data.ind(b) D(1,b) 0 1 2 3 4 5 6 7 8 Data.req(c) Data.ind(c) D(2,c) C(OK0) 0 1 2 3 4 5 6 7 8 C(OK1) 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 Data.req(d) Data.ind(d) D(3,d) C(OK2) 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 Data.req(e) D(4,e)

Codage des numéros de séquence Utiliser N bits signifie 2N NS placer dans chaque segment transmit son NS modulo 2N Le même NS est utilisé pour plusieurs segments.

Sliding window : exemple2 2 bits pour les NS A B Sending window 0 1 2 3 Data.req(a) Data.ind(a) D(0,a) 0 1 2 3 Data.req(b) Data.ind(b) D(1,b) 0 1 2 3 0 1 2 3 Data.req(c) Data.ind(c) D(2,c) C(OK0) 0 1 2 3 C(OK1) 0 1 2 3 Data.req(d) Data.ind(d) D(3,d) C(OK2) 0 1 2 3 0 1 2 3 Data.req(e) D(0,e) 0 1 2 3

Go-Back-N : Example A B Sending window 0 1 2 3 Data.req(a) 0 1 2 3 Data.ind(a) D(0,a) 0 1 2 3 Data.req(b) D(1,b) Transmission error 0 1 2 3 0 1 2 3 Data.req(c) D(2,c) C(OK,0) Invalid CRC, discarded 0 1 2 3 C(NAK,1) 0 1 2 3 Retransmission Not expected seq num, discarded C(OK,0) Data.req(d) D(3,d) Data.ind(d) D(1,b) Data.ind(b) 0 1 2 3 D(2,c) Data.ind(c) 0 1 2 3 Data.req(e)

Go-Back-N : Exemple (2) A B Sending window 0 1 2 3 Data.req(a) 0 1 2 3 Data.ind(a) D(0,a) 0 1 2 3 Data.req(b) D(1,b) Segment lost 0 1 2 3 0 1 2 3 Data.req(c) D(2,c) C(OK,0) 0 1 2 3 Retransmission timer expires Not expected seq num, discarded C(OK,0) Data.req(d) D(3,d) Data.ind(d) D(1,b) Data.ind(b) 0 1 2 3 D(2,c) Data.ind(c) 0 1 2 3 Data.req(e)

Selective Repeat : Exemple A B Sending window Rec. window 0 1 2 3 Data.req(a) Data.ind(a) D(0,a) 0 1 2 3 0 1 2 3 Data.req(b) D(1,b) Transmission error 0 1 2 3 0 1 2 3 Data.req(c) D(2,c) 0 1 2 3 C(OK,0) 0 1 2 3 Discard segment C(NAK,1) Retransmission Segment stored 0 1 2 3 0 1 2 3 C(OK,0) D(1,b) 0 1 2 3 Data.req(d) D(3,d) Data.ind(d) 0 1 2 3 Data.ind(b) 0 1 2 3 C(OK,2) 0 1 2 3 Data.ind(c) C(OK,3) 0 1 2 3

Selective Repeat : Exemple (2) A B Sending window Rec. window 0 1 2 3 Data.req(a) Data.ind(a) D(0,a) 0 1 2 3 0 1 2 3 Data.req(b) D(1,b) Lost segment 0 1 2 3 0 1 2 3 Data.req(c) D(2,c) 0 1 2 3 C(OK,0) 0 1 2 3 Retransmission timer expires Segment stored 0 1 2 3 0 1 2 3 C(OK,0) D(1,b) 0 1 2 3 Data.req(d) D(3,d) Data.ind(d) 0 1 2 3 Data.ind(b) 0 1 2 3 C(OK,2) 0 1 2 3 Data.ind(c) C(OK,3) 0 1 2 3

La couche Transport Notions de base Création d'une couche de transport fiable transmission fiable des données établissement de la connexion libération de la connexion UDP : un protocole de transport sans connexion TCP : un protocole de transport orienté connexion fiable

Etablissement de la connexion Comment établir une connexion de transport entre deux entités de transport? La couche de transport utilise le service de la couche réseau non fiable Les erreurs de transmission sont possibles Les segments peuvent être perdus Les segments peuvent être réordonnés Les segments peuvent être dupliqués

Solution simple principe 2 segments de contrôle Connect.req CR Connect.ind Connect.resp Connect.conf CA Connection établie Connection établie principe 2 segments de contrôle CR est utilisé pour demander un établissement de la connexion CA est utilisée pour aquiter un établissement de la connexion? Est-ce que cette solution est suffisante?

Solution simple (2) Comment faire face aux pertes et aux erreurs de transmission? CRC ou checksum. Retransmission timer. CR Connect.req() Retransmission timer expires CR Connect.ind() Connect.resp Connect.conf() CA Connection établie Connection établie

Etablissement de la connexion Connect.ind() CR Connect.req() Connect.resp Connect.conf() CA Connexion 1 établie Connexion 1 établie Connexion 1 arrétée CR Old previous CR CR dupliquée CA D

Etablissement de la connexion (2) Comment détecter les segments dupliqués? Principe La durée de vie de paquet ne peut pas dépasser une durée déterminée. Les entités de transport utilisent une horloge locale

Three way handshake A B CR (seq=x) CA (seq=y, ack=x) Connexion établie Numéro de séquence x, (La valeur de l’horloge locale) CR (seq=x) Numéro de séquence y, (La valeur de l’horloge locale) CA (seq=y, ack=x) Connexion établie CA (seq=x, ack=y) Connexion établie D(x) D(y)

Three way handshake (2) CR dupliquée A B CR (seq=z) CA (seq=y, ack=z) REJECT (ack=y) Connection annulée aucune connexion n'est établie

Three way handshake (3) A B CR (seq=z) CA (seq=y, ack=x) Expiration de timer CA (seq=y, ack=x) REJECT (ack=y) ignoré CR (seq=z) CA (seq=w, ack=z) CA (seq=z, ack=w)

Three way handshake (4) Un autre scenario A B CR (seq=z) CA (seq=w, ack=z) REJECT (ack=w) CA (seq=z, ack=y) REJECT (ack=z) aucune connexion n'est établie

La couche Transport Notions de base Création d'une couche de transport fiable transmission fiable des données établissement de la connexion libération de la connexion UDP : un protocole de transport sans connexion TCP : un protocole de transport orienté connexion fiable

Libération de la Connexion Une connexion transport peut être utilisée dans les deux sens. Types de libération de connextion Abrupt connection release Une des deux entités transport ferme la connexion dans les deux sens. Possibilité de perte de données Graceful release Chaque entité ferme la connexion (un seul sens) Connexion libérée après le transfert de données.

Abrupt release Data.req() Data.req() Data.ind() Disc.req() Disc.req() CR (seq=z) CA (seq=w, ack=z) CA (seq=z, ack=w) D Data.req() Data.ind() D Data.req() Disc.req() DR Disc.req() Connexion fermée Segment perdu Connexion fermée

Abrupt release (2) La couche transport peut libérer la connexion Si: le même segment de données a été transmis plusieurs fois sans recevoir un ack. la couche réseau indique que l'hôte destinataire n'est plus accessible l'entité de la couche de transport n'a pas suffisamment de ressources disponibles.

Graceful shutdown DISCONNECT.req (A-B) DR(A-B) DISCONNECT.ind(A-B) ACK DISCONNECT.conf(A-B) (A->B) fermée (A->B) fermée DISCONNECT.req(B-A) DISCONNECT.ind(B-A) DR(B-A) (B->A) fermée ACK DISCONNECT.conf(A-B) (B->A) fermée

La couche Transport Notions de base Création d'une couche de transport fiable transmission fiable des données établissement de la connexion libération de la connexion UDP : un protocole de transport sans connexion TCP : un protocole de transport orienté connexion fiable

Un protocole de transport simple User Datagram Protocol (UDP) Le protocole transport le plus simple But Permet aux applications d’échanger des petits SDUs en utilisant le service IP L’implémentation de UDP doit être simple.

Checksum :(UDP segment | partie de l’entete IP) Le protocole UDP 2 entités UDP échange des segments UDP UDP segment format Identifie l’application destinatire Identifie l’application qui a envoyé le segment 32 bits Source Port Destination port Contrainte: aucune segmentation 8 octes UDP length UDP Checksum Checksum :(UDP segment | partie de l’entete IP) Payload

Le protocole UDP (2) Utilisation of the UDP ports Requête Client Port Source : 1234 Port Destination : 5678 Serveur Réponse Port Source : 5678 Port Destination : 1234

Limitations de service UDP La taille Max des SDUs UDP dépend de la taille max des paquets IP. Les SDUs peuvent être perdus Ne garantit pas l’ordre des SDUs UDP ne détecte pas les SDUs dupliqués

Utilisation de UDP Applications requête-réponse DNS Remote Procedure Call NFS Games Voice over IP Video over IP

La couche Transport Notions de base Création d'une couche de transport fiable transmission fiable des données établissement de la connexion libération de la connexion UDP : un protocole de transport sans connexion TCP : un protocole de transport orienté connexion fiable

TCP Transmission Control Protocol Fournit un service fiable Caractéristiques du service TCP Connexion TCP Le transfert de données est fiable Pas de pertes Pas des erreurs Pas de duplication Le transfert de données est bidirectionnel TCP Utilise le service IP TCP fonctionne seulement en mode unicast

Connexion TCP Comment identifier une connexion TCP @ de l’application source (IP+Port) @de l’application destinataire Chaque segment TCP contient l’id de la connexion.

Protocole TCP

Le segment TCP Les 6 indicateurs URG : valide le champ « Ptr données urgentes » ACK : valide le champ NR PSH : PUSH indique au récepteur de délivrer immédiatement les données en attente sur le récepteur RST : demande au destinataire de réinitialiser la connexion ou rejet d'une demande de connexion SYN : demande de connexion (échange des ISN) FIN : demande de déconnexion

Le segment TCP Numéro de séquence NS (émission) comptabilise les octets depuis le début de la connexion ISN : numéro de séquence initial, valeur "aléatoire« acquittée lors de l'établissement de la connexion le numéro de séquence du premier octet transmis est ISN+1 puis NS=ISN+nb_octets_transmis+1 Numéro de séquence NR (réception) le récepteur renvoie le numéro du prochain octet attendu soit NS_reçu+taille_données_reçues

Le numéro de séquence initial (ISN) Chaque entité communique son ISN à l'autre à l'ouverture de la connexion Il permet de distinguer les octets de deux connexions successives utilisant les mêmes adresses de transport ouverture de la connexion (@IP1,p1,@IP2,p2) échanges de segments fermeture de la connexion (@IP1,p1,@IP2,p2) … Un même ISN est tiré toutes les 4h30 environ

Numéro de séquence et ACK Principe du piggybacking : un segment peut contenir des données et acquitter un segment précédent SEQ=numéro du premier octet dans le segment depuis l'ouverture de la connexion SEQa=numéro du prochain octet attendu L'acquittement d'un octet acquitte tous les octets précédents

Fermeture d'une connexion TCP Fermeture négociée demande de fin de connexion (FIN) par une des extrémités acquittement du FIN (ACK) mais mise en attente de la demande (B a encore des données non transmises) B envoie ses données en attente A acquitte les données (ACK) acceptation de la fin de connexion par B (FIN) acquittement de la fin de connexion (ACK)

Taille des segments TCP Souplesse de TCP : l'application lit/écrit dans un tampon TCP décide quand envoyer/restituer un segment (si PSH n'est pas positionné) Idée : TCP a intérêt d'envoyer des segments de taille maximale (limitation de l'overhead lié à la taille de l'en-tête) fragmentation IP coûteuse --> éviter la fragmentation la taille max. d'un segment TCP est de 64Ko (à cause d'IP) MSS : Maximum Segment Size (sans en-tête) à l'ouverture de la connexion, chaque entité peut annoncer (option TCP) son MSS à l'autre, en fonction de la MTU de son réseau (MSS=MTU-40)

Politique de retransmissions Les pertes de segment sont détectées par absence d'ack positif à expiration d'un temporisateur sur l'émetteur 1 tempo. par seg. Toutes les données reçues hors séquence sont mémorisées par le destinataire SEQ=X,700 octets

Retransmissions rapides (Fast Retransmit) Idée : il est de toute façon pénalisant d'attendre l'expiration du RTO pour retransmettre quand le récepteur reçoit des données hors-séquence, il renvoie immédiatement un ACK indiquant les données qu'il attend si l'émetteur a reçu 3 ACK dupliqués (4 ACK avec le même numéro de séquence attendu), il retransmet sans attendre l'expiration du RTO Suppositions de cas de perte : expiration du RTO --> pas d'ACK dupliqués, congestion dans le réseau (plusieurs segments sont perdus) ACK dupliqués --> peu de segments sont perdus (un ACK dupliqué signifie la réception d'un segment)

Algorithme de Nagle Idée : il est pénalisant d'envoyer des segments contenant 1 seul octet de données (par ex. terminal virtuel) principe de Nagle : si l'application écrit octet par octet envoi du premier octet dans un segment accumulation dans le tampon des octets suivants tant que le premier octet n'est pas acquitté envoi des octets accumulés dans un seul segment attente de l'acquittement pour envoyer le segment suivant…

Gestion de la fenêtre Contrôle de flux TCP : l'émetteur ne doit pas en envoyer de données si le tampon de réception n'a pas l'espace libre correspondant Quand l'émetteur est bloqué, il peut : envoyer des données urgentes (interruption de l'application réceptrice) envoyer des segments de 1 octet pour obliger le récepteur à envoyer SEQa et WIN et maintenir l'état actif de la connexion

Contrôle de flux TCP

Cas de blocage Après un remplissage du tampon de réception si le paquet de “déblocage” se perd, on arrive à une situation de blocage Solution: l’émetteur continue à envoyer le dernier octet de donnée afin de forcer le récepteur à émettre un acquittement

Valeur du temporisateur RTO RTO : Retransmission Time Out Impact de cette valeur sur les performances valeur trop petite : des retransmissions inutiles ont lieu valeur trop grande : attente trop importante entre deux retransmissions TCP fait une estimation du RTT (temps aller/retour) et ajuste dynamiquement la valeur du temporisateur en fonction de cette estimation utilisation d'une option TCP : l'émetteur met la valeur de son horloge dans l'option le récepteur fait écho de cette valeur dans l'ACK l'émetteur fait la différence entre son horloge et cette valeur à la réception de l'ACK

TCP: Round Trip Time et Timeout Méthode de Jacobson (1988) RTT = *RTT + (1-) *RTT_mesuré l'influence des échantillons passés décroît exponentiellement valeur typique pour  : 7/8 en cas de retransmission d’un segment, l’émetteur ne peut savoir si l’acquittement s’adresse au segment initial ou retransmis (ambiguïté des acquittements) => RTT ne peut donc être calculé correctement

TCP: Round Trip Time et Timeout Jacobson propose: L'intervalle de timeout RTO = RTT + 4*D D est l’écart type entre RTT mesuré et RTT calculé Grande variation de RTT  grande marge de sécurité Estimer d'abord de combien dévie RTT_mesuré par rapport au RTT_calculé: D = *D + (1-)*|RTT-RTT_mesuré|

Contrôle de congestion dans TCP Pour une bande passante idealement: émettre le plus rapidement possible (Congwin aussi grand que possible) sans pertes augmenter Congwin jusqu’à une perte (congestion) perte: réduire Congwin, et recommencer

Les causes de congestion (scénario 1: Taille de buffer infinie)

Les causes de congestion (scénario 2: Taille de buffer finie+ retransmission)

Contrôle de congestion dans TCP Dans la suite, nous introduisons deux mécanismes de contrôle de congestion basés sur l’utilisation d’un mécanisme de fenêtres, à savoir : TCP Tahoe TCP Reno Il existe d’autres versions de TCP, certaines toujours à l’étude pour d’éventuelles améliorations.

TCP Tahoe Cet algorithme de contrôle de congestion utilise deux mécanismes particuliers, à savoir: Le mécanisme de démarrage lent (slow start) Le mécanisme de évitement de la congestion (congestion avoidance) Ceux-ci définissent la quantité de données transmissibles sur le réseau à chaque instant

Mécanisme de Slow start Principe: Pour chaque accusé de réception d’un segment précédemment transmis, on permet l’émission de 2 nouveaux segments. A chaque transmission, la taille de la fenêtre de congestion est doublée. Cette rapidité d’évolution se fait dans une certaine limite, désignée par la taille de la fenêtre de réception mais également par une valeur particulière « seuil », notée le SSthres (pour slow start threshold). La valeur SSthres recommandée est fixée initialement à 65 535 bytes.

Mécanisme de Slow start

Mécanisme de Slow start Présence de congestion Congestion : Signifie qu’un accusé de réception n’est pas reçu dans les délais acceptés Conséquence pour la source: Reprise du mécanisme slow start avec Cwnd =1 MSS Et ssthres_nouveau =cwnd_atteint/2

Mécanisme de Congestion avoidance Principe: Cwnd = cwnd +1 lorsque l’accusé de réception du dernier segment de la fenêtre est reçu. Tout se passe comme si, à chaque accusé de réception, la fenêtre cwnd = cwnd + 1/fenêtre

Mécanisme de Congestion avoidance

Présence de congestion

TCP extension Options Type Valeur Longeur 20 octcts ≤40 octets Kind (1 octet) Length (1 octet) Value (1 octet) Type Valeur Longeur

TCP extension Kind=0 (1 octet) : No more options Kind=1 (1 octet): Padding Kind=2, length=4: Mss Kind=3, length=3: Window scaling Kind=4, length=2: Sack support Kind=5, Length=Variable: Sack block Kind = 8, length=10 : Timestamp