2010-12-16 12 views
1

Ich möchte mit TcpClient Tools zur Bandbreitenschätzung erstellen. Das Problem, das ich habe, ist, ich möchte die Messung in vordefinierter Zeit durchführen (anstatt die Pufferdatenlänge für die Übertragung vorzugeben). Wenn ich Loops verwende (kleine Datenblöcke wiederholt übertragen), würde dies die Performance nicht verlangsamen (manuelle Fragmentierung gegenüber automatischer Fragmentierung)?TcpClient Bandbreitenschätzung

Antwort

1

Es hängt davon ab, ob Sie den Nagle-Algorithmus deaktivieren. Wenn Sie das tun, dann werden Sie die Dinge selbst fragmentieren. Wenn Sie dies nicht tun, werden Sie wahrscheinlich Ihr Ziel nicht erreichen - denn die Daten dürfen nicht eigentlich geschrieben werden, wenn Sie denken, es ist ... es sei denn, das andere Ende der Verbindung sendet eine endgültige "Ack" natürlich zurück.

Ich würde vorschlagen, dass Sie ein kleineres Beispiel verwenden, um die grobe Geschwindigkeit zu berechnen, und erstellen Sie dann eine größere Probe basierend darauf, Vorhersage, wie lange es dauern wird. Sie müssen die Zeit trotzdem messen - es ist nicht so, als würden Sie eine genaue vordefinierte Zeit treffen - also sollte es nicht zu viel Unterschied machen. Sie können die Größe immer so anpassen, wie Sie es auch immer tun - ich würde erwarten, dass Sie am Ende viele Pakete senden, es sei denn, es ist ein wirklich langsames Netzwerk. Wenn Sie sich also entscheiden, nur 200K anstelle von 300K zu senden, Das sollte keinen großen Unterschied machen.

Das klingt natürlich wie Ihr ursprünglicher Vorschlag - aber ich spreche nur über das Senden "ziemlich großer" Datenblöcke pro Anruf ... sagen 16K. (Jedenfalls viel größer als die Paketgröße.) Das sollte die Fragmentierung nicht stark beeinflussen, aber Sie können die Dinge trotzdem etwas optimieren. Ich würde dir nicht raten, winzige Päckchen zu schicken.

+0

Entschuldigen Sie mich für die Frage, aber ich verstehe nicht wirklich. Korrigiere mich, wenn ich falsch liege. Wenn ich den Nagle-Algorithmus deaktiviere, muss ich meine Daten manuell fragmentieren, indem ich wiederholt kleine Datenblöcke sende. Wenn ich den Nagle-Algorithmus nicht deaktiviere, werden meine Daten automatisch fragmentiert. Wenn ich den Nagle-Algorithmus nicht deaktiviere, ist es unwahrscheinlich, dass ich mein Ziel erreiche (Bandbreitenabschätzung?), weil die gesendeten Daten möglicherweise nicht wirklich empfangen wurden, als ich dachte, dass sie empfangen wurden. irgendwie verwirrt hier. –

+0

@publicENEMY: Ich sollte klarstellen ... Wenn Sie das andere Ende der Verbindung geben können, geben Sie einen Wert, wenn es alles empfangen wird - effektiv machen das "ack" auf der Anwendungsebene sichtbar - dann wäre es in Ordnung ... leicht in Bezug auf die Rechenleistung auf der Sendeseite ineffizient, aber verglichen mit dem Netzwerktiming wahrscheinlich nicht signifikant. –

+0

Hier dachte ich tcp ist zuverlässig (garantieren korrekte Daten erhalten). sagen, dass, wenn ich Nagle deaktiviere, es keine Garantie gibt, dass die gesendeten Daten empfangen werden? –

Verwandte Themen