Sei sulla pagina 1di 60

Introduzione al protocollo

TCP

Facoltà di Ingegneria 2 Cesena


Lauree specialistiche
Reti di Telecomunicazioni LS
Prof. Franco Callegati
Lo strato 4 (Transport Layer)

•  Compito dello Strato 4


–  Svincolare gli strati superiori dai problemi di rete
•  Fornisce l’interfaccia fra le applicazioni e lo strato di rete
–  In relazione alla tipologia di informazioni da
trasmettere fornire un servizio di trasporto dati:
•  affidabile
•  il più economico possibile

•  T-s.a.p. è il punto di accesso al servizio


–  Punto di interazione fra applicazioni e TCP
–  Negli standard di Internet è chiamato Porta identificato
da un Numero di porta

2
Trasporto in Internet

•  Architettura protocollare tradizionale di Internet:


–  Tipologia di servizio: dati
–  Due protocolli di trasporto:
•  TCP: connection oriented
•  UDP: connectionless

•  Nuovi servizi multimediali:


–  Emergono problematiche di trasporto real time
–  Vengono definiti nuovi protocolli di trasporto
•  RTP, RTCP

3
Transmission Control Protocol - RFC 793

•  Obiettivi:
–  Controllo della comunicazione end-to-end e full-
duplex fra processi applicativi
–  Garanzia di affidabilità del trasporto
•  Assume che:
–  lo strato di rete fornisca solamente un semplice ed
inaffidabile servizio di trasferimento dei pacchetti di
tipo connectionless (quello che fa l’IP)
•  Consente la Multiplazione:
–  permette a più processi applicativi di utilizzare le sue
funzioni di comunicazione in contemporanea

4
RFC 793: introduzione

The Transmission Control Protocol (TCP) is intended


for use as a highly reliable host-to-host protocol
between hosts in packet-switched computer
communication networks, and in interconnected
systems of such networks.

… the primary purpose of the TCP is to provide


reliable, securable logical circuit or connection
service between pairs of processes …
… requires facilities in the following areas:
•  Basic Data Transfer
•  Reliability
•  Flow Control
•  Multiplexing
•  Connections
•  Precedence and Security
5
L’interfaccia Socket

•  Gli standard non specificano come gli applicativi


debbano interagire con i protocolli
•  L’interfaccia fra applicazione e TCP
–  non è standardizzata
–  dipende dall’implementazione del sistema operativo
–  viene comunemente chiamata Socket
•  Si dice Indirizzo della Socket (Socket Address)
un Numero di porta concatenato ad un indirizzo
di rete
Esempio: 137.204.57.1:80

6
End-point e Connessione

•  End-point o socket = numero di porta


concatenato all’indirizzo di rete
•  Connessione = associazione di due end-point
–  Le connessioni TCP sono
•  Full-duplex
•  Punto-punto (non viene gestito il multicast)
•  Il TCP opera in modo connection-oriented
–  applica le funzioni di controllo alle “connessioni”
–  deve prevedere tutte le procedure per
•  l’instaurazione
•  il controllo del corretto andamento
•  la chiusura di ogni connessione

7
Transmission Control Block

•  La gestione di una connessione richiede il


mantenimento di una serie di informazioni
relative alla connessione stessa
–  Connection-oriented ⇒ state-full ⇒ variabili di “stato”

•  Transmission Control Block (TCB)


–  Area di memoria dove vengono mantenute le variabili
relative ad una connessione TCP
•  Numeri di porta
•  Puntatori alle aree di memoria utilizzate per i buffer di
trasmissione e ricezione
•  Contatori
•  Ecc.

8
Connessioni

3300 3301
25 80
3301

137.204.59.10
137.204.59.85
137.204.59.11

Internet

9
Implementazioni dei servizi in Internet
•  Comunicazioni fra calcolatori (Host) = scambio di messaggi fra
processi applicativi (Applicazioni)
–  Un messaggio in arrivo ad un host è utilizzabile se è in esecuzione
(running) un processo applicativo che legge il messaggio e sa cosa
farsene
•  Client-server
–  Nel modello classico gli host in rete sono classificabili in due tipologie:
•  Server: mettono a disposizione risorse di elaborazione e dati
•  Client: ospitano applicazioni che, al fine di svolgere le relative funzioni, si
connettono ai server per ottenere risorse ed informazioni
–  La variante Peer-to-peer (P2P)
•  Gli host in rete sono tutti equivalenti (peer, appunto) e fungono
alternativamente sia da client che da server verso altri nodi
–  In una rete P2P qualsiasi nodo utilizza e mette a disposizione
contemporaneamente risorse ed informazioni in rete

10
Client-server
•  Il processo Server si predispone a ricevere una connessione
eseguendo una apertura passiva
–  Crea una socket, la collega ad una porta TCP e si mette in ascolto su
quella porta in attesa dell’arrivo di una richiesta di connessione (questo
processo nel mondo Unix è chiamato Demone)
•  Il processo Client esegue una apertura attiva tentando di collegarsi al
processo server di destinazione
•  Il client deve conoscere l’indirizzo IP e il Numero di porta del
dell’end-point di destinazione
–  Si è convenuto che i server utilizzino dei numeri di porta convenzionali
definiti in anticipo detti Well Known Ports
–  Le Well Known Ports sono registrate presso IANA

11
Classificazione dei numeri di porta

# Protocol Servizio
21 FTP-CONTROL File Transfer Protocol Trasferiento file (control)
20 FTP-DATA File Transfer Protocol Trasferimento files (dati)
23 TELNET Accesso via terminale
25 SMTP Trasferimento di posta elettronica
53 DNS Domain Name System Accesso al DNS
80 HTTP Web server
109 POP2 Post Office Protocol (Version 2) Lettura posta elettronica
22 SSH Secure Socket Accesso via terminale cifrato
110 POP3 Post Office Protocol (version 3) Lettura posta elettronica
137 NETBIOS Name Service.
Servizio di rete per applicazioni in
138 NETBIOS Datagram Service.
ambiente DOS (Windows)
139 NETBIOS Session Service.
443 HTTPS HTTP over SSL/TLS WEB cifrato

12
Affidabilità del collegamento

•  Il TCP garantisce la correttezza nella consegna


dei dati utilizzando un protocollo Sliding Window
basato su
–  numerazione sequenziale dei dati
•  unità di riferimento il byte
–  conferma esplicita della ricezione di ogni byte da parte
del ricevitore (acknowledge)
–  ritrasmissione dei dati di cui non viene confermata la
ricezione
•  Il TCP garantisce il controllo di flusso in relazione
–  Alla capacità del ricevitore
–  Alla capacità della rete
13
Il segmento TCP

Facoltà di Ingegneria 2 Cesena


Lauree specialistiche
Reti di Telecomunicazioni LS
Prof. Franco Callegati
Il segmento TCP

•  TCP incapsula i dati delle applicazioni in


pacchetti detti “segmenti”
•  Il segmento TCP prevede
–  Un header standard di 20 byte
–  Un header variabile per negoziare delle opzioni
–  Un payload di dimensione variabile contenente i dati di
applicazione
•  Il segmento TCP ha una dimensione massima
detta Maximum Segment Size (MSS)
–  MSS corrisponde alla massima dimensione del blocco
dati di applicazione che può essere contenuto nel
segmento
15
Formato del segmento TCP (1)

Source Port Destination Port

Sequence number

Acknowledge number

TCP U A P R S F
header Reserved R C S S Y I Window
length GK H T N N

Checksum Urgent Pointer

Opzioni Padding

Dati

16
Formato del segmento TCP (2)

•  Source (Destination) port: numero della porta sorgente


(destinazione)
•  Sequence number: numero di sequenza del primo byte
del pacchetto; se è presente il bit SYN questo è il numero
di sequenza iniziale su cui sincronizzarsi
•  Acknowledge number: se il bit ACK è a 1 allora questo
numero contiene il numero di sequenza del blocco di dati
che il ricevitore si aspetta di ricevere
•  TCP Header Length (4 bit): numero di parole di 32 bit
dell’intestazione TCP; indica dove iniziano i dati
•  Reserved: sei bit riservati per uso futuro

17
Formato del segmento TCP (3)

18
Formato del segmento TCP (4)

•  Window: finestra del ricevitore, cioè il numero di


byte che il ricevitore è disposto a ricevere,
partendo dal numero di sequenza di quello
contenuto nel campo acknowledge
•  Checksum: controllo dell’errore sul segmento
•  Urgent Pointer: contiene puntatore a dati urgenti
eventualmente presenti nel pacchetto (es. per
abortire programma remoto in esecuzione), ha
senso se il bit URG è posto ad 1
•  Options: contiene opzioni per la connessione
•  Padding: bit aggiuntivi per fare in modo che
l’intestazione sia multipla di 32 bit
19
Dimensioni del segmento TCP
•  MSS deve
–  Essere inferiore alla massima dimensione del payload IP meno
un header TCP
•  216 = 65535 – 20 – 20 = 65495 byte
–  Rispettare i limiti imposti ai pacchetti dalle reti che deve
attraversare e che hanno una Maximum Trasfer Unit (MTU)
•  Un tipico valore per MTU sono i 1500 byte imposti da Ethernet
•  MSS dipende dall’implementazione
–  Normalmente è configurabile
•  In generale non è possibile sapere la MTU di ogni rete
intermedia che va attraversata
–  La rete ha il meccanismo per la frammentazione dei pacchetti
–  Questo può condurre a inefficienza, soprattutto in caso di una
grande quantità di dati da trasmettere su una connessione
–  È stato definito un algoritmo detto “Path MTU discovery” (RFC
1191) basato su ICMP
20
Checksum

•  Viene calcolato utilizzando


–  Pseudo-header (psedo-intestazione)
•  Indirizzi IP sorgente e destinatario
•  Protocol
•  Lunghezza in byte del segmento TCP (payload IP)
–  Non viene trasmessa ma viene calcolata in trasmissione e in
ricezione
–  Intestazione TCP
•  Con campo checksum posto a 0
–  Dati del segmento TCP
•  Se il numero di byte è dispari viene aggiunto un byte di
padding con tutti i bit a 0
•  Il padding non viene trasmesso

21
Calcolo del checksum

•  “The checksum field is the 16 bit


one's complement of the one's
complement sum of all 16 bit words
in the header and text”
•  One’s complement
–  Converte tutti gli 1 in 0 e tutti gli 0 in 1
•  Il calcolo
–  Somma fra loro tutte le parole di 16 bit utilizzando
l’operazione di EX-OR
–  Effettua il complemento ad 1 del risultato
•  Se il segmento è corretto il checksum calcolato
al ricevente risulta di tutti 0

22
Funzionamento di TCP

Facoltà di Ingegneria 2 Cesena


Lauree specialistiche
Reti di Telecomunicazioni LS
Prof. Franco Callegati
La macchina a stati finiti del TCP

•  Linee tratteggiate
–  Azioni tipiche di un
server
•  Linee nere
–  Azioni tipiche di un
client
•  Linee chiare
–  Eventi inusuali

•  Transizioni
–  Causa/effetto

Da A.S. Tanenbaum, “Reti di Calcolatori”

24
Dialogo su rete inaffidabile

•  Se il mezzo di comunicazione è inaffidabile


risulta sostanzialmente impossibile avere uno
scambio di informazioni con conferma certa
–  Problema logico delle 3 armate
–  A invia un messaggio e B lo conferma
–  Se A non riceve la conferma non può sapere se B
abbia ricevuto il messaggio o meno
•  Perdita del messaggio o della conferma?
–  Il ragionamento si può proseguire sulla conferma della
conferma ecc.
•  È necessario decidere dove fermarsi per
raggiungere un determinato grado di affidabilità
25
Apertura della connessione TCP

•  L’apertura della connessione è


SIN=
1, Se critica
qN=x
ACK –  I segmenti di segnalazione
=0
possono essere persi, duplicati e
ritardati
q N=y
SIN=
1, S e •  Three ways handshake
k N =x+1
1, A c –  Si è dimostrato molto robusto alla
ACK=
prova dei fatti
SIN=
0, Se
qN=x
•  Utilizza sinergicamente i bit di
ACK +1
=1, A
ckN= flag e quelli di numerazione
Invio di SeqN y+1
=x+1 –  Si noti che il primo pacchetto dati
dati ACK
=0, A ha numero di sequenza uguale
ckN=
y+1 all’ACK precedente (ACK non
occupa spazio di numerazione)

26
Caratteristiche del TWH

•  Il three-ways handshake
–  resiste alla instaurazione contemporanea di due connessioni
–  ignora pacchetti di apertura ritardatari
SIN=
1, Se
SIN= SIN= qN=z
1, Se 1, Se
qN=x qN=x
ACK ACK
=0 =0
S eqN=y qN=y
1, S e
SIN= 1, z+1
ACK
=0 SIN= k N=
K = 1, Ac
y AC R
1, S eqN= ST=1
SIN= c k N =x+1 , Seq
1, A N=z+
ACK= 1
SIN=
ACK 1, Se
=1, A qN=x
ckN=
, S e qN=y
y+1
SIN=
1
k N= x+1
SIN=
0, Se K = 1, Ac
ACK qN=x
+1 AC
=1, A SIN=
ckN= 0, Se
y+1
ACK qN=x
=1, A +1
ckN=
y+1
27
Il problema delle “incarnazioni”

•  Connessione fra Host A e Host B


–  Host A viene riavviato
•  La connessione viene di fatto chiusa in modo errato
•  La connessione rimane attiva in Host B
•  Dopo il riavvio l’applicazione vuole riprendere il
dialogo e riprova ad aprire la connessione con
Host B
–  Cosa accade se decide di utilizzare i medesimi numeri
di porta (ossia riavviare la medesima connessione)
•  Esistono a breve distanza di tempo diverse
“incarnazioni” della medesima connessione
logica
28
Ripresa dopo un problema

•  Il three ways handshake per una nuova


incarnazione
–  L’host B ritiene che la connessione precedente sia
ancora aperta
–  L’ambiguità viene risolta

TCP A TCP B
1. (CRASH) (send 300,receive 100)
2. CLOSED ESTABLISHED
3. SYN-SENT --> <SEQ=400><CTL=SYN> --> (??)
4. (!!) <-- <SEQ=300><ACK=100><CTL=ACK> <-- ESTABLISHED
5. SYN-SENT --> <SEQ=100><CTL=RST> --> (Abort!!)
6. SYN-SENT CLOSED
7. SYN-SENT --> <SEQ=400><CTL=SYN> -->

29
Chiusura della connessione TCP
•  Soft release
–  Il TCP cerca di realizzare la chiusura ordinata della connessione,
garantendo che non vadano persi dati
•  Anche questo problema non può essere risolto in modo
rigoroso su una rete inaffidabile
•  TCP sceglie di realizzare la chiusura con modalità
“simplex”
–  Le due direzioni vengono rilasciate in modo indipendente
–  Il TCP che intende terminare la trasmissione emette un segmento
con FIN=1
•  Quando questa entità riceve l’Ack la direzione si considera chiusa
•  Se dopo un certo tempo non arriva l’Ack il mittente del FIN rilascia
comunque la connessione
–  L’altra direzione può continuare a trasmettere dati finché non
decide di chiudere

30
Esempio di chiusura normale

•  TCP A decide di chiudere


–  Inizia la procedura inviando un segmento con FIN=1
•  TCP B rileva la richiesta di chiusura
–  Procede anche lui all’invio di un segmento con FIN=1

TCP A TCP B
1. ESTABLISHED ESTABLISHED
2. (Close)
FIN-WAIT-1 --> <SEQ=100><ACK=300><CTL=FIN,ACK> --> CLOSE-WAIT
3. FIN-WAIT-2 <-- <SEQ=300><ACK=101><CTL=ACK> <-- CLOSE-WAIT
4. (Close)
TIME-WAIT <-- <SEQ=300><ACK=101><CTL=FIN,ACK> <-- LAST-ACK
5. TIME-WAIT --> <SEQ=101><ACK=301><CTL=ACK> --> CLOSED
6. (2 MSL)
CLOSED
31
Chiusura contemporanea

•  TCP A e B decidono in contemporanea di


chiudere la connessione
–  La procedura funziona correttamente anche in questo
caso
TCP A TCP B
1. ESTABLISHED ESTABLISHED
2. (Close) (Close)
FIN-WAIT-1 --> <SEQ=100><ACK=300><CTL=FIN,ACK> ... FIN-WAIT-1
<-- <SEQ=300><ACK=100><CTL=FIN,ACK> <--
... <SEQ=100><ACK=300><CTL=FIN,ACK> -->
3. CLOSING --> <SEQ=101><ACK=301><CTL=ACK> ... CLOSING
<-- <SEQ=301><ACK=101><CTL=ACK> <--
... <SEQ=101><ACK=301><CTL=ACK> -->
4. TIME-WAIT TIME-WAIT
(2 MSL) (2 MSL)
CLOSED CLOSED
32
Svolgimento del dialogo

•  Protocollo ARQ per rendere affidabile il dialogo


•  Rispetto ai protocolli di linea TCP affronta un
problema molto più complesso
–  Le caratteristiche dei ricevitori possono essere
estramemente variabili
–  I segmenti sono trasmessi utilizzando una rete
connectionless e quindi non è garantito l’arrivo in
sequenza
–  I percorsi in rete e le condizioni di congestione
possono variare e quindi il ritardo di propagazione non
è costante
–  La banda del canale dipende dal percorso

33
I timer del TCP

•  Il TCP mantiene attivi 4 contatori per ogni una


connessione
–  Time-out di trasmissione (retransmission timer o RTO)
–  Persist timer
–  Keepalive timer
–  2MSL timer utilizzato per lo stato TIME-WAIT
•  I contatori sono utilizzati per
–  Evitare situazioni di “deadlock”
–  Evitare possibili malfunzionamenti in incarnazioni
diverse della stessa connessione

34
Keepalive timer

•  Una connessione TCP attiva non implica un trasferimento


di dati fra sorgente e destinazione
–  Una connessione può rimanere attiva all’infinito anche se
“dormiente”
•  Molte implementazioni del TCP prevedono l’invio di
informazioni di “rinfresco” per “verificare” la funzionalità di
una connessione esistente
–  Una connessione rimane silente per 2 ore
•  Viene inviato un segmento di prova
–  Se si riceve risposta si attendono altre 2 ore
–  Se non si riceve risposta si inviano altri 9 messaggi a distanza di
75 sec
•  Dopo 10 messaggi di prova senza risposta la connessione viene
chiusa ed un messaggio di errore viene inviato all’applicazione

35
Lo stato “time wait”

•  Al termine della chiusura attiva il “client”


–  si ferma nello stato TIME-WAIT per un tempo pari a
2MSL
–  Chiude definitivamente la connessione passando allo
stato CLOSED
•  Il TIME-WAIT vuole garantire l’estinzione di
segmenti appartenenti a precedenti incarnazioni
–  Dopo la chiusura una connessione può essere ricreata
–  La nuova incarnazione potrebbe finire per usare
numeri già utilizzati dall’incarnazione precedente

36
Time out di trasmissione

•  Ogni volta che si trasmette un segmento viene fatto


partire il Retransmission Timer (RTO)
•  Se il timer scade prima che sia stato ricevuto l’ACK si
assume che il segmento non sia stato ricevuto
–  RTO deve essere dimensionato in relazione al tempo di andata e
ritorno (Round Trip Time o RTT)
–  RTT è una variabile aleatoria che dipende dalle condizioni della
rete (diversamente a quello che avviene sul canale sequenziale)
–  È molto difficile scegliere un corretto valore per il Timeout
•  Il timeout deve essere determinato in modo dinamico
–  L’idea base e’ di mantenere aggiornato un valore medio del RTT
e di calcolare il time out in funzione di esso
–  Per avere un valore medio di RTT è necessario utilizzare una
qualche procedura di numerazione

37
Calcolo di RTO (RFC 2988)

•  L’implementazione misura RTT e RTO come


multipli di un’unità temporale G
•  Si utilizzano tre variabili
–  eRTT è la stima del valore medio del RTT basato sulle
misurazioni passate
–  sRTT è la misurazione del RTT relativo all’ultimo
segmento di cui si è ricevuta conferma
–  vRTT è una stima della variabilità di RTT

38
eRTT

•  Prima misurazione: sRTT(0)


eRTT(0) = sRTT(0)
•  Successive misurazioni
eRTT(1) = (1-α) eRTT(0) + α sRTT(1)

•  Valore suggerito di α = 1/8 = 0.125


•  In pratica
eRTT(n) = 0.875 eRTT(n-1) + 0.125 sRTT(n)

39
EWMA

•  La procedura utilizzata per calocare eRTT viene


detta “Exponential Weighted Moving Average”
–  Esponenziale: il peso dei valori passati diminuisce in
modo esponenziale a favore dei valori recenti
–  Pesata: con il parametro α si può decidere che peso
dare ai campioni più recenti
–  In movimento: si modifica mano a mano che vengono
ricavati nuovi campioni
eRTT(1) = (1-α) eRTT(0) + α sRTT(1)
eRTT(2) = (1-α) eRTT(1) + α sRTT(2) = (1-α)2 eRTT(0) + (1-α)α sRTT(1) + α sRTT(2)
eRTT(3) = (1-α) eRTT(2) + α sRTT(3)
= (1-α)3 eRTT(0) + (1-α) 2 α sRTT(1) + (1-α) α sRTT(2) + α sRTT(3)
….
eRTT(n) = (1-α)n eRTT(0) + ∑i=1..n (1-α)n-i α sRTT(i)
40
vRTT

•  Prima misurazione: sRTT(0)


vRTT(0) = sRTT(0)/2
•  Successive misurazioni
vRTT(1) = (1-β) vRTT(0) + β eRTT(0) –sRTT(1)

•  Valore suggerito di β = 1/4 = 0.25


•  In pratica
vRTT(n) = 0.75 vRTT(n-1) + 0.25eRTT(n-1) –
sRTT(n)

41
RTO

•  RFC 793 (1981)


RTO = min[UB,max[LB,(β*eRTT)]]
–  UB = valore massimo ammissibile per RTO (1 min)
–  LB valore minimo ammissibile per RTO (1 sec)
–  1 < β < 2
•  RFC 2988 (2000), Algoritmo di Jacobson
RTO = max[LB,eRTT + max[G, 4 vRTT]]
–  LB valore minimo ammissibile per RTO (1 sec)

•  Se le fluttuazioni sono piccole RTO ≈ eRTT


•  Se le fluttuazioni sono grandi RTO >> eRTT
42
Esempio

43
Misurazione di sRTT

•  Nelle implementazioni più comuni sRTT si ricava


come multiplo di intervalli di 500 ms
•  Inoltre il TCP mantiene attiva Tran
sm issio
una sola procedura di Tran
n1
sm
valutazione di RTT alla volta ission

sRTT
2
–  In caso di trasmissioni ACK
consecutive a breve distanza ACK
Tran
solamente per la prima si valuta sm issio
n3

sRTT
sRTT
ACK

44
Ambiguità di sRTT in caso di ritrasmissione

•  TCP conferma la ricezione dei dati e non di un


particolare segmento
Origi Origi
nal tr nal tr
ansm ansm
ission issio
n In caso di
X
Retr
ansm ritrasmissione c’è
ACK
sRTT

issio ambiguità nella

sRTT
n Retra
nsmi valutazione di sRTT
ssion
ACK

•  Algoritmo Karn/Partridge
–  In caso di ritrasmissione non viene misurato sRTT
–  Si riprende con la misura al prossimo segmento
confermato senza ritrasmissione
45
Exponential back-off

•  Dopo la prima Tras


m issio

RTO1
ne
ritrasmissione qual è il Ritra
sm ission
valore di RTO e1

RTO2
–  Il valore corrente ha portato a
Ritra
ritrasmissione sm issio
ne 2
–  Può avere senso dare un

RTO3
tempo maggiore al ricevitore ACK
•  Ad ogni ritrasmissione il Tras
m issio
ne
TCP raddoppia RTO fino al
raggiungimento di un valore sRTT

RTO1
massimo ACK

46
Lo stato ESTABLISHED

•  Nello stato si trasferiscono i dati utilizzando il


protocollo ARQ
–  Si numerano sequenzialmente i segmenti
–  Si conferma la corretta ricezione dei segmenti
–  Il recupero degli errori avviene tramite ritrasmissione
–  Il meccanismo di ritrasmissione è una sorta di Go-
back-N modificato

47
Numerazione in TCP

•  Per avere la massima flessibilità si sceglie di


assegnare un numero non ai segmenti ma ai
singoli byte trasportati nei segmenti
–  I dati trasportati sono pensati come un unico flusso
(stream) di byte (byte stream)
–  Si comincia a numerare da un numero x scelto all’atto
dell’apertura della connessione
•  Il campo Seq. number numera il primo byte del segmento
•  La conferma di avvenuta ricezione viene data
mettendo nel campo Ack. Number il numero del
byte successivo all’ultimo ricevuto
–  primo byte che ci si aspetta di ricevere
48
Numerazione duplicata

•  Possono facilmente aversi segmenti ritardati o


duplicati
–  All’istante t0 viene inviato il segmento S0 con numero
di sequenza X
–  S0 viene duplicato nella rete
•  Una copia viene correttamente ricevuta e confermata
•  Una copia viene ritardata rispetto alle altre
–  La trasmissione continua
•  Si esaurisce lo spazio di numerazione e quindi si riutilizzano
numeri già usati
•  All’istante tk > t0 viene inviato il segmento Sk che ha anch’esso
numero di sequenza X
–  La copia ritardata di S0 arriva poco prima di Sk
•  viene interpretata come segmento valido

49
Maximum Segment Lifetime

•  I numeri di sequenza possono essere riutilizzati?


–  Solo se si è sicuri che non esistano più in rete vecchi
segmenti numerati con tali numeri
•  Lo spazio di numerazione finito rende necessario
limitare il tempo di vita dei segmenti
•  Il massimo tempo di vita dei segmenti (Maximum
Segment Lifetime o MSL) deve essere noto
–  MSL = 2 min (RFC 793)
•  Su di un collegamento a 2 Megabits/sec servono 4.5 ore per
esaurire lo spazio di numerazione di 2**32 ottetti
•  Su di un collegamento a 100 Megabits/sec servono 5.4 minuti
per esaurire lo spazio di numerazione di 2**32 ottetti
•  Cosa accade per reti con velocità del Gbit/s e oltre?
50
Inizializzazione della sequenza

•  All’apertura della connessione si deve scegliere il


numero di sequenza iniziale (Initial Sequence
Number o ISN)
–  Numero prefissato uguale per tutti
–  Numero puramente casuale
–  Numero legato al valore di un contatore
•  ISN
–  Deve garantire che non ci sia duplicazione nell’uso dei
numeri di sequenza
–  Qualora non sia prefissato e costante deve essere
concordato fra i due host che aprono la connessione

51
Se qualcosa va male

•  Un host viene riavviato a causa di un problema?


–  Vengono ricreate nuove “incarnazioni” di vecchie
connessioni
–  Vengono scelti nuovi ISN
–  Una nuova incarnazione può finire per usare numeri
già utilizzati dall’incarnazione precedente
•  Segmenti ritardati della prima incarnazione possono essere
ricevuti dalla nuova incarnazione con numero di sequenza
apparentemente corretto

52
Esempio

•  ISN sempre uguale •  ISN(t) = t


–  ISN = 0 –  ISN uguale al valore
di un contatore

SN(t) SN(t)
Crash ISN(t)
MSL
Crash X
MSL
X Start C2

Start C1
Start C1 Start C2

Recovery t Recovery t

53
ISN nella RFC 793

•  ISN è funzione del tempo utilizzando un sistema


di conteggio
–  Contatore a 32 bit
–  Incrementato ogni 4 µsec
•  Il contatore ripete la sequenza ogni 232 4 µsec = 4.77 h

•  TCP quiet time


–  Dopo un qualunque riavvio un host attende almeno un
MSL prima di riaprire le connessioni TCP

54
Messaggi di conferma (ACK)

•  Gli Ack sono cumulativi


•  In piggybacking
–  La conferma ha la forma di un normale messaggio TCP con il flag
ACK=1
–  Può contenere dati oppure no
–  Se non contiene dati ne risulta un datagramma IP di 40 byte
•  20 byte = min. header IP + 20 byte = min. header TCP
•  Di default la conferma è esplicita
–  Il ricevitore trasmette un ACK per ogni segmento ricevuto
•  ACK ritardati
–  Al momento della ricezione corretta di un segmento il ricevitore
può inviare subito un ACK oppure ritardarlo
•  L’obiettivo è quello di minimizzare il numero di ACK
•  Se si ritarda troppo possono scattare i time-out

55
ACK ritardati

•  Un ACK e’ ritardato fino a SeqN


=300
, Len
che SeqN
=751
=450
, Len
–  è stato ricevuto un ulteriore =130
0
pacchetto 5 1+1
A c kN=20
–  Scatta un time out ACK=
1 ,

•  Uguale a 200 ms nelle SeqN


=205
1 , Len
principali implementazioni =100

•  Si riduce il traffico di ack


•  Normalmente si produce Time out

un ACK ogni due segmenti 1 51+1


, A ckN=2
1
ACK=

56
Finestra di trasmissione e di ricezione

•  Ricevitore e trasmettitore possono memorizzare


segmenti
–  WT = finestra di trasmissione
•  Insieme di segmenti inviabili da trasmettitore senza ricevere
conferme di ricezione
–  WR = finestra di ricezione
•  Insieme di segmenti memorizzabili fuori sequenza al
ricevitore
•  M = spazio di numerazione (in TCP 232)
•  Se WT = WR allora deve essere WT + WR ≤ M
–  WT ≤ 231
–  WR ≤ 231

57
In ricezione
•  Il ricevitore ha ricevuto fino a SeqN = N
–  Attende un segmento con SeqN = N+1 mod M
–  Riceve un segmento con SeqN ≠ X
•  Se X è precedente ad N il segmento viene considerato un duplicato
ritardato e viene scartato
•  Se X è successivo ad N il segmento è fuori sequenza (manca
qualcosa)
–  Cosa può essere accaduto?
•  Uno o più segmenti sono andati persi
•  Un segmento trasmesso dopo un altro lo ha superato a causa dei
diversi percorsi possibili e dei ritardi variabili in rete
–  Cosa fare?
•  Il ricevitore memorizza il segmento se X è entro WR
•  Ritrasmette l’ultima conferma inviata (ACK duplicato)
–  Quando riceve seqN = N a completamento della sequenza
conferma ackN = X+1

58
In trasmissione

•  Il ricevitore invia il segmento seqN = N


–  Se riceve un ACK con ackN = N+1 toglie il segmento
dalla memoria e fa scorrere la finestra di trasmissione
–  Se non riceve ackN = N+1 allo scadere di RTO
ritrasmette il segmento
–  Ignora eventuali ACK duplicati

59
ACK duplicati

•  Il TCP ricevente ritrasmette l’ACK per l’ultimo


segmento ricevuto nella corretta sequenza
generando un ACK duplicato (duplicate ACK)
–  Le implementazioni classiche di TCP ignorano gli ACK
duplicati
–  Le implementazioni recenti prendono specifiche azioni
se ricevono dei “duplicate ACK”

60

Potrebbero piacerti anche