04 Transport Layer
04 Transport Layer
Renato Lo Cigno
http://disi.unitn.it/locigno/index.php/teaching-duties/computer-networks
Copyright
Creative Commons
Attribuzione-Non commerciale-Non opere derivate
2.5 Italia License
applicazione
• Caratteristiche comuni:
o multiplazione e demultiplazione mediante le porte
o ...
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
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
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
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
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
• 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
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
• 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 finestra di ricezione WR è
”la sequenza di PDU che il ricevitore è disposto ad accettare e
memorizzare”
WR
pacchetti pacchetto pacchetti
confermati atteso fuori sequenza
che non possono
essere accettati
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
• 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
• 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)
U L/R 0,008
mitt = =
30,008
= 0,00027
RTT + L / R
Mittente Ricevente
Primo bit del pacchetto trasmesso, t = 0
Ultimo bit del
pacchetto trasmesso, t = L / R
U L/R 0,008
mitt = =
30,008
= 0,00027
RTT + L / R
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
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
Finestra di trasmissione
Round trip time
• 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
HEADER 20 B
VARIABLE
DATA
LENGTH
(0 - MSS)
0 4 8 16 19 24 32
Source Port Destination Port
Sequence Number
Acknowledgment Number
Options Padding
0 15 31
0 15 31
0 15 31
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
0 15 31
Lunghezza dell’header
Sequence Number
in parole di 32 bit
Acknowledgment Number
0 15 31
Source Port Number Dest Port Number RiservatI per usi futuri
(es. ECN – Explicit
Sequence Number Congestion Notification)
Acknowledgment Number
0 15 31
0 15 31
• 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
0 15 31
• 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
A B
FIN(PortA, PortB)
FINACK(PortB, PortA)
DATA()
DATA()
ACK()
ACK()
FIN(PortB, PortA)
FINACK(PortA, PortB)
time
RST(PortA, PortB)
time
• 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
segm. X+1
segm. X+3
viene ricalcolato in base ad un processo di RTO
exponential backoff segm. X+3
segm. X+4
backoff dopo la trasmissione corretta di un
RTO
segmento nuovo
segm. X+4
ACK
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
S1 ricevitori
S2 100 Mbit/s
S3
... S50
r due mittenti,
due destinatari
r un router con buffer
illimitati
r nessuna
ritrasmissione
• throughput
massimo
• ritardo “infinito”
Buffer finiti e
condivisi per i
collegamenti in
uscita
Host A λout
λin : dati originari
λ'in : dati originari
più dati ritrasmessi
Buffer finiti e condivisi per i
collegamenti in uscita
Host B
H λ
o
o
s u
t
A t
H
o
s
t
B
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
• 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
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
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
8
SSHRT = RCWND/2 = 6
t [RTT]
ignore
~~ ~~
RTO Expires Ret 11
RTO = RTO*2
A16
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.]
12 12 18
t [RTT]
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.]
SSHRT = 4
4
SSHRT = 2.5
2 RTO = 10 RTT RTO = 10 RTT
12 12 18
t [RTT]
ignore A16
Fine recupero
16
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]
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]
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
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.]
12 8 segmento
ritrasmesso t [RTT]
• TCP Compound
(MS Windows)
Equità di TCP
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
Throughput della connessione 1