Livello Trasporto
TCP, UDP, ICMP
Transport Layer
3-1
Dove siamo
application
transport
network
data link
physical
application
transport
network
data link
physical
application
transport
network
data link
physical
Il livello di trasporto
Transport Layer
3-3
Principali funzioni offerte dal liv. Rete verso il liv. trasporto
Transport Layer
3-4
Send(ip1,ip2,data[])
Data[] Receive()
Connect(), Disconnect()
UDP
UDP Risolve solo i problemi di corruzione dei pacchetti, e vi da la possibilità di differenziare il traffico per numero di porta (multiplexing/demultiplexing).
DNS usa UDP.
Transport Layer
3-5
Come funziona il demultiplexing
Transport Layer: 3-6
source port #
dest port #
32 bits
application
data
(payload)
other header fields
TCP/UDP segment format
UDP checksum
Transport Layer
3-7
Checksum
Transport Layer
3-8
Transport Layer
3-9
Come è connesso TCP/UDP/ICMP allo strato applicazione
Transport Layer
3-11
Comunicazione TCP: Passo 1
Transport Layer
3-12
Transport Layer
3-13
Implementazione. Stop & Wait
Transport Layer
3-14
Stop & Wait in azione
Transport Layer
3-15
Altri scenari
Transport Layer
3-16
N.B. Problema del pacchetto vagabondo
Problema del pacchetto vagabondo
Performance di stop & wait
Transport Layer
3-18
T
trasmiss
=
8kb/pkt
10**9 b/sec
= 8 microsec
L (in bit)
B
=
Da dove deriva la formula (demo)
Transport Layer
3-19
Trasmissione del primo bit, t = 0
sender
receiver
RTT
Trasmissione dell’ultimo bit, t = L / B
Il primo bit arriva
L’ultimo pacchetto arriva,
Invio ACK (assumiamo sia
di dim trascurabile)
ACK arriva, parte il prossimo pacchetto al tempo t = RTT + L / B
Comunicazione TCP: passo 2
Transport Layer
3-20
Protocolli pipeline (a finestra scorrevole)
Pipelining: ci possono essere più pacchetti “in volo”, ancora da essere confermati
Transport Layer
3-21
Pipelining: %utilizzo migliore
Transport Layer
3-22
Trasmissione primo bit, t = 0
sender
receiver
RTT
Trasmissione ultimo bit, t = L / R
Arriva il primo bit, primo pacchetto
Ultimo bit arriva, mando ACK(1)
Arriva ACK(1) mando il pacchetto successivo
t = RTT + L / R
Ultimo bit 2do pacchetto arriva, ACK(2)
Ultimo bit 3° pacchetto arriva, mando ACK(3)
Utilizzo
triplicato
Go-Back-N (demo)
Sender:
Transport Layer
3-23
GBN in�azione
Transport Layer
3-24
Ripetizione selettiva (demo)
Transport Layer
3-25
Finestre di ricezione e invio
Transport Layer
3-26
Ripetizione selettiva
Ci sono dati nel buffer:
Timeout(n):
ACK(n) in [sendbase,sendbase+N]:
Transport Layer
3-27
sender
pkt n in [rcvbase, rcvbase+N-1]
pkt n in [rcvbase-N,rcvbase-1]
altrimenti:
receiver
Selective repeat in azione
Transport Layer
3-28
Problemi
Esempio:
P: Bisogna riconoscere e scartare I duplicati
Transport Layer
3-29
TCP segment structure
Transport Layer
3-30
source port #
dest port #
32 bits
application
data
(variable length)
sequence number
acknowledgement number
Receive window
Urg data pnter
checksum
F
S
R
P
A
U
head
len
not
used
Options (variable length)
URG: Dati urgenti
(non molto usato)
ACK: Questo�segmento trasporta�un ACK
PSH: dati ad�alta priorità
RST, SYN, FIN:
Gestione�Connessione
Numero
di byte
che si è
disposti
ad accettare
al massimo
valori
espressi in byte
(non in numero
di segmento)
Checksum
(come in UDP)
Numeri di Sequenza e di ACK
N. seq:
ACK:
L’implementatore può decidere se conservare I segmenti fuori ordine o scartarli
Differenze pratiche: numerazione in byte, pacchetto di dim. variabile, piggybacking
Transport Layer
3-31
Host A
Host B
Seq=42, ACK=79, data = ‘Ciao’
Seq=79, ACK=46, data = ‘Ehi’
Seq=46, ACK=82
L’utente
Scrive
“ciao”
Ricevuta
Di ritorno per
‘Ehi’
B risponde
con
‘Ehi’, e fa
ACK fino a 46
tempo
Situazioni di ritrasmissione
Transport Layer
3-32
Host A
Seq=100, 20 bytes data
ACK=100
time
Time out prematuro
Host B
Seq=92, 8 bytes data
ACK=120
Seq=92, 8 bytes data
Seq=92 timeout
ACK=120
Host A
Seq=92, 8 bytes data
ACK=100
loss
timeout
ACK disperso
Host B
X
Seq=92, 8 bytes data
ACK=100
time
Seq=92 timeout
SendBase
= 100
SendBase
= 120
SendBase
= 120
Sendbase
= 100
ACK cumulativo
Transport Layer
3-33
Host A
Seq=92, 8 bytes data
ACK=100
loss
timeout
ACK cumulativo
Host B
X
Seq=100, 20 bytes data
ACK=120
time
SendBase
= 120
TCP Connection Management
TCP necessità di aprire una connessione prima di trasmettere
Socket clientSocket = new Socket("hostname","port number");
Socket connectionSocket = welcomeSocket.accept();
Handshake a tre vie:
Step 1: Il client manda un TCP SYN al server
Step 2: Il server riceve la richiesta, replica con un pacchetto SYN/ACK
Step 3: Il client riceve SYN/ACK, risponde con un ACK, che può contenere dati
Transport Layer
3-34
Transport Layer
3-35
TCP Connection Management (cont.)
Chiusura di una connessione:
Il client chiude il socket: clientSocket.close();
Step 1: il client manda TCP FIN per dire che vuole chiudere
Step 2: il server riceve FIN, risponde con ACK. Chiude la connessione, e manda FIN a sua volta
Transport Layer
3-36
client
FIN
server
ACK
ACK
FIN
close
close
closed
timed wait
TCP Connection Management (cont.)
Step 3: il client riceve FIN, risponde con ACK.
Step 4: il server riceve ACK. Fine della conversazione.
Nota: ci sono piccoli accorgimenti per gestire la chiusura contemporanea.
Transport Layer
3-37
client
FIN
server
ACK
ACK
FIN
closing
closing
closed
timed wait
closed
Diagramma a stati per un client che apre, usa e infine decide di chiudere una connessione
Transport Layer
3-38
Parte dell’automa tipica di chi chiude
Per primo la connessione �(potrebbe essere anche il �server a cominciare la chiusura)
Transport Layer
3-39
Diagramma a stati per un server che riceve una richiesta di connessione, usa e infine riceve una richiesta di chiusura di una connessione
Parte dell’automa tipica di chi chiude
per secondo la connessione �(potrebbe essere anche il �client)
Come in TCP si decide il tempo di time-out
D: come impostare questo valore?
D: Come stimare RTT?
Transport Layer
3-40
Come TCP decide il tempo di time-out (2)
Transport Layer
3-41
EstimatedRTT = (1 - α)*EstimatedRTT + α*SampleRTT
Esempio di stima RTT:
Transport Layer
3-42
Come in TCP si decide il tempo di time-out (3)
Impostare il timeout:
Transport Layer
3-43
TimeoutInterval = EstimatedRTT + 4*DevRTT
DevRTT = (1-β)*DevRTT +
β*|SampleRTT-EstimatedRTT|
(tipicamente, β = 0.25)
Quindi si calcola il time-out con la formula:
Controllo di flusso (demo)
Transport Layer
3-44
Il mittente si ‘controlla’ per non affogare il destinatario
flow control
Come funziona il controllo di flusso
(Per comodità supponiamo i segmenti fuori ordine non vengano conservati)
= RcvWindow
= RcvBuffer-[LastByteRcvd - LastByteRead]
Transport Layer
3-45
Transport Layer
3-46
time
Andamento
a dente di sega
MSS = Maximum Segment Size
Avvio ad accelerazione esponenziale
Transport Layer
3-47
Controllo di congestione
Transport Layer
3-48
Esempio di strategia di controllo di congestione
Transport Layer
3-49
Problemi del controllo di congestione classico