Capitolo 3
Capitolo 3
Livello di trasporto
host differenti
i protocolli di trasporto vengono
eseguiti sugli end system
lato invio: divide i messaggi in
segmenti e li passa al livello di
rete
lato ricezione: riassembla i applicazione
segmenti in messaggi e li passa trasporto
rete
al livello di applicazione link
fisico
rete
applicazione
ritorno 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
lato lato
invio ricezione
mittente ricevente
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
U L/R .008
sender = = = 0.00027
RTT + L / R 30.008
U 3L / R .0024
sender = = = 0.00081
RTT + L / R 30.008
byte
checksum urg pointer
finestra di dimensione
acknowledgement: N
l’utente
digita
‘C’ Seq=42, ACK=79, data = ‘C’
l’host
riscontra la
ricezione
Seq=79, ACK=43, data = ‘C’ di ‘C’ e
l’host riscontra
la ricezione reinvia ‘C’
della ‘C’
reinviata Seq=43, ACK=80
350
300
250
RTT (milliseconds)
200
sampleRTT
150
EstimatedRTT
100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
tempo (secondi) Livello di trasporto 3-60
SampleRTT Estimated RTT
TCP round trip time, timeout
intervallo di timeout : EstimatedRTT più un “margine di
sicurezza”
grande variazione di EstimatedRTT -> margine di sicurezza maggiore
viene stimata la deviazione SampleRTT da EstimatedRTT:
DevRTT = (1-)*DevRTT +
*|SampleRTT-EstimatedRTT|
(typically, = 0.25)
SendBase=92
Seq=92, 8 byte di dati Seq=92, 8 byte di dati
timeout
ACK=100
X
ACK=100
ACK=120
SendBase=120
ACK=100
X
ACK=120
ACK cumulativo
Livello di trasporto 3-67
TCP: generazione di ACK [RFC 1122, RFC 2581]
ACK=100
timeout
ACK=100
ACK=100
ACK=100
Seq=100, 20 byte di dati
controllo di flusso
codice
il destinatario modera il mittente, IP
così da non sovraccaricare il buffer
del destinatario trasmettendo
troppi dati, troppo velocemente dal mittente
rete rete
chiusa
connectionSocket, addr =
serverSocket.accept()
L clientSocket.connect(
SYN(x) (serverName,serverPort))
SYNACK(seq=y,ACKnum=x+1)
crea una nuova socket per SYN(seq=x)
communicare con il client ascolto
SYN SYN
ricevuto inviato
SYNACK(seq=y,ACKnum=x+1)
ESTAB ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
LAST_ACK
FINbit=1, seq=y
TIME_WAIT non può più
inviare dati
ACKbit=1; ACKnum=y+1
tempo pari a
2*max tempo CLOSED
di vita di un segmento
CLOSED
R/2
delay
lout
Host A
lout
il mittente invia solo
quando i buffer dei router
sono disponibili lin R/2
A
no spazio nel buffer!
Host B
Livello di trasporto 3-85
Cause/costi della congestione: scenario 2
idealizzazione: perdite note R/2
capacità “sprecata”
i pacchetti possono essere per le ritrasmissioni
throughput: lout
persi, scartati dai router a inviando a R/2,
causa dei buffer pieni alcuni pacchetti
il mittente re-invia solo se sono
ritrasmissioni
sa che il pacchetto è andato
perso lin R/2
lin : dati originali
lout
l'in: dati originali, più
dati ritrasmessi
Host B
Livello di trasporto 3-86
Cause/costi della congestione: scenario 2
realistico: duplicati non necessari R/2
throughput: lout
per ritrasmissioni
persi, scartati dai router a inutili
causa dei buffer pieni inviando a R/2,
il mittente, per time out alcuni pacchetti
prematuri, invia due copie, sono ritrasmissioni
inclusi i duplicati
entrambe trasmesse inutili che sono
lin R/2 trasmessi!
lin
timeout
copy l'in lout
A
free buffer space!
Host B
Livello di trasporto 3-87
Cause/costi della congestione: scenario 2
realistico: duplicati non necessari R/2
throughput: lout
per ritrasmissioni
persi, scartati dai router a inutili
causa dei buffer pieni inviando a R/2,
il mittente, per time out alcuni pacchetti
prematuri, invia due copie, sono ritrasmissioni
inclusi i duplicati
entrambi trasmesse inutili che sono
lin R/2 trasmessi!
Host D
Host C
C/2
lout
lin’ C/2
Dente di sega
TCP rate di invio mittente
AIMD:
sondare
la bandwidth
Perché AIMD?
AIMD – un algoritmo distribuito e asincrono – è stato
dimostrato che:
• ottimizza i flussi congestionati su tutta la rete!
• ha le necessarie proprietà di stabilità
RTT
evento di perdita
• inizialmente cwnd = 1 MSS
• raddoppia cwnd ogni RTT
• cwnd è incrementato a ogni
ACK ricevuto
risultato: il rate iniziale è lento
ma si impenna con velocità
esponenziale tempo
D: quando la crescita da
esponenziale deve
passare a lineare?
X
R: quando cwnd raggiunge
1/2 del suo valore prima
del timeout.
Implementazione:
ssthresh variabile
in caso di perdita,
ssthresh viene
impostata a 1/2 del valore
di cwnd prima della
perdita
TCP CUBIC -
Wmax/2 maggior
throughput in
questo
esempio
sorgente destinazione
application application
TCP TCP
network network
link link
physical physical
coda di pacchetti quasi
mai vuota, talvolta in
overflow (perdita)
fatto: incrementare il
rate di invio TCP
aumenterà l’RTT
misurato Goal: “tenere la pipe end-end quasi piena, ma non piena”
# byte inviati
nell’ultimo
RTTmisurato throughput intervallo RTT
misurato =
RTTmisurato
Approccio delay-based :
RTTmin - RTT minimo osservato (cammino non congestionato)
il throughput non congestionato con finestra cwnd è cwnd/RTTmin
se il throughput misurato è “molto vicino” al throughput non congestionato
incrementa cwnd linearmente /* visto che il cammino non è congestionato */
se il throughput misurato è “molto al di sotto” del throughput non congestionato
decrementa cwnd linearmente /* visto che il cammino è congestionato */
Livello di trasporto 3-103
Controllo di congestione delay-based
ECN=10 ECN=11
datagramma IP
connessione TCP 1
router
bottleneck
con capacità R
connessione TCP 2
Scenario Sfide
Pipe lunghe e piene (grossi Molti pacchetti “in circolo”; le perdite
trasferimenti di dati) rallentano le pipe
Reti wireless Perdite dovute a link wireless rumorosi,
mobilità; il TCP le considera congestione
Long-delay link RTT estremamente lunghi
Reti di data center Sensibili alla latenza
Flussi di traffico background Dare una priorità più bassa
Network IP IP
handshake TCP
(transport layer) Handshake QUIC
dati
handshake TLS
(sicurezza)
dati
HTTP
GET
HTTP
application
GET
HTTP
GET
HTTP
GET HTTP
GET
HTTP
application
GET
UDP UDP