Bandbreitenlimit



  • Hey,

    wie kann ich eine Bandbreitenbegrenzung in c++ (oder auch java) realisieren? Dass Down- und Upload zum Beispiel maximal 5kb/s betragen..
    Also ich meine generell alles, was im Internet surfen betrifft.

    Ich will jetzt auch nicht unbedingt gleich code, sondern nur wissen wie man sowas machen kann.

    Vielen Dank



  • Du kannst bei einem Download einfach nur 5 kb auslesen. Somit hast du dein Bandbreitenlimit...



  • Ich lade ja nicht selbst herunter, sondern ich will einfach nur die Bandbreite kontrollieren, dass generell nicht mehr als mit der Geschwindigkeit x übertragen wird.

    Der Datenaustausch selbst passiert ja über den Browser, ICQ, etc..



  • hi,

    du musst eine Funktion des Betriebssystemes deiner Wahl benutzen (zumindest bietet standard C++ keine solche Möglichkeit), falls das Betriebssystem selber sowas überhaupt unterstützt.



  • Achso, dachte das dies ein selbst geschriebenes Programm betrifft das Downloaded und Uploaded.



  • Das hab ich mir schon *fast* gedacht, dass Standard C++ keine solche Funktion zur Verfügung stellt :))

    Weiß denn jemand, ob WinApi (Windows 98 SE!) da was bereitstellt?

    Vielen Dank



  • ganz grob könntest du versuchen einen proxy treiber zu schreiben



  • Also ich würde sagen Download (ungewolltern) kannst du eh nicht verhindern. Wenn dir Jemand UDP Pakete schickt die du nicht haben willst, wird die dein Modem trotzdem empfangen, was deine Bandbreite reduziert. Da nützt auch ausfiltern im PC nichts.



  • guenni81 schrieb:

    Du kannst bei einem Download einfach nur 5 kb auslesen. Somit hast du dein Bandbreitenlimit...

    zwar jetzt evtl. off-topic, aber: wie wuerd man das machen? Einen Timer starten, der 1x pro Sekunde aufgerufen wird und genau 5 kb aus dem Stream liest?

    Falls ja: was passiert dann, wenn dir z. B. der Server jede Sekunde 50 kb schickt. Wuerd dann nicht irgend ein interner Buffer uebergehen?



  • Hey Blue-Tiger,

    das regelt im Grunde alles das TCP. TCP geht kontinuierlich an das Mögliche: es wird ein Datenpaket verschickt — falls alles ankommt, wird noch mehr Daten pro Zeiteinheit verschickt. So geht es bis der Empfänger ein Datenpaket verliert — dann wird wieder weniger Daten verschickt usw.

    So in etwa kannst Du dir das also vorstellen. Für genauere Informationen einfach nach "TCP" suchen.

    Gruß Borschtsch



  • d.h. ich kann also wirklich einfach in meinem Programm pro Sekunde nur 5 kb vom Socket lesen und damit hab ich mein Bandbreitenlimit?

    Wie waer's dann aber bei HTTP, das laeuft ja ueber UDP, und das hat ja keine sonderlich ausgebufften Uebertragungsmechanismen?



  • Wie waer's dann aber bei HTTP, das laeuft ja ueber UDP

    😮 😮 😮 😮 ➡ falsch



  • Borschtsch schrieb:

    Hey Blue-Tiger,

    das regelt im Grunde alles das TCP. TCP geht kontinuierlich an das Mögliche: es wird ein Datenpaket verschickt — falls alles ankommt, wird noch mehr Daten pro Zeiteinheit verschickt. So geht es bis der Empfänger ein Datenpaket verliert — dann wird wieder weniger Daten verschickt usw.

    Ist es denn jetzt auch möglich ausgehende Pakete "abzufangen" und Ihnen ein eigenes Zeitlimit zuzuweisen (z.B. Packet abfangen und selbst verschicken)? Ich denke da gerade an eine art Uploadbegrenzung eines Servers.

    Hm... Wenn ich mir grad so meinen ersten Satz nochmal durchles... man müsste doch eigentlich "nur" einen Proxyserver schreiben. Dieser Empfängt dann alle Aus- und Eingehenden Packete und reicht sie ja im Netzwerk weiter... und schon kann man den Up- und Download begrenzen.

    Aber nehmen wir jetzt mal an ein Server schickt mit 50 Kb/sec Daten an einen Client und dieser liest aber nur 5 Kb/sec aus. Dann gehen doch quasi 45 Kb/sec verloren und die (allgemein verfügbare) Bandbreite wird trozdem geschmälert da der Server ja weiterhin mit 50 Kb/sec sendet (nur das die nich tausgelesenen 45 Kb erneut verschickt werden).



  • Aber nehmen wir jetzt mal an ein Server schickt mit 50 Kb/sec Daten an einen Client und dieser liest aber nur 5 Kb/sec aus. Dann gehen doch quasi 45 Kb/sec verloren und die (allgemein verfügbare) Bandbreite wird trozdem geschmälert da der Server ja weiterhin mit 50 Kb/sec sendet (nur das die nich tausgelesenen 45 Kb erneut verschickt werden).

    Wie reagiert denn das TCP/IP Protokoll darauf? Ich weis das, wenn eine Netzwerkkarte viele Kollisionen verursacht, ihre Priorität (erlaubte Sendungen pro Zeiteinheit) verringert wird so das sie seltener Pakete sendet (um das Netz zu entlasten). Funktioniert das auch bei so einer Bandbreitenbegrenzung (s.o)?

    Denn wie gesagt, es macht nicht wirklich Sinn beim Download nur 5 Kb/sec auszulesen und den Rest wegzuschmeißen (die Leitung wird trozdem belastet).



  • Hi

    kann man nicht auch irgendwie in das kommunikationsprotokoll zwischen kleient und server eingreiffen? Ich fodere zwar über TCP/IP z.B. eine Datei an, der Server verschickt die ja nicht am stück sondern in schön kleinen, handlichen Paketchen. Für die Packetchen gibt es doch eine art Flussteuerung (NAK/ACK). Heist, der server schickt sicher nicht wild alle Pakete auf einmal los. Der kleint könnte sie ja verwerfen da er sie gerade nicht verarbeiten kann (Puffer foll). bzw die reihenfolge der Packete muss ja auch simmen. es ist ja nicht gesagt, das jedes packet den gleichen weg durch das netz nimmt.

    kann man da nicht soweit angreiffen, das nur soviele pakete angefordert werden, wie man gerade haben will? z.B. den ACK solange rauszögern bis man wieder daten haben will.

    gruss



  • Hallo,

    wenn man seiner Software 5 kb an Puffer zugewiesen hat, dann stellt sich auch der Server darauf ein und schickt nicht mehr als nötig. D.h. es kommen keine 100 kb/s ständig an der Netzwerkkarte an, wovon ich als Client nur 5 kb nehme (wäre ja Schwachsinn). Allerdings ist Datenverlust, also Überlauf eines Puffers im Netzwerk ganz normal, die Verluste sollen aber möglichst gering bleiben.

    Wiki-Artikel

    Gruß Borschtsch



  • Borschtsch schrieb:

    Hallo,

    wenn man seiner Software 5 kb an Puffer zugewiesen hat, dann stellt sich auch der Server darauf ein und schickt nicht mehr als nötig. D.h. es kommen keine 100 kb/s ständig an der Netzwerkkarte an, wovon ich als Client nur 5 kb nehme (wäre ja Schwachsinn). Allerdings ist Datenverlust, also Überlauf eines Puffers, im Netzwerk ganz normal, die Verluste sollen aber möglichst gering bleiben.

    Wiki-Artikel

    Gruß Borschtsch

    Ausgezeichnet. Das beantwortet meine Frage.


Anmelden zum Antworten