Upload
builiem
View
220
Download
0
Embed Size (px)
Citation preview
1
Funzioni del protocollo TCP
Prof. Ing. Carla RaffaelliAnno accademico 2005-2006
Il TCP
• Il TCP e’ un protocollo orientato alla connessione utilizzato per gestire il trasferimento end-to-end di informazioni e renderlo affidabile
• Schema di riferimento
applicazione applicazione
Send buffer Receive buffer
TCP TCP
byte byte
segmenti
2
La famiglia dei protocolli TCP/IP
Applicazioni
e-mail,ftp,telnet,www…
TCP UDP
IPICMPARP
RARP
IEEE 802-Ethernet-X25-Aloha ecc.
Collegamento fisico
Protocolli applicativi
• Sono i protocolli utilizzati dalle applicazioni per scambiarsi informazioni
• Esempi: HTTP per il web, SMTP per la posta elettronica
• Hanno in comune alcune caratteristiche generali
3
Elementi di un protocollo applicativo
• Tipi di messaggio che vengono scambiati– Es: richieste e risposte
• Sintassi dei vari tipi di messaggio• Significato dell’informazione nei campi (semantica)• Regole che governano lo scambio dei messaggi
Protocolli standard
• I protocolli dello strato di applicazione per Internet vengono definiti nelle RFC in ambito IETF
• Se un protocollo e’ definito nella RFC chiunque si conforma ad esso e’ in grado di comunicare indipendentemente dalla realizzazione della applicazione di rete– Concetto di sistema aperto
• Esistono protocolli applicativi proprietari– Sistemi chiusi
4
Caratteristiche dei protocolli applicativi
• Un protocollo applicativo ha in generale due componenti:– Client e server– Il lato client di un terminale comunica con il lato server su un altro
terminale• Es: browser web e server web
– Un programma SERVER esegue precise funzioni ed attende una richiesta di connessione da un client
– Un programma CLIENT vuole usufruire di un certo servizio e instaura una connessione col server
• Per trasferire o ricevere informazione dalla rete il processo applicativo utilizza le API (Application Programming Interface) o socket che vengono viste come porte
Architettura del protocollo
Processo
API
Strato di trasporto
Processo
API
Strato di trasportoTCP
Protocollo applicativo
INTERNET
5
Indirizzamento dei processi
• Il processo trasmittente deve poter identificare il processo ricevente
• Si usa una coppia di informazioni– Indirizzo IP + numero di porta
• Ai protocolli applicativi piu’ diffusi vengono assegnati numeri di porta standard (RFC 1700)– Well known port: porta 80 HTTP, porta 25 SMTP
L’interfaccia Socket
• Gli standard non specificano come gli applicativi debbano interagire con i protocolli
• L’interfaccia, che non è standardizzata e dipende dall’implementazione del sistema operativo, viene comunemente chiamata Socket
6
Interfaccia Socket in Unix-Linux
• Un programma applicativo interagisce con il sistema operativo mediante system calls:- open: apre la socket- read: legge dalla socket- write: scrive sulla socket- close: chiude la socket
Uso delle socket
• Al momento della connessione è necessario un accordo tra i due host per stabilire i numeri di porta da utilizzare
• L’host che inizia la connessione deve comunicare a quale porta si vuole connettere sul server e qual è il numero di porta da lui utilizzato localmente
• Il numero di porta a cui connettersi deve essere in qualche modo noto a priori all’host sorgente (welcome port o well known port)
7
Connessione client-server: welcome port
• Un processo client, avviato nell’host sorgente, tenta di connettersi ad un processo server (demone) nell’host destinazione per ottenere un servizio– A questo scopo e’ presente sul server la welcome socket in
attesa su una porta definita in fase di configurazione del server
• Il processo server crea successivamente una socketdi connessione identificato da quattro valori:– (1) numero di porta sorgente del segmento, (2) indirizzo IP
del terminale sorgente, (3) numero di porta destinazione assegnata, (4) proprio indirizzo IP
Well-known port (esempi)
NumeroNumero NomeNome Tipo di servizioTipo di servizio21 FTP trasferimento file 22 SSH terminale virtuale criptato23 TELNET terminale virtuale in chiaro25 SMTP invio posta elettronica53 DOMAIN server DNS80 HTTP server web109 POP ricezione posta elettronica
Le porte da 0 a 255 sono riservate e si attribuiscono ai vari demoni dei numeri di porta prefissati, uguali per qualunque host di Internet. Questi numeri riservati danno vita alle well-known port.
8
Attivazione delle porte
• Il server deve essere in attesa di ricevere sulla porta a cui ilclient intende connettersi– Passive open: il server associa l’indirizzo IP alla porta e aspetta
• Il client effettua active open per comunicare con il server: questa operazione si completa dopo che la procedura TCP si e’ completata
• Una volta stabilita la connessione il processo applicativo invoca le funzioni di send e receive sulla porta
Ancora sulle API/socket
• Ogni protocollo fornisce un insieme di servizi e l’API fornisce la sintassi con cui i servizi possono essere richiamati da un sistema operativo
• L’interfaccia socket fornisce una sintassi generale per diversi tipi di servizi ed e’ quindi utilizzabile con diversi protocolli
• In pratica la socket e’ il punto in cui una applicazione locale si attacca alla rete
• La definizione della interfaccia socket consiste nella definizione di come creare la socket, di come inviare e ricevere messaggi attraverso la socket e di come distruggere la socket
• L’interfaccia socket e’ stata originariamente definita nel sistema operativo UNIX
9
Passo 1: creazione di una socket
• int socket(int domain,int type, int protocol)– Domain: indica la famiglia di protocolli che si utilizza– Type indica il tipo di comunicazione: se orientata al byte o
al bit …– Protocol indica lo specifico protocollo utilizzato
• ES:– int socket (PF_INET,SOCK_STREAM, UNSPEC)– Indica una socket per protocolli della famiglia Internet
orientati al carattere: questa coppia implica TCP– Il valore di ritorno e’ l’identificatore della socket da utilizzare
Passo 2: server
• int bind( int socket, struct sockaddr *address, int addr_len)– Collega la socket ad un indirizzo– address e’ una struttura dati che include sia l’indirizzo IP del server che
che il numero di porta TCP• int listen(int socket, int backlog)
– Definisce quante connessioni possono essere accettate sulla socket• int accept(int socket, struct sockaddr *address, int addr_len
– Realizza la passive open– Non ritorna valore fino a che un utente remoto non stabilisce una
connessione– In presenza di connessione restituisce un valore di socket nuovo e
l’indirizzo remoto– La vecchia socket continua a servire da passive open
10
Passo 2: client
• Si realizza la active open• int connect(int socket, struct sock_addr address, int
addr_len)– Address contiene l’indirizzo remoto del server– La porta del client viene scelta tra quelle disponibili dal
sistema operativo– Questa operazione ritorna un valore quando la
connessione TCP e’ stata stabilita
Passo 3: send/receive
• Il processo applicativo, una volta stabilita la connessione invoca le due funzioni seguenti:– int send(int socket, char *message, int msg_len, int flags)
per inviare il messaggio message sulla socket– int receive(int socket, char *buffer, int buf_len, int flags) per
ricevere un messaggio memorizzato in buffer– I flag servono per il controllo delle operazioni
11
Transmission Control Protocol - RFC 793
• Protocollo di tipo connection-oriented• Ha lo scopo di realizzare una comunicazione full-
duplex affidabile e di tipo end-to-end fra processi applicativi di due host, facenti parte di un sistema di reti interconnesse
• E’ progettato assumendo che:– il livello inferiore sia in grado di fornire solamente un
semplice ed inaffidabile servizio di trasferimento dei pacchetti di tipo connection-less (esattamente quello che fa l’IP)
Scopo del TCP
• Affidabilità del collegamento: il TCP garantisce la completa correttezza nella consegna dei dati a meno di partizioni della rete dovute a guasti ai collegamenti fisici
• A tale fine utilizza:– numerazione sequenziale dei dati, prendendo come unità
di riferimento il byte– conferma esplicita della ricezione di ogni blocco di byte da
parte del ricevitore (acknowledgment)– ritrasmissione dei dati di cui non viene confermata la
ricezione
12
Funzioni del TCP
• Controllo dell’errore – per il riconoscimento degli errori di trasmissione viene
effettuato un controllo mediante 16 bits
• Controllo di flusso: – meccanismo a finestra che permette al trasmettitore di
regolare il flusso dati inviati in relazione allo stato del ricevitore
• Controllo di congestione– meccanismo a finestra che permette al trasmettitore di
regolare il flusso di dati in base allo stato percepito della rete
Procedura connection-oriented
• Per garantire affidabilità e controllo di flusso, il TCP lavora in modo connection-oriented– l’instaurazione della connessione– la chiusura della connessione
• Multiplazione: permette a più processi di utilizzare le funzioni di comunicazione contemporaneamente
13
Connessioni
• Una connessione è costituita da una coppia di end-points:– il numero di porta, concatenato con il numero IP dell’host
costituisce un end-point– una coppia di end-points identifica in modo univoco una
particolare connessione, così che un singolo end-point può essere condiviso tra più connessioni sulla stessa macchina
– E’ un identificativo che equivale concettualmente al ServiceAccess Point (SAP) secondo la terminologia OSI, per identificare il processo destinazione
– L’host che inizia la connessione deve comunicare a quale porta si vuole connettere e qual è il numero di porta da lui utilizzato
Connessioni e Multiplazione
Host A
IP
TCP300 301
137.204.59.10
Host C
IP
TCP25 23
137.204.59.1
Host B
IP
TCP301
137.204.59.20
14
Formato del pacchetto TCP
Source Port Destination Port
Sequence number
Acknowledge number
Window
Urgent PointerChecksum
Dati
Opzioni Padding
Data Offset Reserved
URG
PSH
ACK
RST
SYN
FIN
32 bit
Formato del pacchetto TCP (2)
• Source/Destination port: numero delle porte sorgente e 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
• Data offset: numero di parole di 32 bit dell’intestazione TCP; indica dove iniziano i dati
• Reserved: sei bit riservati per uso futuro
15
Formato del pacchetto TCP (3)
• Control bit: sono 6 bit di controllo- URGURG posto a 1 se si deve considerare il campo Urgent Pointer- ACKACK posto a 1 se si deve considerare il campo Acknowledge- PSHPSH posto a 1 serve per la funzione di push, per la consegna immediata delle informazioni- RSTRST posto a 1 per resettare la connessione- SYNSYN posto a 1 per sincronizzare i numeri di sequenza- FINFIN posto a 1 per indicare la fine dei dati
Formato del pacchetto TCP (4)
• Window: il numero di byte, partendo dal numero di sequenza di quello contenuto nel campo acknowledge, che il ricevitore èdisposto a ricevere
• Checksum: controllo errore sull’intestazione e dati• 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
16
Attivazione della connessione TCP
• La procedura viene innescata dalla active open lato client• Viene inviato un segmento TCP con SYN=1. Il client sceglie
anche un numero di sequenza iniziale per il segmento TCP. Il segmento viene incapsulato in un datagramma IP e inviato al server
• Il server risponde con un segmento TCP con SYN=1 e predispone i buffer per la ricezione
• Quando il client riceve la conferma dal server predispone le risorse per la trasmissione e invia un segmento TCP con SYN=0.
• La connessione e’ stabilita
Apertura connessione
• TCP A attiva una porta e cerca di connettersi ad una well-known socket di TCP B, che è in attesa
• TCP A inviaun pacchetto di apertura con il bit SYN=1 ed il suo numero di sequenza iniziale
TCP A TCP A TCP BTCP B
CLOSED CLOSED LISTENLISTEN
SYNSYN--SENT SENT SYNSYN--RECEIVEDRECEIVED
ESTABLISHED ESTABLISHED SYNSYN--RECEIVEDRECEIVED
ESTABLISHED ESTABLISHED ESTABLISHEDESTABLISHED
ESTABLISHED ESTABLISHED ESTABLISHED ESTABLISHED
� SeqN=100 SYN=1 ACK=0 �
17
Apertura connessione
• TCP B risponde con ACK=1 e SYN=1 e propone il suo numero di sequenza
TCP A TCP A TCP BTCP B
CLOSED CLOSED LISTENLISTEN
SYNSYN--SENT SENT SYNSYN--RECEIVEDRECEIVED
ESTABLISHED ESTABLISHED SYNSYN--RECEIVEDRECEIVED
ESTABLISHED ESTABLISHED ESTABLISHEDESTABLISHED
ESTABLISHED ESTABLISHED ESTABLISHED ESTABLISHED
� SeqN=100 SYN=1 ACK=0 �
� SeqN=300 AckN=101 SYN=1 ACK=1�
� SeqN=101 AckN=301 SYN=0 ACK=1�
� DATI �
• TCP A conferma l’avvenuta apertura della connessione con un ACK=1
Three ways handshake
• Three ways handshake è robusto anche se si tenta di instaurare connessioni contemporaneamente
• TCP tende ad ignorare un vecchio pacchetto di inizio connessione (esempio un duplicato o un ritardo a livello IP), una volta instaurata la connessione
• Messaggio di reset usato per recuperare l’errore
TCP A TCP A TCP BTCP B
CLOSED CLOSED LISTENLISTEN
SYNSYN--SENT SENT SYNSYN--RECEIVEDRECEIVED
ESTABLISHED ESTABLISHED SYNSYN--RECEIVEDRECEIVED
ESTABLISHED ESTABLISHED ESTABLISHEDESTABLISHED
ESTABLISHED ESTABLISHED ESTABLISHED ESTABLISHED
� SeqN=100 SYN=1 ACK=0 �
� SeqN=300 AckN=101 SYN=1 ACK=1�
� SeqN=101 AckN=301 SYN=0 ACK=1�
� DATI �
18
Connessione a server web
• La porta di riferimento sul server e’ la porta 80• Il server distingue i segmenti dei differenti client dagli
indirizzi IP di sorgente e dai numeri di porta di sorgente
• I server web creano in genere un nuovo processo per ogni nuova connessione
PORTA 80
IP addressdel server
Porta XPorta Y
IP addressdel client
P1 P2
La famiglia dei protocolli TCP/IP
Applicazioni
e-mail,ftp,telnet,www…
TCP UDP
IPICMPARP
RARP
IEEE 802-Ethernet-X25-Aloha ecc.
Collegamento fisico
19
User Datagram Protocol - RFC 768
• UDP è un protocollo di tipo connectionless a livello 4, per tutte quelle applicazioni per cui la completa gestione della connessione TCP non è necessaria
• Usato da quelle applicazioni che trasmettono pacchetti singoli, senza necessità di acknowledgement
Dati
Source Port Destination Port
Message Lenght Checksum (optional)
32 bit
User Datagram Protocol - RFC 768 (2)
• Utilizzati solamente i campi di source e destinationport
• Anche per UDP esiste il concetto di porta, ed aggiunge ad IP la possibilità di distinguere diverse applicazioni entro uno stesso host
• Port 7: echo; • Port 69: trivial file transfer protocol (TFTP)
20
Riepilogo
• Per attivare una connessione TCP occorre:– Attivare le socket per i processi client e
server• Definire la quadrupla porta-client, IP-client,
porta-server, IP-server
– Effettuare la procedura TCP di handshake a tre vie
Controllo di flusso nel TCP
• Il trasmettitore non deve saturare il ricevitore• Utilizzo un meccanismo a finestra scorrevole• Differenze dall’analogo meccanismo a livello di linea:
– Ritardi di andata e ritorno non costanti– Possibilita’ di pacchetti fuori sequenza– Diversa velocita’ delle connessioni
• Nell’intestazione del pacchetto TCP e’ contenuto il campo advertised window
21
Meccanismo a finestra
• Al piu’ W pacchetti non confermati possono essere in trasmissione
• La dimensione della finestra viene messa a punto dinamicamente sulla base di informazioni dal ricevente e dalla rete– Minimo tra advertised window (dal ricevente) e
congestion window (dalla situazione di rete)
2 3 4 5 6 7 8 9 10 11 131 12
Sender’s window
Acks received Not transmitted
Controllo di flusso a finestra
2 3 4 5 6 7 8 9 10 11 131 12
Sender’s window
2 3 4 5 6 7 8 9 10 11 131 12
Sender’s window
Ack 5
L’ack per il pacchetto 5 consente alla finestra di spostarsi di due posizioni cosi’ che i pacchetti 9 e 10 possono essere trasmessi
22
Buffer di trasmissione
• Il buffer di trasmissione viene riempito dai byte generati dallaapplicazione
• Il trasmettitore non puo’ avere piu’ di AW byte in attesa di riconoscimento
• Effective window– EW= AW-(last byte sent-last byte acknowledged)
Appl.
Last byte acknowledged Last byte sent Last byte written
Buffer di trasmissione
t
Buffer di ricezione• Il processo ricevente legge byte dal buffer di ricezione• I dati possono arrivare fuori ordine
• Il valore di AW e’ lo spazio disponibile nel buffer del ricevitore di dimensione B– AW= B – (last byte received – last byte read)
Appl.
last byte read next byte expected last byte received
Buffer di ricezione
t
23
Attuazione del controllo
• Come un ricevitore lento blocca un trasmettitore piu’ veloce– Il buffer di ricezione si riempie -> AW va a 0– Il trasmettitore blocca la trasmissione perche’ EW va a 0
• Ripresa della trasmissione– Il processo ricevente legge dal buffer– AW diventa >0– Il trasmettitore inizia a trasmettere– Appena arrivano gli ack si libera il buffer di trasmissione– Il processo trasmittente inizia a trasmettere
• Durante il blocco il trasmettitore continua ad inviare segmenti di 1 byte per avere risposta dal ricevitore
Controllo di congestione
• TCP cerca di adattare la dimensione della finestra in relazione alle condizioni della rete
• Idea base: se si verifica congestione in rete si rallenta la trasmissione– Quando si verifica una perdita si riduce W– Quando gli ack arrivano correttamente W viene aumentata
24
Congestion window
• Il TCP mantiene una variabile detta CW (Congestion Window)• MAXWIN = min(CW, AW)• EW= MAXWIN- (last byte sent-last byte acknowledged)• TCP da’ un valore a CW in base alla percezione di
congestione che riceve dalla rete.– Non c’e’ in genere comunicazione esplicita di CW
Dimensione ideale della finestra
• Wid= ritardo*banda– Rappresenta la quantita’ di informazione che utilizza al 100% la tratta tra
trasmettitore e ricevitore
• Se W < Wid: si spreca banda
• Se W > Wid: e’ necessario accodare nei router intermedi e cresce il ritardo e quindi potenzialmente anche la perdita
• Massimo throughput ottenibile: W/RTT– RTT: Round Trip Time
25
Valori della finestra ideale
• Ipotesi RTT= 100 ms• Calcolo del prodotto banda x ritardo
18 KB122 KB549 KB1.2 MB1.8 MB7.4 MB14.8 MB
T1 (1.5 Mbit/s)Ethernet (10 Mbit/s)T3 (45 Mbit/s)FDDI (100 Mbit/s)STS-3 (155 Mbit/s)STS-12 (622 Mbit/s)STS-24 (1.2 Gbit/s)
Banda x ritardoBanda
• Con 16 bit di receiver windows si arriva la massimo a 64 KB• Opzione window scale consente di moltiplicare il valore della AW per un fattore
di scla concordato alla instaurazione della connessione (RFC 1323)
Incremento additivo/decremento moltiplicativo
• La causa principale per cui un pacchetto va perduto e’ la congestione
• Quando scatta il time out la sorgente dimezza il valore di CW (multiplicative decrease)
• Per incrementare CW si usano modalita’ di tipo additivo (additive increase)
AIMD
26
Meccanismi di incremento della finestra
• Slow start– Si applica inizialmente, W cresce di 1 per ogni ack ricevuto– Consente un incremento rapido della finestra
(esponenziale) e quindi del throughput• Congestion avoidance
– Dopo aver raggiunto la soglia W si incrementa di 1 per RTT (1/W ogni ack)
– Evita di saturare la banda disponibile
Esempio di aggiornamento della finestra
2 3 4 5 6 7 8 9 10 11 131 12
W=1 all’inizioW=(2..3) dopo il primo ack (1 RTT)W=(3..5) dopo il secondo ack (2 RTT)W=(4..7) dopo il terzo ack (2 RTT)W=(8..15) dopo il gruppo di 4 ack (3 RTT)
L’ampiezza della finestra raddoppia ad ogni RTT
1514
27
Esempio di evoluzione della finestra
02468
101214
0 1 2 3 4 5 6 7 8
Time (round trips)
Con
gest
ion
Win
dow
size
(s
egm
ents
)
Slow start
Congestionavoidance
Slow start threshold
(ssthresh)cwnd
Meccanismo di ack
• Gli ack sono cumulativi• Un ack si riferisce a tutti i dati ricevuti in modo
contiguo• TCP assegna numeri di sequenza per byte• Per semplicita’ si assumono qui numeri di sequenza
di pacchetti• Ack(i) rappresenta l’ack per il pacchetto i
28
Ack cumulativi
�� �� ����
����
�� �� ����
�� ��
���
���
data ack
Un nuovo ack viene generato solo quando viene ricevuto unnuovo pacchetto in sequenza
Ack ritardati
• Un ack e’ ritardato fino a che – e’ stato ricevuto un ulteriore pacchetto– Scatta un timer di ack (200 ms)
• Si riduce il traffico di ack
�� �� ����
����
�� �� ����
�� ��
Nuovo ack generatoall’arrivo del pacchetto 37 anziche’ del pacchetto 36
29
Perdita di pacchetto
• Il TCP riconosce la perdita di pacchetto mediante– Presenza di ack duplicati– Scadere del time out di ritrasmissione
�� �� ����
���
�� �� ����
�(delayed acks) No ack
Time out (RTO)
• Se un ack non arriva per un certo tempo il trasmettitore conclude che il pacchetto e’ andato perduto
• Restringe la finestra a 1 e inizia la trasmissione slow start• La ritrasmissione avviene a partire dal pacchetto piu’
vecchio non riconosciuto• Problema: occorre tempo per accorgersi della perdita
(ordine del secondo contro ordine di qualche ms per la trasmissione)
• La soglia viene posta alla meta’ del valore che aveva la finestra prima della perdita
30
Effetto del time out
0
5
10
15
20
25
0 3 6 9 12 15 20 22 25
Time (round trips)
Con
gest
ion
win
dow
(seg
men
ts)
ssthresh = 8 ssthresh = 10
cwnd = 20
After timeout
Descrizione in pseudo codice
1) cwnd=1MSSssthresh= rwnd, finestra
imposta dal ricevitore2) cwnd=cwnd+1 ad ogni ack fino a che
cwnd>ssthresh go to 3)se si ha RTO:ssthresh=min(cwnd,rwnd)/2
cwnd=1
go to 2)3) cwnd=cwnd+1/cwnd ad ogni ack
se si ha RTO:ssthresh=min(cwnd,rwnd)/2
cwnd=1
go to 2)
Slow start
Congestion avoidance
rwnd=AW
31
Ack duplicati
�� �� ����
����
�� �� ����
� �
���
��
data ack
Dup ack
Fast retransmit/recovery
• Gli ack duplicati sono una indicazione del fatto che puo’esserci stata perdita– Se si ricevono tre ack per lo stesso pacchetto si effettua ritrasmissione
(fast retransmit)– Si riduce la soglia alla meta’ del valore corrente della finestra– Si pone la finestra pari al valore della soglia+3 (per tenere degli ack
duplicati ricevuti)– Il segmento supposto perduto viene ritrasmesso e si entra nella fase di
fast recovery– Si trasmettono segmenti nuovi – fino a che non arriva l’ack per il pacchetto perduto la finestra di
congestione viene incrementata di 1 per ogni ack ricevuto come nella fase di slow start
– Quando arriva l’ack per il pacchetto perduto finisce la fase di fast recovery, il trasmettitore entra in congestion avoidance partendo dal valore impostato per ssthr
32
Finestra di congestione: fast retransmit/fast recovery
Tempo (s)
Fine
stra
di c
onge
stio
ne (s
egm
enti)
slow startValore massimo della finestra tre ack duplicati: ssthr=cw/2
cw=ssthr+3
fast retransmitssthr: coda vuota
Transitorio iniziale con perdite multiple
Occupazione della coda di trasmissione
Tempo (s)
Occ
upaz
ione
cod
a (s
egm
enti)
33
Fairness del meccanismo AIMD
• Due connessioni condividono la banda di un singolo link con capacita’ B– B1+B2 = B (al massimo)– Equita’: B1=B2
B1
B2
1
53
2
In congestion avoidance la finestra (e quindi anche il throughput) aumenta in maniera additiva (retta a 45 gradi)
In presenza di perdita si attuaLa riduzione moltiplicativa (retta per l’origine che passa per 2)4
Versioni di TCP
• Problema delle perdite multiple nel RTT– Fast recovery puo’ portare al time out in caso di perdite multiple
nel RTT• TCP New Reno
– Rimane in fast recovery fino a che tutte le perdite nella finestra non sono state recuperate
– Recupera una perdita per RTT• TCP- SACK (Selective Acknowledgment)
– Fornisce informazioni sui pacchetti ricevuti fuori sequenza– Puo’ recuperare piu’ pacchetti perduti per RTT
34
TCP New Reno RFC2582
• Se in una finestra vengono perduti piu’ segmenti si innesca un processo di riduzione della cwnd che spesso porta il trasmettitore a non poter piu’ trasmettere segmenti per generare dupack di ritorno.– Scatta il time out e si innesca lo slow start
• New Reno in presenza di ack parziale assume che il segmento immediatamente successivo a quello riconosciuto sia andato perduto e lo ritrasmette
• Fast recovery inizia con tre ack duplicati e finisce quando sono stati riconosciuti tutti i segmenti in trasmissione nel momento in cui e’ iniziato il fast retransmit.
• Gli ack parziali decrementano il valore della finestra corrente della quantita’ di dati riconosciuta, la incrementano di un segmento e ri-innescano il fast recovery
TCP SACK (selctive acknowledgment)
• SACK e’ una opzione del TCP che viene concordata in fase di apertura della connessione
• TCP SACK: il ricevitore indica al trasmettitore un elenco dei blocchi ricevuti fuori sequenza
• Solo quando nessun segmento trasmesso richiede ulteriori ritrasmissioni vengono trasmessi nuovi segmenti
0001:1000 1001:2000 4001:5000 5001:6000 8001:9000
Ack cumulativoblocco1 blocco2
2001
acknowledgment
4001600080019000sack
35
TCP Vegas
• La dinamica della finestra di trasmissione si basa su una stima del throughput ottenuta nel modo seguente:– Expected=Windowsize/BaseRTT, dove BaseRTT e’ il minimo valore di
RTT riscontrato– Per ciascun segmento viene misurato RTT e il numero di byte
trasmessi in tale tempo• Se la differenza tra il throughput atteso e il throughput calcolato e’ minore di
α si incrementa linearmente la finestra cwnd nel RTT successivo; • Se la differenza e’ superiore a β cwnd viene decrementato linearmente nel
RTT successivo– Slow start modificato: cerca di individuare il valore corretto della finestra
senza incorrere in una perdita• Quando il throughput corrente e’ inferiore al throughput atteso si passa da
ss a ca
• La ritrasmissione avviene dopo un ack duplicato se la stima di RTT e’ superiore al valore del time out
IETF RFCs
• 2018 SACK• 2481 Explicit congestion notification• 2414-6 increasing inizial window size• 2581 slow start, congestion avoidance,fast
retransmit, fast recovery• 2582 New Reno• 2988 Retransmission timer (RTO) computation
36
TCP Tahoe senza fast retransmit
• I primi 12 segmenti sono stati trasmessi e riconosciuti
• Il segmento 13 e il segmento 16 vanno perduti
• Il riconoscimento della perdita del segmento 13 avviene allo scattare del time-out
• La ritrasmissione del segmento 13 fa pervenire l’ack fino al segmento 15 e porta la finestra a 2 (SS)
seg(12)
ack(12)W=5
seg(16)
seg(13)
seg(14)seg(15)
seg(17)ack(12)ack(12)
ack(12)RTO seg(13)
ack(15)
seg(16)
seg(17)
W=1
W=2
ack(17)
ack(17)
TCP Reno• I primi 12 segmenti sono stati
trasmessi e riconosciuti• Il segmento 13 e il segmento 16
vanno perduti• Il riconoscimento della perdita del
segmento 13 avviene per 3 ack(12) duplicati La soglia e’posta a 2, la finestra a 5
• Il segmento 13 e’ ritrasmesso fast e innesca l’invio di ack(15)
• Si esce da fast recovery e si inizia con finestra 2: il trasmettitore e’bloccato
• Scatta il time out e si ritrasmette il 16 con finestra a 1.
seg(12)
ack(12)W=5
seg(16)
seg(13)
seg(14)seg(15)
seg(17)ack(12)ack(12)
ack(12)
RTO
seg(13)
ack(15)
seg(16)
W=5
ack(17)
W=5
W=2
W=1
W=2
37
TCP New Reno• I primi 12 segmenti sono stati
trasmessi e riconosciuti• Il segmento 13 e il segmento 16
vanno perduti• Il riconoscimento della perdita del
segmento 13 avviene per 3 ack(12) duplicati. La soglia e’posta a 2, la finestra a 5
• Il segmento 13 e’ ritrasmesso fast e innesca l’invio di ack(15)
• Non si esce da fast recoveryperche’ si tratta di un ack parziale. Si trasmette il 16 con finestra a 6 e anche 18,19,20,21,22.
• Arriva ack(17) e si riparte in CA con finestra 2
seg(12)
ack(12)W=5
seg(16)
seg(13)
seg(14)seg(15)
seg(17)ack(12)ack(12)ack(12) seg(13)
ack(15)seg(16)
W=5
ack(17)
W=6
W=2
seg(16)seg(18)seg(19)seg(20)seg(21)seg(22)
Riepilogo: versioni del TCP• Tahoe
– Slow-start– Congestion avoidance– Fast retransmit
• Reno– Implementa anche il fast recovery
• New Reno– Fast recovery per recuperare perdite multiple
• SACK– Ritrasmissione selettiva
• VEGAS– Stima della finestra di congestione
38
Ritrasmissione adattativa
• Differentemente da quanto avviene sulla singola linea RTT non e’ costante
• Il timeout che regola il meccanismo a finestra del TCP 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
• Ogni volta che il TCP invia un segmento registra il tempo e lo sottrae al tempo di arrivo dell’ACK ad esso relativo ottenendo la grandezza s-RTT
• La stima di RTT si ottiene con la seguente media pesata tra il vecchio valore e il nuovo campione:
eRTT= α eRTT + (1-α) sRTTα=0.125 valore tipico
• Tout=2eRTT
Associazione degli ACK ai segmenti trasmessi
• ACK e’ la conferma della ricezione dei dati e non di una particolare trasmissione– Se un pacchetto viene ritrasmesso piu’ volte non so con quale valore
dell’istante di partenza calcolare e-RTT
Sender Receiver
Original transmission
ACK
Sam
pleR
TT
Retransmission
Sender Receiver
Original transmission
ACK
Sam
pleR
TT
Retransmission
(a) (b)
39
Algoritmo Karn/Partridge
• S-RTT viene misurato soltanto per i segmenti che vengono inviati una volta sola
• Ad ogni ritrasmissione il TCP raddoppia il time out– Comunque ogni volta che arriva l’ACK si ricalcola con
l’ultimo valore di eRTT secondo la formula
• Questo meccanismo e’ una forma di controllo di congestione che fa si che il trasmettitore aspetti un tempo via via piu’ lungo prima di ritrasmettere un segmento per cui non ha ancora ottenuto riscontro
Variazioni di RTT (RFC2988)
• Se le variazioni tra i campioni di RTT sono piccole non ha senso calcolare il time out secondo la formula Tout=2eRTT Viene effettuato sulla base della stima del RTT e della deviazione del valore del campione di RTT rispetto alla stima
• Si calcola la deviazione del valore del campione di RTT (sRTT) rispetto alla stima eRTT:
devRTT= (1-β) devRTT+ β |sRTT-eRTT|
• Calcolo del time outTout= e-RTT +4 devRTT
• Se le fluttuazioni sono piccole time out e’ circa uguale a e-RTT altrimenti time out > e-RTT in modo piu’ consistente
� β=0.25 e’ il valore raccomandato
40
Esercizio: lettura di traccia TCP
• Dal grafico si puo’ dedurre che:
– Valore della soglia iniziale = 32– Il sistema lavora in SS negli intervalli [1,6] e 23,26]– Il sistema lavora in congestion avoidance negli intervalli [6,16] e [17,22]– Dopo il sedicesimo round viene riconosciuta una perdita in base a dup ack– La soglia al diciottesimo round vale 21– Il pacchetto 70 viene inviato al settimo round
05
1015202530354045
1 3 5 7 9 11 13 15 17 19 21 23 25
RTT
Dim
ensi
one
della
fine
stra
di
cong
estio
ne (s
egm
enti