Capitolo 3 - parte 3
Corso Reti ed Applicazioni
Mauro Campanella
Elementi Base Trasporto Affidabile
Problema
Errori nei dati
Conseguenza nel protocollo
: controllo errori in ogni pacchetto
scambio informazioni e messaggi di
controllo
Errori nei messaggi : numeri di sequenza
Perdite di pacchetti : timer per ritrasmissione
Efficienza
: finestra di trasmissione (Go-Back-N)
intervallo grande di numeri di sequenza
Il modello è rappresentabile con una macchina a stati finiti, sia
per il mittente, che per il ricevente
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
2
Transmission control protocol (TCP) RFCs
793
879
896
1122
1323
2018+2883
2581+3390
2582
2988
3042
TCP - la definizione originale - Sett. 1981
TCP Maximum Segment Size (opt)
Nagle’s algorithm (TCP_NODELAY socket option)
Requirements for Internet Hosts
TCP Extensions for high speed (window scale opt.)
Selective ACKnowlegements (opt)
TCP congestion control
New Reno modification to TCP's Fast Recovery
Computing TCP retransmission timer
Enhancing TCP's Loss Recovery
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
3
Transmission Control Protocol (TCP)
Protocollo di trasporto che offre:
- un servizio affidabile
- orientato alla connessione
- punto - punto
- fra mittente e destinatario (end to end)
- trasporta uno stream di byte (non riconosce o
inserisce delimitazioni nel flusso di dati passato
dall’applicazione)
- in grado di riordinare i dati nei segmenti ricevuti
- in grado di eliminare i duplicati
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
4
Transmission Control Protocol (TCP)
Effettua una trasmissione che è
sempre creata full duplex :
– flusso dati ed informazione è
bidirezionale nella stessa
connessione
applicazione
Usa buffer di spedizione e
ricezione in modalità “sliding
window”:
applicazione
Socket
Socket
TCP send
buffer
TCP receive
buffer
segmenti
TCP send
buffer
TCP receive
buffer
segmenti
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
5
Transmission Control Protocol (TCP)
MSS: maximum segment size:
i dati dell’applicazione sono spezzati da TCP in segmenti
che hanno MSS come massima dimensione (in byte).
MSS è decisa all’inizio della connessione (attraverso una
esplicita opzione TCP o attraverso il valore di default)
I dati sono spediti in segmenti di dimensione variabile
decisa da TCP di volta in volta, in base allo stato della
connessione.
Acknowledgement:
lo scambio di informazione è basato su ACK, spediti dal
ricevente, normalmente con un leggero ritardo rispetto
alla ricezione del pacchetto.
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
6
Transmission Control Protocol (TCP)
Pipelining:
realizzato attraverso l’esistenza di buffer con finestra
scorrevole, di tipo Go-Back-N
Controllo di flusso:
dato che, ai capi della connessione, i nodi forniscono uno
spazio di buffering finito, attraverso i messaggi di ACK vi è
un’aggiustamento reciproco della velocità di trasmissione.
Controllo di congestione:
la perdita di pacchetti è usata come indice di congestione
e fa scattare meccanismi per diminuire la velocità di
trasmissione, prima dell’esaurimento dei buffer.
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
7
Header TCP: parti note
0
8
15
16
porta del mittente
24
31
porta del destinatario
numero di sequenza
numero di acknowledgement
lungh.
head.
In parole
da 32 bit !
(60 byte
massimo
di header)
riservati
U A P R S F
R C S S Y I
G K H TNN
checksum
dimensione finestra
num. sequenza urgente
Opzioni (se presenti)
dati
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
8
pseudo
header
protocollo
zero
32 bit indirizzo IP sorgente
32 bit indirizzo IP destinazione
porta del mittente
TCP:
segmento
per
checksum
lunghezza TCP
porta del destinatario
numero di sequenza
numero di acknowledgement
lungh.
head.
riservati
U A P R S F
R C S S Y I
G K H TNN
checksum
dimensione finestra
num. sequenza urgente
Opzioni (se presenti)
dati
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
9
Header TCP: i numeri di sequenza
Tutti i numeri di sequenza indicano il numero d’ordine di un byte
nel byte flow (dati), non il numero del segmento.
- Numero di sequenza (32 bit - circa 4 miliardi):
punta al primo byte della parte dati del pacchetto.
SYN e FIN sono un’eccezione e contano come un (1) byte.
All’inizio di ogni connessione il primo valore è scelto “a caso”
- Acknowledge sequence number:
indica il numero di sequenza del primo byte del prossimo
segmento atteso.
- Urgent pointer:
valido solo con il flag “URG” attivo. L’offset positivo dal
numero di sequenza del segmento corrente in cui vi è l’ultimo
byte (o il seguente … ) dei dati urgenti (non l’inizio ! … )
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
10
Header TCP: campi numeri di sequenza
0
8
15
16
porta del mittente
24
31
porta del destinatario
numero di sequenza
numero di acknowledgement
lungh.
head.
riservati
U A P R S F
R C S S Y I
G K H TNN
checksum
dimensione finestra
num. sequenza urgente
Opzioni (se presenti)
dati
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
11
Esempio di scambio di numeri di sequenza
Nodo A
Nodo B
L’utente
invia ‘C’
Seq =
S
Il nodo A invia
l’ACK di ricevuta
di ‘C’
42:43
:80(1
e q =79
(1), A
CK=7
9, da
ta = ‘
C’
), AC
Seq=4
= ‘C’
a
t
a
d
,
K=43
3:43(0
Il nodo B invia
l’ACK di ricevuta
di ‘C’ e invia l’eco
di ‘C’
), ACK
=80
tempo
Esempio con telnet
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
12
Header TCP: FLAGS
0
ACK: numero di
seq. ACK valido
8
16
porta del mittente
24
31
porta del destinatario
numero di sequenza
URG: urgent data
(raramente usato)
PSH: push dati
(raramente usato)
15
numero di acknowledgement
lungh.
head.
RST, SYN, FIN:
comandi connessione
(reset, creazione,
termine)
M. Campanella Corso Reti ed Applicazioni - Como 2005
riservati
U A P R S F
R C S S Y I
G K H TNN
checksum
dimensione finestra
num. sequenza urgente
Opzioni (se presenti)
dati
Cap 3 - 3 pag.
13
Header TCP: Flags
Singoli bit on (valore = 1) od off (valore = 0) che forniscono
informazioni di validità di altri campi dell’header o segnalano
eventi
URG : il puntatore contenuto nal campo urgent è valido
ACK : il numero di sequenza di acknowledge è valido
PSH : il ricevente deve passare l’informazione allo strato
superiore prima possibile
RST : reset (e termine) della connessione
SYN : richiesta di sincronizzare i numeri di sequenza per
iniziare una connessione
FIN
: richiesta di chiudere la connessione (in un senso)
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
14
Header TCP: FLAGS
0
8
15
16
porta del mittente
24
31
porta del destinatario
numero di sequenza
numero di acknowledgement
lungh.
head.
riservati
U A P R S F
R C S S Y I
G K H TNN
checksum
dimensione finestra
num. sequenza urgente
Opzioni (se presenti)
dati
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
15
Header TCP: Window Size
Window Size:
il numero di byte, cominciando da quello nel campo di ACK, che
il mittente del pacchetto è disposto ad accettare.
E’ un numero di 16 bit (massimo valore 65535), ma attraverso
l’opzione TCP di Window Scaling può essere aumentato fino a
65535*214 (circa 1 GB)
Ricevuti ed
inviato ACK
ACK number
window size
total TCP receive buffer size
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
16
Header TCP: Send buffer Size
receive window size
send buffer size
Inviati e
ricevuto
ACK
Inviati NON
ricevuto ACK
M. Campanella Corso Reti ed Applicazioni - Como 2005
Pronti
da
Inviare
liberi per
ricevere
dalla
applicazione
Cap 3 - 3 pag.
17
Header TCP: Opzioni
0
8
15
16
porta del mittente
24
31
porta del destinatario
numero di sequenza
numero di acknowledgement
lungh.
head.
riservati
U A P R S F
R C S S Y I
G K H TNN
checksum
dimensione finestra
num. sequenza urgente
Opzioni (se presenti- MAX 40 bytes)
dati
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
18
TCP options
Composte di tre campi: tipo, lunghezza e dati (TLD).
La lunghezza totale delle opzioni non può superare 40 byte.
Opzione
Fine Opzioni
No Operation
Maximum Segment
Size
Window Scale
Selective ACK
permesso
Selective ACK
Timestamp
M. Campanella Corso Reti ed Applicazioni - Como 2005
tipo lungh. (byte)
0
1
1
1
dati
no
no
2
3
4
3
MSS (2 byte)
Shift (1 byte)
4
5
8
2
varia
10
no
seq.number
Time (8 byte)
Cap 3 - 3 pag.
19
TCP Options
Fine lista
delle opzioni
Maximum
Segment Size
tipo=0
1 byte
Nessuna
operazione
Window scale
Factor (2N, N
massimo 14)
tipo=1
1 byte
valore MSS
tipo=2
lun=4
1 byte
1 byte
tipo=3
lun=3
valore
shift
1 byte
1 byte
1 byte
2 byte
Timestamp
tipo=8
lun=10
valore timestamp
echo reply timestamp
1 byte
1 byte
4 byte
4 byte
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
20
TCP Apertura connessione
Stretta di mano a tre fasi (three way handshake):
1: un nodo manda un segmento contenente
– il flag SYN (apertura attiva)
– un proprio nuimero di sequenza iniziale
– nessun dato
– opzioni per MSS, Window scale, timestamp
2: il ricevente replica al SYN con un segmento con SYN ed ACK:
– viene creato stato nel nodo (aperura passiva)
– il ricevente sceglie il proprio numero di sequenza iniziale
– invia la sua scelta di opzioni
3: Il primo nodo risponde con segmento con solo flag ACK ed
eventuali primi dati
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
21
TCP Apertura connessione
stato
CLOSED
SYN_SENT
ESTABLISHED
client
server
SYN 14155:14155 (0)
SYN 2347:2347 (0)
ACK 14156
stato
LISTEN
SYN_RCVD
ACK 2348 (0)
ESTABLISHED
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
22
TCP: Chiusura connessione
La chiusura deve essere esplicita
per ognuno dei due versi della
connessione.
Il primo nodo:
Quindi, il secondo nodo:
1: invia un segmento con FIN
3: invia un segmento con FIN
2: riceve un segmento con
l’ACK del FIN
4: riceve ACK e chiude la
connessione
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
23
TCP: Chiususra connessione
chiusura
attiva
chiusura
passiva
ESTABLISHED
ESTABLISHED
FIN
FIN_WAIT_1
ACK
FIN_WAIT_2
CLOSE_WAIT
FIN
ACK
LAST_ACK
TIME_WAIT
(2 MSL timeout)
CLOSED
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
24
TCP Chiusura connessione
Lo stato finale di “TIME_WAIT” corrisponde ad un periodo di
attesa di 2 Maximum Segment Lifetime (2 MSL).
2 MSL è scelto dalle diverse realizzazioni di TCP tra 30 secondi
e 2 minuti, anche se l’RFC iniziale specifica 2 minuti.
La permanenza in questo stato permette:
- di reinviare un ACK nel caso vada perso
- di bloccare la socket (cioè le coppie indirizzo, porta) per un
tempo sufficente a scartare segmenti duplicati ancora nella
rete. Questo impedisce che una nuova “incarnazione” della
socket possa prendere vecchi segmenti come nuovi.
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
25
TCP: FSM tipica per un client
in attesa per
2 MSL
L’applicazione inizia
la connessione TCP
invio SYN
riceve FIN
invia ACK
ricevuto ACK
rimane in attesa
M. Campanella Corso Reti ed Applicazioni - Como 2005
ricevuto SYN+ACK
invia ACK
invio
FIN
L’applicazione inizia
la chiusura della
connessione
Cap 3 - 3 pag.
26
TCP: FSM tipica per un server
riceve ACK
non invia nulla
invia FIN
ricevuto FIN
invia ACK
M. Campanella Corso Reti ed Applicazioni - Como 2005
L’applicazione apre
una socket TCP
ricevuto SYN
invia SYN+ACK
riceve ACK
non invia nulla
Cap 3 - 3 pag.
27
TCP FSM
ap
pl:
sen sen
d: d d
SY at
N a
Transizione normale
per un client
appl: close
send: FIN
Transizione normale
per un server
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
28
TCP: timer principali
TCP mantiene 4 tipi di timer diversi per ogni connessione:
1 - timer per le ritrasmissioni usato nell’attesa di un ACK
2 - timer di persistenza usato per continuare a scambiare
informazioni sulla dimensione della finestra anche
quando uno dei due nodi ha dichiarato di non avere
spazio disponibile
3 - timer di “keepalive” usato per evidenziare un reboot od
un crash dell’altro nodo, anche se in una fase di quiete.
4 - timer di “2 MSL” usato quando la connessione è nello
stato di TIME_WAIT
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
29
TCP stima di RTT
La scelta del valore del
timeout è fondamentale per
un buon funzionamento di
TCP.
Deve variare da connessione a
connessione ed essere legato
al valore di RTT, ma:
se troppo breve:
ritrasmissioni inutili.
se troppo lungo:
reazione lenta alla congestione
M. Campanella Corso Reti ed Applicazioni - Como 2005
Stima di RTT (SampleRTT):
tempo trascorso tra l’emissione
di un segmento ed il ricevimento
dell’ACK relativo
- ignorando le ritrasmissioni
- ambiguità per perdita di ACK
SampleRTT varia da segmento a
segmento. Si desidera avere una
stima più affidabile basata su
varie misure.
Cap 3 - 3 pag.
30
TCP stima del Round Trip Time
Il calcolo attuale del valore è basato su un algoritmo di
Van Jacobson che modifica le specifiche iniziali di TCP.
EstimatedRTT = (1- α)*EstimatedRTT + α*SampleRTT
Effettua il calcolo di un valore medio mobile, con peso
esponenziale.
L’influenza dei campioni passati descresce in modo
esponenziale. Il valore tipico è : α = 0.125
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
31
Esempio di calcolo di RTT
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr
350
RTT (milliseconds)
300
250
200
150
100
1
8
15
22
29
36
43
50
57
64
71
78
85
92
99
106
time (seconnds)
SampleRTT
M. Campanella Corso Reti ed Applicazioni - Como 2005
Estimated RTT
Cap 3 - 3 pag.
32
TCP RTT e valore per il Timeout
Il valore del Timeout viene basato sulla stima del valore
dell’RTT (EstimtedRTT) aumentato di un margine di
sicurezza. Per questo si usa anche la stima della variazione
dell’RTT
DevRTT = DevRTT +
β*( |SampleRTT-EstimatedRTT| - DevRTT )
(normalmente, β = 0.25)
Finalmente l’intervallo di timeout è calcolato come:
TimeoutInterval = EstimatedRTT + 4*DevRTT
M. Campanella Corso Reti ed Applicazioni - Como 2005
Cap 3 - 3 pag.
33
Scarica

segmenti duplicati