2010-11-12 5 views
2

Je veux mesurer bandwidh en utilisant C#. Voici ce que j'ai fait. Les commentaires et suggestions sont les bienvenus.Comment calculer la bande passante en utilisant C#

  1. Trouvez la charge utile udp maximale (sur mon banc d'essai, son 1472 octets)
  2. Créer des données non compressibles avec 1472 octets de taille
  3. Envoyer ces données à partir d'un serveur à un client plusieurs fois (sur mon test, ses 5000 paquets)
  4. chronomètre de démarrage du client au moment où le premier paquet arrive
  5. Lorsque toutes les données ont été communiquées, envoyer une notification au client indiquant toutes les données ont été envoyées
  6. chronomètre arrêt client
  7. Je calcule la bande passante en tant que (paquet total envoyé (5000) * MTU (1500bytes))/time-lapse
  8. Je remarque que certains paquets sont perte. un meilleur, 20% de perte. au pire 40% de perte. Je n'ai pas tenu compte de cela lors du calcul de la bande passante. Je suspecte un dépassement de tampon d'expérience de périphérique de réseau de client. Dois-je tenir compte de ce facteur?

Si vous avez des suggestions ou des commentaires, n'hésitez pas à le faire.

Merci.

+1

si vous voulez mesurer la quantité de données que vous pouvez transférer de l'ordinateur à l'ordinateur bi n'utiliserait pas udp parce que ce n'est pas fiable. vous ne pouvez pas être sûr si votre colis est arrivé ou non. Ainsi, lorsque vous envoyez 5000 paquets, il est possible que le serveur n'ait pas reçu tous les paquets (comme vous l'avez déjà remarqué). J'utiliserais tcp ou un autre protocole fiable où vous pouvez vraiment mesurer le débit. sinon c'est juste le débit que votre ordinateur peut envoyer. ou vous collectez toutes les données à l'ordinateur b et après que tous les paquets sont envoyés l'ordinateur b envoie la quantité de données reçues (longueur) en arrière. –

+0

je ne sais pas quel est le bon terme, la bande passante ou le débit, mais mon intention est de mesurer la qualité du canal (la quantité de données que le canal peut transférer, y compris l'en-tête de paquet). perte de paquets est prévu en ce qui concerne la qualité de la chaîne. J'espère que tu comprends. –

+1

Relié, mais probablement pas dupe: http://stackoverflow.com/questions/566139/detecting-network-connection-speed-and-bandwidth-usage-in-c – GWLlosa

Répondre

1

Pour calculer la bande passante, j'utiliserais TCP au lieu de UDP. Lorsque vous utilisez UDP, tous les datagrammes peuvent sortir très rapidement via votre carte réseau (à 100mbps) et être mis en file d'attente sur le "lien le plus lent" de la chaîne (par exemple un modem câble/routeur 512kbps). Si le tampon de la file d'attente est plein, il est probable que les datagrammes seront supprimés. Donc, votre test n'est pas très fiable.

J'utiliser TCP et faire un peu de mathématiques pour transformer la vitesse de tcp (KB/s) au débit (Mbps) (je pense que les frais généraux de TCP est d'environ 8%)

Questions connexes