Strona głównaArtykułyBuforkowanie i Zarządzanie Kolejką Aktywną: RED vs CoDel

Buforkowanie i Zarządzanie Kolejką Aktywną: RED vs CoDel

Wygląda na to, że nadmierne zwiększanie pojemności bufora routera powinno jedynie pomóc, pochłaniając nagłe skoki ruchu zamiast usuwać pakiety. Przez lata intuicja ta prowadziła producentów routerów i modemów do dodawania coraz większych buforów, a okazało się to poważnie błędne w sposób, który cichutko pogarszał opóźnienia internetowe dla milionów użytkowników, problem znany obecnie jako buforkowanie. Kiedy bufor jest zbyt duży, pakiety nie są usuwane, gdy łącze jest przeciążone; po prostu czekają w kolejce, i tak dalej, aż nadejdzie ich czas na transmisję. Kontrola zatłoczenia TCP działa tylko wtedy, gdy wykryje utratę lub, z nowszymi algorytmami, rosnące opóźnienia, więc duży bufor, który nigdy nie przepełnia się, pozwala na masową transmisję, jak np. duży pobór danych, wypełniając kolejkę megabajtami własnych pakietów, zmuszając każdy inny pakiet, w tym rozmowę wideo lub prosty żądanie strony internetowej, do czekania w tej samej ogromnej kolejce, czasami nawet na kilka sekund, mimo że podrzędne łącze ma wystarczającą ilość surowej przepustowości. Algorytmy Zarządzania Kolejką Aktywną (AQM) istnieją specjalnie po to, aby zapobiec temu poprzez celowe, proaktywne usuwanie lub oznaczanie niewielkiej liczby pakietów przed przepełnieniem się bufora, dając TCP wczesny sygnał do spowolnienia zanim opóźnienia wyhamują poza kontrolę. Ta symulacja pozwala na przesyłanie ruchów nagłych pod wpływem dużego ruchu przez bufor routera w trzech różnych regułach: naiwny tail-drop z dużym buforem, Random Early Detection (RED) i bardziej nowoczesny algorytm CoDel, a następnie bezpośrednio porównuje opóźnienia kolejek wynikające z tego w czasie, czyniąc abstrakcyjną kompromis między przepustowością a opóźnieniami konkretnym i widocznym.

mysimulator teamZaktualizowano — czerwiec 2026≈ 8 min czytania▶ Otwórz symulację

Dlaczego większe buforzy pogorszyły opóźnienia

Wyjście routera do kolejki wyjściowej służy do absorbowania krótkich pikanii, momentów, w których pakiety docierają szybciej niż łącze wychodzące może je wysłać, wygładzając ruch zamiast natychmiastowo odrzucając każde piknięcie. Naiwne podejście, zwane tail-drop, polega na kolejowaniu każdego przychodzącego pakietu do momentu, aż bufor jest całkowicie pełny, a następnie odrzucaniu wszelkich dalszych przyjazdów, dopóki przestrzeń się nie uwolni. Działa to dobrze dla naprawdę krótkich pikanie, ale w przypadku utrzymującego się przepływu dużych ilości danych, na przykład pobierania pliku przez Internet, połączenie TCP przesyłające będzie zwiększać swoją prędkość transmisji tak długo, jak tylko nie wykryje utraty pakietów, a jeśli bufor jest wystarczająco duży, pakiety mogą czekać w kolejce bardzo długi czas przed tym, że bufor faktycznie się wypełni i ostatecznie nastąpi odrzucenie. Wszyscy pakiety dzielące to samo połączenie, w tym wrażliwe na opóźnienia pakiety ruchu, takie jak rozmowa głosowa lub gra interaktywna, czekają za nim potencjalnie setek milisekund lub nawet sekund. To jest esencja bufferbloatu: bufor robi dokładnie to, do czego został zbudowany, aby uniknął odrzucania pakietów, ale w tym samym czasie cicho przekształca szybkie, o niskim opóźnieniu połączenie w takie z fatalnym opóźnieniem dla wszystkich, właśnie dlatego, że zbyt duże buforzy opóźniają sygnał utraty, na którym polega TCP, aby wiedzieć, że powinno ono spowolnić. Problem stał się powszechny ze względu na to, że tania pamięć ułatwiła producentom dodawanie dużych buforów do routerów domowych, modemów kablowych i przełączników bez dostrzegania tego konsekwencji, a termin bufferbloat został spopularyzowany około roku 2010 przez badacza Jima Gettys, który zdiagnozował dokładnie tę dynamikę na własnej sieci domowej.

Wczesne Wykrywanie (RED): Odrzucanie Przed Pełnym Wykorzystaniem

Wczesne Wykrywanie (RED), zaproponowane przez Sally Floyd i Van Jacobsona w 1993 roku, było pierwszą szeroko stosowaną odpowiedzią na tę klasę problemów, choć poprzedzało termin "bufferbloat" i zostało pierwotnie zmotywowane obawami o kolaps spowodowany przeciążeniem routerów, a nie specyficznie opóźnienia. RED stale monitoruje średnią zajętość kolejki i, zamiast czekać, aż kolejka całkowicie się zapełni, zaczyna losowo odrzucać pakiety, gdy średnia przekracza skonfigurowany minimalny próg, z prawdopodobieństwem odrzucania rosnącym liniowo wraz ze wzrostem zajętości w kierunku maksymalnego progu, po którym wszystko jest odrzucane tak jak w przypadku tail-drop. Kluczową ideą jest losowy, wczesny charakter tych odrzuceń: poprzez odrzucanie niewielkiej części pakietów z różnych przepływów przed zapełnieniem kolejki, RED daje TCP nadawcom wczesne sygnały o przeciążeniu, powodując ich ustąpienie zanim kolejka ma szansę osiągnąć swój maksymalny rozmiar, niszczący opóźnienia, i losowe odrzucanie pakietów unika zsynchronizowanego zachowania, gdzie wszystkie przepływy ustępują jednocześnie i następnie ponownie wzrastają symultanicznie. W praktyce jednak RED okazało się niezwykle trudne do prawidłowego skonfigurowania: jego progi i krzywa prawdopodobieństwa odrzucania wymagają dostrojenia w stosunku do specyficznych parametrów łącza, typowych czasów podróży z powrotem i mieszanki ruchu, a źle skonfigurowane RED mogło albo nie zapobiec bufferbloat, jeśli progi były ustawione zbyt wysoko, albo zbędnie obniżyć przepustowość, jeśli były ustawione zbyt nisko lub zbyt agresywnie, co znacznie ograniczyło jego zastosowanie w rzeczywistych warunkach pomimo dwóch dekad udoskonalenia akademickiego i wariantów.

CoDel: Bezpośrednie Zarządzanie Opóźnieniem

CoDel, skrót od Controlled Delay i opracowany przez Kathleen Nichols i Van Jacobson około 2012 roku, zastosował fundamentalnie inny podbój, który omija trudności związane z strojeniem RED. Zamiast śledzić zajętość kolejki w bajtach lub pakietach oraz wymagać administratorów, aby zgadywali odpowiednie progi dla danego połączenia, CoDel bezpośrednio mierzy czas, jaki spędza każdy pakiet w kolejce, jego czas pobytu, i porównuje go z ustalonym, małym opóźnieniem 5 milisekund domyślnie. Jeśli minimalny czas pobytu obserwowany w oknie przesuwnym utrzymuje się powyżej tego celu przez dłużej niż określony interwał, 100 milisekund domyślnie, CoDel zaczyna odrzucać pakiety, a jeśli warunek trwa, odrzuca je częściej, zgodnie z harmonogramem opartym na pierwiastku kwadratowym z liczby kolejnych interwałów wyzwalających odrzucanie, specjalnie zaprojektowanym, aby szybko zbliżyć się do współczynnika odrzucania utrzymującego opóźnienie w kolejce blisko celu bez potrzeby strojenia specyficznego dla prędkości połączenia. Ten opóźniony podbój jest elegancki, ponieważ czas pobytu w kolejce jest prawie uniwersalnym sygnałem: milisekundę opóźnienia w kolejce oznacza mniej więcej to samo dla doświadczenia użytkownika niezależnie od tego, czy podłoże połączenia jest wolnym połączeniem domowym, czy szybkim interkonektem centrum danych, na odmienny sposób niż stała liczba pakietów w kolejce, która reprezentuje znacznie różny opóźnienie w zależności od prędkości połączenia. Kluczowe jest również to, że CoDel ostrożnie rozróżnia stale pełną kolejkę, dowód na rzeczywiste, utrzymujące się zatłoczenie wymagające naprawy, od kolejki, która tymczasowo wypełnia się podczas legalnego wybuchu i następnie wypływa, wchodząc w interwencję tylko w pierwszym przypadku, co pozwala mu zachować pełną przepustowość dla dobrze zachowującego się ruchu, jednocześnie agresywnie kontrolować opóźnienia, osiągając to, czego chcieli uzyskać projektanci RED, ale mieli trudności z prawidłowym dostrojeniem.

Wymiana Przepustowości-Opóźnienia, Wizualizowana

Każda polityka AQM mierzy się tym samym fundamentalnym napięciem: albo zbyt agresywnie odrzuca pakiety, tracąc przepustowość bez potrzeby, zmuszając TCP do cofania się nawet wtedy, gdy łącze mogłoby utrzymać więcej ruchu; albo zbyt mało i za późno, co prowadzi do buforowania, blisko pełnej nominalnej przepustowości, ale z opóźnieniem kolejkowania, które sprawia, że połączenie wydaje się wolne dla wszystkiego wrażliwego na opóźnienia. Odrzucanie ogonowe z dużym buforem zajmuje jedno ucho, maksymalizując ostateczną przepustowość przy kosztach potencjalnie ogromnego opóźnienia dla wszystkich współdzielących łącze. Dobrze dostrojona polityka AQM ma na celu znalezienie znacznie bliżej punktu słodkiego, utrzymując opóźnienie kolejkowania niskie i ograniczone, jednocześnie pozwalając łączeniu działać w pobliżu pełnej wykorzystania, ponieważ dobrze zaprojektowana polityka AQM musi tylko odrzucać niewielki procent pakietów, aby odpowiednio dobrać rozmiar okna congestion TCP. Symulacja ta pokazuje to, podłączając tę samą wzorzec ruchu z krótkimi i długimi okresami, mieszając ciągły przepływ dużych ilości danych z okazjonalnymi pakietami wrażliwymi na opóźnienia, przez bufor routera uruchamiając każdą z trzech polityk i rysując opóźnienie kolejkowania w czasie dla każdej. Przy odrzucaniu ogonowym powinieneś zobaczyć opóźnienie rosnąć stale wraz z wypełnieniem bufora i pozostawać wysokie do momentu wystąpienia odrzucenia. Przy RED odrzucanie zachodzi wcześniej, a opóźnienie pozostaje w pewnym zakresie, choć może być bardziej zmienne w zależności od strojenia progu. Przy CoDel opóźnienie powinno oscylować blisko jej małej wartości docelowej przez cały czas, demonstrując bezpośrednio, dlaczego ta klasa algorytmów ma znaczenie znacznie wykraczające poza ciekawostkę akademicką, ponieważ jest to różnica między rozmową wideo, która się zawiesza, a rozmową wideo, która nie zawiesza się, działającą na tym samym fizycznym łączeniu.

Od badań do rzeczywistych sieci

Bufferbloat i jego rozwiązania AQM przemieszczały się z artykułów naukowych do realnych wdrożeń, mniej więcej w latach 2010., napędzane przede wszystkim badaniami pomiarowymi, które wykazały, że routery konsumenckie, modemy kablowe i nawet sieci komórkowe regularnie charakteryzowały się opóźnieniami kolejek na poziomie setek milisekund do kilku sekund w warunkach obciążenia, przewyższając tym samym podstawowy opóźnienie propagacji łącza. CoDel i jego udoskonalenie FQ-CoDel, które łączył kontrolowane opóźnienie z per-flow fair queuing, aby zapobiec monopolizacji kolejki przez jedną, żądliwą przepływ i wygłodzeniu innych nawet przed wdrożeniem AQM, są obecnie szeroko stosowane w podsystemie kontroli ruchu Linux jądra i dostarczane jako domyślna lub zalecana dyscyplina kolejkowania w wielu projektach oprogramowania routerów konsumenckich i open-source, w tym OpenWrt. W końcu IETF zstandardyzował CoDel i PIE, inną opóźnioną AQM opracowaną niezależnie przy Cisco z podobnymi celami, jako zalecane podejścia do walki z bufferbloatem na współczesnym internecie. Poza routerami przewodowymi ten sam fundamentalny zasadniczo princip, mierzenie i ograniczanie rzeczywistych opóźnień kolejek zamiast jedynie zajętości kolejki, wpłynął na zarządzanie buforami w stacjach bazowych komórkowych, punktach dostępowych Wi-Fi i nawet wirtualnych stackach sieciowych oprogramowania obsługujących ruch w centrach danych, gdziekolwiek współdzielone, pulsujące zasoby stanowią ten sam ukryty ryzyko, że dobrze intencjonowany bufor, wielkością zaprojektowany aby zapobiec utracie pakietów, w rzeczywistości kosztuje użytkowników znacznie więcej wrażliwości, o której naprawdę się troszczą, niż maksymalnej przepustowości, którą chcieliby osiągnąć.

Często zadawane pytania

Czym jest bufferbloat w prostych słowach?

Bufferbloat to zjawisko, w którym zbyt duży bufor sieci pozwala pakietom na długie czekanie w kolejce zamiast ich odrzucać, opóźniając sygnał, na którym polega TCP, aby spowolnić transmisję. W efekcie link o dużej przepustowości może wydawać się bolesnie zatorzony, ponieważ pakiety stoją w długiej kolejce zamiast być natychmiast odrzucone lub przekazane.

Dlaczego większy bufor nie zawsze pomaga?

Zwiększenie rozmiaru bufora zmniejsza utratę pakietów podczas szczytowych obciążeń, ale jednocześnie pozwala na znaczny wzrost opóźnienia w kolejce przed wystąpieniem jakiejkolwiek utraty. TCP zwykle tylko spowalnia swoją szybkość wysyłania w odpowiedzi na utratę lub, w nowszych wariantach, wykryte opóźnienie. Bufor, który jest zbyt duży, może prowadzić do utrzymywania się przeciążenia, podczas gdy pakiety wszystkich użytkowników utkną w długiej kolejce przez znacznie dłuższy czas zanim nadawca otrzyma sygnał, aby wycofał się.

Jak CoDel różni się od RED?

RED śledzi zajętość bufora, w bajtach lub pakietach, i wymaga od administratorów skonfigurowania progów dostosowanych do konkretnego linku, co w praktyce okazało się trudne do prawidłowego ustawienia. CoDel zamiast tego bezpośrednio mierzy czas oczekiwania pakietów w kolejce, czas pobytu, i odrzuca pakiety, aby utrzymać ten zmierzony opóźnienie blisko stałego, małego celu, w dużej mierze unikając potrzeby dostosowywania do konkretnego linku.

Czy Active Queue Management redukuje ogólną przepustowość?

Dobrze skonfigurowany AQM dąży do utrzymania przepustowości blisko pełnej pojemności łącza, jednocześnie kontrolując opóźnienia, ponieważ musi odrzucać tylko niewielką część pakietów, aby odpowiednio dobra była wielkość okna TCP. Słabo skonfigurowane AQM, szczególnie starsze konfiguracje RED, mogło poświęcić więcej przepustowości niż konieczne, co było częścią motywacji do projektowania schematów opartych na opóźnieniach, takich jak CoDel.

Gdzie CoDel jest faktycznie używane dzisiaj?

CoDel i jego wariant per-przepływowy FQ-CoDel są implementowane w podsystemie kontroli ruchu Linux jądra i stanowią domyślną lub zalecaną dyscyplinę kolejkowania w wielu projektach oprogramowania do routerów, takich jak OpenWrt. IETF również znormalizował CoDel i powiązany algorytm PIE jako zalecane podejścia do zarządzania bufferbloat w sieciach domowych, firmowych i komórkowych.

Wypróbuj na żywo

Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Bufferbloat & Active Queue Management: RED vs CoDel i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.

▶ Otwórz symulację Bufferbloat & Active Queue Management: RED vs CoDel

Co znalazłeś?

Dodaj kroki odtworzenia (opcjonalnie)