> Non ho fatto i conti con la matitina, ma _molto_ a naso mi
> pare credibile, su una gigabit punto-punto, anche considerando
> i preamboli dei frame ethernet e quanto altro.
>
> Prova a mostrare il conto che hai fatto evidenziando dove
> sta il problema.
>
Ok, il conto e' questo:
bandwidth = ((1000000 * (40 + TCP_MSS)) / (stop - start));
throughput = (bandwidth / (1024.0 * 1024.0));
Spiegazione: per calcolare l'ampiezza di banda ho moltiplicato il
numero di pacchetti inviati (10^6) per la dimensione di un datagram ip
(512 bytes di payload, ossia TCP_MSS + 20 di intestazione tcp e 20
di intestazione ip), tutto diviso per il tempo occorso per effettuare
la trasmissione dei pacchetti. La differenza tra stop e start mi indica
il tempo trascorso dall'inizio alla fine della ricezione dei pacchetti.
Ottenuta la bandwidth, si passa al throughput che ho calcolato come rapporto
tra la bandwidth e 1024*1024 (cioe' i bytes in un megabyte + o -) e cosi'
ho ottenuto i megabutes trasferiti al secondo.
Lo stesso calcolo l'ho applicato per i frames ethernet con la sola differenza
che al posto di TCP_MSS + 40, per il calcolo della bandwidth, ho inserito
14 + 512. I primi 14 bytes sono per l'intestazione di un frame ethernet
(senza preambolo visto che lo aggiunge la nic) e i restanti 512 sono per il
payload.
BTW, ho notato che il sender tcp impiega proprio 5.7 secondi per trasferire
tutti i dati, mentre il sender raw ci impiega 6.3 secondi. Boh? Non vorrei che
fosse un problema dei miei programmi.
Grazie per l'aiuto
Simone Saravalli
|