Informatyka i programowanieInternet i sieci komputerowe — jak dane naprawdę docierają do celu

Większy bufor w routerze może sprawić, że Internet działa gorzej

Bufor wydaje się bezwarunkowo dobry: skoro router może przechować więcej pakietów zamiast je odrzucać, transmisja powinna być stabilniejsza. W praktyce nadmierne kolejki potrafią zatrzymać pakiety na tak długo, że opóźnienie rośnie dramatycznie — zjawisko nazywa się bufferbloat. RFC 7567 wskazuje, że utrzymywanie nadmiernie dużych kolejek powoduje niepożądane opóźnienia i zaleca Active Queue Management zamiast czekania, aż bufor całkowicie się zapełni. Dlatego domowe łącze może mieć świetny wynik pobierania, a jednocześnie podczas dużego uploadu rozmowy głosowe i gry zaczynają reagować fatalnie.

Bufor chroni przed chwilowym szczytem

Router nie może wysłać przez łącze więcej bitów na sekundę, niż ono przeniesie. Gdy pakiety nadchodzą przez chwilę szybciej, trafiają do kolejki. Mały bufor jest potrzebny, bo ruch jest naturalnie nierówny i krótkie spiętrzenia nie powinny od razu powodować strat. Problem zaczyna się wtedy, gdy kolejka potrafi pomieścić znacznie więcej danych, niż sensownie czekać może aplikacja.

Pakiet nie znika, lecz stoi

Duża kolejka może poprawić statystykę strat, ale każdy dodatkowy megabajt czekający przed wolniejszym łączem oznacza czas. Przy pełnym uploadzie pakiety odpowiedzialne za kliknięcia, głos albo potwierdzenia TCP ustawiają się za dużą porcją innych danych. Łącze może być wykorzystane niemal w stu procentach, a użytkownik ma wrażenie, że Internet „zamarł”, bo interaktywne komunikaty docierają z dużym opóźnieniem.

Przepustowość i responsywność to różne rzeczy

Test transferu mierzący megabity na sekundę może wyglądać znakomicie podczas bufferbloatu. Problemem nie jest bowiem koniecznie mała ilość przesłanych danych, lecz czas oczekiwania pojedynczego pakietu. To jeden z powodów, dla których ocena jakości łącza wyłącznie na podstawie maksymalnego downloadu jest niewystarczająca.

AQM reaguje przed pełnym przepełnieniem

RFC 7567 rekomenduje mechanizmy Active Queue Management. Zamiast przechowywać pakiety aż do fizycznego zapełnienia ogromnego bufora, router może wcześniej sygnalizować przeciążenie przez oznaczanie lub kontrolowane odrzucanie. Daje to protokołom transportowym informację, że powinny zmniejszyć tempo, zanim kolejka urośnie do rozmiaru powodującego wielkie opóźnienia.

Mniej może znaczyć szybciej

To kontrintuicyjny kompromis. Czasem wcześniejsze odrzucenie pojedynczego pakietu jest korzystniejsze niż jego długie przechowywanie wraz z tysiącami następnych. TCP potrafi reagować na stratę lub sygnał ECN, natomiast aplikacja interaktywna nie może odzyskać czasu zmarnowanego na oczekiwanie w kolejce. Projektowanie buforów polega więc na balansie, nie na maksymalizacji pojemności.

Problem jest niewidoczny przy bezczynnej sieci

Bufferbloat ujawnia się szczególnie pod obciążeniem. Gdy nikt intensywnie nie wysyła ani nie pobiera danych, kolejki są puste i ping wygląda dobrze. Dopiero równoległy transfer powoduje ich wzrost. Dlatego sensowny test responsywności mierzy opóźnienie także podczas obciążenia, a nie tylko w idealnych warunkach bez ruchu.

Najgorszy przypadek pojawia się dokładnie wtedy, gdy łącze jest najbardziej zajęte

Bufferbloat jest podstępny, bo w stanie spoczynku wszystko może wyglądać wzorowo. Pusta kolejka praktycznie nie dodaje czasu, więc ping przed rozpoczęciem transferu jest niski. Gdy jednak długi upload albo download zaczyna stale wypełniać bufor, nowe pakiety interaktywne muszą ustawić się za nagromadzonym ruchem. To dlatego użytkownik może widzieć setki megabitów na sekundę i jednocześnie mieć opóźnione kliknięcia, zacinającą się rozmowę lub niestabilną grę. RFC 7567 podkreśla, że zarządzanie kolejką powinno reagować na powstające przeciążenie, a nie tylko na całkowite zapełnienie pamięci. Dobry projekt sieci nie maksymalizuje więc pojedynczej metryki. Stara się utrzymać wysoką przepustowość bez zamieniania routera w magazyn pakietów czekających zbyt długo. Dlatego nowoczesne zarządzanie kolejkami próbuje utrzymywać ją wystarczająco krótką, by absorbować chwilowe spiętrzenia, ale nie na tyle długą, by sekundy danych stały przed interaktywnymi pakietami. W tym sensie dobry router nie tylko szybko przekazuje pakiety; musi również wiedzieć, kiedy przestać je magazynować i zacząć sygnalizować przeciążenie.

#AQM#bufferbloat#kolejki#opóźnienie#router
Źródła i weryfikacja
Otrzymuj codzienne losowe ciekawostki