01.03.2013 Views

TCP: Transport Control Protocol - INFN-CNAF

TCP: Transport Control Protocol - INFN-CNAF

TCP: Transport Control Protocol - INFN-CNAF

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!