Tastaturverkehr über TCP sendet eine winzige Nutzlast pro Paket: Ein einzelner Tastendruck wird zu einem Segment von einigen Dutzend Bytes, verpackt in einem 40-Byte-Header. Auf langsamen Verbindungen überschwemmt dies das Netzwerk mit Paketen, die fast keine Daten tragen – das Problem, das Nagle als Krankheit der kleinen Pakete oder des albernen Fensters bezeichnete.

Die naiven Lösungen bestehen darin, sofort zu senden (was Bandbreite verschwendet) oder zu warten, bis ein volles Segment gepuffert ist (was Latenz hinzufügt). Nagles Regel liegt zwischen beiden: ein kleines Segment offen halten und den Rest hinter dessen Bestätigung bündeln.

Das Bündeln ist natürlich, weil TCP ohnehin auf diese Bestätigung wartet; der Algorithmus macht daraus lediglich eine Regel statt eines Zufalls, und interaktive Anwendungen erhalten niedrige Latenz bei einem Bruchteil der Paketanzahl.

Ein kleines Paket senden, den Rest bis zur ACK bündeln

Ein-Byte-Pakete verschwenden die meisten ihrer Bytes für Header.

Das Bündeln hinter einer ACK fügt keine neue feste Wartezeit hinzu.

Es senkt die Paketanzahl ohne die Latenz einer Pufferung voller Segmente.

Um Verschwendung zu beheben, erlaube eine kleine Einheit und bündle den Rest hinter deren Bestätigung, wobei die Kosten durch eine Wartezeit begrenzt werden, die ohnehin bereits erfolgte.

In RFC 1122 als wichtige TCP-Anforderung spezifiziert, wurde Nagles Algorithmus in praktisch jedem TCP-Stack ausgeliefert und wurde zu einem klassischen Beispiel dafür, ein wenig Latenz gegen einen starken Rückgang der Last zu tauschen.

DEN BELEGEN FOLGEN

Die Quellen

  1. RFC 896: Congestion Control in IP/TCP Internetworks IETF · rfc-editor.org
  2. RFC 1122: Requirements for Internet Hosts - Communication Layers IETF · rfc-editor.org