Principe Go-Back-N (2/2)
1. L'utilisateur transmet des segment de grande taille
2.
La couche réseau n'est pas tout à fait parfaite
1.
Erreurs de transmission possibles sur le contenu des paquets
2.
Des paquets peuvent être perdus
3.
La transmission des données se fait dans les deux
sens
Construction d'un protocole de transport fiable
Couche « transport »
Comment transmettre de longs messages ? Principe
● Permettre à l'entité de transport de l'émetteur de découper un message en petites parties placées chacune dans un segment
● Demander à l'entité transport du receveur de réassembler les segments reçus pour reconstruire le message
Construction d'un protocole de transport fiable –
Couche « transport »
Comment fournir un service en mode byte stream ? Principe
● L'émetteur découpe le flux d'octets en segments
● Le receveur fournit le contenu des segments à son utilisateur
● Généralement, numéroter les octets dans le byte stream et placer dans chaque segment le numéro de séquence du premier octet de données présent dans le segment
– Dans ce cas, les fenêtres sont également exprimées sur base de la numérotation des octets du byte stream
Construction d'un protocole de transport fiable –
Protocole de transport fiable TCP – Structure d'un segment TCP
Couche « transport »
Source port Destination port
Payload 32 bits
Checksum Urgent pointer THL Reserved Flags
20 bytes Sequence number
Optional header extension Window Flags :
Drapeaux binaires servant à spécifier la "fonction" d'un segment TCP
SYN : utilisé lors de l'ouverture FIN : utilisé lors de la fermeture RST : utilisé en cas de problème
ACK : si vrai, indique que l'Acknowledgement number contenu dans le segment est valide
Couvre l'entête du segment, le contenu du segment
et une partie de l'entête IP (adresses notamment)
Acknowledgement number
Longueur de l'entête du segment
Protocole de transport fiable TCP – Ouverture d'une connexion
Couche « transport »
SYN+ACK(ack=x+1,seq=y)
ACK(seq=x+1, ack=y+1) Demande de connexion
Demande de connexion + autorisation de connexion Numéro de séquence initial (x)
Numéro de séquence initial (y) SYN(seq=x)
Connexion établie A->B
Connexion établie B -> A
Numéro de séquence des segments de données -> commencera à x+1
Numéro de séquence des segments de données -> commencera à y+1
A B
●Three-way handshake
Protocole de transport fiable TCP – Ouverture d'une connexion
Couche « transport »
Négociation d'options
● possibilité de négocier certaines options durant l'ouverture de la connexion TCP
=> option encodée dans extension entête du segment TCP Par exemple :
Maximum segment size (MSS), longueur maximum de segment
Protocole de transport fiable TCP – Ouverture d'une connexion
Couche « transport »
RST+ACK(ack=x+1,seq=0) SYN(seq=x)
Connexion refusée
Refus d'ouverture
Demande de connexion
Déconnexion
Protocole de transport fiable TCP – Fermeture d'une connexion
Couche « transport »
FIN(seq=x)
ACK(ack=x+1)
ACK(ack=y+1) Demande de fermeture (A-B)
Autoriser la fermeture (A-B) Déconnexion (A-B)
FIN(seq=y)
Time WAIT
Attendre pendant deux fois la durée de vie maximale d'un paquet dans le réseau pour
Demande de fermeture (B-A) Autoriser la fermeture (B-A)
Déconnexion (A-B)
Fermeture ordonnée d'une connexion TCP
Protocole de transport fiable TCP – Fermeture d'une connexion
Couche « transport »
RST(seq=x) Déconnexion (abrupte)
Connexion fermée Connexion fermée
Fermeture abrupte d'une connexion TCP
Protocole de transport fiable TCP – États d'une connexion TCP
Couche « transport »
Émetteur
Protocole de transport fiable TCP – États d'une connexion TCP
Couche « transport »
Receveur
Protocole de transport fiable TCP – Fiabilité de transfert
Couche « transport »
ACK perdu ACK cumulatif
Protocole de transport fiable TCP –Contrôle de flux
Couche « transport »
Récepteur d'une connexion TCP a un tampon (buffer) de réception Le processus du récepteur peut prendre un certain temps pour récupérer les segments du tampon
Service de contrôle de flux :
Ajuster le rythme d'envoi de l'expéditeur à la vitesse de lecture de l'application destinataire
RcvBuffer : taille du buffer de réception
RcvWindow : espace libre dans le buffer
Protocole de transport fiable TCP –Contrôle de flux
Couche « transport »
Récepteur: informe explicitement l’émetteur de l’espace
disponible dans le buffer (=> nb d’octets qu’il est prêt à recevoir)
champ rcvWindow (fenêtre de réception) dans le segment TCP
0
RcvBuffer = 10 octets LastByteRcvd = 6
LastByteRead = 1
LastByteRcvd : n° du dernier octet dans le flux de données reçu par le destinataire et placé dans sa mémoire tampon
LastByteRead : n° du dernier octet dans le flux de données retiré du tampon par le processus d'application du destinataire
RcvWindow = RcvBuffer – (LastByteRcvd – LastByteRead)
Protocole de transport fiable TCP –Contrôle de flux
Couche « transport »
Protocole de transport fiable TCP –Contrôle de flux
Couche « transport »
RcvWindow=0 => plus de place disponible chez le récepteur L’émetteur est bloqué en attente d’ouverture de fenêtre
Et si le récepteur n’a rien à émettre ?
Dans TCP, un ACK ne peut être envoyé que sur réception de données
Solution
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
Protocole de transport fiable TCP –Contrôle de congestion
Couche « transport »
Le contrôle de flux évite qu'une machine émet plus de segments (par seconde) que le récepteur ne peut consommer.
Le contrôle de congestion évite qu'une machine émet plus de segments (par seconde) dans un réseau que celui-ci peut
transporter.
=> Contrôle de congestion = Contrôle de flux du réseau (noeud de transfert)
Protocole de transport fiable TCP –Contrôle de congestion
Couche « transport »
R1 R2
2 Mbps
10 Mbps 10 Mbps
A C
10 Mbps
A C
2 Mbps Buffers de taille infinie R1
Modèle simplifié
Protocole de transport fiable TCP –Contrôle de congestion
Couche « transport »
10 Mbps
A C
2 Mbps Buffers de R1
TCP self-clocking
ACK
ACK
ACK
ACK
ACK
Protocole de transport fiable TCP –Contrôle de congestion
Couche « transport »
TCP self-clocking
=> peut suffire lorsqu'une seule connexion TCP utilise une ligne à bas débit pour autant que le routeur intermédiaire puisse stocker un fenêtre complète de segments
Que se passe-t-il si plusieurs connexions TCP doivent se partager la ligne ?
Protocole de transport fiable TCP –Contrôle de congestion
Couche « transport »
10 Mbps 2 Mbps
Buffers infinis Nombreux
émetteurs
Nombreux receveurs L'occupation des buffers du
routeur augmente... Même si les buffers sont infinis, le délai augmente et les émetteurs ne reçoivent pas d'acquit. Cela provoque l'expiration des temporisateurs de retransmission et la retransmission des segments non-acquités avec go-back-n....
Informellement : « trop de sources envoient trop de données, trop rapidement, plus que ce que le réseau peut absorber »
Protocole de transport fiable TCP –Contrôle de congestion