TCP: Transport Control Protocol - INFN-CNAF
TCP: Transport Control Protocol - INFN-CNAF
TCP: Transport Control Protocol - INFN-CNAF
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>TCP</strong>: <strong>Transport</strong> <strong>Control</strong> <strong>Protocol</strong><br />
Tiziana Ferrari,<br />
<strong>INFN</strong>-<strong>CNAF</strong><br />
Tiziana.Ferrari@cnaf.infn.it<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 1
Indice<br />
• Caratteristiche principali del protocollo <strong>TCP</strong><br />
• Multiplexing di connessioni<br />
• Affidabilita’ (reliability)<br />
• <strong>Control</strong>lo e prevenzione di congestione:<br />
– Congestion control<br />
– Congestion avoidance<br />
• Ottimizzazioni del protocollo<br />
– Algoritmi di fast recovery e fast retransmit<br />
– Silly window syndrome<br />
– Delayed acknowledgement<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 2
• 1 Basic Data Transfer<br />
• 2 Reliability Flow <strong>Control</strong><br />
• 3 Multiplexing<br />
• 4 Connections<br />
• 5 Precedence and Security<br />
• (*) RFC: Request For Comment<br />
<strong>TCP</strong> secondo l’RFC 793 (*)<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 3
<strong>TCP</strong> secondo l’RFC 793 (1)<br />
• Basic Data Transfer:<br />
– The <strong>TCP</strong> is able to transfer a continuous stream of octets in<br />
each direction between its users by packaging some number<br />
of octets into segments for transmission through the internet<br />
system. In general, the <strong>TCP</strong>s decide when to block and<br />
forward data at their own convenience. Sometimes users<br />
need to be sure that all the data they have submitted to the<br />
<strong>TCP</strong> has been transmitted. For this purpose a push function is<br />
defined. To assure that data submitted to a <strong>TCP</strong> is actually<br />
transmitted the sending user indicates that it should be<br />
pushed through to the receiving user. A push causes the<br />
<strong>TCP</strong>s to promptly forward and deliver data up to that point to<br />
the receiver. The exact push point might not be visible to the<br />
receiving user and the push function does not supply a record<br />
boundary marker.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 4
<strong>TCP</strong> secondo l’RFC 793 (2)<br />
• Reliability:<br />
– The <strong>TCP</strong> must recover from data that is damaged, lost,<br />
duplicated, or delivered out of order by the internet<br />
communication system. This is achieved by assigning a<br />
sequence number to each octet transmitted, and requiring a<br />
positive acknowledgment (ACK) from the receiving <strong>TCP</strong>. If<br />
the ACK is not received within a timeout interval, the data is<br />
retransmitted. At the receiver, the sequence numbers are used<br />
to correctly order segments that may be received out of order<br />
and to eliminate duplicates. Damage is handled by adding a<br />
checksum to each segment transmitted, checking it at the<br />
receiver, and discarding damaged segments. As long as the<br />
<strong>TCP</strong>s continue to function properly and the internet system<br />
does not become completely partitioned, no transmission<br />
errors will affect the correct delivery of data. <strong>TCP</strong> recovers<br />
from internet communication system errors.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 5
• Flow <strong>Control</strong>:<br />
<strong>TCP</strong> secondo l’RFC 793 (3)<br />
– <strong>TCP</strong> provides a means for the receiver to govern the amount<br />
of data sent by the sender. This is achieved by returning a<br />
"window" with every ACK indicating a range of acceptable<br />
sequence numbers beyond the last segment successfully<br />
received. The window indicates an allowed number of octets<br />
that the sender may transmit before receiving further<br />
permission.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 6
• Multiplexing:<br />
<strong>TCP</strong> secondo l’RFC 793 (4)<br />
– To allow for many processes within a single Host to use <strong>TCP</strong><br />
communication facilities simultaneously, the <strong>TCP</strong> provides a<br />
set of addresses or ports within each host. Concatenated with<br />
the network and host addresses from the internet<br />
communication layer, this forms a socket. A pair of sockets<br />
uniquely identifies each connection. That is, a socket may be<br />
simultaneously used in multiple connections. The binding of<br />
ports to processes is handled independently by each Host.<br />
However, it proves useful to attach frequently used processes<br />
(e.g., a "logger" or timesharing service) to fixed sockets<br />
which are made known to the public. These services can then<br />
be accessed through the known addresses. Establishing and<br />
learning the port addresses of other processes may involve<br />
more dynamic mechanisms.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 7
<strong>TCP</strong> secondo l’RFC 793 (5)<br />
• Connections:<br />
– The reliability and flow control mechanisms described above<br />
require that <strong>TCP</strong>s initialize and maintain certain status<br />
information for each data stream. The combination of this<br />
information, including sockets, sequence numbers, and<br />
window sizes, is called a connection. Each connection is<br />
uniquely specified by a pair of sockets identifying its two<br />
sides. When two processes wish to communicate, their <strong>TCP</strong>'s<br />
must first establish a connection (initialize the status<br />
information on each side). When their communication is<br />
complete, the connection is terminated or closed to free the<br />
resources for other uses. Since connections must be<br />
established between unreliable hosts and over the unreliable<br />
internet communication system, a handshake mechanism<br />
with clock-based sequence numbers is used to avoid<br />
erroneous initialization of connections.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 8
<strong>TCP</strong> secondo l’RFC 793 (6)<br />
• Precedence and Security:<br />
– The users of <strong>TCP</strong> may indicate the security and precedence<br />
of their communication. Provision is made for default values<br />
to be used when these features are not needed.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 9
Le funzioni di <strong>TCP</strong> nel dettaglio<br />
• Scambio di informazioni di controllo tra mittente e destinatario<br />
• Affidabilita’ (reliability): dato un sistema trasmissivo inaffidabile – cioè<br />
soggetto ad errori di trasmissione e a perdita di unità di dati – viene simulata<br />
l’affidabilità attraverso la ritrasmissione delle unità di dato perse. Ciò avviene<br />
attraverso<br />
1. identificazione della perdita di messaggio<br />
2. segnalazione dell’avvenuta perdita attraverso il meccanismo di positive<br />
acknowledgement: periodicamente il destinatario comunica il numero di<br />
sequenza dell’ultimo byte ricevuto<br />
• Identificazione dell’esatto processo di destinazione presente sull’end-node<br />
ricevente (piu’ processi possono ricevere dati in modo concorrente)<br />
• <strong>Control</strong>lo di congestione<br />
• Prevenzione della congestione<br />
• Unita’ dati <strong>TCP</strong>: l’unita’ di dati generata dal protocollo <strong>TCP</strong> (e poi<br />
incapsulata in un messaggio IP) viene detta segmento<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 10
Caratteristiche generali<br />
• Viene creata una connessione virtuale tra mittente e destinatario<br />
attraverso lo scambio di informazioni di controllo (fase di call<br />
set-up).<br />
• La creazione della connessione è seguita dalla fase di<br />
trasferimento dati vera e propria. Durante la trasmissione il<br />
protocollo <strong>TCP</strong> continua a scambiare informazioni di controllo.<br />
La connessione e’ di tipo bidirezionale: una direzione viene<br />
utilizzata per scambiare i byte di informazione utile (mittente<br />
→destinatario), mentre la direzione opposta viene utilizzata<br />
esclusivamente per lo scambio di informazione di controllo<br />
(destinatario → sorgente)<br />
• Per le applicazioni di natura interattiva in cui deve essere<br />
minimizzato il ritardo di ricezione delle unità di dato (e.g.<br />
telnet), viene forzato l’invio di pacchetti non appena è<br />
disponibile qualche byte di informazione (meccanismo di data<br />
push)<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 11
Send e receive buffer<br />
• Si dice “buffer” un’area della memoria dell’applicazione che contiene i dati<br />
da scambiare tra mittente e destinatario. I dati vengono mano mano copiati -<br />
in unità di memoria di dimensione configurabile da parte di una applicazione<br />
- nell’area di memoria del sistema operativo attraverso la system call write().<br />
Per ottimizzare il rapporto tra le informazioni di controllo poste<br />
nell’intestazione e la quantità di byte di dati disponibili nell’area data, un dato<br />
messaggio vene inviato soltanto nel momento in cui la parte di dati<br />
disponibile nel buffer eccede una data soglia configurabile.<br />
• Send buffer: area di memoria in cui <strong>TCP</strong> pone i messaggi in attesa di<br />
trasmissione; il send buffer è anche detto “send socket buffer”.<br />
• Receive buffer: area di memoria del sistema operativo in cui <strong>TCP</strong> pone i<br />
messaggi ricevuti; il receive buffer è anche detto “receive socket buffer”<br />
• Per ogni nuova connessione vengono allocati una nuova coppia di send e<br />
receive buffer<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 12
Send e receive buffer (cont)<br />
Applicazione 1 Applicazione n<br />
dati ... dati<br />
write() write()<br />
SEND SOCKET<br />
RECEIVE SOCKET<br />
AREE DI MEMORIA<br />
DELLE APPLICAZIONI<br />
AREA DI MEMORIA<br />
DELLE SISTEMA OPERATIVO<br />
Connessione 1<br />
Connessione n<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 13
Segmento<br />
• Viene definita segmento la parte dati di una unita’ di<br />
trasmissione del protocollo <strong>TCP</strong> .<br />
• Viene definito messaggio l’unione del segmento e<br />
dell’intestazione <strong>TCP</strong>.<br />
dati<br />
SEGMENTO <strong>TCP</strong><br />
MESSAGGIO <strong>TCP</strong><br />
Intestazione <strong>TCP</strong><br />
• La dimensione massima di un segmento e’ pari alla dimensione<br />
massima del pacchetto IP, esclusi i byte dell’intestazione <strong>TCP</strong> e<br />
IP. Essa viene definita Maximum Segment Size (MSS):<br />
MSS = MTU – sizeof(<strong>TCP</strong> header) – sizeof(IP header)<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 14
Intestazione <strong>TCP</strong>: formato<br />
Source port Destination port<br />
Sequence number<br />
Acknowledgement number<br />
Offset Reserved Code Window<br />
Checksum Urgent pointer<br />
Options Padding<br />
Data<br />
...<br />
0 8 16 31<br />
Source/destination port: identificazione dell’applicazione mittente/ricevente attive<br />
rispettivamente sul nodo mittente IP_source e nodo destinatario IP_dest<br />
Sequence number: numero di sequenza del primo byte del campo Data<br />
nell’ambito del flusso di byte generati dalla sorgente (ne identifica la posizione)<br />
Acknowledgement number: numero di sequenza del primo byte di dati atteso. Tale<br />
numero corrisponre al numero di sequenza successivo al numero di sequenza<br />
dell’ultimo segmento correttamente ricevuto. Il numero di sequenza si riferisce al<br />
flusso generato nel senso opposto del traffico (gli ackknowledgement sono generati sempre<br />
dal ricevente di un dato stream e quindi viaggiano nel senso inverso del flusso dati).<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 15
Intestazione <strong>TCP</strong>: formato (cont)<br />
Offset: indica la dimensione della porzione Data del segmento <strong>TCP</strong><br />
Reserved: campo non specificato, riservato ad usi futuri<br />
Code: codice che identifica la funzione del segmento (e.g. Segmento di apertura di<br />
una connession: SYN, segmento di chiusura: FIN, segmento dati, segmento<br />
che include esclusivamente informazione di acknowledgement<br />
URG: urgent pointer set, il segmento non è soggetto a buffering al lato ricevente<br />
ACK: campo ACK valido<br />
PUSH: il segmento non è soggetto a buffering al lato mittente<br />
RST: reset della connessione<br />
SYN: synchronize sequence numbers<br />
FIN: il mittente ha raggiunto la fine del byte stream generato dalla<br />
applicazione<br />
Window: il mittente/ricevente comunica al ricevente/mittente la quantità di<br />
memoria disponibile per momorizzare dati<br />
Options: le opzioni servono per scambiare specifici elementi di informazione tra<br />
mittente e destinatario, come il Maximum Segment Size (la massima dimensione<br />
del segmento che può essere accettata)<br />
Checksum: controllo d’errore applicato alla sola intestazione <strong>TCP</strong> (non alla parte<br />
data), per il calcolo del codice di controllo d’errore si assume che il campo<br />
checksum contenga una stringa di 0<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 16
Multiplexing di connessioni<br />
• Il multiplexing di connessioni consiste nella possibilita’ di stabilire molteplici<br />
connessioni <strong>TCP</strong> concorrenti in trasmissione o ricezione in un dato nodo.<br />
A questo scopo, vengono utilizzate le porte <strong>TCP</strong>: ogni punto terminale di<br />
una connessione in un dato host H e’ definito da un coppia di<br />
identificatori detta socket cosi’ formata:<br />
Socket = (<strong>TCP</strong> port, IP address(H))<br />
Dunque una connessione <strong>TCP</strong> tra due nodi H1 e H2 e’ identificata dalla<br />
coppia di socket:<br />
Connessione = ( <strong>TCP</strong> source port, add(H1), <strong>TCP</strong> destination port, add(H2) )<br />
Dunque in un dato istante un socket puo’ essere utilizzato da piu’ di una<br />
connessione: es. il socket associato ad un www server o ad un ftp server.<br />
131.154.3.1<br />
Sock1=(port1, 131.154.3.1)<br />
131.154.3.41<br />
Sock2=(port2, 131.154.3.41)<br />
Sock4=(port4, 131.154.3.10)<br />
Sock3=(port3, 131.154.3.41)<br />
Sock5=(port5, 131.154.3.10)<br />
conn3<br />
conn1<br />
conn2<br />
131.154.3.10<br />
Conn1=(sock1, sock4)<br />
Conn2=(sock2, sock4)<br />
Conn3=(sock3, sock5)<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 17
Affidabilità<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 18
P1<br />
MITTENTE<br />
RICEVENTE<br />
s1<br />
P2<br />
s2<br />
P3<br />
Positive acknowledgement<br />
s3<br />
P4<br />
s4<br />
P5<br />
P1 P2 P3 P4<br />
timeout<br />
P4 P5<br />
s5<br />
ACK(s1+1) ACK(s2+1) ACK(s3+1) ACK(s3+1) ACK(s3+1)<br />
ACK duplicati<br />
Numero di sequenza del byte<br />
Sn: numero di sequenza dell’ultimo byte dell’n-esimo messaggio; il numero di sequenza<br />
Iniziale del primo byte nel flusso di dati viene definito in fase di call set-up<br />
Svantaggio: ritardo tra la trasmissione di un messaggio e il successivo derivante dall’attesa<br />
dell’acknowledgement<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 19<br />
t<br />
t
Sliding window<br />
• Ottimizzazione dell’algoritmo di positive acknowledgement in cui il mittente<br />
e’ autorizzato ad inviare m pacchetti (n byte) prima di porsi in attesa della<br />
ricezione dell’acknowledgement relativo al primo messaggio inviato.<br />
• n rappresenta la dimensione della window, ovvero la quantita’ di dati che il<br />
mittente e’ autorizzato ad inviare dopo essersi posto in attesa dell’ack del<br />
primo messaggio della window stessa<br />
• Nel caso in cui il tempo che intercorre tra l’invio del primo messaggio e la<br />
ricezione del relativo acknowledgement sia piccolo, il mittente può inviare<br />
dati in modo continuativo senza mai sperimentare periodi di inattività che<br />
limitano le prestazioni dell’applicazione.<br />
• Il fenomeno contrario, in cui il mittente trascorre la maggior parte del tempo<br />
attendendo la ricezione dell’ack (per esempio su connessioni ad elevato<br />
tempo di propagazione, come nelle connessioni satellitari) viene detto: stopand-wait.<br />
• Il ricevente deduce la presenza di un messaggio perso nel caso in cui ack(Sn)<br />
non sia ricevuto entro un intervallo prestabilito, al termine del quale si<br />
procede con la ritrasmissione. La durata ottimale di tale timeout viene<br />
determinata stimando la media e la variazione del ritardo che intercorre tra la<br />
trasmissione di un messaggio e la ricezione del corrispondente<br />
acknowledgement (Round Trip Time)<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 20
100by<br />
P1 P2<br />
Sliding window (cont)<br />
Ipotesi: ogni messaggio ha lunghezza costante di 100 by, la dimensione della window e’<br />
costante e pari a 400 by.<br />
200by 300by 400by<br />
P3 P4 P5 P6<br />
timeout<br />
500by 600by 700by<br />
800by<br />
P4 P5<br />
P6 P7 P5<br />
t<br />
ACK(s1) ACK(s2) ACK(s3) ACK(s3) ACK(s3) ACK(s4) ACK(s5) ACK(s6) ACK(s7)<br />
Sn: numero di sequenza dell’ultimo byte dell’n-esimo messaggio; il numero di sequenza<br />
Iniziale del primo byte nel flusso di dati viene definito in fase di call set-up<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 21<br />
t<br />
by
AL LATO MITTENTE:<br />
acked<br />
Terminologia<br />
1 2 3 4<br />
Byte sequence number<br />
• 1: sequence number vecchi che hanno già ricevuto un acknowledgement<br />
• 2: sequence number che non hanno ancora ricevuto un acknowledgement<br />
• 3: sequence number di pacchetti che non sono stati ancora trasmessi ma che<br />
posono essere trasmessi essendo essi all’interno della window (SEND<br />
WINDOW)<br />
• 4: sequence number futuri relativi a dati che non possono essere trasmessi,<br />
essendo essi esterni alla window<br />
AL LATO RICEVENTE:<br />
not acked send window<br />
window<br />
1 2 3<br />
receive window<br />
Byte sequence number<br />
acked Seq number non ancora autorizzati<br />
• 1: sequence number di pacchetti di cui è già stato inviato l’ack<br />
• 2: spazio di memoria disponibile per la ricezione di nuovi dati (RECEIVE<br />
WINDOW)<br />
• 3: sequence number futuri che non sono ancora ammessi<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 22
Terminologia (cont)<br />
• offered window: la dimensione della finestra segnalata dal<br />
ricevente. L’offered window varia nel tempo, il valore massimo<br />
equivale alla dimensione di memoria disponibile per la<br />
memorizzazione di dati.<br />
• Usable window: min [send window, offered window]<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 23
<strong>Control</strong>lo e prevenzione della congestione<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 24
<strong>Control</strong>lo della congestione<br />
• Per scoprire la presenza di un punto di congestione sul cammino<br />
di collegamento di due end-node, utilizzando un metodo che<br />
NON introduca traffico di monitoraggio aggiuntivo, può essere<br />
sufficiente effettuare una stima del ritardo di propagazione di un<br />
messaggio sul cammino (mittente → destinatario → mittente):<br />
RTT (Round Trip Time)<br />
• Acknowledgement: messaggio inviato dal destinatario alla<br />
sorgente per segnalare che un dato messaggio M i e’ stato<br />
ricevuto correttamente<br />
• Data una stima del round trip time RTT, se dopo RTT sec<br />
ack(M i ) non e’ stato ancora ricevuto si assume che M i sia stato<br />
perso e si procede con la ritrasmissione e la fase di controllo<br />
della congestione<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 25
One-way delay e RTT<br />
• One-way delay: tempo che intercorre tra l’istante in cui l’ultimo bit del<br />
messaggio viene trasmesso e l’istante in cui il primo bit raggiunge la<br />
destinazione remota (one-way delay ∼ RTT/2)<br />
• data una connessione con n hop, detta L i la latenza dovuta alla<br />
memorizzazione e al forwarding del messaggio introdotta dall’i-esimo router,<br />
M la dimensione del messaggio, C i e prop i rispettivamente la capacita’ dell’iesimo<br />
link di output e il tempo di propagazione del segnale fisico nel mezzo<br />
trasmissivo:<br />
1-way Delay = ∑ ( M/ C i + L i + prop i )<br />
• Connessioni dominate dal delay:<br />
Si tratta delle connessioni in cui il RTT e’ principalmente dovuto al tempo di<br />
propagazione fisica del segnale e dal tempo dovuto alle operazioni di<br />
memorizzazione e di forwarding nei router<br />
Es: connessioni intercontinentali caratterizzate da un numero elevato di hop<br />
• Connessioni dominate dalla capacita’ dei link di collegamento:<br />
Si tratta delle connessioni caratterizzate da link a bassa velocita’, per le quali<br />
il RTT di un messaggio e’ fortemente influenzato dalla dimensione media<br />
del messaggio stesso, cioe’ 1-way delay e’ demoniato dal termine M/ C i<br />
(Es: connessioni ISDN)<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 26
Stima del Round Trip Time (RTT)<br />
• Componente dell’algoritmo di ritrasmissione necessaria per prevedere il<br />
tempo necessario di ricezione di un acknowledgement; é importante non<br />
sottostimare RTT per evitare ristrasmissioni nel caso di aumento del tempo di<br />
trasmissione dovuto ad un aumentato carico di traffico<br />
• Smoothed RTT (SRTT):<br />
SRTT(i) := α SRTT(i-1)+(1- α)M<br />
– α: filtro, valore raccomandato 0.90<br />
– M: misura relativa al messaggio di cui si e’ ricevuto l’ack piu’ recente<br />
• Retransmit timeout interval I:<br />
I = min[lim SUP , max [lim INF , (β *SRTT)]]<br />
– β: fattore di varianza del delay (es. β =2 per un carico di traffico ≤ 30%<br />
capacita’ di linea)<br />
– lim SUP : limite superiore dell’intervallo (es. 1 min)<br />
– lim INF : limite inferiore dell’intervallo (es. 1 sec)<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 27
Meccanismi di controllo di flusso<br />
• Si dividono in due gruppi:<br />
– Congestion control → (implementato dall’algoritmo “slow<br />
start”), serve per fronteggiare situazioni di congestione grave,<br />
ovvero quando scade il timeout al lato mittente. E’<br />
caratterizzato da un incremento esponenziale della usable<br />
window.<br />
– Congestion avoidance → viene adottato in assenza di<br />
congestione grave, ovvero solo in presenza di<br />
acknowledgement duplicati. Permette un incremento<br />
graduale della usable window (lineare)<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 28
Congestion <strong>Control</strong> (Slow Start) e Congestion Avoidance: meccanismo di base<br />
Connection opening : cwnd = 1 segment<br />
Slow Start<br />
Exponential<br />
increase for cwnd until<br />
cwnd = SSTHRESH<br />
Retransmission timeout<br />
SSTHRESH:=cwnd/2<br />
cwnd = SSTHRESH<br />
Retransmission timeout<br />
SSTHRESH:=cwnd/2<br />
cwnd:= 1 segment<br />
•Exponential increase for cwnd :<br />
for every useful acknowledgment received, cwnd := cwnd + (1 segment size)<br />
Congestion Avoidance<br />
Additive<br />
increase for cwnd<br />
•Additive increase for cwnd :<br />
for every useful acknowledgment received, cwnd := cwnd + (segment size)*(segment size) / cwnd<br />
it takes a full window to increment the window size by one.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 29
CONGESTION CONTROL<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 30
CONGESTION CONTROL<br />
Slow start<br />
<strong>TCP</strong> entra nella fase slow start ogni volta che viene riscontrata la perdita di un<br />
messaggio (cioè come conseguenza dello scadere di un timeout). <strong>TCP</strong> è nella<br />
fase di Slow start anche inizialmente, in apertura della connessione, e ogni<br />
qual volta una connessione <strong>TCP</strong> viene riattivata dopo un periodo di pausa<br />
La fase slow start serve per limitare il numero di pacchetti in transito tra la<br />
sorgente e il destinatario in presenza di congestione oppure inizialmente,<br />
quando deve essere ancora determinata la frequenza di trasmissione dei<br />
pacchetti ottimale, per incrementare in modo graduale la frequenza di<br />
trasmissione<br />
IMPLEMENTAZIONE: viene utilizzata una variabile chiamata “congestion<br />
window” (indicata con la sigla: cwind). Cwind è un parametro il cui<br />
valore varia durante le varie fasi di un trasferimento <strong>TCP</strong> secondo le<br />
seguenti regole:<br />
• all’inizio e per ogni restart di una trasmissione: cwind=1<br />
• ∀ack ricevuto: cwind=cwind+const (e.g. const=1)<br />
• Usable Window = min (cwind, RCV advertized window)<br />
Il tempo necessario affinché cwind raggiunga una ampiezza pari a W<br />
(supponendo che W sia espresso in pacchetti) varia secondo la regola:<br />
time = RTT * log2 W<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 31
CONGESTION CONTROL<br />
• Vantaggi:<br />
Slow Start (cont)<br />
– non vengono inviati burst (=sequenze di pacchetti affiancati) che<br />
peggiorano la situazione di congestione nei colli di bottiglia della rate e<br />
nei router che iniettano traffico da una interfaccia I di input ad una di<br />
output O, dove<br />
capacita(I) > capacita(O)<br />
• Svantaggi:<br />
– Poiché la window viene ridotta di dimensione in presenza di congestione,<br />
in caso di elevata percentuale di pacchetti persi (packet loss) la<br />
connessione non è mai in grado di sfruttare pienamente la banda<br />
disponibile su alcuni tratti della rete<br />
– In caso di connessioni ad alto tempo di propagazione (RTT >>, per<br />
esempio su link satellitari, in cui il tempo di propagazione e’ la<br />
componente più significativa della latenza end-to-end), la durata della<br />
fase slow start è considerevole, con un conseguente calo delle prestazione<br />
e una latenza superiore necessaria per raggiungere uno stato di<br />
“equilibrio”<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 32
CONGESTION CONTROL<br />
Cwin=1<br />
P1<br />
Ack(P2)<br />
Cwin=3<br />
Ack(P4)<br />
Cwin=5<br />
Ack(P3)<br />
Cwin=4<br />
P4 P5 P6 P7<br />
Ack(P5)<br />
Cwin=6<br />
Ack(P6)<br />
Cwin=7<br />
Ack(P7)<br />
Cwin=8<br />
Esempio<br />
RTT<br />
Packet Time: intervallo di tempo fra 2 pacchetti consecutivi<br />
P8 P9 P10 P11 P12 P13 P14 P15<br />
Ack(P1)<br />
Cwin=2<br />
P2 P3<br />
Ack(P8)<br />
Cwin=9<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 33<br />
t<br />
t<br />
t
CONGESTION AVOIDANCE<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 34
CONGESTION AVOIDANCE<br />
Congestion avoidance<br />
• <strong>TCP</strong> si trova nella fase di congestion avoidance quando raggiunge una situazione di<br />
equilibrio (cioè <strong>TCP</strong> non è soggetto a perdita di pacchetti). In questa fase <strong>TCP</strong> tenta<br />
ancora di aumentare il parametro cwind allo scopo di verificare la possibilità di<br />
aumentare la frequenza di trasmissione dei pacchetti per raggiungere la MASSIMA<br />
frequenza trasmisssiva ammessa dai link di collegamento presenti nel cammino tra la<br />
sorgente e il destinatario.<br />
• AUMENTO DELLA FREQUENZA TRASMISSIVA:<br />
Nella fase di congestion avoidance il parametro cwind viene aumentato in modo più<br />
lento e graduale, per esempio facendo in modo che anziché incremenatare<br />
esponenzialmente nel tempo (come nella fase di slow start), l’aumento sia<br />
lineare.<br />
In fase slow start:<br />
∀ack ricevuto, cwind=cwind+const<br />
In fase di congestion avoidance:<br />
∀ack ricevuto, cwind = cwind + const/cwind<br />
1. const = 1 // se cwin espresso in numero di segmenti<br />
2. const = MSS*MSS // cwin espresso in byte<br />
ovvero ad ogni scadere di 1 RTT, cwind aumenta all’incirca di 1 messaggio. Lo<br />
scopo e’ quello di evitare la sovrastima della banda disponibile per non entrare<br />
nuovamente nella fase di slow start.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 35
Congestion avoidance (cont)<br />
• DIMINUZIONE DELLA FREQUENZA TRASMISSIVA:<br />
1. In presenza di ack duplicati (ack del medesimo sequence number S i ) la<br />
window size viene ridotta secondo la regola moltiplicativa:<br />
CONGESTION AVOIDANCE<br />
cwindi = d * cwindi-1 (d < 1, e.g. 1/2)<br />
cwind e’ espresso in byte<br />
2. In presenza di un timeout che scade si passa alla fase di slow start:<br />
cwind=1<br />
In caso di congestione persistente la formula al punto 1. produce un effetto<br />
di decrescita esponenziale nel tempo del parametro (essendo applicata ad<br />
ogni messaggio iterativamente)<br />
Anche in fase di congestion avoidance, in ogni istante:<br />
W = min(cwind, RCV advertized win)<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 36
CONGESTION AVOIDANCE ↔ CONGESTION CONTROL<br />
• Come si passa dalla fase di congestion control a quella di<br />
congestion avoidance e viceversa?<br />
Si utilizza una variabile (threshold T) tale che:<br />
– Inizialmente T=64 KB<br />
– Se cwind < T: <strong>TCP</strong> in fase di slow start (congestion control)<br />
– Se cwind ≥ T: <strong>TCP</strong> in fase di congestion avoidance<br />
• Quando si passa dalla fase di congestion avoidance a quella di<br />
congestion control?<br />
Al lato mittente ogni qual volta scade un timeout, il parametro<br />
T viene dimezzato: T := cwind/2, e cwind=1<br />
A questo punto comincia la fase di slow start.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 37
Slow start e congestion avoidance: esempio<br />
SSTHRESH<br />
Slow start Congestion Avoidance<br />
•Slow start : incremento rapido di cwnd<br />
•Congestion Avoidance : incremento piu’ lento della cwnd<br />
Cwnd average of the last 10 samples.<br />
Cwnd average over the life of the connection to<br />
that point<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 38
Slow start<br />
Infulenza del parametro threshold T sulle prestazioni<br />
Congestion avoidance<br />
SSTHRESH = 730Kbyte<br />
SSTHRESH = 1460Kbyte<br />
Durante la fase di congestion avoidance e in assenza di perdite di paccheti, cwnd incrementa di un<br />
segmento per ogni RTT. Nel nostro caso, essendo tutti i pacchetti ricevuti correttamente, la window<br />
incrementa di 1460 byte (supponendo una MTU di 1500 by) ogni 175 ms.<br />
Se la cwnd e’ pari a 730 kbyte, sono necessari almeno 4 minutes per ottenere una cwnd piu’ larga dek<br />
prodotto bandwidth*delay (nel nostro esempio pari a 2,65 MByte). In altri termini, sono necessari<br />
almeno 4 min per ottenere un pieno utilizzo della banda.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 39
Oscillazioni di cwnd in caso di perdita di pacchetti<br />
1) A packet is lost<br />
2) Fast Recovery<br />
(Temporary state to repair the<br />
lost)<br />
New loss<br />
Cwnd when packets are lost because the window size is too large<br />
Losses occur<br />
when the cwnd is<br />
larger than 3,5<br />
Mbyte<br />
Nei casi in cui la cwnd e’ in grado di superare il bandwidth-delay product, possono verificarsi<br />
perdite di dati che comportano un abbassamento delle prestazioni. Nell’esempio illustrato dal<br />
grafico, la cwnd supera il bandwidth delay product e il throughput medio (dati trasmessi/tempo)<br />
viene drasticamente ridotto. Le perdite sono dovute all’insufficiente quantita’ di memoria in una o<br />
piu’ code trasmissive lungo il cammino tra il mettente e il ricevente.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 40
Linux 2.4: Auto-tuning<br />
• In nel kernel Linux 2.4, <strong>TCP</strong> adotta dei meccanismi di adattamento dinamico<br />
della dimensione dei socket buffer (da cui dipende cwnd) in funzione della<br />
banda disponibile tra una data coppia di nodi.<br />
• Se l’applicazione setta esplicitamente le dimensioni dei socket attraverso la<br />
funzione setsocketopt(), allora auto-tuning e’ disabilitato.<br />
• La dimensione dei socket buffer dipende da:<br />
– La domanda di memoria kernel (in caso di penuria di memoria la<br />
dimensione dei socket viene limitata o addirittura ridotta)<br />
– Un insieme di parametri del kernel che regolano il meccanismo di autotuning<br />
(vedi slide successiva)<br />
• Linux 2.4 duplica l’ammontare di memoria richiesta da una applicazione<br />
attraverso la funzione setsocketopt()<br />
• Linux 2.4 limita la dimensione di cwnd (cwnd moderation) attraverso la stima<br />
in ogni istante della quantita’ di pacchetti in viaggio verso il ricevente (di cui<br />
il mittente non ha ancora ricevuto il corrispondente ACK). In questo modo<br />
non viene ecceduto il prodotto bandwidth*delay e vengono minimizzati<br />
fenomini di elevato ritardo e perdita dovuti all’accodamento.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 41
Parametri <strong>TCP</strong> nel Kernel Linux<br />
• Linux Cross Reference<br />
(http://www.iglu.org.il/lxr/source/Documentation/networking/ip-sysctl.txt)<br />
• tcp_wmem – vector of 3 INTEGERs: min, default, max<br />
– min: Amount of memory reserved for send buffers for <strong>TCP</strong><br />
socket. Each <strong>TCP</strong> socket has rights to use it due to fact of its<br />
birth. Default: 4K<br />
– Default: Amount of memory allowed for send buffers for<br />
<strong>TCP</strong> socket by default. This value overrides<br />
net.core.wmem_default used by other protocols, it is usually<br />
lower than net.core.wmem_default. Default: 16K<br />
– max: Maximal amount of memory allowed for automatically<br />
selected send buffers for <strong>TCP</strong> socket. This value does not<br />
override net.core.wmem_max, "static" selection via<br />
SO_SNDBUF does not use this. Default: 128K<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 42
Parametri <strong>TCP</strong> nel Kernel Linux (cont)<br />
• tcp_rmem - vector of 3 INTEGERs: min, default, max<br />
• min: Minimal size of receive buffer used by <strong>TCP</strong> sockets. It is<br />
guaranteed to each <strong>TCP</strong> socket, even under moderate memory<br />
pressure. Default: 8K<br />
• default: default size of receive buffer used by <strong>TCP</strong> sockets. This<br />
value overrides net.core.rmem_default used by other protocols.<br />
Default: 87380 bytes. This value results in window of 65535<br />
with default setting of tcp_adv_win_scale and tcp_app_win:0<br />
and a bit less for default tcp_app_win. See below about these<br />
variables.<br />
• max: maximal size of receive buffer allowed for automatically<br />
selected receiver buffers for <strong>TCP</strong> socket. This value does not<br />
override net.core.rmem_max, "static" selection via<br />
SO_RCVBUF does not use this. Default: 87380*2 bytes.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 43
Parametri <strong>TCP</strong> nel Kernel Linux (cont)<br />
• tcp_mem - vector of 3 INTEGERs: min, pressure, max<br />
• low: below this number of pages <strong>TCP</strong> is not bothered about its<br />
memory appetite.<br />
• pressure: when amount of memory allocated by <strong>TCP</strong> exceeds<br />
this number of pages, <strong>TCP</strong> moderates its memory consumption<br />
and enters memory pressure mode, which is exited when<br />
memory consumtion falls under "low".<br />
• high: number of pages allowed for queueing by all <strong>TCP</strong> sockets.<br />
Defaults are calculated at boot time from amount of available<br />
memory.<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 44
Parametri <strong>TCP</strong> nel Kernel Linux (cont)<br />
• net.ipv4.tcp_rmem_max: max receive socket buffer size<br />
• net.ipv4.tcp_wmem_max: max send socket buffer size<br />
• net.ipv4.tcp_rmem_default: default receive socket buffer size<br />
• net.ipv4.tcp_wmem_default: default send socket buffer size<br />
Tiziana Ferrari Reti di telecomunicazione, Anno Acc. 2003/2004 45