Bufferbloat
# Bufferbloat

Bufferbloat (zu Deutsch etwa „aufgeblähter Puffer“) beschreibt in der Informatik das Problem unnötig stark gefüllter Puffer in der Netzwerk-Hardware wie etwa Routern. Durch Bufferbloat entsteht eine unnötige Verzögerung für die zu verarbeitenden Pakete, außerdem kann der Puffer seine Aufgabe, Lastspitzen abzufangen, womöglich nicht mehr erfüllen. Bufferbloat wurde bereits in den frühen Tagen des Internets (damals noch „Problem der vollen Puffer“) erkannt. Bereits 1989 gab es erste Vorschläge, diesem Problem zu begegnen. Mit CoDel und FQ-CoDel stehen mittlerweile zwar Warteschlangenalgorithmen zur Verfügung, welche dem Problem zumindest teilweise abhelfen. Im Großteil der kommerziell erhältlichen Router für Heimanwender sind diese allerdings noch nicht implementiert, sodass das Bufferbloat-Problem hier weiter besteht.

## Problem

In einem Computernetzwerk gibt es zahlreiche Puffer. Allein an einem Router existiert eine Vielzahl an Puffern auf den verschiedenen Ebenen die ein Paket während des Routings durchläuft. Puffer sind grundsätzlich notwendig um kurzfristige Netzüberlast (sogenannte Bursts) abzufangen. Bufferbloat tritt immer an Flaschenhals-Routern (auch: Bottleneck-Routern) auf, also Router, bei denen die Bandbreite der eingehenden Leitungen größer ist als die Bandbreite der ausgehenden Leitungen. Da die eingehenden Pakete mit einer höheren Geschwindigkeit ankommen als sie weitergeleitet werden, füllen sich die Puffer mit der Zeit, TCP erhöht in der Congestion Avoidance Phase langsam seine Senderate um die optimale Senderate zu erreichen. Dadurch wird der Puffer mit der Zeit immer weiter gefüllt und hat keine Chance seinen Pufferfüllstand abzubauen. Diese „standing queue“ ist der Bufferbloat. TCP kann das Problem nicht erkennen, da alle Pakete weiterhin ankommen und nur Paketverluste als Überlast im Netz wahrgenommen werden.

Wie in der Abbildung zu sehen, kann eine Anwendung bei leerem Puffer durch Erhöhung der Senderate zunächst den eigenen Durchsatz steigern. Diese Steigerung ist solange möglich, bis die Senderate der Anwendung exakt der Geschwindigkeit am Flaschenhals-Link entspricht. Steigert die Anwendung ihre eigene Senderate weiterhin, dann kann der effektive Durchsatz nicht mehr erhöht werden, dieser ist ja durch die Flaschenhals-Geschwindigkeit begrenzt. Allerdings erhöht sich mit jeder weiteren Steigerung der Senderate die Verzögerung für jedes folgende Paket, da im Flaschenhals-Router zunächst alle vorhergehenden Pakete aus der Warteschlange weitergeleitet werden müssen.

Das Problem wird vor allem an unkoordinierten und nicht administrierten Puffern erzeugt. Verstärkt wurde das Problem in den letzten Jahren außerdem durch günstigen Speicher und durch die Tendenz der Hersteller, den Puffer größer zu dimensionieren, um Paketverluste zu vermeiden.

Durch ständig hohen Füllstand verliert der Puffer allerdings die Möglichkeit, Paket-Bursts abzufangen. Schlimmer ist allerdings der oben beschriebene Delay. Dieser führt dazu, dass Echtzeit-Anwendungen, wie etwa Internet-Telefonie, Streaming, IoT oder Gaming gestört werden. Diese Anwendungen sind auf eine geringe Latenz angewiesen, um ihren Service in guter Qualität zu erbringen.

## Lösungsansätze

Wie oben beschrieben, wurde das Bufferbloat-Problem vor allem durch günstigen großen Speicher verschärft. Eine Lösungsmöglichkeit ist daher die Puffer extrem zu verkleinern bzw. komplett auf Puffer zu verzichten. Dies wurde in der Vergangenheit bereits erfolgreich getestet, eignet sich jedoch nur für Spezialanwendungen in Hochleistungsnetzen. Ein Beispiel für ein Netzwerk ohne Puffer war das analoge Telefonnetz. Allgemein kommt es im Internet allerdings oft zu Burst-Situationen, weshalb auf Puffer nicht verzichtet werden kann.

Moderne Router setzen deswegen auf eine aktive Pufferverwaltung. Hier werden bei zu hohem Delay nach einer gegebenen Wahrscheinlichkeitsverteilung zufällig ausgewählte Pakete am Puffer verworfen bzw. markiert. Dadurch können Sender und Empfänger feststellen, dass es zu einer Überlast am Router gekommen ist und ihre Senderate entsprechend drosseln. Die in der Praxis relevantesten Algorithmen zur aktiven Pufferverwaltung sind RED, CoDel und PIE. Für die letzten beiden Algorithmen gibt es außerdem eine Erweiterung, welche eine faire Verteilung der Warteschlangen-Kapazität (FQ) auf alle Flüsse realisiert. Diese beiden Erweiterungen heißen FQ-CoDel bzw. FQ-PIE.

