(MS
(MS
SCUOLA DI SCIENZE
Corso di Laurea Magistrale in Informatica
Sessione II
Anno Accademico 2012/2013
Indice
1 ABPS 8
1.1 Scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.1 RWMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 Prerequisiti di progettazione 15
2.1 Lo scenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1
[Link] TCP Cubic . . . . . . . . . . . . . . . . . . . . . . . . . 51
4 Progettazione e implementazione 61
4.1 Progettazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.3.1 DHCP_Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
[Link] TCPRWMA . . . . . . . . . . . . . . . . . . . . . . . . . 66
[Link] TCPConnection . . . . . . . . . . . . . . . . . . . . . . 66
[Link] TCPRenoRWMA . . . . . . . . . . . . . . . . . . . . . . 68
surazione traco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2
Elenco delle gure
1.2 RWMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3
4.3 Diagramma delle classi TCP . . . . . . . . . . . . . . . . . . . . . . . . . 67
4
Elenco delle tabelle
5
Introduzione
Nel corso dell'ultimo secolo, i progressi nelle tecnologie hanno portato a una profonda e
radicale modica sul modo di comunicare; l'impatto delle comunicazioni wireless è stato
mercato della telefonia mobile. Nel 1990, il numero di utenti nel mercato cellulare era
intorno agli 11 milioni; oggi si parla di bilioni [21]; ci sono diversi fattori che hanno
portato a questo boom: il cellulare è comodo, conveniente, lo puoi portare sempre con
aumentare questo successo: oramai questi dispositivi mobili sono piccoli e maneggevoli, la
batteria dura di più, le prestazioni sono aumentate, il wireless permette di essere sempre
connessi a Internet, mandare messaggi istantanei, leggere e-mail e usufruire di tutti quei
servizi che oggi Internet mette a disposizione. A questo, d'altro canto, va aggiunto il
fatto che la maggior parte degli accessi alla rete ora parte perlopiù da dispositivi con
inoltre, le reti wireless sono più soggette a interferenze rispetto alle classiche reti cablate.
Il seguente elaborato vuole mostrare una possibile ottimizzazione della trasmissione dati
su rete wireless agendo sul protocollo TCP. In particolare, no a questo momento è stato
applicato il sistema ABPS solo per la comunicazione VoIP su Wi (che sfrutta come
protocollo di trasporto quello UDP); applicando queste tecniche, che agiscono sul primo
hop di comunicazione tra due end system, a un protocollo come il TCP, sarà possibile
Le modiche apportate non vengono fatte su un sistema reale, bensì viene utilizzato il
nel primo è necessario dare un'idea del contesto in cui ABPS agisce come fattore
6
fondamentale per quanto riguarda lo sviluppo della tematica nell'ambito complessi-
nel terzo capitolo viene presentato il protocollo TCP in generale e come è stato
nel quinto capitolo sono stati raccolti brevi test utili per dimostrare l'eettivo fun-
zionamento della modica e per un'analisi comparativa della stessa con la versione
inne, il sesto e ultimo capitolo, è quello dedicato alle conclusioni e ai vari spunti
7
Capitolo 1
ABPS
1.1 Scenario
mente, bensì di sceglierne una e di utilizzare quella scelta per l'invio di dati. L'architet-
tura ABPS (Always Best Packet Switching) [17,18] viene introdotta per poter sfruttare
al massimo le potenzialità del dispositivo in modo da utilizzare nello stesso tempo tutte
momento dell'invio, si reputa essere l'interfaccia di rete migliore; in questo modo, ABPS
permette alle applicazioni mobili di creare politiche di bilanciamento di carico (load ba-
questa sarà in grado di gestire più interfacce, scegliendo ogni volta quella più adatta
all'invio del pacchetto corrente ed ognuno di questi viene monitorato in modo da ot-
8
tenere informazioni sulla loro eettiva ricezione da parte dell'access point, al ne di una
possibile ritrasmissione.
Gli obiettivi principali per cui è stata introdotta l'architettura ABPS sono:
tere la stessa quantità di dati ma irradiando energia no a due ordini di grandezza
raggiungibile.
9
Per ottenere tali propositi, l'architettura è stata realizzata come nella gura (Figura
1.1)
Il sistema prevede l'uso di un server proxy esterno alle wireless access networks e
non mascherato da un rewall; ogni nodo mobile (MN) possiede un local communication
diverse NICs, con un server proxy sul Fixed Server (FS); il proxy server, quindi, è la
IP, integrando gli opportuni accorgimenti per aggirare il problema della presenza dei
rewall.
Le applicazioni sul nodo mobile utilizzeranno un multi-path virtual channel tra client
proxy e server proxy per comunicare con il resto del mondo; attraverso questa modalità,
cess (RWMA), meccanismo utilizzato per garantire la Quality of Service (QoS) del
persi.
10
1.2.1 RWMA
RWMA è un meccanismo cross-layer applicato ad ABPS, il cui compito principale è
quello di raccogliere informazioni da diversi layer dello stack ISO/OSI per monitorare a
run time la qualità della trasmissione. Questo meccanisco viene utilizzato principalmente
protocollo UDP, in cui la QoS e la perdita dei pacchetti sono paramentri essenziali (si
150ms mentre il numero di pacchetti non deve superare il 3%); tuttavia, si pensa di
poter applicare RWMA anche per applicazioni che impiegano il protocollo TCP, come
In particolare, le principali dierenze tra RWMA e gli altri approcci esistenti sono
viene perduto durante il percorso tra la NIC scelta per l'invio e l'access point a
Le cause, per cui i requisiti in una applicazione VOIP o in uno streaming audio non
vengono rispettati, possono essere molteplici: dalla congestione della rete al crash dei
etc.
Lo scenario si complica se si considera che il nodo può essere mobile; in questo caso,
alle dicoltà viste in precedenza, vanno aggiunte quelle dovute al fatto che il nodo,
muovendosi, può perdere il collegamento con l'access point a cui era connesso o nella
migliore delle ipotesi il collegamento può essere disturbato. Queste complicazioni sono
11
Gli errori sono gestiti in maniere dierenti e si distinguono, perciò, tre principali tipi
di notiche:
tipo di errore;
nel percorso tra mittente e destinatario, non è in grado di noticare alcuni tipi
dal router al mittente; questa situzione viene risolta attraverso degli algoritmi
combinazione con lo scambio di pacchetti ACK o NACK nel caso in cui il pacchetto
3. notiche generate dal livello MAC wireless: nello standard IEEE 802.11 \b\g\n,
pacchetto o l'ack viene perso, il livello MAC del mittente ritrasmette il pacchet-
tentativo, nel caso in cui il mittente non riceva ack dall'AP verso cui abbiamo
senza generare alcuna notica. Il frame perso non raggiungerà mai il destinario e
solo in questo momento i due end system si accorgeranno della perdita, che verrà
Si è deciso, quindi, di fare in modo che il livello MAC del mittente, all'ottavo ten-
tativo, non elimini semplicemente il pacchetto, ma crei una notica che comunica
12
RWMA è il sistema middleware, posto in entrambi gli end system, che si occupa di gestire
una volta stabilito questo, TED notica a ULB (UDP Load Balancer) il man-
IP_NOTIFY_FAILURE o IP_NOTIFY_SUCCESS;
UDP Load Balancer (ULB): questo componente riceve le notiche da parte del
TED e decide se il pacchetto UDP di cui ha avuto notica deve essere ritrasmesso
rete utilizzare;
wireless del nodo mobile, comunicando a ULB quali sono attive in ogni momento.
interfaccia di rete viene congurata, e quindi può essere utilizzata per l'invio e la
In particolare, il TED lavora a livello MAC del protocollo IEEE 802.11 \b\g\n ed ha
come compito principale quello di monitorare ogni datagram UDP (vale anche per TCP)
inviato dall'end system mittente all'end system ricevente sopra un collegamento wireless
oppure è stato scartato dal livello MAC. TED notica a UDP Load Balancer attraverso
UDP Load Balancer, invece, riceve un pacchetto RTP dall'applicazione VOIP, lo in-
capsula in un datagram UDP e lo invia all'end system ricevente; nel momento in cui
viene congurata una nuova interfaccia di rete, il Monitor informa l'ULB di quest'ultima
attraverso una Reconguration Notication. A questo punto, come previsto anche dal
protocollo UDP, per ogni interfaccia di rete congurata, ULB mantiene un socket UDP
13
Figura 1.2: RWMA
associato alla scheda di rete attraverso la chiamata bind. In questo modo, ULB può uti-
inoltre, riceve altri due tipi di messaggi: i messaggi ICMP e, come detto in precedenza,
14
Capitolo 2
Prerequisiti di progettazione
2.1 Lo scenario
Lo scenario simulativo adottato per lo sviluppo della tesi prevede una nodo mobile wire-
less dotato di più interfacce di reti, che si sposta tra le vie di un centro cittadino in
protocollo TCP con un server proxy oppure che stia eseguendo un'applicazione VoIP su
UDP.
Come si può vedere nella Figura 2.1 e nella Figura 2.2 mobile node e server proxy si
trovano in due reti dierenti, collegate da due canali di comunicazioni wired; entrambe le
reti, sono formate da diverse sottoreti, costituite dai classici network device, quali router,
15
Figura 2.1: Scenario simulativo
16
Alle classiche reti LAN su ethernet, vengono introdotte reti Wireless LAN (WLAN)
basate sulla specica IEEE 802.11, comunemente conosciuta come WiFi. Si consideri,
ora, il nodo mobile, fondato sullo standard wireless, in cui sono state apportate delle
state fatte delle modiche per fare in modo che questo sia dotato di più interfacce di rete
wireless (nel nostro caso al massimo 2) e quindi garantire il controllo del bilanciamento di
e viene utilizzato dagli altri moduli per noticare ed essere noticati sul vericarsi di
17
Interface Table: questo modulo mantiene tutte le informazioni riguardanti le in-
transmission unit, diversi ag, il datarate, etc. Le schede di rete durante la fase di
vuole lavorare con l'interface table module, deve in un primo momento ottenere
Routing Table: questo modulo gestisce le routing table per IPv4 e viene acceduto
dai moduli che sono interessati a lavorare con le rotte dei pacchetti (soprattutto
carica le tabelle di route dai le *.irt e mette a disposizione chiamate a funzione per
IP.
modelli dierenti (es: Passeggiate Aleatorie, etc), oppure, nel caso in cui il nodo
sia sso, viene utilizzato per calcolare la trasmissione wireless, in quanto legata alla
Ai moduli precedenti, che non sono stati modicati nella realizzazione della tesi e vengono
derazione i primi due strati dello standard, quello sico e quello datalink, che nel frame-
work INET vengono implementati in un unico modulo, formato da queste quattro parti:
1. Agent
2. Management
3. MAC
4. Radio
18
Figura 2.4: WNIC 802.11 in INET
L' agent è il modulo che si occupa di gestire il comportamento del livello annesso
con un Access Point; il livello management si limita a eseguire questi comandi per poi
biare frame di gestione con altre station o AP. I frame Probe Request/Response, Authen-
Sono proprio questi due livelli che, assieme, realizzano una componente fondamentale
per RWMA: il monitor; l'ULB deve essere a conoscenza di quali e quante schede wireless
sono attualmente congurate ed utilizzabili per inviare pacchetti. Il monitor è stato im-
plementato anché segnali al livello applicazione quando una scheda viene correttamente
dissociazione, oppure in caso di perdita di troppi beacon, il monitor crea e invia un mes-
19
Il modulo MAC [19] si occupa della trasmissione dei frame secondo il protocollo
1
CSMA/CA . Riceve dati e management frame dai livelli alti, e li trasmette. Quando un
datagram IP arriva al MAC della WNIC, il pacchetto viene inviato attraverso l'interfaccia
il frame di controllo ACK. Inoltre vengono anche gestiti autonomamente dei timer (con
subito, in modo che il livello MAC consideri il pacchetto perso dopo un certo periodo
di tempo senza aver ricevuto risposta, oppure dopo aver superato il limite massimo
Per tale motivo è stata apportata una modica a questo livello introducendo il TED,
componente essenziale in RWMA: una volta ricevuto ack dall'AP per un pacchetto op-
pure aver superato il numero massimo di ritrasmissioni concesse (in generale, 7), il TED
comunica ai livelli superiori (no al livello applicazione) l'esito della trasmissione del
Il blocco sico (radio) si occupa della trasmissione e ricezione dei frame. Modella
rettamente (ad esempio nel caso subisca errori a causa del basso potere del segnale o
interferenze nel canale radio). I frame ricevuti correttamente sono passati al MAC.
1 CSMA/CA (Carrier Sense Multiple Access/ Collision Avoidance: è l'algoritmo distribuito di contesa
del canale utilizzato dallo strato MAC nello standard IEEE 802.11; è basato sulla regola per cui se una
stazione deve trasmettere un frame MAC, si mette in ascolto del canale e se il canale risulta libero allora
trasmette. In caso contrario aspetta la ne della trasmissione in corso, esegue una nuova scansione
del canale e nel caso in cui risulta libero, inizia la fase di trasmissione, altrimenti si pone in uno stato
di attesa. In questo algoritmo non viene fatta la rilevazione della collisione (ecco perché Collision
Avoidance) a dierenza dell'algoritmo CSMA/CD (Collision Detection), in quanto non adatta per le
reti wireless.
20
A questo punto si sale di livello, arrivando a quello network.
vari componenti di una rete di calcolatori. I due blocchi non sono stati modicati nella
ternet Group Management Protocol), usato dagli host e dai router vicini per stabilire i
componenti di gruppo multicast; anche in questo caso, come nel precedente, non viene
chetti dei livelli superiori (TCP, UDP, ICMP) vengono incapsulati in un datagram IP
niente dal livello trasporto viene incapsulato in un datagram IP e controllato nella sua
dimensione; se questa risulta essere maggiore del Maximum Transmission Unit (MTU)
della scheda di rete utilizzata, allora viene frammentato in più blocchi, inviato al modulo
21
ARP e viene deciso il percorso (route) che il datagram (o tutti frammenti) dovrà seguire.
Nel caso in cui l'interfaccia utilizzata dal mobile node sia una 802.x, allora viene eettua-
ta una ARP-resolution, in modo da ottenere l'indirizzo MAC del destinatario; se, invece,
direttamente alla scheda, senza eettuare una ARP-resolution. Queste operazioni ven-
gono fatte ogni qualvolta il pacchetto di livello trasporto ha, nel proprio campo protocol,
Invece, nel caso in cui il pacchetto di livello trasporto abbia nel campo protocol il
dalla classe IPRWMA (.cc, .h, .ned), sottoclasse di IP. A questo punto, oltre a essere
IPNotify all'ULB (che si vedrà essere implementato a livello applicazione), nel quale si
notica che questo è arrivato con successo al modulo IP, e ne restituisce un identicativo
step:
1. assemblare i frammenti: nel caso in cui il pacchetto ricevuto sia diviso in frammenti,
questi vengono prima buerizzati e, nel momento in cui arriva l'ultimo frammento,
vengono assemblati;
etc.) attraverso un gate, uno per ogni protocollo; il modulo IP mantiene una map-
Il modulo ARP implementa l' ARP (Address Resolution Protocol), protocollo che per-
mette la traduzione da indirizzo IP a indirizzo MAC. Se un nodo A vuole inviare un
pacchetto IP a un nodo B di cui non conosce l'indirizzo MAC, invia un messaggio ARP-
request in broadcast inserendo il suo indirizzo IP e il suo MAC, in modo tale che ogni
22
nodo nella sottorete locale possa aggiornare le proprie mappe. Il nodo, di cui è stato
nodo A che, a questo punto, ha ricevuto la risposta, aggiorna la propria ARP cache in
modo tale che al prossimo invio di un nuovo pacchetto a B, non dovrà più fare ARP-
Request e attendere la risposta, in quanto l'indirizzo MAC, ora, è contenuto nella sua
cache.
tratterà il modulo UDP, lasciando il modulo TCP ad uno studio più approfondito nel
prossimo capitolo.
Il modulo UDP è un blocco molto semplice che rende disponibili i servizi oerti dal
livello network alle applicazioni UDP. Due aspetti fondamententali devono essere presi
pacchetti UDP, generati dalle applicazioni UDP; l'oggetto fornisce procedure per
porta remota. Nel momento in cui l'applicazione UDP invia un messaggio, questo
il secondo aspetto, non meno importante, è quello che all'interno del modulo UDP, il
nel campo protocol il valore IP_PROT_UDP; questo evita che l'applicazione sia
zabile (es: il nodo non sia connesso attraverso una rete e wireless, ma su cavo).
La seconda strada, invece, prevede che l'applicazione UDP usa l'architettura RW-
UDP, che li incapsula in un frame UDP, inserendo nel campo protocol il valore
23
IP_PROT_UDP_RWMA; in entrambi i casi, i frame creati vengono passati al
Inne, salendo ancora un passo si trova il livello applicazione; qui, oltre alle varie appli-
cazioni messe a disposizione da inet, si trova il cuore del sistema RWMA, ULB, il modulo
dove tutti i messaggi di notica vengono inviati per essere analizzati. Il mo-
dulo nel quale è stata implementata la componente ULB è chiamato ULBRWMA (.cc,
2
.h, .ned) ed è una sottoclasse di UDPBasicApp .
ditata dalla classe ULBRWMA; come comprensibile dal nome della funzione, questa
4
si comporta in modo analogo alla chiamata sendToUDP() , che è la funzione originale
lo congura anché sia riconoscibile dai livelli inferiori come pacchetto RWMA. Nel
una copia di questo viene messo in una coda in attesa che il livello IP faccia pervenire
classe ULBRWMA, il pacchetto in attesa viene estratto dalla coda per essere inserito in
una mappa dove resterà no alla segnalazione del corretto invio o nché l'ULB deciderà
di scartarlo.
Linux, non è bloccante. Questo è dovuto al fatto che in OMNeT++, basato su un mecca-
nismo di message passing, l'unico modo che abbiamo per richiedere un servizio/informa-
zione è fare una richiesta con un pacchetto attraverso i vari livelli (simili a comparti
stagni).
24
Inoltre, l'applicazione gestisce le varie schede di rete di cui il nodo mobile è costi-
caso non ce ne siano né dell'uno né dell'altro tipo, ritorna un indirizzo indenito, che
verrà riconosciuto dalla funzione di invio e farà scartare il pacchetto; questa gestione
dell'interfaccia di rete risulta essere di primaria importanza perché, nel momento in cui
arriva al primo hop, come detto in precedenza), ULB può decidere se ritrasmettere o
meno il pacchetto perso e nel caso in cui decida di ritrasmetterlo, può cambiare interfaccia
guration Protocol). Nel momento in cui l'ULB riceve dal monitor un messaggio di tipo
ReconfNot, questo signica che una scheda si sta associando o dissociando da un AP, e
quindi aggiorna la sua map; lo status dell'interfaccia, a seguito di tale notica, può pas-
sare dallo stato attuale a uno stato WORKING oppure DISABLED. Nel caso in cui passa
ad uno stato WORKING, viene attivata la procedura DHCP: il nodo mobile invia un
collo UDP attraverso una comunicazione unicast; il server quando riceve un pacchetto
MAC pari a quello presente nel pacchetto. Una volta congurata, l'interfaccia è raggiun-
gibile dalla rete e può essere utilizzata dall'host per comunicare; il server è congurato,
tramite le .ini, con l'indirizzo IP [Link] (un indirizzo noto ai client) e un set
I nodi che vogliono congurare una propria interfaccia, dopo aver trasmesso il messaggio
25
e dalla quale riceveranno la risposta del server; questo è necessario anché il client possa
temporaneo che usa è [Link] che è noto al server e quindi, il server quando risponde,
Altre notiche possono far cambiare lo status di una scheda e sono quelle provenienti
Il proxy server (Figura 2.6) è stato inserito in una rete diversa da quella del nodo mobile,
Il proxy server si dierenzia dal nodo mobile per due modiche principali:
26
la prima, banale, è quella per cui il proxy server non dispone di schede wireless,
Proxy, che viene eseguita da un nodo sso collegato via cavo alla rete. Il load
balancer gestisce una mappa <ID::indirizzo IP> in cui inserisce l'ID e l' indirizzo
IP dei client che si appoggiano al proxy server per comunicare. Ogni volta che
il proxy server riceve un messaggio, il suo modulo load balancer, prima di pas-
del mittente. Se tale ID non è presente nella mappa, aggiunge una nuova entry
sull'indirizzo IP, sovrascrive il vecchio indirizzo con quello appena letto. In questo
modo i client sono sempre raggiungibili dal proxy server anche se cambiano indi-
rizzo IP.
Come si era già accennato, il server si comporta anche da secondo end system della
saggi voce, in sostanza è la stessa dei client, ma si è dovuta creare una nuova classe
poiché questa deve estendere quella del nuovo load balancer; l'applicazione genera
messaggi che vengono instradati dal load balancer verso un destinatario scelto a
27
Capitolo 3
Trasmission Control Protocol
dierenza di UDP, è orientato alla connessione (o connection oriented), poiché due nodi,
prima di trasmettere dati tra loro, devono instaurare una connessione; la fase di inizio
della connessione, in cui vengono trasferite informazioni preliminari, per poi poter garan-
tire un servizio adabile di consegna dei pacchetti, viene detta handshake (o stretta di
mano). E' un protocollo stream oriented, ovvero i dati trasmessi vengono visti come
mittente può inviare dati al destinatario e viceversa, ma più precisamente i ussi dati
con direzioni diverse possono coesistere contemporaneamente; ciò signica che un nodo
A può inviare pacchetti a un nodo B e nello stesso tempo può ricevere pacchetti da un
nodo C. Ciò che non è possibile fare, invece, è un invio multicast: un mittente non può
28
trasferire dati a più destinatari in una sola operazione; se ipotizziamo che un generico
host debba noticare qualcosa ad altri tre host, esso dovrà necessariamente instaurare
cioè relativa ad una sola sorgente e una sola destinazione. Le caratteristiche principali
trasferimento adabile dei dati: tutti i dati inviati da un mittente sono recapi-
tati al destinatario senza errori. Può succedere che, per vari motivi (errore tra i
collegamenti, disturbi esterni alla comunicazione, etc.), qualche pacchetto può con-
tenere errori oppure vada perduto nella rete. A questo punto il TCP si occuperà
questa caratteristica è presente in TCP e non in UDP che, invece, non garantisce
informazioni subiscano ritardi all'interno della rete (per via del congestionamento
della stessa o perché due pacchetti possono seguire due rotte dierenti per arrivare
controllo del usso: il TCP stabilisce se un host più veloce nella trasmissioni dati
accadere, infatti, che l'applicazione mittente generi i pacchetti con una frequenza
molto maggiore rispetto a quella con cui l'host destinazione riesce a ricevere, con il
pacchetti da parte del destinatario. Per evitare questo, il TCP abbassa la frequenza
controllo della congestione [4, 7]: anche in questo caso, il TCP si accorge che c'è un
29
Figura 3.1: Pacchetto TCP
inviando e il numero del pacchetto che è stato ricevuto e di cui si sta comunicando
byte e che il MSS (Maximum Segment Size) sia ssato a 500 byte. Il messaggio
30
viene frammentato in quattro segmenti; il numero di sequenza del primo segmento
sarà 0, del secondo segmento 500, del terzo segmento 1000 e inne del quarto 1500.
segmento (di 500 byte) al nodo B (frammento con sequence number posto a 0),
A, contenente nel campo Acknowledgement Number il valore 501 e così via per i
frammenti successivi.
abbia ricevuto correttamente il primo (0-500 byte) e il terzo (1000-1500 byte) fram-
il numero 501, in quanto il campo fa riferimento al primo byte successivo tra quelli
scriverà nel numero di riscontro il valore 1501 che fa riferimento al quarto e ultimo
il campo Flag ha lunghezza 6 bit ed ognuno di essi può essere visto come un campo
handshake e per la chiusura della connessione. Il campo PSH, poco usato, impone
31
all'host che riceve il pacchetto di inoltrarlo immediatamente al livello applicazione.
Il campo URG, anch'esso poco usato, indica all'host di destinazione che il segmento
contiene dei pacchetti che il livello applicativo mittente ha marcato come urgenti.
che vogliono comunicare tra loro, prima di poter trasferire dei dati devono instaurare la
il client invia al server un segmento vuoto, senza dati, con il bit SYN del campo
Flag posto a 1 e con valore del campo sequence number inizializzato a un valore
il server riceve il segmento e risponde al client con un altro segmento vuoto con il
il client invia al server un nuovo segmento vuoto, senza dati, con il bit SYN
Lo stesso algoritmo viene utilizzato anche per la chiusura della connessione; in questo
caso, però, consta di quattro fasi ed è per questo che viene chiamato handshake a tre vie
il client invia al server un segmento con il bit FIN del campo Flag settato a 1, e si
il server invia al client un riscontro e il client, una volta ricevuto ACK, entra nello
stato FIN_WAIT_2;
il server invia al client un segmento con il bit FIN del campo Flag settato a 1;
32
Figura 3.2: Handshake a tre vie
nodo A invia un pacchetto al nodo B questo, al momento della ricezione, viene posto in
33
un buer di ricezione, inizializzato durante la fase di handshake e letto periodicamente
è molto più lenta dell'invio da parte del nodo A si può vericare un overow del buer
nodi tengono traccia all'interno di una variabile, detta nestra di ricezione (o Received
Windows) dello spazio libero del buer di ricezione nel nodo corrispondente; questa
il nodo destinatario mantiene due puntatori: Last Read Byte e Last Received Byte,
pone nel campo Windows Size del pacchetto il valore della Received Windows data
da
Received W indows = Buf f er Size − (Last Read Byte − Last Received Byte)
il valore contenuto nel campo Windows Size del pacchetto ricevuto; inoltre, alloca
due ulteriori variabili Last Sent Byte e Last Veried Byte di ovvio signicato.
Queste due variabili sono utilizzate per adattare la trasmissione dei dati allo spazio
libero nel buer di ricezione del destinatario, creando pacchetti con dimensioni che
risultati; la versione descritta, tuttavia, richiede un piccolo correttivo dato dal caso
limite, in cui il buer di ricezione è pieno e quindi la nestra di ricezione ha valore pari
a 0. L'host mittente, nel momento in cui riceve all'interno del campo Windows Size il
valore 0, interrompe immediatamente l'invio dei dati per evitare l'overow del buer. Nel
frattempo l'applicazione destinazione andrà a leggere i dati nel buer, con il conseguente
svuotamento dello stesso. L'host destinazione però non potrà noticare all'host mittente
che il buer si sta svuotando, dato che non vengono più generati i pacchetti ACK nei
34
quali viene inserita l'informazione sulla nestra di ricezione. In questo modo l'host A non
potrà in nessun modo capire che il buer del destinatario si è svuotato e di fatto rimane
bloccato. Per ovviare a questa criticità, le speciche TCP impongono all'host mittente
sono recapitati al destinatario senza errori; lavorando in una rete, per di più wireless,
si possono vericare eventi che non garantiscono il trasferimento adabile dei dati. Tra
timeout: il segmento inviato dal mittente viene ricevuto dal destinatario fuori
arrivo fuori ordine: i pacchetti, inviati dal mittente verso il destinatario, possono
seguire rotte dierenti nella rete e quindi potrebbero arrivare in un ordine diverso
2. numeri di sequenza: sia i segmenti che gli ACK hanno dei numeri identicativi
quale o quali segmenti contengono errori, quali sono arrivati fuori ordine o non
3. timer: segmenti e ACK possono essere persi durante la trasmissione. TCP gestisce
questa fonte di errori impostando un timeout quando vengono inviati i dati; nel
35
caso in cui il timeout scada prima dell'arrivo del riscontro, i segmenti vengono
inviati nuovamente. TCP gestisce quattro diversi timer per ogni connessione:
mittente; questo tempo viene chiamato round trip time (RTT). Nel protocollo
viene eettuata una media degli RTT e ne consegue un valore atteso chiamato
settato con il valore SRTT calcolato; se l'ACK arriva entro lo scadere del timer,
timed wait: nel momento in cui viene interrotta la connessione TCP, è possi-
bile che alcuni datagram tentino di accedere alla porta legata alla connessione
di vita massimo di un segmento (lo stesso valore del campo Time to live in
un header IP).
può vericare la situazione in cui il buer di ricezione del nodo destinatario sia
colmo e quindi che il campo windows size contenga il valore zero, costringendo
oramai svuotata; tuttavia, si può vericare che questi messaggi vengano persi,
36
causando un ritardo innito nel riavvio della comunicazione.
Il persist timer viene utilizzato per fare in modo che nel caso in cui il messag-
gio di un byte venga perduto, il nodo attende lo scadere del timer e poi invia
ripristinata.
che la connessione con l'altra macchina sia ancora attiva. Se non si è ricevuta
risposta dopo che è stato inviato il messaggio, prima che scada il timer di idle,
37
Si analizzi, ora, ciò che accade, considerando una comunicazione da una sorgente
il nodo mittente invia il primo segmento, che viene ricevuto correttamente dal
non sempre attende l'ACK dal nodo destinatario per il pacchetto inviato, così
capita che nel momento in cui il nodo mittente ha pronto un nuovo pacchetto,
ACK-5, ACK-6;
il sesto segmento (6) viene scartato dalla rete, e dato che per questo non perviene
(7), (8), (9), tutti fuori sequenza, comporta nel ricevente il loro mantenimento nel
alla ricezione del terzo ACK duplicato (in quanto già ricevuto), il trasmettitore
scadere del timer (che viene resettato, e fatto ripartire). Questa volta il segmento
di ricezione, invia ACK del prossimo segmento atteso (il 10), ed usa questo valore
Nell'esempio precedente non si è tenuto conto di alcuna nestra che modica il ritmo di
istante per istante, il numero massimo di bytes che possono essere trasmessi consecuti-
vamente verso il destinatario senza ricevere riscontri, e consente a un nodo poco veloce
nella gestione dei segmenti ricevuti, di adeguare la velocità di tramissione alle proprie
capacità. Infatti, il ricevente può variare la dimensione della nestra di trasmissione nel
38
corso della connessione, impostando il valore del campo Windows Size che compare nella
Un altro aspetto basilare per il TCP è il calcolo del valore di RTT (Round Trip
Time), da assegnare al retransmission timer. Questo valore può variare secondo molti
fattori, principalmente dovuti alla congestione del traco di rete e dal percorso scelto per
la consegna dei pacchetti. Inizialmente TCP misura il valore di RTT inviando all'end
risposta.
Nella formula sottostante verrà utilizzata M per denotare il valore di RTT misurato.
stimato (Smoothed RTT Estimator) per ogni misurazione eettuata. Questo valore
R = α*R + (1=α)M
dove α è un fattore sso di smoothing pressato a 0,9. Il 90% del nuovo valore è dato
da precedenti stime, mentre solo il 10% è determinato dalla nuova misurazione. Dato
questo smooth estimator, che cambia a seconda del valore di RTT, RFC 793 raccomanda
RT O = R*β
di ottenere stime accurate del valore di RTT per i messaggi inviati tramite protocol-
lo TCP. Teoricamente, risulta dicile ottenere stime accurate di questo valore a causa
di ambiguità sui segmenti ritrasmessi. Il valore RTT viene stimato calcolando il tem-
RTT calcolati per i segmenti ritrasmessi al ne dell'aggiornamento del Round Trip Time
Estimator: questo valore viene aggiornato limitandosi a quei segmenti che sono stati
spediti una volta sola. Questa implementazione semplicistica dell'algoritmo può portare
a notevoli problemi: consideriamo cosa succede quando viene inviato un segmento TCP
39
dopo un drastico aumento di ritardo della trasmissione. Usando il valore precedente di
Round Trip Time Estimator, TCP valuta un timeout e, allo scadere di quest'ultimo,
rinvia il pacchetto. Se l'algoritmo non calcola il nuovo RTT valutando anche i pacchet-
di delay del canale. Una soluzione a questo problema è stata trovata utilizzando una
strategia di backo nei timeout: viene calcolato un timeout iniziale e, nel caso scada a
* 2). Questo algoritmo ha dato notevoli risultati in scenari con alti valori di pacchetti
persi.
congestione, che si verica quando per un certo intervallo di tempo il traco oerto
generato dai terminali è maggiore della possibilità di smaltirlo da parte della rete stessa.
Infatti, ogni volta che un nodo interno alla rete riceve dati più velocemente di quanto
riesca a smaltirli, è costretto a creare una coda e mettere alcuni e pacchetti in attesa.
Pur senza entrare nello specico della gestione delle code e della teoria del traco, è
facile intuire quanti inconvenienti possano creare alle prestazioni della rete il perdurare
il ritardo dei pacchetti, può infatti succedere che dei buer si saturino e scartino dei
di più il carico oerto alla rete. Ancora peggiore è il caso in cui un pacchetto che passa
molto tempo nella coda di un router venga ritenuto perso dall'host che lo ha generato
(a causa dello scadere del Timeout): il mittente lo ritrasmetterà anche se in realtà non
Le diverse versioni di TCP che sono state sviluppate nel corso degli anni si dieren-
ziano principalmente proprio per il modo di reagire a degradazioni delle prestazioni della
rete, siano esse dovute a congestioni o a rumorosità del canale. Nelle prime versioni del
TCP (no al 1986), sostanzialmente non veniva preso alcun provvedimento per evitare
i problemi causati dalle congestioni. Nel 1986 fu introdotto il TCP Berkeley, che com-
Avoidance [8]. Successivamente, nel 1988, il TCP Tahoe aggiunse a questi anche l'algo-
40
ritmo Fast Retransmit [8], e nel 1990 con il TCP Reno fu introdotto l'algoritmo Fast
Recovery [8]. Nel 1995 questo venne leggermente modicato (TCP New Reno [9]), e per
molti anni rimase il protocollo più utilizzato nella rete. Il TCP Vegas [11] introdurrà una
dati prima che si verichino eventi di perdita, ma questo lo renderà poco compatibile con
le altre versioni. Con l'avvento delle wireless LAN furono sviluppate nuove versioni che
meglio si adattavano al nuovo canale, come TCP Westwood [10] e Veno [16]. L'approccio
seguito dal TCP per eettuare il controllo della congestione è di fare si che ogni mittente
limiti il ritmo con cui immette traco nella sua connessione in funzione della congestione
in rete percepita. Ovviamente, se un terminale percepisce che c'è poca congestione nel
riduce se sente che alcuni nodi sono congestionati. Il primo argomento da arontare è
sapere come il TCP si accorge che la rete è congestionata e come fa per regolare il ritmo
che immette nella rete: per fare ciò il TCP utilizza una nuova variabile detta nestra
limitazione addizionale alla quantità di traco che un host può inviare, oltre a quella che
già abbiamo analizzato per il controllo del usso. Riprendendo la terminologia preceden-
temente usata, l'ammontare di dati non riscontrati che un terminale può avere durante
perdita, che possono essere o lo scadere di un timeout o, nelle versioni con l'algoritmo
Fast Retransmit, la ricezione di tre ACK duplicati: quando c'è congestione, infatti, uno
o più buer dei router lungo il percorso si possono saturare no a dover scartare dei
pacchetti. Il mittente si accorge del datagram perso e quindi della congestione grazie
appunto agli eventi di perdita e può dunque agire di conseguenza. Come già accennato, il
modo di reagire a queste situazioni cambia a seconda delle versioni del TCP: ne vengono
presentate le caratteristiche.
41
[Link] TCP Berkeley
Il TCP Berkeley (Figura 3.5) fu la prima versione che tentò di evitare di congestionare la
rete con un eccessivo traco. Esso, tuttavia, non prevedeva di cercare di capire lo stato
dei dati quando questo raggiungeva una certa soglia (Ssthresh: Slow Start Threshold).
In pratica quando la connessione viene avviata, il valore di Cwnd che regola il ritmo di
spedizione è inizializzato ad un valore pari a 1 MSS, ossia una quantità di dati molto
nella prima parte della connessione il valore di Cwnd viene aumentato esponenzialmente
per ogni Round Trip Time. Ogni volta che il mittente riceve un ACK, il valore di
Cwnd viene modicato: Cwnd = Cwnd + 1M SS . Accade che il mittente invia il primo
pacchetto, riceve il rispettivo ACK e porta la Cwnd al valore 2. Vengono dunque inviati
adesso 2 pacchetti che, una volta riscontrati, faranno salire la nestra di congestione a
4: in questo modo la quantità di dati inviata raddoppia per ogni RTT. Questa fase della
connessione è conosciuta come Slow Start. Quando la variabile Cwnd raggiunge il valore
di Ssthresh, la connessione entra nella fase di Congestion Avoidance, che riduce il ritmo
ottiene così una crescita lineare e non più esponenziale della quantità di dati spediti. In
1
particolare, per ogni ACK ricevuto, si ha: Cwnd = Cwnd + Cwnd
. Il valore di Ssthresh
viene impostato, all'inizio della connessione, a un valore molto alto: dunque, nella prima
parte della connessione si rimane nella fase di Slow Start relativamente a lungo. Quando
si verica il primo evento di perdita, ossia lo scadere del Timeout, il valore di Ssthresh
Cwnd
viene portato a Ssthresh = 2
e Cwnd = 1M SS . In questo modo la connessione
riparte dalla fase di Slow Start e vi rimane no a che Cwnd non raggiunge il nuovo
valore di Ssthresh, quando cioè entra in fase Congestion Avoidance. Per il resto della
Cwnd
connessione, tutte le volte che scade il timeout, ciò che succede è: Ssthresh = 2
e
Cwnd = 1M SS .
42
Figura 3.5: TCP Berkeley
scadere del timeout, la perdita del pacchetto è data dalla ricezione da parte del mittente
Cwnd
di un certo numero di ACK duplicati (o DUPACK), che riporta Ssthresh = 2
e
Cwnd = 1M SS .
43
Figura 3.6: TCP Tahoe
porta una dierente reazione del mittente a seconda che si verichi la ricezione di 3 ACK
duplicati o lo scadere del Timeout. Analizzando i motivi che portano al vericarsi dei
due eventi, si può notare che è più probabile che ci si trovi di fronte ad una congestione
della rete quando scade un timeout, mentre la ricezione di più ACK duplicati indica
probabilmente che un pacchetto o è stato ricevuto corrotto o non è stato ricevuto af-
fatto, a causa del rumore nel canale. Si ricordi, infatti, che il destinatario invia ACK
quando riceve i pacchetti dal mittente, il che porta a pensare ad una rete non conges-
tionata. Viceversa lo scadere del timeout indica che al ricevitore non è arrivato nulla
per un lungo periodo, ossia proprio quello che si verica quando uno o più nodi nella
rete hanno liste di attesa nelle code molto lunghe. Dunque la versione Reno del TCP
Cwnd
se riceve 3 ACK duplicati porta Ssthresh = 2
e ritrasmette il pacchetto perso. Poi
Cwnd
imposta la nestra di congestione a Cwnd = + 3M SS .
2
A questo punto la Cwnd viene aumentata di 1 MSS per ogni ulteriore ACK duplicato
che viene ricevuto, no a che non arriva l'ACK non duplicato che riscontra tutti i dati
spediti successivamente al pacchetto perso. Così Cwnd viene di nuovo abbassata al valore
44
di ssthresh e anche il ritmo viene rallentato, portandolo al tipico incremento lineare di
Congestion Avoidance.
Questo metodo risulta molto eciente nel caso in cui un singolo segmento venga perso
o arrivi corrotto dal rumore: infatti, questo viene immediatamente ritrasmesso all'arrivo
Cwnd
del terzo ACK duplicato. Poi, impostando Cwnd = 2
+ 3M SS e aumentando il
ritmo di 1 MSS per ogni ACK duplicato, si permette di ritrasmettere velocemente tutti i
dati già inviati ma successivi al pacchetto perso e arrivare così in breve tempo a spedire
Reno lo interpreta come una probabile congestione e si comporta come il TCP Tahoe:
Cwnd
pone Ssthresh = 2
e Cwnd = 1M SS e si porta in fase Slow Start. Il sistema
di ritrasmissione del TCP Reno risulta particolarmente valido se viene perso un singolo
pacchetto, ma può essere particolarmente ineciente nel caso in cui si perdano o arrivino
corrotti due o più segmenti della stessa nestra di trasmissione, in particolare nelle
implementazioni in cui i pacchetti ricevuti fuori ordine vengono salvati nel buer del
ricevitore. Per capire cosa accade si valuti il seguente esempio (Figura 3.7)
Il mittente invia una serie di pacchetti verso il destinatatio, ma i pacchetti con se-
quence number 100 e 300 vengono persi; al terzo ACK duplicato per il pacchetto (100),
45
Cwnd
100, portando Cwnd = 2
+ 3M SS e aumentando il ritmo di 1 MSS per ogni ulteriore
ACK duplicato. Quando il mittente riceve il primo ACK non duplicato (che in questo
caso riscontra no al pacchetto 250), entra in Congestion Avoidance, rallentando il rit-
1
mo di invio Cwnd = Cwnd + Cwnd
. Con il ritmo di invio della Congestion Avoidance
passerà una notevole quantità di tempo prima che siano ricevuti gli altri tre DUPACK
che segnaleranno al mittente la perdita del pacchetto 300, causando spesso lo scadere
del timeout dello stesso. Per risolvere questo problema furono apportate delle modiche
che portarono allo sviluppo di una nuova versione chiamata TCP NewReno.
la reazione del protocollo nel caso in cui vengano persi due o più segmenti all'interno
della stessa nestra. Per quanto riguarda l'impostazione del valore di Ssthresh, questo
viene calcolato quando viene instaurata una nuova connessione utilizzando l'equivalente
in bytes del prodotto ritardo*ampiezza della banda. Per valutare l'ampiezza della banda
disponibile viene utilizzato un algoritmo chiamato Packet Pair che si basa sugli intertempi
di arrivo al mittente degli ACK. Come abbiamo già visto, se due o più segmenti trasmessi
nella stessa nestra vengono persi, il TCP Reno si accorgerà rapidamente solo della man-
canza del primo, a mentre noterà la mancanza degli altri solo allo scadere del Timeout.
Per risolvere a questo problema, il TCP New Reno introduce il concetto di ACK parziale,
ossia un ACK che riscontra alcuni, ma non tutti, i pacchetti inviati prima di entrare in
fase di Fast Recovery. Il TCP New Reno si comporta esattamente come il TCP Reno
Cwnd Cwnd
quando riceve 3 ACK duplicati, portando Ssthresh = 2
e Cwnd = 2
+ 3M SS .
46
Figura 3.8: TCP Reno e NewReno
Successivamente si comporta ancora come il TCP Reno se il primo ACK non du-
plicato che riceve riscontra tutti i pacchetti inviati prima di entrare in Fast Recovery.
Altrimenti, se riceve un ACK parziale che riscontra solo alcuni pacchetti inviati prima
di entrare in Fast Recovery, il TCP New Reno interpreta questo fatto come una ulte-
dall'ACK parziale rimanendo nella fase di Fast Recovery. Come indicato nell'esempio
precedente (sezione TCP Reno), l'ACK parziale riscontra solo i pacchetti (200) e (250): il
TCP New Reno ritrasmette allora subito il pacchetto (300) e resta nella fase di Fast Re-
covery aumentando di 1 MSS Cwnd per ogni ulteriore ACK duplicato relativo al secondo
pacchetto perso. Il TCP New Reno entrerà in Congestion Avoidance solo quando riceverà
l'ACK che riscontrerà tutti i pacchetti inviati prima di entrare in a a Fast Recovery.
ma della banda disponibile della connessione, misurando la velocità con cui arrivano
i pacchetti di ACK. Per banda disponibile, si vuole indicare la velocità con cui i dati
medesima misurazione nel momento della creazione della connessione. La stima della
47
banda viene poi usata per una corretta regolazione della congestion window (Cwnd) e
3. Quando gli ACK sono ricevuti con successo: Cwnd aumenta come nell'algoritmo
Reno.
La stabilità della rete non richiede che il usso dei dati venga ridotto in presenza di un
sario che i ussi di dati abbiano un qualche meccanismo di controllo per non aumentare
il traco di pacchetti in presenza di un crescente drop rate degli stessi. Con il TCP
di gravi congestioni della rete, questa riduzione potrebbe essere più drastica del modello
Reno, mentre con rallentamenti minori anch'essa risulterà meno marcata. Questa carat-
teristica può sicuramente migliorare la stabilità e l'utilizzo della rete rispetto al modello
Reno.
48
[Link] TCP Vegas
La versione Vegas del TCP si basa su un principio nettamente diverso da quelle analizzate
di invio dei dati ancor prima che se ne verichi uno. Cerca, insomma, di evitare che si crei
una congestione della rete piuttosto che prendere provvedimenti quando la congestione
è già avvenuta. E' dunque necessario che il mittente conosca in ogni istante lo stato
della rete, e per fare questo osserva i cambiamenti degli RTT dei segmenti già inviati.
che la rete si sta per congestionare e diminuisce il ritmo di invio. Viceversa, se RTT
risulta breve vuol dire che la rete non ha problemi e la nestra viene aumentata. In
particolare l'algoritmo di controllo della congestione del TCP Vegas è così concepito:
β
Cwnd = Cwnd + 1 se dif f < BaseRT T
α β
Cwnd = Cwnd se BaseRT T
< dif f < BaseRT T
Cwnd = Cwnd=1
se dif f > β
BaseRT T
con
Cwnd Cwnd
dif f = −
BaseRT T RT T
dove Base RTT è il più piccolo valore di RTT osservato e RTT è quello attuale,
matica. La soluzione di estendere l'algoritmo della nestra scorrevole di base e del TCP
con un'opzione addizionale, che permette ai dispositivi di mandare ACK per singoli seg-
menti non contigui. Questa opzione, introdotta in RFC 1072 e ranata in RFC 2018
è chiamata TCP selective acknowledgement (SACK) [12, 13, 14]. Per poter utilizzare
SACK, i due dispositivi partecipanti alla connessione devono supportare questa opzione,
attivando Selective Acknoledgement Permitted nel segmento SYN utilizzato per stabilire
49
ritrasmissione in modo tale che i segmenti includano un ag di Selective Acknowledge-
ment. Se questo ag viene impostato a 1, vuol dire che il mittente ha ricevuto un SACK
per il segmento: nel caso vengano persi pacchetti precedenti nella nestra di invio, il
Si consideri ora l'esempio (Figura 3.10) di come viene gestita la perdita di un seg-
mento:
1. il client eettua una richiesta e il server risponde inviando il segmento (1) il (2) e
2. il client realizza che è stato perso un segmento tra il primo e il terzo. Manda
ricevuto il segmento 3;
Questa volta espande l'opzione SACK, mostrando che ha ricevuto con successo i
segmenti 3 e 4;
4. il server riceve gli ACK duplicati del client per il segmento 1 e 3. Da questo deduce
ricevuto dal server indica che il client ha ricevuto anche il segmento 4, quindi non
50
5. il client riceve il segmento 2 e manda un ACK per indicare che ha ricevuto tutti i
dati.
ottimo servizio in presenza di grandi reti dove possono sussistere alternativamente stati
discorso su Cubic è necessario fornire alcune informazioni sul suo predecessore, BIC e sul
suo modo di gestire la grandezza della nestra di trasmissione. BIC usa un algoritmo
di ricerca binaria (binary search algorithms), ponendo la dimenzione della nestra tra
quando non si è vericata nessuna perdita per un RTT; la ricerca di questo punto medio
pacchetto nel tempo in cui la nestra è tra Wmax e Wmin, questo signica che la capacità
della rete è pari ad un valore tra Wmax e Wmin, a meno di cambiamenti repentini della
rete stessa. Dopo che la dimenzione della nestra è stata posta sul punto medio, si
non si hanno perdite di pacchetti, il che implica che la rete può gestire maggior
traco; allora, il punto medio dovrebbe essere il nuovo Wmin e bisognerebbe far
gravoso in un solo RTT; così, nel caso in cui la distanza tra il vecchio Wmin e
punto medio, rappresentante il nuovo Wmin, sia maggiore di una costante Smax,
BIC incrementa la nestra Cwnd solo di quest'ultimo valore, avendo una crescita
lineare;
generato dai nodi; di conseguenza, il punto medio divenda il nuovo Wmax e viene
51
Figura 3.11: TCP Bic
Se la grandezza della nestra cresce oltre il massimo, ne deve essere trovato uno nuovo;
BIC entra nella fase chiamata Max Probing nella quale usa una funzione di crescita
speculare a quella precedente per trovare il valore intermedio, in cui l'incremento parte
lento e lineare per poi continuare, nel caso non si trovi un nuovo massimo, in maniera
Tuttavia BIC può risultare molto aggressivo per un TCP, specialmente con RTT
molto bassi o per reti con ridotte prestazioni. CUBIC si presenta come variante a BIC
52
La Figura 3.12 mostra il comportamento di CUBIC: la nestra cresce molto veloce-
mente dopo un evento di perdita, nchè non si avvicina a Wmax, dove, in quest'intorno,
rallenta la crescita no ad avvicinarsi quasi allo zero. Sopra questo valore, CUBIC inizia
la fase di probing, dove la nestra inizia a crescere prima lentamente per poi incre-
assicura la stabilità del protocollo, mentre quella veloce dopo questo valore ne assicura
la scalabilità.
Inoltre, la funzione cubica assicura l'equità intraprotocollo tra diversi ussi di dati;
per osservare questo si consideri ad esempio due ussi di dati che vogliono attraversare lo
stesso percorso end-to-end. I due ussi convergeranno ad un equo utilizzo della banda,
La funzione ore anche una certa equità anche rispetto all'RTT, anche perchè la
sione su reti wireless. In questi scenari, la dicoltà maggiore sta nel riconoscere il motivo
della perdita dei pacchetti, i quali possono essere persi non solo per congestione nella
tribuibile perlopiù a cause ambientali. Sarebbe necessario distinguere tra perdite dovute
a congestione e quelle relative a interferenza, cui da ora ci riferiremo per mezzo del ter-
mine random losses. Veno nasce come una unione di Reno e Vegas per una corretta
gestione delle random losses. Reno tratterebbe queste perdite come una manifestazione
della congestione della rete con la conseguente riduzione della velocità di trasmissione
dei dati, degradando inutilmente le prestazioni della comunicazione. Per arginare questo
congestione della rete tramite un calcolo degli RTT sui pacchetti già inviati. In par-
della rete e, quindi, Vegas reagisce diminuendo il ritmo con cui invia pacchetti. Appli-
53
cando questo sistema a Reno è possibile capire se una perdita è dovuta a congestione
o meno, agendo di conseguenza. Nel caso di perdita, se il calcolo degli RTT di Vegas
non prevede una rete congestionata, è possibile reagire e ad essa interpretandola come
random losses. Veno utilizza un sistema simile a Vegas per la previsione dello stato della
rete, associandolo a una versione Reno leggermente modicata. Nel caso di ricezione di
cwnd
3 ACK duplicati, Reno modica ssthresh impostandolo a per poi associare a Cwnd
2
il valore di ssthresh + 3. Per ogni ulteriore ACK duplicato ricevuto aumenta il valore
di Cwnd di 1; nel momento in cui arriva l'ACK corrispondente Reno imposta Cwnd al
valore di ssthresh per ripartire con la trasmissione corretta. Veno modica solo il calcolo
iniziale di ssthresh nel caso in cui il sistema, da previsione, non risulti congestionato.
cwnd
In questo caso invece di portare ssthresh a
2
viene invece ridotto a cwnd ∗ γ , dove γ
1
è tipicamente un valore maggiore di . Così facendo si ha una riduzione minore della
2
nestra.
Veno quindi non modica Reno nel caso in cui il pacchetto risulta perso per scadenza
di timer, ma solamente su ACK duplicati agendo sul calcolo del nuovo ssthresh durante
Il modulo TCP implementa il protocollo TCP nella sua totalità; è connesso con il livello
il livello IPv4.
54
TCP_C_OPEN_ACTIVE: per aprire una connessione attiva, utilizzata nel caso
connessione;
Ognuno di questi messaggi, che rappresentano essenzialmente dei comandi che l'appli-
cazione impone al livello TCP, contiene al suo interno delle informazione di controllo e
55
Anche questi messaggi, che rappresentano essenzialmente lo stato in cui si trovano il mo-
mazioni di controllo.
A questo punto, è evidente come il TCP sia gestito e implementato attraverso una
macchina a stati nita, in cui la classe TCPConnection gestisce e implementa essa stes-
tion gestisce le transizioni da uno stato a un altro, date dal vericarsi di un evento, e
sequenza del primo pacchetto di cui non è stato ricevuto ancora ack, il numero
dei pacchetti inviati (questo perchè snd_nxt può essere portato indietro in caso di
ritrasmissione);
per inviare l'ultima nestra aggiornata e il numero di ack usato per inviare l'ultima
nestra aggiornata;
56
il campo dupack contentente il numero di ack duplicati ricevuti per un pacchetto;
Questi campi permettono di implementare una versione base del protocollo TCP, a cui
ne vanno aggiunti eventualmente degli altri nel caso in cui i vari algoritmi di controllo
Inne, ci sono ancora due oggetti che entrano in gioco e vengono gestiti anch'es-
trasporto (e quindi TCP), ma che permette una gestione semplice della connessione TCP;
possono essere usati i suoi metodi per aprire o chiudere una connessione TCP, o per
l'applicazione apre una porta locale per una connessione in ingresso inviando un
porta locali. L'applicazione può, inoltre, specicare se gestire una sola connessione
TCP alla volta o più connessioni multiple: se il campo fork è settato a true, allora
viene creato un thread con un nuovo id e, mentre il thread glio gestisce la con-
nessione che si sta creando, il thread padre si pone in uno stato di listening per
57
accettare altre eventuali connessioni; se il campo fork è settato a false, allora viene
vie. Dopo 75s, se la fase di instaurazione della connessione non è terminata, scatta
vericare il caso in cui la connessione venga riutata dall'host remoto, per cui il
il modulo TCP aggiunge il pacchetto nella coda di invio, controlla se il pacchetto può
essere spedito oppure no, lo divide in frammenti (nel caso in cui la dimensione totale del
pacchetto sia maggiore del maximum segment size) e invia questi ultimi, sottoforma di
Esistono tre tipologie dierenti di code di invio, a seconda delle tre modalità di
ray di bytes; il modulo divide l'array in pezzi di dimensioni pari alla MSS e li
tipo cMessage; il TCP crea i segmenti necessari, in base alla lunghezza massima
scelto. Gli algoritmi attualmente sviluppati in INET sono TCP Tahoe, TCP Reno, TCP
58
New Reno e un altro algoritmo base, in cui non viene considerato e risolto il problema
il lato trasmittente, anche per il lato ricevente esistono tre tipologie di code dieren-
ti, in base al tipo di trasferimento dei dati fatto dal trasmittente. Durante la fase di
ricezione, se il buer è pieno o la dimensione del pacchetto è maggiore dello spazio libero
all'applicazione.
59
3.2.4 Chiusura della connessione
Come per l'instaurazione, anche la chiusura della connessione può essere fatta in due
modalità dierenti. Si consideri l'esempio di una connessione TCP tra client e server:
(FIN+ACK);
Durante la comunicazione, tuttavia, si possono vericare degli eventi per cui la connes-
60
Capitolo 4
Progettazione e implementazione
In questo capitolo si entra nel vivo della tesi, andando a esplicare tutta la progettazione
e l'implementazione della modica, dall'idea iniziale alla realizzazione vera e propria.
La modica consiste nell'applicare il sistema RWMA anche al protocollo TCP, cosa
che no ad ora riguardava solo il protocollo UDP; la motivazione principale per cui si
vuole eettuare la modica al protocollo è la possibilità di perdite dovute a cause esterne
durante le comunicazioni wireless. In questo scenario, fattori ambientali, rumori e ostacoli
possono inuire sulla comunicazione con l'access point, riducendo eettivamente la QoS.
Test svolti mostrano che una semplice comunicazione in cui l'host mittente si muove in
un ambiente domestico, può portare a perdite di pacchetti, senza che l'interfaccia di rete
smetta di funzionare a causa dell'eccessiva lontananza dall'AP; si noti che allontanandosi
dall'AP è possibile che si presentino delle perdite senza che comunque l'interfaccia di
rete perda completamente la connessione. Scopo della nostra modica sarà la gestione
anticipata di queste perdite, riscontrandole prima dello scadere del timeout di TCP.
4.1 Progettazione
Per la realizzazione della modica, il principio che si vuole sfruttare è il passaggio di in-
con questo ulteriore controllo, sarebbe teoricamente possibile aumentare la QoS della
con successo all'AP a cui il nodo mobile è connesso o se quest'ultimo l'ha scartato per
61
problemi di congestione, è possibile una gestione più veloce dell'errore. La struttura base
del codice sarebbe quella simile a quella per UDP vista in precedenza, con la principale
dierenza che, mentre con UDP il modulo ULB di RWMA si trova a livello applicazione e
quindi è in questo strato che vengono eettuate tutte le decisioni riguardanti le ritrasmis-
sioni del pacchetto in caso di non arrivo al primo hop, con TCP, il modulo ULB viene
integrato all'interno del modulo TCP, lasciando l'applicazione TCP ignara su cosa sta
tere il pacchetto. A questo, va aggiunta la dicoltà della ritrasmissione basata sui timer,
al codice, le classi di INET che sono state introdotto o modicate in modo da non
variare pesantemente le strutture già esistenti e allontanarsi dalla specica imposta dallo
In questo nodo non sono state fatte modiche sostanziali, ma viene introdotta un'appli-
62
In particolare, la classe utilizzata è la TCPServerHostApp (.cc, .h) che realizza una
semplice applicazione con compiti principali quelli di ricevere i pacchetti inviati dal mit-
tente (o client) e rispondere attraverso un ACK, nel caso in cui il pacchetto arrivato sia
nodo mobile, che verrà esaminato attentamente dal livello più alto a quello più basso.
4.3.1 DHCP_Service
Come detto nel capitolo 2, il protocollo DHCP è immerso all'interno dell'applicazione
nuovo nodo mobile, invece, è stato creato un modulo indipendente che realizza solo ed es-
63
e quindi comunicherà attraverso il protocollo UDP, ed è collegato all'applicazione TCP
Le operazioni svolte da questo modulo sono le stesse che venivano eettuate dall'ap-
plicazione UDP, ovvero nel momento in cui il DHCP_Service riceve dal monitor un
messaggio di tipo ReconfNot, questo signica che una scheda di rete si sta associando o
WORKING, allora la scheda di rete si sta associando all'AP e quindi viene attivata la
Rispetto alla gestione precedente, sono state introdotte queste nuove operazioni:
anche l'identicatore del client, l'indirizzo MAC della scheda di rete, il nuovo valore
confNot in cui lo stato della scheda di rete è DISABLED, questo comunica all'ap-
l'indirizzo MAC della scheda di rete, il nuovo valore che ha assunto l'interfaccia
connessa.
Sono state introdotte queste operazioni per far in modo che anche l'applicazione TCP sia
a conoscenza di quale interfaccia è attiva in ogni istante di tempo e con quale indirizzo
64
durante la fase di inizializzazione viene creato un socket della classe TCPSo-
cket ed eettuata una [Link] sulla porta locale, senza specicare l'indirizzo
porta remota. E' il socket che si prende carico di instaurare la connessione, facendo
in cui lo stato dell'interfaccia che sta utilizzando è DISABLED, allora viene subito
con un endSimulation();
la lunghezza che la risposta ad ogni messaggio deve avere. E' stato utilizzato
Una volta che il pacchetto è stato creato, questo viene inviato richiamando la
Per gestire i pacchetti e le notiche provenienti dal TCP si è deciso di lasciare questo
care all'applicazione che la connessione con il nodo remoto è stata instaurata, che sono
arrivati dei pacchetti, che la connessione non è stata instaurata e che il nodo remoto ha
chiuso la connessione.
65
Come detto in precedenza, mentre nel ramo e nell'applicazione UDP viene implemen-
dei pacchetti, nel ramo TCP le cose cambiano; l'applicazione viene mantenuta allo scuro
sul reinvio dei pacchetti, che viene fatta a livello trasporto; in sintesi, nel ramo TCP,
ponente ULB; in particolare, vengono introdotte le classi TCPRWMA (.cc, .h, .ned),
[Link] TCPRWMA
Viene creata la classe TCPRWMA, generalizzazione di TCP (Figura 4.3), in modo da
saggi provenienti sia dal livello applicazione che dal livello IP; quando un pacchetto dal
Al contrario, questa operazione non viene fatta nel modulo TCP e un qualsiasi pacchet-
to proveniente da IP, contenente una notica IP, viene considerato un segmento TCP,
TCPAlgorithm; una volta ottenuto, questo ultimo viene utilizzato per gestire la notica
proveniente da IP.
[Link] TCPConnection
La classe TCPConnection è stata modicata, inserendo tutte le funzioni necessarie per
cui il pacchetto viene inviato dall'applicazione al modulo TCP, può essere gestito in due
dierenti maniere:
66
Figura 4.3: Diagramma delle classi TCP
67
se l'algoritmo di gestione dei pacchetti, sottoclasse di TCPAlgorithm, usa il servizio
Il valore del campo protocol del pacchetto risulta essere di primaria importanza a livello
[Link] TCPRenoRWMA
E' la classe in cui viene implementato ULB; come si può vedere in Figura 4.4,
in quanto si è deciso di sfruttare le funzioni per il controllo della congestione già imple-
viene incapsulato in un segmento TCP e inviato al modulo IP; prima di essere inviato al
tale identicatore, la struttura viene estratta dalla coda e inserita all'interno di una
Gli elementi all'interno di tale mappa rappresentano tutti i riferimenti utili per una
viene attivato il timer di ritrasmissione, in caso questo non sia già stato attivato
68
Figura 4.4: Diagramma delle classi TCPRenoRWMA
69
La classe gestisce le notiche provenienti dal livello IP:
che si sta inviando e che è stato messo all'interno della coda in attesa di questa
notica;
hop; nel momento in cui arriva questa notica, il TCPRenoRWMA elimina dalla
strato IP per noticare che il pacchetto inviato non è arrivato al primo hop. Nel
perchè il pacchetto noticato viene ritrasmesso senza attendere lo scadere del timer
o l'arrivo del terzo duplicate ACK, operazioni e tempi che invece vengono rispettati
Si consideri l'esempio in Figura 4.5; nel momento in cui il mittente invia il pacchetto
con sequence number 2, questo non arriva all'AP oppure l'AP decide di scartarlo. Il
livello MAC del nodo mobile tenta di rinviare il pacchetto per almeno altre 7 volte,
70
tenuto in snd_from appartentente alla struttura PartialStateRWMA trovata nel
punto precedente;
viene fatto il reinvio del pacchetto e, solo al termine del ritrasmisione, vengono
temporanee;
sione da cui partire per in rinvio (e quindi, idealmente, dal pacchetto a cui il timer
è collegato):
71
Figura 4.5: Comunicazione TCP con l'algoritmo TCPRenoRWMA
Queste stesse operazioni non possono essere fatte nelle versioni standard degli algo-
ritmi TCP e senza l'utilizzo di RWMA; non sfruttando RWMA, non si hanno le notiche
tere il messaggio dovrà attendere lo scadere del timer oppure la ricezione del terzo ack
venga trattato alla stessa maniera di un pacchetto con campo protocol settato a
layer è stata modicata la classe IPRWMA per fare in modo che, anche in caso di pacchet-
necessaria per restituire al modulo TCP l'identicatore del pacchetto che si sta inviando;
nel modulo link layer, invece, è stata modicata la classe IEEE80211MACRWMA per
72
Figura 4.6: Comunicazione TCP con l'algoritmo TCP Reno
73
far in modo che, anche per il pacchetto TCP con protocol IP_PROT_TCP_RWMA,
surazione traco
Per eettuare i test della ritrasmissione anticipata è stata modicata la classe IEEE80211-
MAC (.cc), utilizzata dal modulo MAC in un AP, ed è stato introdotto il modulo FIBER-
LINE (.cc, .h, .ned), utilizzato per il collegamento delle due reti; in particolare, la classe
FIBERLINE, che estende il DataRate channel, è stata introdotta per poter selezionare
PACKET che sono destinati al server proxy. In questa maniera, si riesce a numerare i
pacchetti che vengono inviati dal mittente verso il destinatario e che passano eettiva-
La modica fatta nella classe Ieee80211Mac, invece, consiste nel fare in modo che l'AP
possa scartare randomicamente dei pacchetti di tipo GenericAppMsg con nome VOWF-
PACKET dal nodo mobile verso il server proxy; per ogni pacchetto che arriva all'AP,
viene generato un numero random e se tale numero è minore di un valore soglia, allora
non viene inoltrato verso la destinazione ma viene scartato; altrimenti se il numero gene-
rato è superiore del valore soglia, il pacchetto viene inoltrato verso la destinazione.
Questo fa in modo che se il pacchetto viene scartato dall'AP (per le 7 volte denite dal
MAC), quest'ultimo non invierà ACK, il livello MAC del nodo mobile notica al TCP del-
livello MAC del nodo mobile notica al TCP dello stesso con IP_NOTIFY_SUCCESS.
74
Capitolo 5
Test e risultati ottenuti
In questa sezione sono stati raccolti alcuni test. I primi sono stati svolti utilizzando RW-
MA e la modifca eettuata al protocollo TCP, al ne di valutare l'eettivo funzionamento
del sistema; i secondi sono stati svolti utilizzando l'algoritmo TCP Reno implementato
da INET, al ne di comparare, in un secondo momento, le prestazioni del TCP con e
senza la modica.
Lo scenario NetworkCity è costituito dalle due reti in cui sono presenti i diversi dispositivi
di rete; il nodo wireless mobile si muove lungo un percorso predenito passando tra un
certo numero di ostacoli, che rappresentano gli edici in un contesto urbano. All'interno
della stessa rete dell'host mobile sono, inoltre, presenti cinque access point collocati in
modo tale da fornire una copertura disomogenea per far sì che il nodo mobile, spostan-
dosi fra le aree con intensità di segnale diverse, possa ricevere delle notiche di mancata
trasmissione al primo hop o debba ricongurare più volte l'interfaccia di rete, provocando
così una perdita ulteriore di pacchetti, che dovranno quindi essere ritrasmessi.
75
Host Mobile:
* Porta locale: 80
* Porta destinazione: 80
* Applicazione: TCPAppRWMA
* Porta locale: 90
* Porta destinazione: 90
Proxy Server:
Applicazione: TCPSrvHostApp
Porta locale: 90
Server DHCP:
Applicazione: UDPBasicAppForServerProxy
Porta locale: 80
76
Indirizzi IP per i client DHCP (sottorete wireless 2):
3. la latenza del cavo di comunicazione tra le reti può assumere i valori 10ms, 100ms
oppure 300ms;
I primi due parametri sono comuni a tutti i test, mentre gli altri due variano da test a
test.
mobile;
i pacchetti che attraversano il cavo di comunicazione tra le reti, che sono provenienti
77
Qui di seguito viene presentata una tabella riassuntiva dei test eettuati.
contati non solo i pacchetti che eettivamente inviati e che raggiungono l'AP, ma anche
quelli che rimangono nel buer di trasmissione e non vengono inviati perchè il segnale
della scheda wireless oramai è degradato o si sta degradando; inne, tra i pacchetti
inoltrati dal cavo vengono contati i pacchetti duplicati che il nodo mobile ha ritrasmesso
Dai dati emerge che il TCP modicato (TCP RenoRWMA) si comporta molto meglio
su alte latenze, cioè dove le distanze tra i due end system sono molto elevate; una trasmis-
sione con questo algoritmo sfrutta molto meglio il comportamento della ritrasmissione
78
anticipata, poichè la perdita del pacchetto nel primo hop viene rilevata molto prima,
rispetto alla situazione in cui si utilizza solo sulla mancata ricezione dell'ACK; il risul-
tato ottenuto è apprezzabile dai due graci sottostanti (Figura 5.1 e Figura 5.2), in cui
del pacchetto pari a 1kB, il frame generato ogni 40ms, tutti e tre i possibili valori per la
79
Figura 5.2: Risultato del TCP Reno con perdite del 5%
percentuale di pacchetti persi, non solo dovuto al fatto che si eliminano meno pacchetti a
livello di AP, ma anche perchè si hanno meno perdite all'interno di una stessa nestra di
trasmissione; considerando l'esecuzione dei due algoritmi con la stessa latenza del cavo,
80
Figura 5.3: Risultato del TCP RenoRWMA con perdite del 3%
81
Figura 5.5: Risultato del TCP RenoRWMA con perdite del 1%
82
Capitolo 6
Conclusioni, problematiche e sviluppi
futuri
L' obiettivo della tesi è una modica al sistema di ritrasmissione del protocollo TCP in
Dopo una prima analisi di ABPS e RWMA, allo studio di Omnet++/INET, si è passati
anche in un kernel linux [Link], ma questo non è stato preso in considerazione) per
tematiche del protocollo TCP quali il controllo di usso, la struttura del pacchetto, e
TCP che si sono susseguite nel tempo. Solo successivamente si è passati all'implemen-
tazione vera e propria di RWMA per una comunicazione TCP, andando a modicare o
ad aggiungere parti nei vari livelli dello stack di rete. I test hanno confermato, oltre il
sulle trasmissioni con latenze di rete elevate, rispetto al protocollo TCP Reno. Tuttavia,
tocollo, quali il TCP Cubic o TCP Veno; questo non è stato possibile farlo perchè
la versione di INET utilizzata non fornisce altre implementazioni del TCP, se non il
TCP Tahoe e alcuni algoritmi di trasmissione in cui non si eettua il controllo della
congestione.
83
A questo punto si potrebbe procedere in tre modalità:
fare un porting del sistema su versioni di INET più aggiornate che forniscono
nuovi algoritmi TCP per il controllo della congestione; nel qual caso non fossero
prevedere una modica del processo in modo da essere compatibile con IPV6, la
nel breve termine, è necessaria una gestione dierente del DHCP. Il primo pas-
prevedere una ritrasmissione della richiesta di DHCP nel caso in cui la risposta,
ad una DHCP DISCOVER fatta in precedenza, fosse andata perduta. Una imple-
commentata, non essendo stata testata no in fondo. Questo perchè, dai test svolti,
in ultimo, sarebbe necessaria una modica alla gestione dei socket nell'applicazione
TCP; per il momento, utilizzando una sola interfaccia di rete, viene usato un
solo socket; la modica da fare consiste nel fare in modo che vengano utilizzate
e il più trasparente possibile nel caso in cui una delle due schede fosse disabilitata,
84
Bibliograa
<[Link]
[3] Michele Luti (2006) - Ottimizzazioni del tcp su reti di accesso ieee802.11b/e e
valutazioni delle prestazioni di Qos.
<[Link]
[8] RFC 2001 - TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast
Recovery Algorithms.
[9] RFC 2582 - The NewReno Modication to TCP's Fast Recovery Algorithm.
[10] Mario Gerla, M. Y. Sanadidi, Ren Wang, and Andrea Zanella, Claudio Casetti,
[11] Lawrence S. Brakmo, Sean W. OMalley, Larry L. Peterson - TCP Vegas: New
Techniques for CongestionDetection and Avoidance.
85
[12] RFC 2018 (1996) - TCP Selective Acknowledgment Options (PRP STD).
[14] Jeremy Stretch (2010) - TCP Selective Acknowledgments (SACK) - Disponibile in:
<[Link] sack/>.
[15] Injong Rhee, Lisong Xu - CUBIC: A New TCP-Friendly High-Speed TCP Variant.
[16] Cheng Peng Fu, Associate Member, IEEE, and Soung C. Liew, Senior Member,
IEEE (2003) - TCP Veno: TCP Enhancement for Transmission Over Wireless
Access Networks.
[17] Giorgia Lodi, Fabio Panzieri, Antonio Messina, Vittorio Ghini, Luigi Enrico
Tomaselli - Always best packet switching for sip-based mobile multimedia services
- Dept. of Computer Science, University of Bologna, Italy.
[18] Vittorio Ghini, Giorgia Lodi, Fabio Panzieri - Always Best Packet Switching: the
mobile VoIP case study - Dept. of Computer Science, University of Bologna, Italy.
Second Edition.
[22] András Varga and OpenSim Ltd - OMNeT++ User Manual Version 4.2.2 -
[23] András Varga - INET Framework for OMNeT++ Manual - Disponibile in:
<[Link]
86