Per verificare sperimentalmente la situazione descritta nel paragrafo precedente, si sono condotte alcune prove di laboratorio sulla rete mostrata in figura 6.1. Per i test si è utilizzato ancora una volta netperf con il test ``TCP stream'', ponendo il client su H1 e il server su H2 (per cui il flusso di dati va da H1 a H2); su G2 è stato attivato NIST Net in modo da simulare la presenza di una rete intermedia con una data probabilità di perdita (in sostanza NIST Net agisce scartando i pacchetti in transito secondo la probabilità fornitagli). La frammentazione è stata ottenuta modificando la MTU dell'interfaccia virtuale di IPsec su H1, scegliendo valori tali da ottenere il numero di frammenti desiderato e frammenti della dimensione massima. Nei test non si è utilizzato il selective acknowledgement (SACK) di TCP66 (tale opzione è implementata in Linux ma non in tutti i sistemi) per non alterare il comportamento standard di TCP in presenza di perdite casuali come quelle qui introdotte.
La figura 6.5 mostra l'andamento del throughput di IPsec in funzione
del numero di frammenti, per varie probabilità di perdita comprese tra 0 e 1%.
Per
si nota che la curva cresce rapidamente passando da un valore
KB/s per
ad un valore
KB/s già per
, assestandosi
poi intorno a questo valore. Tra il caso
e il caso
si ha quindi
un miglioramento di circa il 12%, che scende a circa il 10% per
, mentre non
sale significativamente per
. Per
si vede che la curva cresce
fino a
(a cui corrisponde un guadagno di circa il 10% sul rispettivo caso
), poi rimane circa costante dopo di che decresce leggermente per
(per
si ha comunque ancora un guadagno di circa il 7%). La curva
corrispondente a
ha anch'essa un andamento crescente fino a
(con un guadagno di poco più del 5%) dopo di che decresce lentamente. La curva
relativa a
si mantiene sostanzialmente costante fino a
per
poi decrescere, infine la curva relativa a
assume subito una pendenza
negativa, presentando nel caso
una perdita di poco più del 4% rispetto
al caso
. Le curve decrescono sempre più rapidamente al crescere di
(come ci si attendeva), per cui si allontanano tra loro al crescere di
.
Da questi risultati si può concludere che, su una rete affidabile (ovvero con
probabilità di perdita media inferiore all'1%), sfruttando la frammentazione
dei pacchetti IP si può avere un miglioramento degno di nota delle prestazioni
di IPsec. Non appare però conveniente andare oltre i 3 (o al massimo 4) frammenti
per ogni pacchetto IP, poiché il maggior guadagno a probabilità di perdita nulla
è pressoché insignificante, mentre per probabilità di perdita superiori
si può avere un peggioramento.
|
Rispetto al modello teorico analizzato in precedenza si può notare che l'andamento
delle curve è quello previsto. Si nota però che il miglioramento nel caso
riscontrato sperimentalmente (12% per
) è molto maggiore rispetto a quello
teorico (6% per
). In figura 6.6 sono
mostrati gli andamenti (per
) dell'efficienza teorica e del throughput misurato,
quest'ultimo riportato sulla scala dell'efficienza eguagliandone il valore per
alla
corrispondente efficienza teorica, e utilizzando poi tale rapporto per tradurre gli altri
punti. Come si vede, le due curve si discostano notevolmente: un effetto del genere
era stato previsto (attribuendolo essenzialmente agli ack), ma lo scostamento è tanto
grande da suggerire l'opportunità di un approfondimento sulla questione.
|
Essendo in assenza di perdite, il secondo degli ``effetti collaterali'' ignorati
dal modello (ovvero i meccanismi di ritrasmissione di TCP) non sussiste, per cui
ci si può concentrare sul primo, vale a dire la presenza degli ack. Gli ack, come
detto, fluiscono in senso opposto ma contribuiscono ad occupare la banda
disponibile67:
poiché viene inviato un ack per ogni pacchetto (e non per ogni frammento)
si può pensare di includerli nell'overhead di pacchetto, ovvero in
.
Nelle prove sperimentali, un ack è composto da 104 byte: 20 byte per l'header IP
esterno, 8 byte per l'header ESP, 8 byte per l'IV, 20 byte per l'header IP interno,
32 byte per l'header TCP, 2 byte di padding, 2 byte per il trailer ESP e infine
12 byte per i dati di autenticazione. Si può allora inserire nella formula
dell'efficienza un valore
188 byte, anziché 84 byte come considerato
in precedenza: in questo caso il valore asintotico rimane pari a circa
,
ma il valore per
è pari a circa
(anziché
), il che
comporta un guadagno asintotico di circa il 14,6%, decisamente in linea con
il valore ottenuto sperimentalmente.
Si è allora di confrontato il throughput sperimentale con l'andamento
dell'efficienza teorica, questa volta calcolata includendo gli ack in
,
anche qui parificando il throughput per
alla corrispondente efficienza teorica
e traducendo poi in base a tale rapporto i valori di throughput misurati in valori
sulla scala dell'efficienza. Il risultato è mostrato in figura
6.7: come si vede con questa ipotesi l'andamento osservato
sperimentalmente è molto vicino a quello teorico.
|
Per eliminare completamente l'effetto degli ack, e valutare l'adeguatezza del modello,
si sono infine condotti dei test su UDP anziché su TCP68.
L'overhead in questo caso è più basso, infatti, poiché l'header UDP misura solamente
8 byte contro i 32 byte di TCP,
in questo caso si ha
byte. Questo significa che, sempre per
, si ha
, e che quindi il guadagno per
è di circa
il 4,2% (il valore asintotico dell'efficienza è sempre il medesimo). Come si vede in figura
6.8, la coincidenza tra valori teorici e sperimentali è
in questo caso pressoché completa.
|