View Full Version : UDP e TCP performance
Crashbandy80
22-03-2004, 16:43
Ciao ragazzi, volevo un vostro parere riguardo un piccolo progetto..
Devo misurare la differenza di prestazioni tra pacchetti UDP/TCP.
Ora i dubbi :D :
- Meglio fare un server unico che si mette in attesa per l'UDP e apre una connessione TCP contemporaneamente oppure
- Faccio 2 server separati magari anke su 2 macchine separate in modo da evitare eventuali "precendenze" assegnate dal sistema operativo sui 2 protocolli?
E comunque, come consigliate di misurare le prestazioni? Cosa fo'? Devo lavorare in C sotto Unix..
Imposto la grandezza del pacchetto, lo riempio e ne invio un tot misurando poi il tempo impiegato per i 2 protocolli? Boh..
E se x caso avete qualke sorgente di esempio un okkiata ce la dò volentieri :D
Grassssie ciau ;)
puoi misurare la velocità di trasferimento di un file per prima cosa.
con TCP crei la socket poi ci scrivi il tuo file, con UDP lo spezzi e lo invii a rate
poi fai una prova di invio di pochi byte alla volta. continui a scrivere sulla socket TCP delle stringhe di 1 carattere ad esempio. con UDP mandi un datagram alla volta
poi provi a simulare un eco con continue richieste e risposte (magari un programma che converte in maiuscolo quello che scrivi). lo fai prima utilizzando una sola connessione TCP poi aprendone una nuova ogni volta che inserisci una nuova stringa
ti direi di fare la prova prima con un protocollo poi con l'altro, misurando il tempo con le chiamate di sistema. assicurati che non ci sia niente in esecuzione che possa rallentare il pc e non usare internet così sei sicuro di avere immediatamente a dispozione lo stack TCP/IP
Crashbandy80
24-03-2004, 06:42
Proverò come mi hai suggerito, grazie :)
Ovviamente deve essere un file grande per poterne apprezzare le differenze... Conta comunque che non si usa quasi mai UDP nudo e crudo, ma si impacchettano sempre i dati in un protocollo personalizzato dove c'è almeno un controllo CRC finale e un conteggio dei pacchetti per indicarne la sequenza...
Crashbandy80
24-03-2004, 11:15
Beh io dovrò fare diverse prove, l'UDP devo utilzzarlo senza nessun controllo d'errore.
Se uso file troppo grandi riskio non riskio ke di pakketti integri me ne arrivino troppo poki?
Originariamente inviato da Crashbandy80
Beh io dovrò fare diverse prove, l'UDP devo utilzzarlo senza nessun controllo d'errore.
Se uso file troppo grandi riskio non riskio ke di pakketti integri me ne arrivino troppo poki?
Beh, se pensi di usare l'UDP senza check d'errore allora nel trasferimento dei file devi preoccuparti anche di ricomporre la giusta sequenza dei pacchetti, perché non è detto che arrivino con lo stesso ordine con cui sono partiti. Oltre che rischi di non ricevere tutti i pacchetti.
Come ti ha detto Cionci, devi scriverti un tuo protocollo interno se vuoi sopperire a quelli che sono i limiti intrinseci dell'UTP.
Crashbandy80
24-03-2004, 17:04
Giusta osservazione.. non ci avevo proprio pensato :p
A questo punto devo eliminare la scelta dell'invio di file, visto che il progetto che dovrei fare, pretende la sola comparazione delle prestazioni tra TCP e UDP..
Nel test UDP dovrò tenere traccia della percentuale di pacchetti persi.. se creo un controllo per sopperire alle caratteristike dell'UDP non ottengo quello ke voglio..
Quindi dopo quello ke mi avete detto e quello che ho appena scritto mi conviene fare come detto da recoil nel primo reply tranne l'invio di file.. giusto?
Originariamente inviato da Crashbandy80
se creo un controllo per sopperire alle caratteristike dell'UDP non ottengo quello ke voglio..
Non è detto. Dipende dalle restrinzioni che hai.
Puoi sempre inserire i controlli e valutare di conseguenza le prestazioni.
Considera che i controlli che dovresti mettere non inficiano direttamente sulle prestazioni del protocollo IP (che sono ad un livello più basso), casomai su quelle del programma che stai per scrivere.
Ad esempio: Supponendo che un file richieda 100 datagram (UDP) per essere completamente spedito, essi saranno sempre 100 sia coi controlli che senza (a meno di errori, ovviamente)
Potresti provare ad inserire i controlli sia sul server che sul client e vedere se effettivamente rimangono sempre 100 anche coi controlli.
Il controllo, tuttavia, è abbastanza banale: basta controllare il checksum del pacchetto e il numero di sequenza :-)
Crashbandy80
24-03-2004, 17:26
Proverò, grazie x l'aiuto :)
cmq tieni conto che UDP e TCP hanno scopi diversi. va bene fare una prova per misurare le prestazioni ma tieni conto che nessuno spedirebbe un file usando UDP. ci si può fare streaming, dove gli errori sono accettabili, ma non file transfer
Allora...vediamo un po'... Stabilisci un file da inviare a priori (ad esempio 1024 KB)...e stabilisci un checksum...
Quando finisce il trasferimento verifichi il checksum e se è diverso ovviamente la trasmissione non ha avuto successo...
Altrimenti...ti floodi la porta UDP e la connessione TCP di pacchetti senza significato (ad esempio tutti 0)...e poi stabilisci in tempo reale la velocità...se li perdi o non arrivano in sequenza fregatene... Poi amgari introduci un CRC ed un conteggio e verifica di quanto decade la velocità per questo overhead (ricordati che ti dovreai ordinare anche i pacchetti)...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.