Tutto dipende da ciò che consideri essere il "tempo di trasmissione". Se si tiene conto del tempo trascorso tra le chiamate a send()
e recv()
, ciò dipende da diversi fattori e la dimensione del pacchetto potrebbe non essere così rilevante per il calcolo. In tal caso potresti, in alcuni casi (ma ripeto, non tutti!) Affermare che qualunque cosa tu faccia - TCP, UDP, pacchetti grandi o piccoli - piccole modifiche.
Altrimenti, in alcuni scenari potrebbe essere vantaggioso avere pacchetti più piccoli per ridurre il tempo di trasmissione totale . Ad esempio: se hai una probabilità di errore elevata, e devi ritrasmettere, e usi pacchetti molto grandi, quindi molto presto il tempo di ritrasmissione dell'errore inizia a dominare il calcolo . L'aumento delle dimensioni del pacchetto aumenterà il costo e la probabilità di un errore, aumentando così il tempo di trasmissione. Nel caso estremo di un pacchetto singolo , la probabilità che un pacchetto venga danneggiato si avvicina all'unità e potrebbe essere necessario ritrasmetterlo mille volte. L'aumento del tempo è ora al 100000%. Con pacchetti mille volte più piccoli, dieci di questi sono danneggiati, si ritrasmettono solo quelli e il tempo complessivo aumenta di un solo punto percentuale (in base al protocollo di ritrasmissione).
Devi anche considerare il sovraccarico. Ogni pacchetto di byte di carico utile B che invii avrà i suoi byte O di overhead. Se si semplifica e si assume che il tempo di trasmissione fisica del pacchetto sia una funzione lineare delle sue dimensioni (non lo è), per trasmettere N byte è necessario trasmettere frame N / B, che significa (N / B) * (B + O) = N (1 + O / B) byte e kN (1 + O / B) tempo di trasmissione. Come puoi vedere, più piccolo è B, più è lungo il tempo. Un ipotetico pacchetto di dimensione zero significherebbe alcuna trasmissione di dati di payload del tutto, e quindi un tempo infinito, l'esatto contrario dello scenario di cui sopra.
Solo al livello più astratto - nessun overhead e trasmissione a tempo costante - sì, il tempo di trasmissione è k (N / B) * B, che è kN e non dipende da B. E, ancora una volta, il primo " incidente "questo modello di incontri è probabilmente una discontinuità nel colpire le dimensioni del MTU.
In generale, tuttavia, è non una rappresentazione fedele di ciò che sta realmente accadendo (pensaci in alto, pensa agli errori, pensa al sovraccarico s , al plurale. .. e questo forse su un percorso di diversi hop ), e la dimensione del pacchetto potrebbe importare molto .
Spesso, dovrai sperimentare per trovare il valore effettivo migliore, perché l'euristica semplice ("più piccolo è il migliore", "il più grande è il migliore" , ecc.) non produrrà il miglior risultato possibile.
Un test simulato
Sono qui su un laptop XP, quindi netstat -snap tcp
mi fornisce alcuni dati su cui lavorare. tasso di errore. Non ho statistiche sulle dimensioni dei pacchetti, quindi presumo che siano tutti attorno ai 1500 byte anche se ovviamente non lo sono.
Suppongo che le mie statistiche forniscano un tasso di errore effettivo e che un pacchetto sia morto se un byte è morto, così che la probabilità di errore a livello di byte, Pb, è correlata alla probabilità di errore di pacchetto Pp dalla relazione "per un pacchetto per riuscire , tutti i byte devono passare intatti ", cioè,
1 - Pp = (1 - Pb)^PacketSize
Questo mi consente di ricavare Pb come 1-exp(ln(1 - Pp)/PacketSize)
. A quel punto posso ricalcolare la probabilità di errore del pacchetto per qualsiasi altro PacketSize e, da quello, determinare quanto ci vorrà per trasmettere lo stesso carico utile.
In teoria potrei affermare di essere giusto , perché risulta che le dimensioni contano . Ma è pignolo - In realtà ero sbagliato , perché almeno in questo scenario le dimensioni contano molto poco :
Quindi, le dimensioni dei pacchetti possono ancora influenzare la progettazione delle applicazioni, ma certamente non a causa dei tempi di trasmissione dei dati.