Die beste Beschreibung, die ich je gehört habe und die Sinn für die inhärente Drosselungsmethode von TCP machte, stammt aus einem kürzlich veröffentlichten Security Now-Podcast . Um Steve Gibson zu zitieren:
Da TCP dieses sehr clevere Protokoll ist, führt es nach allgemeiner Vereinbarung einen sogenannten "langsamen Start" durch. Es wird im Allgemeinen die Erlaubnis erteilt, eine bestimmte Anzahl von Paketen ohne Bestätigung zu senden. Die Idee ist also, dass wir hier einfach etwas bewegen. Und normalerweise ist diese Zahl zwei. Wenn TCP gestartet wird, können zwei Pakete nacheinander gesendet werden. Ohne dass der erste bestätigt wird, wird der zweite gesendet. Aber dann wartet es. Und dann lautet die Regel für die Drosselung, dass wir die Anzahl der nicht bestätigten Pakete für jede Bestätigung, die wir erhalten, um eins erhöhen können.
Denken wir also darüber nach. Wir erlauben, dass die Anzahl der nicht bestätigten Pakete für jede Bestätigung, die wir erhalten, um eins erhöht wird. Also senden wir zuerst zwei Pakete als vereinbarten Start ab. Sie werden anerkannt. Wir haben also unsere erste Bestätigung. Wir erlaubten uns, zwei zu schicken. Mit dem Erhalt dieser ersten Bestätigung erhöhen wir diese um eins bis drei. So können wir jetzt drei weitere Pakete ohne weitere Bestätigung versenden. Wenn eine Bestätigung für das, was wir zuvor gesendet haben, zurückkommt, erhöhen wir diese auf vier. Dies ist als "Überlastungsfenster" bekannt. Es ist kein Fenster, das jemals in der Leitung gesendet wurde, das heißt, es ist nicht wie das Empfangsfenster, das 16 Bit des TCP-Headers enthält und angibt, wie viele Daten wir voraussenden können. Dieser ist - es ist ein Fenster. Es'
Wenn wir die Anzahl der nicht bestätigten Pakete, die wir senden dürfen, jedes Mal, wenn wir eine Bestätigung erhalten, um eins erhöhen, werden wir irgendwann ein Limit erreichen. Und das Schöne an diesem System ist, dass wir, wenn wir versuchen, Pakete schneller als das schwächste Glied zu senden, buchstäblich eine Verbindung zwischen Routern herstellen, irgendwann den Punkt finden, an dem das schwächste Glied unterbrochen wird. Es löscht die Pakete, die wir senden möchten, weil wir versuchen, sie zu schnell zu senden. Bestätigungen vom anderen Ende hören also auf, weil die Daten nicht mehr durchkommen.
Und was TCP tut, ist, wenn es nicht empfangen wurde - und dies variiert in den Strategien. Im Laufe der Zeit hat sich die Strategie, die tatsächliche Strategie zur Vermeidung von Überlastungen, stark verändert. Es gibt Namen wie Tahoe und Reno und eine ganze Reihe anderer, die Sie sehen werden, wenn Sie googeln und Wikipediaing betreiben, die genau angeben, wie sich das Verhalten verhält. Die Idee ist jedoch, dass der Absender seine Sendegeschwindigkeit schnell senkt, wenn er feststellt, dass seine Daten nicht mehr eingehen, weil ihm Bestätigungen fehlen. Normalerweise teilt es es in zwei Hälften. Es verkleinert es also dramatisch und erhöht es dann wieder.
Dies bedeutet im Wesentlichen, dass der Verlust von Paketen die Signalisierungsfunktion für "Wir können die Daten nicht schneller senden" ist und dass die TCP-Absender an jedem Ende einer Verbindung im gesamten Internet immer sozusagen "sie" sind. Sie versuchen, schneller als die maximale Geschwindigkeit zu fahren, die zwischen den beiden Endpunkten verfügbar ist, dh das schwächste Glied, wo immer dies ist, und sie schieben es immer an die Grenze. Angesichts der Tatsache, dass es irgendwo einen Punkt gibt, der schwächer ist als ihre Fähigkeit, Pakete zu senden, werden sie ihn finden, weil sie Pakete herauspumpen werden. Solange Daten gesendet werden müssen und eine Verbindung mit hoher Bandbreite besteht, erhöht der Absender die Sendegeschwindigkeit, dh die Anzahl der ausstehenden Pakete, die Pakete, die als Bestätigungen im laufenden Betrieb verfügbar sein dürfen Komm zurück, bewegt diese Zahl aggressiv weiter nach oben, bis sie zu weit gedrückt wird. Dann zieht es sich viel zurück und bewegt sich dann wieder vorwärts.
Das ist es also, was tatsächlich zwischen TCP-Verbindungen passiert, bei denen ich wahrscheinlich nicht weiß, wie viel Prozent, aber der weitaus größte Prozentsatz des Datenverkehrs im Internet erfolgt über TCP-Verbindungen. Alle unsere Betriebssysteme im Kernel, im sogenannten TCP-Stack, haben diese Zähler. Und wenn wir eine Datei senden, wenn wir eine große Datei hochladen oder eine Webseite erhalten, macht der Server am anderen Ende dasselbe. Es werden auf individueller Verbindungsbasis so viele Pakete wie möglich gepusht, die noch nicht bestätigt wurden, und die Paketrate erhöht, bis sie den Punkt erreicht, an dem sie zu versagen oder zu stottern beginnen. Dann zieht es sich zurück, um die Wiederherstellung zu ermöglichen, und beginnt dann wieder mit der Arbeit.
Und das ist eine Art Selbstdrosselsystem, das angesichts der Einschränkungen, ich meine, wirklich irgendwie funky und grob wirkt. "