Il 0% ha trovato utile questo documento (0 voti)
2 visualizzazioni115 pagine

04 Transport Layer

Caricato da

jehoweb775
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
2 visualizzazioni115 pagine

04 Transport Layer

Caricato da

jehoweb775
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 115

Reti

(già “Reti di Calcolatori”)

Il livello Trasporto: UDP e TCP

Renato Lo Cigno

http://disi.unitn.it/locigno/index.php/teaching-duties/computer-networks
Copyright

Quest’opera è protetta dalla licenza:

Creative Commons
Attribuzione-Non commerciale-Non opere derivate
2.5 Italia License

Per i dettagli, consultare


http://creativecommons.org/licenses/by-nc-nd/2.5/it/

Reti - [email protected] - Livello Trasporto 2


Servizi e protocolli di trasporto

r Forniscono la comunicazione Applicazione

logica tra processi applicativi


trasporto
rete
collegamento

di host differenti fisico

r Eseguono nei sistemi terminali


mlato invio: organizza i
messaggi in segmenti e li
passa al livello di rete
mlato ricezione: riassembla i Applicazione

segmenti in messaggi e trasporto


rete

li passa al livello di collegamento


fisico

applicazione

Reti - [email protected] - Livello Trasporto 3


Livello trasporto in Internet

• Due protocolli di trasporto di base alternativi: TCP e UDP


• Modelli di servizio diversi
o TCP orientato alla connessione, affidabile, controllo di flusso e
congestione, mantiene lo stato della connessione
o UDP non connesso, non-affidabile, senza stato

• Caratteristiche comuni:
o multiplazione e demultiplazione mediante le porte

o rilevazione (non correzione) errori su header

• Altri protocolli sono in fase di definizione/deployment:


o SCTP (Stream Control Transmission Protocol)
o DCCP (Datagram Congestion Control Protocol)

o ...

Reti - [email protected] - Livello Trasporto 4


Posizionamento e visione

• Il livello trasporto, come quello di applicazione, non ha


visibilità dei dettagli della rete
• La semantica del protocollo è end-to-end e la rete viene
trattata come una scatola nera
• Lo scopo “generale” del protocollo è fornire una
astrazione di comunicazione ai protocolli di livello
applicativo
– attraverso servizi astratti dedicati (SAP – Service Access Point)
– chiamati socket in gergo Internet

Reti - [email protected] - Livello Trasporto 5


Visione d’insieme

Applicaz. gestione end-to-end della connessione Applicaz.


dati applicaz. dati applicaz.

TCP dati applicaz. TCP dati applicaz.


TCP/UDP TCP/UDP
IP TCP dati IP TCP dati

IP IP TCP dati. IP IP IP TCP dati IP


L2 L2 L2 L2 L2 L2
L1 L1 L1 L1 L1 L1

L2 IP TCP dati L2 IP TCP dati L2 IP TCP dati

Reti - [email protected] - Livello Trasporto 6


Livello di trasporto

• Fornisce un canale di trasporto end-to-end “astratto” tra due utenti,


indipendentemente dalla rete
• Per compiere questo obiettivo, come tutti i livelli, il livello di trasporto
offre, attraverso delle primitive, dei servizi al livello superiore e svolge una
serie di funzioni
• Servizi offerti al livello applicativo:
– connection-oriented affidabile
• per il trasferimento dei dati viene attivata una connessione

TCP
• ogni pacchetto (à segmento) inviato viene “riscontrato” in modo
individuale
– connectionless non affidabile
• non viene attivata nessuna connessione

UDP
• invio delle trame senza attendere alcun feedback dalla destinazione sulla
corretta ricezione
– se una trama viene persa non ci sono tentativi per recuperarla

Reti - [email protected] - Livello Trasporto 7


Funzioni svolte dal livello di trasporto

• Indirizzamento a livello applicativo / multiplazione / demultiplazione


– multiplazione e indirizamento a livello applicativo UDP
– scarto PDU malformate o con errori nell’header
• Instaurazione, gestione e rilascio delle connessioni
– si preoccupa di gestire la connessione, ovvero lo scambio di
informazioni necessarie per concordare l’attivazione di un canale
di comunicazione
• Recupero degli errori (sui dati)
– politiche implementate e azioni da svolgere in caso di errore o
TCP
perdita di segmenti
• Consegna ordinata dei segmenti
• Controllo di flusso
– azione preventiva finalizzata a limitare l’immissione di dati in rete
a seconda della capacità end-to-end di questa
• Controllo della congestione
– azioni da intraprendere come reazione alla congestione di rete

Reti - [email protected] - Livello Trasporto 8


Generalità

• Gli indirizzi di livello IP vengono utilizzati per


l’instradamento dei pacchetti all’interno
della rete e identificano univocamente gli Appl.1 Appl.2 Appl.3
host sorgente e destinazione
• Quando il pacchetto giunge alla destinazione
e viene passato al livello di trasporto nasce Trasporto: TCP - UDP
un ulteriore problema:
– poiché sul livello di trasporto si
appoggiano più applicazioni, com’è IP
possibile distinguere l’una dall’altra?
Livello 2
• Si introduce il concetto di porta, che non è
altro che un codice che identifica Livello 1
l’applicazione

Reti - [email protected] - Livello Trasporto 9


Indirizzamento: mux/demux

• Il destinatario finale dei dati non è un host ma un processo in


esecuzione sull’host
• L’interfaccia tra processi applicativi e strato trasporto è
rappresentata da una “porta”
o numero intero su 16 bit

o associazione tra porte e processi

o processi server standard e “pubblici” sono associati a porta


“ben nota”, inferiore a 1024 (es: 80 per WWW, 25 per email)
o processi client e server non standard o “nascosti” usano una
porta superiore a 1024, nel caso dei client assegnata
dinamicamente dal sistema operativo

Reti - [email protected] - Livello Trasporto 10


Indirizzamento: mux/demux

• Il numero di porta può essere


– statico (well known port)
• identificativi associati ad applicazioni standard
(posta elettronica, web, ftp, dns, ...)
– dinamico (emphemeral)
• identificativi assegnati direttamente dal sistema operativo al
momento dell’apertura della connessione
• La porta sorgente e la porta destinazione non sono uguali
• L’utilizzo delle porte, insieme agli indirizzi IP sorgente e
destinazione servono per il mux/demx dei dati
• Flusso o connessione
– dati di una singola comunicazione logica
– una applicazione può usare più flussi
Reti - [email protected] - Livello Trasporto 11
Indentificare un flusso

Vers IHL TOS Total length IP TCP/UDP


Frag. Identification Flags Frag. Offset
TTL Protocol Header Checksum
5-upla che Source address
Destination address
identifica la
connessione (e Options & Padding:
il conseguente
flusso) tra due Source port Destination port
applicazioni

dati applicaz.

La 5-upla {S-IP,D-IP,PROT,S-Port,D-Port}
identifica in modo univoco un flusso in qualsiasi punto della rete ...
e quindi anche all’interfaccia tra protocollo applicativo e protocollo di
trasporto in un host
Reti - [email protected] - Livello Trasporto 12
Formato dei segmenti UDP

• Source Port e Destination Port


[16 bit]: identificano i processi 0 8 15 16 24
sorgente e destinazione dei dati Source port Destination port
• Length [16 bit]: lunghezza totale
(espressa in byte) del Length Checksum

datagramma, compreso l’header


UDP DATA

• Checksum [16 bit]: campo di


controllo che serve per sapere
se il datagramma corrente
contiene errori

Reti - [email protected] - Livello Trasporto 13


User Datagram Protocol

• Protocollo di trasporto connectionless non affidabile


• Svolge solo funzione di indirizzamento delle applicazioni (porte)
• NON gestisce:
– connessioni; controllo di flusso
– recupero degli errori (solo rilevamento)
– controllo della congestione; riordino dei pacchetti
• Supporto di transazioni semplici tra applicativi e applicazioni real-
time che tollerano perdite
• Un’applicazione che usa UDP deve risolvere problemi di affidabilità,
perdita di pacchetti, duplicazione, controllo di sequenza, controllo
di flusso, controllo di congestione
• Standardizzato in RFC 768

Reti - [email protected] - Livello Trasporto 14


Checksum UDP

Obiettivo: rilevare gli “errori” (bit alterati) nel segmento


trasmesso

Mittente: Ricevente:
r Tratta il contenuto del r calcola la checksum del segmento
segmento come una sequenza ricevuto
di interi da 16 bit r controlla se la checksum calcolata
è uguale al valore del campo
r checksum: somma checksum:
(complemento a 1) i contenuti
m No - errore rilevato
del segmento
m Sì - nessun errore rilevato
r Il mittente pone il valore della
m Particolari pattern di errori
checksum nel campo checksum possono sfuggire
del segmento UDP

Reti - [email protected] - Livello Trasporto 15


Esempio di checksum UDP

r Nota
mQuando si sommano i numeri, un riporto dal bit più
significativo deve essere sommato al risultato
r Esempio: sommare due interi da 16 bit

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

a capo 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1

somma 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
checksum 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

Reti - [email protected] - Livello Trasporto 16


Tecniche ARQ e protocolli a finestra

• Per ottenere affidabilità si usano tecniche di ritrasmissione


automatica delle informazioni corrotte o perse
– ARQ – Automatic Retransmission reQuest
• La decisione (automatica) se ritrasmettere l’informazione viene
presa in base a protocolli che sfruttano finestre di trasmissione e
ricezione
– stop and wait (finestra pari a una unità dati – PDU)
– finestre di dimensione fissa
– finestre con dimensione variabile
• Servono tecniche per
– rilevare le PDU errate
– rilevare le PDU mancanti

Reti - [email protected] - Livello Trasporto 17


Protezione dagli errori

• bit di parità (riconosce errori in 01101010 0


numero dispari)
01001010 1

• codice a ripetizione (decisione a 01101010


maggioranza: permette di 01101010
correggere errori)
01101010

Reti - [email protected] - Livello Trasporto 18


Protezione dagli errori

0110101 0
01001 00 0
• parità di riga e colonna 000101 0 1
(consente la correzione di errori 11000 00 1
singoli) 11101 10 1
00001 10 0
01100 10 1
01000 00 0
00110 11 0

Reti - [email protected] - Livello Trasporto 19


Stop and wait

• Il trasmettitore:
– invia una PDU dopo averne fatta una copia
– attiva un orologio (tempo di timeout)
– si pone in attesa della conferma di ricezione (acknowledgment
- ACK)
– se scade il timeout prima dell’arrivo della conferma, ripete la
trasmissione
• Il trasmettitore, quando riceve un ACK:
– controlla la correttezza dell’ACK
– controlla il numero di sequenza
– se l’ACK è relativo all’ultima PDU trasmessa abilita la
trasmissione della prossima PDU
Reti - [email protected] - Livello Trasporto 20
Stop and wait

• Il ricevitore, quando riceve una PDU:


– controlla la correttezza della PDU
– controlla il numero di sequenza
– se la PDU è corretta invia la conferma di ricezione (ACK)
– se la PDU è quella attesa, essa viene consegnata ai livelli
superiori

Reti - [email protected] - Livello Trasporto 21


Stop and wait

Mittente Ricevitore
Primo bit del pacchetto trasmesso, t = 0
Ultimo bit del pacchetto
trasmesso, t = L / R
Arriva il primo bit
RTT Arriva l’ultimo bit, invia ACK

Arriva ACK, invia il prossimo


pacchetto, t = RTT + L / R

L = lunghezza del pacchetto (bit) L/R


R = capacità della rete (bit/s) efficienza =
RTT + L / R

Reti - [email protected] - Livello Trasporto 22


Finestre multi-PDU

• Il protocollo Stop and Wait è poco efficiente perché dopo la


trasmissione di ogni singolo pacchetto bisogna attendere la
sua conferma

• Permettere la trasmissione di più di una PDU prima di


fermarsi in attesa delle conferme migliora le prestazioni
– Trasmissione e ricezione ACK avvengono in “pipeline”

• Devo poter riconoscere le PDU trasmesse

Reti - [email protected] - Livello Trasporto 23


Finestra di trasmissione

• La finestra di trasmissione WT è
“la quantità massima di PDU in sequenza che il
trasmettitore è autorizzato ad inviare in rete senza averne
ricevuto riscontro (ACK)”

• La dimensione della finestra è limitata dalla quantità di


memoria allocata in trasmissione
• WT rappresenta anche il massimo numero di PDU
contemporaneamente presenti sul canale o in rete

Reti - [email protected] - Livello Trasporto 24


Finestra di ricezione

• La finestra di ricezione WR è
”la sequenza di PDU che il ricevitore è disposto ad accettare e
memorizzare”

• La dimensione della finestra è limitata dalla quantità di memoria


allocata in ricezione

Reti - [email protected] - Livello Trasporto 25


Finestra di trasmissione

pacchetti pacchetti pacchetti pacchetti


confermati tx e in attesa che possono che non possono
di conferma essere trasmessi ancora essere
trasmessi
WT
n

Reti - [email protected] - Livello Trasporto 26


Finestra di ricezione unitaria

WR
pacchetti pacchetto pacchetti
confermati atteso fuori sequenza
che non possono
essere accettati

Reti - [email protected] - Livello Trasporto 27


Go Back N

• Il trasmettitore con finestra N:


– invia fino ad N = WT PDU, facendo di ognuna una copia
– attiva un solo orologio (timeout) per le N PDU
– si pone in attesa delle conferme di ricezione (ACK)
– se scade il timeout prima della conferma di ricezione ripete
la trasmissione di tutte le PDU non ancora confermate

Reti - [email protected] - Livello Trasporto 28


Go Back N

• Il ricevitore, quando riceve una PDU:


– controlla la correttezza della PDU
– controlla il numero di sequenza
– se la PDU è corretta invia la conferma di ricezione
– se la PDU contiene il primo numero di sequenza non ancora
ricevuto, viene consegnata ai livelli superiori

Reti - [email protected] - Livello Trasporto 29


Selective Repeat

• Nel protocollo Go back N il ricevitore accetta solo PDU in


sequenza

• Accettare PDU corrette, ma fuori sequenza, migliora le


prestazioni: Selective repeat

• Il protocollo Selective Repeat usa finestra di trasmissione e


finestra di ricezione di dimensioni maggiori di 1 (di solito di pari
dimensione)

• E` necessario che il trasmettitore associ un diverso timeout a


ciascuna PDU inviata oppure che il ricevitore richieda
espressamente la ritrasmissione della/e PDU mancanti

Reti - [email protected] - Livello Trasporto 30


Semantica dei pacchetti di riscontro

• La semantica associata al pacchetto di riscontro può essere:


– ACK individuale (o selettivo): si notifica la corretta ricezione di
un pacchetto particolare.
ACK(n) significa “ho ricevuto il pacchetto n”
– ACK cumulativo: si notifica la corretta ricezione di tutti i
pacchetti con numero di sequenza inferiore a quello
specificato nell’ACK.
ACK(n) significa “ho ricevuto tutto fino ad n escluso”
– ACK negativo (NAK): si notifica la richiesta di ritrasmissione di
un singolo pacchetto.
NAK(n) significa “ritrasmetti il pacchetto n”
• Trasmettitore e Ricevitore si devono accordare preventivamente
sulla semantica degli ACK

Reti - [email protected] - Livello Trasporto 31


Piggybacking

• Nel caso di flussi di informazione bidirezionali, è sovente


possibile scrivere l’informazione di riscontro (ACK) nella
intestazione di PDU di informazione che viaggiano nella
direzione opposta
• Si risparmia la trasmissione di un pacchetto a livello rete

Reti - [email protected] - Livello Trasporto 32


Finestra di ricezione > di 1

PDU
da consegnare
al livello superiore

n
PDU PDU
confermate WR fuori sequenza
e consegnate che non possono
al livello superiore PDU essere accettate
attese

Reti - [email protected] - Livello Trasporto 33


Numerazione PDU

• La numerazione delle PDU è


ciclica: WR
– k bit di numerazione
WT
– numerazione modulo 2k 7 0
– WT + WR < 2k
6 1
3 bit di
numerazione
5 2
WR = 1
4 3
WT = 3
Reti - [email protected] - Livello Trasporto 34
Selective Repeat

• Il trasmettitore:
– trasmette fino ad N = WT PDU senza ricevere ACK
– per ciascuna inizializza un timeout
– quando riceve un ACK relativo ad una PDU la toglie dalla
finestra di trasmissione e trasmette una nuova PDU
– se scade un timeout ritrasmette selettivamente la PDU relativa
all’ACK (e re-inizializza il timeout)
– quando ritrasmette una PDU può
• fermarsi fino a quando ha ricevuto l’ACK di questa PDU
• continuare a trasmettere PDU nuove se la dinamica della
finestra e degli ACK relativi alle altre PDU lo consente

Reti - [email protected] - Livello Trasporto 35


Selective Repeat

• Il ricevitore:
– riceve una PDU
– controlla la correttezza della PDU
– controlla il numero di sequenza
– se la PDU è corretta ed in sequenza la consegna al livello
superiore
– se la PDU è corretta ma non in sequenza:
• se è entro la finestra di ricezione la memorizza
• se è fuori dalla finestra di ricezione la scarta
– invia un ACK
• relativo alla PDU ricevuta (ACK selettivi)
• relativo all’ultima PDU ricevuta in sequenza (ACK cumulativi)

Reti - [email protected] - Livello Trasporto 36


Prestazioni protocolli a finestra

esempio: collegamento da 1 Gbps, ritardo di propagazione 15 ms,


pacchetti da 1 kbit:
L (lunghezza del pacchetto in bit) 8 kb/pacc
T trasm = = = 8 microsec
R (tasso trasmissivo, bps) 109 b/sec

U L/R 0,008
mitt = =
30,008
= 0,00027
RTT + L / R

Ø Umitt : utilizzo è la frazione di tempo in cui il mittente è


occupato nell’invio di bit
Ø Un pacchetto da 1 KB ogni 30 msec -> throughput di 33 kB/sec
in un collegamento da 1 Gbps
Ø Il protocollo di trasporto limita l’uso delle risorse fisiche!

Reti - [email protected] - Livello Trasporto 37


stop-and-wait

Mittente Ricevente
Primo bit del pacchetto trasmesso, t = 0
Ultimo bit del
pacchetto trasmesso, t = L / R

Arriva il primo bit


RTT Arriva l’ultimo bit, invia ACK

Arriva ACK, invia il prossimo


pacchetto, t = RTT + L / R

U L/R 0,008
mitt = =
30,008
= 0,00027
RTT + L / R

Reti - [email protected] - Livello Trasporto 38


Finestra > 1 à Pipelining

Pipelining: il mittente ammette più pacchetti in transito,


ancora da notificare
m buffering dei pacchetti presso il mittente e ricevente per
ritrasmissioni

Reti - [email protected] - Livello Trasporto 39


Pipelining: aumento dell’utilizzo

WT > 3 trasmetto
Primo bit del primo
Mittente Ricevente 3 pacchetti prima di
pacchetto trasmesso, t = 0 fermarmi
Ultimo bit del primo
pacchetto trasmesso, t = L / R
Arriva il primo bit del primo pacchetto
Arriva l’ultimo bit del primo pacchetto,
RTT invia ACK
Arriva l’ultimo bit del secondo pacchetto,
invia ACK
Arriva ACK, invia il prossimo Arriva l’ultimo bit del terzo pacchetto,
pacchetto, t = RTT + L / R invia ACK

Aumento l’utilizzo
di un fattore WT

Umitt = 3*L/R 0,024


WT = 3; = = 0,0008
RTT + L / R 30,008

Reti - [email protected] - Livello Trasporto 40


TCP ... finalmente

• Il “Transmission Control Protocol” è un protocollo a finestra con


ACK cumulativi e ritrasmissioni selettive
• La finestra di ricezione e trasmissione possono essere variate
dinamicamente durante la comunicazione
– versioni e patch successive lo hanno reso uno dei protocolli più
complessi della suite di Internet
• TCP è orientato alla connessione
• Affidabile
• Implementa controllo di flusso
• Cerca di controllare il traffico iniettato in funzione della
congestione nella rete

Reti - [email protected] - Livello Trasporto 41


TCP: riferimenti bibliografici

• Richard Stevens: TCP Illustrated, vol.1-2-3


• RFC 793 (1981): Transmission Control Protocol
• RFC 1122/1123 (1989): Requirements for Internet Hosts
• RFC 1323 (1992): TCP Extensions for High Performance
• RFC 2018 (1996) TCP Selective Acknowledgment Options
• RFC 2581: TCP Congestion Control
• RFC 2582: The NewReno Modification to TCP's Fast Recovery
Algorithm
• RFC 2883: An Extension to the Selective Acknowledgement (SACK)
Option for TCP
• RFC 2988: Computing TCP's Retransmission Timer
• ...
• ...
Reti - [email protected] - Livello Trasporto 42
TCP: compiti

• Fornisce porte per (de)multiplazione


• Una entità TCP di un host, quando deve comunicare con un’entità
TCP di un altro host, crea una connessione fornendo un servizio
simile ad un circuito virtuale
o bidirezionale (full duplex)
o con controllo di errore e di sequenza

• Mantiene informazioni di stato negli host per ogni connessione


• TCP segmenta e riassembla i dati secondo le sue necessità:
• tratta stream di dati (byte) non strutturati dai livelli superiori
• non garantisce nessuna relazione tra il numero di read e
quello di write (buffer tra TCP e livello applicazione)

Reti - [email protected] - Livello Trasporto 43


Identificazione di connessioni

• Una connessione TCP tra due


processi è definita dai suoi endpoints
(punti terminali), univocamente Vers IHL TOS Total length
identificati da un socket: Frag. Identification Flags Frag. Offset
TTL Protocol Header Checksum
o Indirizzi IP host sorgente e host Source address
destinazione Destination address

o Numeri di porta TCP host Options & Padding:


sorgente e host destinazione
• Nota: TCP o UDP usano porte Source port Destination port

indipendenti
• Esempio: connessione TCP tra porta
15320 host 130.192.24.5 e porta 80
host 193.45.3.10
Reti - [email protected] - Livello Trasporto 44
Trasmettitore TCP

• Suddivide i dati dell’applicazione in segmenti


• Usa protocollo a finestra con WT ≥ 1
• Attiva timer quando invia i segmenti:
o segmenti non confermati allo scadere del timer
(Retransmission TimeOut - RTO) provocano ritrasmissioni
• Stima RTT per impostare RTO
• Calcola e trasmette checksum obbligatorio su header e dati
• Regola velocità con dimensione finestra
o controllo di flusso e congestione

Reti - [email protected] - Livello Trasporto 45


Ricevitore TCP

• Riordina segmenti fuori sequenza e scarta segmenti errati


o consegna stream ordinato e corretto a processo applicativo

• Invia ACK cumulativi


• Annuncia negli ACK lo spazio libero nel buffer di ricezione per
controllare velocità trasmettitore (controllo di flusso)

Reti - [email protected] - Livello Trasporto 46


Ricevitore TCP

• Segmento corretto ed in sequenza


• Memorizza (ed eventualmente consegna al livello superiore)
ed invia ACK cumulativo
• Segmento duplicato
• Scarta ed invia ACK relativo all’ultimo segmento ricevuto in
sequenza
• Segmento con checksum errato
• Scarta senza inviare ACK
• Segmento fuori sequenza
• Memorizza ed invia ACK relativo all’ultimo segmento
ricevuto in sequenza (ACK duplicato)

Reti - [email protected] - Livello Trasporto 47


TCP: generazione ACK

Eventi Azioni ricevitore TCP

arrivo segmento in ordine, inviato invia ACK


ACK correttamente per tutti
segmenti precedenti

arrivo segmento fuori sequenza invia ACK duplicato, indicando come


con numero maggiore di quello numero di sequenza il prossimo byte
atteso: vuoto rilevato che si attendedi ricevere

arrivo di segmento che riempie ACK immediato, indicando come


vuoti parzialmente o numero di sequenza il prossimo byte
completamente che si attendedi ricevere

Reti - [email protected] - Livello Trasporto 48


Throughput ottenibile

• Generico protocollo a finestra: la velocità di trasmissione in


assenza di errori è

Finestra di trasmissione
Round trip time

Connessioni “corte” ottengono banda maggiore a parità di


o
finestra
• Per regolare velocità di trasmissione posso agire su
o round trip time
o dimensione finestra

Reti - [email protected] - Livello Trasporto 49


Controllo di flusso

• TCP impiega un controllo end-to-end basato su controllo della


dimensione della finestra del trasmettitore:
o evita che un host veloce saturi un ricevitore lento

o il ricevitore impone la dimensione massima della finestra


del trasmettitore, indicando negli ACK la finestra di
ricezione disponibile
o valore dinamico che dipende dall’allocazione del sistema
operativo e dalla quantità di dati ricevuti e non ancora letti
dall’applicazione

Reti - [email protected] - Livello Trasporto 50


Controllo di congestione

• Deve evitare che gli host nel loro insieme siano troppo
aggressivi saturando la rete
• Non posso trasmettere sempre alla velocità massima
consentita dal ricevitore
• Se la finestra di trasmissione è maggiore del valore per cui il
bit rate in trasmissione supera capacità del collo di bottiglia
o si memorizzano dati nei buffer lungo il percorso, e cresce
round trip time
o si perdono dati nei buffer dei nodi intermedi

Reti - [email protected] - Livello Trasporto 51


La PDU TCP
• La PDU di TCP è detta segmento
• La dimensione dei segmenti può variare dal solo header
(ACK, 20 byte) fino ad un valore massimo MSS concordato
con il ricevitore e dipendente dalla MTU IP
• La dimensione del singolo segmento dipende dallo stream
dei livelli superiori

HEADER 20 B
VARIABLE
DATA
LENGTH
(0 - MSS)

Reti - [email protected] - Livello Trasporto 52


TCP header

0 4 8 16 19 24 32
Source Port Destination Port

Sequence Number

Acknowledgment Number

HLEN Resv Control flag Window

Checksum Urgent Pointer

Options Padding

Reti - [email protected] - Livello Trasporto 53


TCP header

0 15 31

Source Port Number Dest Port Number

Sequence Number Identificano l’applicazione che


sta inviando e ricevendo dati.
Acknowledgment Number
Combinati con i rispettivi
indirizzi IP, identificano in
HLEN Resv. flags Receiver window
modo univoco una
connessione
checksum Urgent Pointer

Reti - [email protected] - Livello Trasporto 54


TCP header

0 15 31

Source Port Number Dest Port Number


• Identifica, nello stream di
dati, la posizione del primo
Sequence Number byte del payload del
segmento
Acknowledgment Number • Numerazione ciclica su 32 bit
• Ogni direzione della
HLEN Resv. flags Receiver window
connessione procede con
numeri di sequenza diversi e
checksum Urgent Pointer
indipendenti

Reti - [email protected] - Livello Trasporto 55


TCP header

0 15 31

Source Port Number Dest Port Number


Numero di sequenza più 1
dell’ultimo byte di dati
Sequence Number ricevuto correttamente e
in sequenza
Acknowledgment Number
Ovvero il prossimo byte
HLEN Resv. flags Receiver window che il ricevitore si aspetta
di ricevere
checksum Urgent Pointer
Valido solo con ACK flag
settato
Reti - [email protected] - Livello Trasporto 56
Numeri di sequenza e di ack

Host A Host B

Utente
preme tasto
‘C’ host
conferma ricezione
di ‘C’, ed invia echo

host conferma
ricezione
dell’eco
‘C’

tempo
Esempio di sessione telnet

Reti - [email protected] - Livello Trasporto 57


TCP header

0 15 31

Source Port Number Dest Port Number

Lunghezza dell’header
Sequence Number
in parole di 32 bit
Acknowledgment Number

HLEN Resv. flags Receiver window

checksum Urgent Pointer

Reti - [email protected] - Livello Trasporto 58


TCP header

0 15 31

Source Port Number Dest Port Number RiservatI per usi futuri
(es. ECN – Explicit
Sequence Number Congestion Notification)

Acknowledgment Number

HLEN Resv. flags Receiver window

checksum Urgent Pointer

Reti - [email protected] - Livello Trasporto 59


TCP header

Gestione connessione • Sei bit di flag, uno o più


possono essere settati
0 15 31 insieme:
o URG: urgent pointer valido
Source Port Number Dest Port Number
o ACK: numero di ack valido

Sequence Number o PSH: forza passaggio dati


applicazione
Acknowledgment Number o RST: reset connessione

o SYN: synchronize seq. No.


HLEN Resv. flags Receiver window
Apertura connessione
checksum Urgent Pointer o FIN: chiusura connessione

Reti - [email protected] - Livello Trasporto 60


TCP header

0 15 31

Source Port Number Dest Port Number Numero di byte, a partire


da quello nel campo di
Sequence Number ACK, che il ricevitore è
disposto ad accettare per
Acknowledgment Number controllo di flusso
Valore massimo rwnd
HLEN Resv. flags Receiver window
65535 byte se non si usa
l’opzione “window scale”
checksum Urgent Pointer

Reti - [email protected] - Livello Trasporto 61


Finestra e Throughput

• Massima quantità di dati in transito per RTT:


o 16-bit rwnd = 64KB max
• RTT=100ms
Prodotto banda x ritardo dato
Banda banda x ritardo
T1 (1.5Mbps) 18KB
Ethernet (10Mbps) 122KB
T3 (45Mbps) 549KB
FastEthernet (100Mbps) 1.2MB
STS-3 (155Mbps) 1.8MB
STS-12 (622Mbps) 7.4MB
STS-48 (2.5Gbps) 29.6MB

Reti - [email protected] - Livello Trasporto 62


TCP header

0 15 31

Source Port Number Dest Port Number Checksum obbligatorio


su header e dati, più
Sequence Number pseudo-header che
include indirizzi IP e
Acknowledgment Number
tipo di protocollo
(violazione del principio
HLEN Resv. flags Receiver window
di stratificazione OSI)
checksum Urgent Pointer

Reti - [email protected] - Livello Trasporto 63


TCP header

• Algoritmo di checksum
0 15 31
o allineamento di header, dati e
pseudo-header su 16 bit
Source Port Number Dest Port Number o somma in complemento a 1 di
ogni riga
o si ottiene numero a 32 bit, che
Sequence Number
si divide in due parti di 16 bit
o somma in complemento a 1
Acknowledgment Number delle due parti, incluso il
riporto
HLEN Resv. flags Receiver window o inserisco nell’header i 16 bit
risultanti
checksum Urgent Pointer

Reti - [email protected] - Livello Trasporto 64


TCP header

0 15 31

Source Port Number Dest Port Number


Puntatore a “dati urgenti” nel
Sequence Number campo dati (es. ctrl-C in una
sessione telnet).
Acknowledgment Number
Offset rispetto al num. di seq.

Valido solo se flag URG è


HLEN Resv. flags Receiver window
settato

checksum Urgent Pointer

Reti - [email protected] - Livello Trasporto 65


Instraurazione della connessione
A B
• L’instaurazione della connessione
avviene secondo la procedura detta di
“three-way handshake” SYN(PortA, PortB, ISN-A) = x
• la stazione che richiede la connessione
(A) invia un segmento di SYN
• parametri specificati: numero di porta SYNACK(PortB, PortA, ISN-B = Y, ACK = x+1)
dell’applicazione cui si intende accedere
e Initial Sequence Number (ISN-A)
• la stazione che riceve la richiesta (B)
risponde con un segmento SYN
ACK(PortA, PortB, ACK = y+1
• parametri specificati: ISN-B e riscontro
(ACK) ISN-A
• la stazione A riscontra il segmento SYN
della stazione B (ISN-B)
time

Reti - [email protected] - Livello Trasporto 66


Come si calcola MSS

• MSS dipende dalla MTU (Maximum Transfer Unit) del livello IP, che
a sua volta dipende dal livello Data-Link del collegamento con MTU
più piccola lungo il percorso
• Purtroppo non esistono meccanismi di segnalazione per
comunicare MSS
• TCP può cercare di stimare la MTU minima con un meccanismo di
“trial and error”
• Prova segmenti sempre più grossi fino a quando uno viene scartato
per dimensione eccessiva e il dispositivo che l’ha scartato manda
un messaggio ICMP (v. livello rete) al mittente
• ... purtroppo non tutti i dispositivi rispondono ...
• Default: MSS = 1460 (1500 trama ethernet – 40 bytes di headers)
• Default “minimo”: MSS = 536
Reti - [email protected] - Livello Trasporto 67
Terminazione della Connessione

• Poiché la connessione è bidirezionale, la terminazione deve


avvenire in entrambe le direzioni
• Procedura di terminazione “gentle”
– la stazione che non ha più dati da trasmettere e decide di
chiudere la connessione invia un segmento FIN (segmento con
il campo FIN posto a 1 e il campo dati vuoto)
– la stazione che riceve il segmento FIN invia un ACK e indica
all’applicazione che la comunicazione è stata chiusa nella
direzione entrante
• Se questa procedura avviene solo in una direzione (half close),
nell’altra il trasferimento dati può continuare (gli ACK non sono
considerati come traffico originato, ma come risposta al traffico)
– per chiudere completamente la connessione, la procedura di
half close deve avvenire anche nell’altra direzione

Reti - [email protected] - Livello Trasporto 68


Terminazione della Connessione

A B

FIN(PortA, PortB)

FINACK(PortB, PortA)

DATA()
DATA()
ACK()
ACK()

FIN(PortB, PortA)

FINACK(PortA, PortB)

time

Reti - [email protected] - Livello Trasporto 69


Terminazione con RST

• La terminazione “gentle” è molto lenta e complessa, e si presta a


attacchi DoS
• La maggior parte delle applicazioni moderne (soprattutto i grandi
web server) terminano la connessione con un singolo RST
• RST nasce come “disaster recovery” per liberare le risorse logiche
in caso di impossibilità di comunicazione
• Se l’altro end-point della connessione riceve RST libera anche lui le
risorse logiche A B

RST(PortA, PortB)

time

Reti - [email protected] - Livello Trasporto 70


Gestione del timeout

• Il timeout (RTO à Retransimission Time Out) indica il tempo entro il quale la


sorgente si aspetta di ricevere il riscontro (ack)
– nel caso in cui il riscontro non arrivi, la sorgente procede alla ritrasmissione
• RTO non può essere un valore statico predefinito
– il tempo di percorrenza sperimentato dai segmenti è variabile e dipende
• dalla distanza tra sorgente e destinazione
• dalle condizioni della rete
• dalla disponibilità della destinazione
– esempio: fattorino che deve consegnare un pacco in città
• RTO deve dunque essere calcolato dinamicamente di volta in volta
– durante la fase di instaurazione della connessione
– durante la trasmissione dei dati
• Il calcolo di RTO si basa sulla misura del RTT (Round Trip Time)
– RTT: intervallo di tempo tra l’invio di un segmento e la ricezione del
riscontro di quel segmento

Reti - [email protected] - Livello Trasporto 71


Stima del Round Trip Time

SRTT = (1- α) SRTT + α RTT

RTT = valore del campione attuale di RTT


SRTT = stima smoothed di RTT

• Poiché RTT può variare anche molto in base alle condizioni della rete, il
valore di RTT (SRTT, Smoothed RTT) utilizzato per il calcolo di RTO risulta
una stima del valor medio di RTT sperimentato dai diversi segmenti
• Il parametro α è regolabile e, a seconda dei valori assunti, rende il peso
della misura di RTT istantaneo più o meno incisivo
– se α à 0 il SRTT stimato risulta abbastanza stabile e non viene
influenzato da singoli segmenti che sperimentano RTT molto diversi
– se α à 1 il SRTT stimato dipende fortemente dalla misura puntuale dei
singoli RTT istantanei
– tipicamente α = 0.125 = (1/8)
Reti - [email protected] - Livello Trasporto 72
Stima del Round Trip Time

RTTVAR = (1- b) RTTVAR + b |SRTT – RTT|

RTTVAR = stima smoothed della varianza di RTT

• Tipicamente b = 0.25 = (1/4)


• La RTTVAR può anche essere molto maggiore di SRTT
• La sua stima usa un filtro meno stretto, per cui la stima è più
“reattiva”
• Conoscere media e varianza di RTT serve a impostare
correttamente il timeout di ritrasmissione

Reti - [email protected] - Livello Trasporto 73


Stima di RTO
A B
• RTO = SRTT + 4 RTTVAR RTT
segm. X
ACK

segm. X+1

• La sorgente attende il RTT medio (SRTT) più RTO

quattro volte la sua varianza (RTTVAR) prima di segm. X+1


ACK
considerare il segmento perso e ritrasmetterlo segm. X+2

• In caso di ritrasmissione, il RTO per quel segmento


ACK

segm. X+3
viene ricalcolato in base ad un processo di RTO
exponential backoff segm. X+3

– se è scaduto il RTO, probabilmente c’è ACK

congestione, quindi meglio aumentare il RTO


RTO’
per quel segmento
– RTO-retransmission = 2*RTO
segm. X+3

• RTO viene riportato al suo valore “calcolato” senza ACK

segm. X+4
backoff dopo la trasmissione corretta di un
RTO
segmento nuovo
segm. X+4
ACK

Reti - [email protected] - Livello Trasporto 74


Esempio di stima di RTT:

RTT: gaia.cs.umass.edu e fantasia.eurecom.fr


350

300
RTT (millisecondi)

250

200

150

100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
tempo (secondi)
Campione RTT Stime di RTT

Reti - [email protected] - Livello Trasporto 75


Stima di RTT e RTO

• RTO ha un valore minimo (normalmente intorno a 200ms) e uno


massimo (normalmente 60s e oltre)
• Implementazioni moderne usano l’opzione “timestamp” per il
calcolo di RTT, ma i principi base di adattamento alle condizioni
della rete rimane lo stesso:
– viene stimato un valore medio e una deviazione media di RTT
– RTO viene calcolato in base a questi valori medi

• Nelle implementazioni, inoltre, si tiene conto di altri fattori che


possono influenzare il calcolo di RTT e di RTO:
– esempio: il RTT dei segmenti ritrasmessi dovrebbe influenzare
il SRTT e quindi il RTO?

Reti - [email protected] - Livello Trasporto 76


Congestione: generalità

• In caso di congestione della rete, a causa dei buffer limitati degli


apparati di rete, alcuni segmenti potrebbero venire persi
• La perdita dei segmenti e il relativo scadere del timeout di
ritrasmissione è considerato un sintomo di congestione
– il TCP non ha altri mezzi per conoscere lo stato della rete
• La sorgente dovrebbe essere in grado di reagire diminuendo il
tasso di immissione dei nuovi segmenti
• Questa reazione viene detta “controllo della congestione”
– si differenzia dal controllo di flusso che invece definisce
tecniche per evitare il sovraccarico del ricevitore

Reti - [email protected] - Livello Trasporto 77


Congestione: cause

• Le ritrasmissioni rischiano di essere inutili nel caso in cui i


pacchetti vengono buttati via per mancanza di risorse
• Cos’è la congestione e come si genera?
• Congestione: lo stato di una rete in cui il traffico offerto η è
maggiore della capacità delal rete C
– normalizzando ρ = η/C allora ρ >= 1 significa congestione
• Esempio di singolo collo di bottiglia

S1 ricevitori
S2 100 Mbit/s
S3
... S50

Reti - [email protected] - Livello Trasporto 78


Cause/costi della congestione:1

r due mittenti,
due destinatari
r un router con buffer
illimitati
r nessuna
ritrasmissione

• throughput
massimo
• ritardo “infinito”

Reti - [email protected] - Livello Trasporto 79


Cause/costi della congestione: 2

r un router, buffer finiti


r il mittente ritrasmette il pacchetto perduto
Host A λin : dati λout
originari
λ'in : dati originari
più dati ritrasmessi
Host B

Buffer finiti e
condivisi per i
collegamenti in
uscita

Reti - [email protected] - Livello Trasporto 80


Cause/costi della congestione: 3

r Quattro mittenti D: Che cosa accade quando λ


in
r Percorsi multihop e λ aumentano?
r timeout/ritrasmissione in

Host A λout
λin : dati originari
λ'in : dati originari
più dati ritrasmessi
Buffer finiti e condivisi per i
collegamenti in uscita

Host B

Reti - [email protected] - Livello Trasporto 81


Cause/costi della congestione: 3

H λ
o
o
s u
t
A t

H
o
s
t
B

Un altro “costo” della congestione:


r Quando il pacchetto viene scartato, la capacità trasmissiva
utilizzata sui collegamenti di upstream per instradare il
pacchetto risulta sprecata!

Reti - [email protected] - Livello Trasporto 82


Approcci al controllo della congestione

Controllo di congestione end-to- Controllo di congestione assistito


end: dalla rete:
r nessun supporto esplicito r i router forniscono un
dalla rete feedback ai sistemi terminali
r la congestione è dedotta m un singolo bit per indicare la
osservando le perdite e i congestione (SNA, DECbit,
TCP/IP ECN, ATM)
ritardi nei sistemi terminali
m comunicare in modo esplicito
r metodo adottato da TCP al mittente la frequenza
trasmissiva

Reti - [email protected] - Livello Trasporto 83


Congestion Window

• In caso di congestione il controllo di flusso rallenta la sorgente


– se la rete è congestionata, arriveranno meno riscontri e quindi il
tasso di immissione diminuisce automaticamente
• La dimensione della finestra è ottimale? No!

• Soluzione per il controllo della congestione à variare


dinamicamente la dimensione della finestra di trasmissione
– la dimensione della finestra non è decisa a priori e statica, ma si
adatta alle situazioni (stimate) di carico
– tale finestra scorrevole e variabile viene denominata
“congestion window” (CWND)

Reti - [email protected] - Livello Trasporto 84


Esempio
A B
5
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 6

7
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 8
9
10

11
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 12
13
14
15
16

17
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

RTO

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 12
13

Reti - [email protected] - Livello Trasporto 85


Algoritmi di controllo della congestione

• Esistono diversi algoritmi che regolano la dimensione della finestra


(CWND) al variare delle condizioni di rete
• I due algoritmi base sono:
– Slow Start
– Congestion Avoidance
• Altri algoritmi sono stati definiti per aumentare l’efficienza del TCP
in caso di perdita (al posto del RTO)
– Fast Retransmit
– Fast Recovery
– SACK

Reti - [email protected] - Livello Trasporto 86


Slow Start e Congestion Avoidance

• Sono due diversi algoritmi che regolano la dimensione della finestra (l’utilizzo di
uno esclude l’utilizzo dell’altro)
• Slow Start
– per ciascun riscontro ricevuto la CWND può aumentare di un segmento
– questo implica che, quando si riceve un riscontro, si trasmettono due nuovi
segmenti (e non uno solo come nel caso in cui la CWND rimane fissa)
– l’evoluzione della CWND ha un andamento esponenziale
• al primo RTT la CWND=1, ricevuto il riscontro CWND = 2, ricevuti i due
riscontri CWND = 4, ...
• Congestion avoidance
– per ciascun riscontro ricevuto, la finestra aumento di 1/CWND (CWND è
espressa in numero di segmenti)
– questo implica che ad ogni RTT, in cui si ricevono un numero di riscontri pari
alla CWND, la CWND aumenta di un segmento
– l’evoluzione della CWND ha un andamento lineare

Reti - [email protected] - Livello Trasporto 87


Slow Start e Congestion Avoidance

• Durante la fase SS alla ricezione di ogni ACK valido e non


duplicato
CWND = CWND +MSS

• Durante la fase CA alla ricezione di ogni ACK valido e non


duplicato
CWND = CWND +MSS/CWND

Reti - [email protected] - Livello Trasporto 88


Esempio: Slow Start
A B
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 18 4

CWND

5
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 18
6

6
7
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 18 ...
4 10

11
tempo ...
RTT 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 18
...
18

NOTA: per semplificare la rappresentazione grafica, si assume che i segmenti vengano


generati e trasmessi tutti nello stesso istante e i corrispettivi riscontri vengano ricevuti
di conseguenza tutti insieme dopo un tempo pari a RTT (supposto costante)

Reti - [email protected] - Livello Trasporto 89


Esempio: Congestion Avoidance

A B
5
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 18 6
CWND 7

8 8
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 18
9
10
6 11

2
1
2
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 18
tempo 1
RTT 3
1
4
1
5
1
6

Reti - [email protected] - Livello Trasporto 90


Evoluzione della CWND

• Congestion Window (CWND)


– dimensione della finestra (espressa in byte o in numero di segmenti) di
trasmissione
• Receive Window (RECWND)
– dimensione della finestra di ricezione (espressa in byte o in numero di
segmenti) annunciata dalla destinazione; è il limite massimo che la CWND
può assumere
• Slow Start Threshold (SSTHRESH)
– dimensione della finestra (espressa in byte o in numero di segmenti)
raggiunta la quale, invece di seguire l’algoritmo di Slow Start, si segue
l’algoritmo di Congestion Avoidance
• RTT: tempo trascorso tra l’invio di un segmento e la ricezione del riscontro; in
condizioni di stabilità della rete e del carico, RTT rimane pressoché costante
• RTO: tempo che la sorgente aspetta prima di ritrasmettere un segmento non
riscontrato

Reti - [email protected] - Livello Trasporto 91


Evoluzione della CWND

• L’algoritmo che regola la dimensione della CWND è il seguente:


– all’inizio della trasmissione si pone
• CWND = 1 segmento (ovvero un numero di byte pari a MSS)
• SSTHRESH = RCVWND oppure SSTHRESH = RCVWND / 2
(dipende dalle implementazioni)
– la CWND evolve secondo l’algoritmo di Slow Start fino al
raggiungimento della SSTHRESH
– raggiunta la soglia SSTHRESH, la dimensione di CWND è
regolata dall’algoritmo di Congestion Avoidance
– la finestra cresce fino al raggiungimento di RCVWND

Reti - [email protected] - Livello Trasporto 92


Evoluzione CWND senza perdite

• Slow Start + Congestion Avoidance + RCWND


RCWND = 12
CWND [# seg.]

8
SSHRT = RCWND/2 = 6

t [RTT]

Reti - [email protected] - Livello Trasporto 93


Throughput

• Abbiamo visto che il throughput di un protocollo a finestra (fissa) è


dato dalla formula
Thr [bit/s] = DF [byte] * 8 / T [s]
• dove T è la durata della trasmissione e DF la dimensione della finestra

• E per un protocollo a finestra variabile?


• Dipenderà dalla finestra istante per istante e quindi nel lungo periodo
dall’integrale della finestra nel tempo

Thr [bit/s] = ⎰DF(t) dt


T

Reti - [email protected] - Livello Trasporto 94


Throughput

• Per avere buone prestazioni è fondamentale che TCP mantenga la


giusta dimensione della finestra
• Se RCVWND è troppo grande i pacchetti si accumulano nei buffer
della rete aumentando RTT ... e quindi la durata della connessione
per trasferire una data quantità di dati
• Questa è una forma di congestion control
• Funziona molto bene quando il collo di bottiglia è il link al
trasmettitore: i pacchetti si accumulano nel SO dell’host che
rappresenta un buffer molto grande

• RCVWND è il massimo, ma cosa accade in caso di congestione e


perdite?

Reti - [email protected] - Livello Trasporto 95


Recupero delle perdite

• TCP recupera le perdite con due meccanismi


• Scadenza RTO
• Ricezione di 3 ACK duplicati (4 ACK uguali) --> Fast Retransmit
• In ogni caso TCP ritrasmette il pacchetto perso (il primo della finestra
per costruzione) e gli ACK cumulativi garantiscono che il meccanismo
sia di tipo selective-repeat.
• Se scade RTO TCP “ricomincia da capo”
• Se si usa Fast Retransmit TCP lo abbina a un meccanismo che si
chiama Fast Recovery il cui scopo è dimezzare la finestra al momento
della perdita e entrare in congestion avoidance

• Vediamo i diversi casi in dettaglio ...


Reti - [email protected] - Livello Trasporto 96
Recupero con RTO

Alla scadenza di RTO TCP:


1. RTO = RTO*2 ; SSHTHR = CNGWND/2
2. CNGWND = MSS (1 segmento)
3. Ritrasmette il primo segmento della finestra
4. Attende di ricevere l’ACK
5. Quando (e se) riceve ACK: WLow = (ACK Number)
6. Se (ACK Number) > WUp
ricomincia funzionamento normale
Altrimenti
ritrasmette un segmento ricominciando dal punto 3
7. Se scade RTO ricomincia dal punto 1. per 10 volte; e per ulteriori
6 volte senza incrementare RTO ... poi si arrende
Reti - [email protected] - Livello Trasporto 97
Recupero con RTO
A B
Ragioniamo a segmenti 10
11
WLow = 10; CNGWND = 5; WUp = 14 12
Fase Congestion Avoidance 13
14 X A11
Segmento perso No. 11
A11 DupACK
A11 DupACK
La finestra NON cresce perché 15
A11 DupACK

non sono stati ricevuti CNGWND ACK ignore


Ignore
ignore A11 DupACK

ignore

~~ ~~
RTO Expires Ret 11
RTO = RTO*2
A16

WLow = 16; CNGWND = 1; WUp = 16 Fine recupero


SSTHR = 5*MSS/2 16
Riparte in slow start
Reti - [email protected] - Livello Trasporto 98
Recupero con RTO

Dinamica della finestra: RTT = 20ms; RTO = 200ms; RCWND = 40 segmenti (~64K)

La finestra in questa slide rappresenta il numero effettivo di segmenti inviati nel RTT
CWND [# seg.]

8 Ci vogliono 18 RTT perché CNGWND


ritorni al valore di 5 segmenti
segmento
Se la finestra è più grande e il rapporto RTO/RTT
ritrasmesso
maggiore ... le cose vanno ancora peggio
4
SSHRT = 2.5
2 RTO = 10 RTT

12 12 18
t [RTT]

Reti - [email protected] - Livello Trasporto 99


Recupero con RTO perdite multiple

Dinamica della finestra: RTT = 20ms; RTO = 200ms; RCWND = 40 segmenti (~64K)
Seconda perdita quanto CNGWND ha raggiunto 8 segmenti
La finestra in questa slide rappresenta il numero effettivo di segmenti inviati nel RTT

In presenza di perdite
CWND [# seg.]

il funzionamento è una sequenza


di trasmissioni “burst” seguite dai
lunghi silenzi dell’RTO
8

SSHRT = 4
4
SSHRT = 2.5
2 RTO = 10 RTT RTO = 10 RTT

12 12 18
t [RTT]

Reti - [email protected] - Livello Trasporto 100


Recupero con Fast Retransmit

Quando vengono ricevuti 3 ACK duplicati:


1. SSHTHR = CNGWND/2
2. CNGWND = MSS (1 segmento)
3. Ritrasmette il primo segmento della finestra
4. Attende e scarta (ignora) tutti i DupACK successivi
5. Quando (e se) riceve ACK non duplicato: WLow = (ACK Number);
WUp = WLow + CNGWND
6. Se (ACK Number) > WUp
ricomincia funzionamento normale
Altrimenti
ritrasmette un segmento ricominciando dal punto 3
7. Se scade RTO (es. perdita segmento ritrasmesso) si comporta
come con recupero con RTO
Reti - [email protected] - Livello Trasporto 101
Recupero con Fast Retransmit
A B
Ragioniamo a segmenti 10
11
WLow = 10; CNGWND = 5; WUp = 14 12
Fase Congestion Avoidance 13
14 X A11
Segmento perso No. 11
A11 DupACK
A11 DupACK
La finestra NON cresce perché 15
A11 DupACK
non sono stati ricevuti CNGWND ACK
Dup ACK 1
Dup ACK 2
Dup ACK 3 A11 DupACK
Ret 11

ignore A16
Fine recupero
16

WLow = 16; CNGWND = 1; WUp = 16


SSTHR = 5*MSS/2
Riparte in slow start
Reti - [email protected] - Livello Trasporto 102
Recupero con Fast Retransmit

Dinamica della finestra: RTT = 20ms; RTO = 200ms; RCWND = 40 segmenti (~64K)

La finestra in questa slide rappresenta il numero effettivo di segmenti inviati nel RTT

segmento
CWND [# seg.]

ritrasmesso.
I 3 dup ACK impiegano
meno di un RTT (per
8 definizione) CNGWND ritorna al valore di 5 segmenti in
“soli” 8 RTT.
Se le perdite sono casuali, comunque TCP
non riesce a mantenere una finestra e un
4 throughput elevati
SSHRT = 2.5
2

12 8
t [RTT]

Reti - [email protected] - Livello Trasporto 103


Dinamica della finestra: RTT = 20ms; RTO = 200ms; RCWND = 40 segmenti (~64K)
Seconda perdita quanto CNGWND ha raggiunto 8 segmenti
La finestra in questa slide rappresenta il numero effettivo di segmenti inviati nel RTT
CWND [# seg.]

In presenza di perdite
8 il funzionamento è una sequenza
di fasi di crescita della finestra
seguite da una caduta a “zero”
SSHRT = 4
4
SSHRT = 2.5
2

12 10 15
t [RTT]

Reti - [email protected] - Livello Trasporto 104


Recupero con Fast Retransmit / RTO

• Usando i semplici meccanismi di RTO e Fast Retransmit TCP


implementa ritrasmissione selettiva
• Può recuperare un segmento perso ciascun RTT
• RTO è molto inefficiente
• Fast Retransmit migliora efficienza, ma il funzionamento continua ad
essere “a singhiozzo”
• Idea: anziché “ricominciare da capo” si può entrare direttamente in
congestion avoidance mettendo CNGWND = SSTHR
• Però senza altri accorgimenti si rischia di ritrasmettere segmenti già
ricevuti

Reti - [email protected] - Livello Trasporto 105


Fast Recovery

• L’idea di base è quella di ottenere una “oscillazione” di CNGWND “a


dente di sega” dimezzando la finestra in caso di perdite e
incrementandola linearmente quando non ci sono perdite
16
perdite
CWND [# seg.]

t [RTT]
• Bisogna evitare ritrasmissioni
• Bisogna evitare timeout
• Sarebbe meglio evitare l’attesa di un RTT se si continuano a ricevere
ACK duplicati
Reti - [email protected] - Livello Trasporto 106
Recupero con Fast Recovery

Quando vengono ricevuti 3 ACK duplicati:


1. SSHTHR = CNGWND/2
2. Ritrasmette il primo segmento della finestra
3. CNGWND = SSHTHR + 3MSS (3 Dup ACK ricevuti); se la finestra lo
consente invia nuovi segmenti
4. Per ogni nuovo Dup ACK CNGWND = CNGWND + MSS e invia un
nuovo segmento se la finestra lo consente
5. Quando (e se) riceve ACK non duplicato: WLow = (ACK Number)

Reti - [email protected] - Livello Trasporto 107


Recupero con Fast Reovery

1. Se (ACK Number) > WUp


CNGWND = SSHTHR
ricomincia funzionamento normale in congestion avoidance
Altrimenti
ritrasmette un segmento rimane in Fast Recovery
riprendendo dal punto 4, a questo punto gli ACK duplicati si
riferiscono al secondo segmento ritrasmesso
2. Se scade RTO (es. perdita segmento ritrasmesso) si comporta
come con recupero con RTO

Reti - [email protected] - Livello Trasporto 108


Recupero con Fast Recovery
A B
Ragioniamo a segmenti 10
11
WLow = 10; CNGWND = 5; WUp = 14 12
Fase Congestion Avoidance 13
14 X A11
Segmento perso No. 11
A11 DupACK
A11 DupACK
La finestra NON cresce perché 15
A11 DupACK
non sono stati ricevuti CNGWND ACK
Dup ACK 1
Dup ACK 2
WLow = 10; WUp = 16 Dup ACK 3 A11 DupACK
SSTHR = 5*MSS/2 Ret 11
CNGWND = SSHTR+3
Non può trasmettere 16 A16
nuovi segmenti Fine recupero
17 A17
CNGWND = CNGWND + 1
18
trasmette nuovo segmento 19
A18

CNGWND = SSTHR 20 A19


A20
21
trasmette nuovo segmento
A21
CNGWND = CNGWND + MSS/2 = 3 A22

trasmette 2 nuovi segmenti


Reti - [email protected] - Livello Trasporto 109
Recupero con Fast Recovery

Dinamica della finestra: RTT = 20ms; RTO = 200ms; RCWND = 40 segmenti (~64K)

La finestra in questa slide rappresenta il numero effettivo di segmenti inviati nel RTT

CNGWND = SSTHR + 3 = 5
CWND [# seg.]

non consente di inviare


nuovi segmenti
Nuovo Dup ACK ricevuto
8 CNGWND = CNGWND +1
invia un nuovo segmento (17)

4 CNGWND ritorna al valore di 5 segmenti


SSHRT = 2.5 sempre in 8 RTT, ma con Fast Recovery ha
2 trasmesso 3 segmenti in più nello stesso tempo

12 8 segmento
ritrasmesso t [RTT]

Reti - [email protected] - Livello Trasporto 110


Recupero perdite: riassunto

• RTO implementa ritrasmissioni selettive, funziona sempre, ma spreca


moltissime risorse (tempo)
• Fast Retransmit abbatte il tempo di recupero, consente di recuperare
un segmento per RTT (anziché RTO), ma è ancora piuttosto
inefficiente
• Fast Recovery è molto complesso e ci sono casi in cui ... si inceppa à
RTO
• Quando funziona correttamente Fast Recovery sostiene la
trasmissione di nuovi pacchetti mentre recupera quelli persi.

Reti - [email protected] - Livello Trasporto 111


Crescita finestra

• Lo standard prevede che la finestra in CA cresca linearmente con RTT


• Diverse implementazioni non rispettano questa indicazione
• Linux à TCP Cubic
• Windows à TCP Compound
• Il risultato è ... un po’ di caos in rete (ancora?!?!)

• TCP dovrebbe controllare la congestione ed essere anche equo


• Abbiamo già visto che in realtà dipende da RTT
• Con diverse “logiche di crescita della finestra è ancora peggio

Reti - [email protected] - Livello Trasporto 112


Implementazioni non standard

• TCP CUBIC (Linux)

• TCP Compound
(MS Windows)
Equità di TCP

Equità: se K sessioni TCP condividono lo stesso


collegamento con ampiezza di banda R, che è un collo di
bottiglia per il sistema, ogni sessione dovrà avere una
frequenza trasmissiva media pari a R/K.

Connessione
TCP 1

Capacità del
router R,
Connessione
il collo di bottiglia
TCP 2

3-114
TCP è equo?
Due connessioni in concorrenza tra loro:
r L’incremento additivo determina una pendenza pari a 1, all’aumentare del
throughout
r Il decremento moltiplicativo riduce il throughput in modo proporzionale

R Condivisione della stessa


ampiezza di banda

perdita: riduce la finestra di un fattore 2


congestion avoidance: incremento additivo
perdita: riduce la finestra di un fattore 2
congestion avoidance: incremento additivo

R
Throughput della connessione 1

Potrebbero piacerti anche