Mechanizmy Kontroli Przepływu
Zarządzanie prędkością transmisji danych między nadawcą a odbiorcą w warstwie 2.
Wąż strażacki i lejek: Fundamentalny Problem Sieciowy
Wyobraź sobie, że próbujesz napełnić mały lejek za pomocą węża strażackiego pod wysokim ciśnieniem. Bez względu na to, jak starannie celujesz, lejek szybko się przepełni, a większość wody zostanie utracona. Ta prosta analogia oddaje istotę fundamentalnego problemu we wszystkich formach komunikacji: niedopasowania między szybkim nadawcą a wolnym odbiorcą.
W świecie sieci komputerowych zdarza się to nieustannie. Potężny, nowoczesny serwer może przesyłać dane z niewiarygodnie dużą prędkością (miliardy bitów na sekundę), podczas gdy urządzenie docelowe – być może starsza drukarka, tani czujnik IoT, a nawet komputer zajęty innymi zadaniami – może przetwarzać te dane w znacznie wolniejszym tempie. Bez mechanizmu zarządzającego tą rozbieżnością, urządzenie wysyłające po prostu zalałoby urządzenie odbierające, co prowadziłoby do masowej utraty danych i zerwania komunikacji.
Tym mechanizmem zarządzającym jest Kontrola Przepływu. Jest to zestaw zasad i procedur stosowanych w komunikacji danych w celu regulacji szybkości transferu danych między dwoma węzłami. Jej głównym celem jest zapewnienie, że szybki nadawca nie transmituje więcej danych, niż wolniejszy odbiorca jest w stanie wchłonąć i przetworzyć, zapobiegając w ten sposób utracie danych i zapewniając niezawodne połączenie. Funkcja ta jest kluczowa zarówno w , jak i w .
Źródło Problemu: Zrozumienie Buforów Odbiorczych i Przepełnień
Aby zrozumieć, jak działa kontrola przepływu, musimy najpierw przyjrzeć się, co dzieje się wewnątrz urządzenia odbierającego. Każda karta sieciowa (NIC) jest wyposażona w ograniczoną ilość dedykowanej pamięci zwanej buforem odbiorczym.
Proces wygląda następująco:
- Nadejście danych: Ramki danych docierają z łącza sieciowego z szybkością transmisji nadawcy. Karta sieciowa umieszcza te przychodzące ramki w buforze odbiorczym.
- Przetwarzanie: Główny procesor urządzenia (CPU) jest powiadamiany o nadejściu nowych danych. Następnie pobiera dane z bufora w celu dalszego przetwarzania (np. sprawdzania błędów, przekazywania do następnej warstwy sieciowej).
Problem pojawia się, gdy tempo napływu danych przekracza tempo ich przetwarzania. Jeśli nadawca transmituje ramki szybciej, niż procesor jest w stanie je pobrać z bufora, bufor zaczyna się zapełniać. Ponieważ bufor ma stały, ograniczony rozmiar, prowadzi to do stanu zwanego przepełnieniem bufora (buffer overrun lub buffer overflow).
Konsekwencja Przepełnienia: Utrata Danych
Gdy bufor odbiorczy jest pełny, wszelkie nowo przybyłe ramki nie mają gdzie się podziać. Karta sieciowa nie ma innego wyjścia, jak tylko je odrzucić. Z perspektywy nadawcy ramki te zniknęły w czarnej dziurze. Utrata danych to nie drobna niedogodność; uruchamia złożone i kosztowne mechanizmy odzyskiwania po błędach w wyższych warstwach (takie jak liczniki retransmisji i potwierdzenia TCP), co poważnie obniża przepustowość i wydajność sieci. Celem kontroli przepływu jest zapobieganie wystąpieniu tej sytuacji.
Kategorie Mechanizmów Kontroli Przepływu
Strategie kontroli przepływu można ogólnie podzielić na dwie główne kategorie w zależności od tego, jak nadawca i odbiorca koordynują swoje działania.
1. Kontrola Przepływu oparta na Sprzężeniu Zwrotnym
Jest to najczęstsze podejście. W tym modelu odbiorca aktywnie komunikuje swój status nadawcy. Nadawca dostosowuje swoją szybkość transmisji na podstawie tej wyraźnej informacji zwrotnej. Sprzężenie zwrotne może być tak proste, jak „przestań wysyłać” lub tak zaawansowane, jak „możesz wysłać jeszcze 8 ramek”. Ta dynamiczna rozmowa zapewnia, że nadawca jest zawsze świadomy możliwości odbiorcy. Protokoły takie jak TCP, HDLC i LLC Typu 2 używają kontroli opartej na sprzężeniu zwrotnym.
2. Kontrola Przepływu oparta na Szybkości
W tym modelu nie ma bezpośredniego, bieżącego sprzężenia zwrotnego od odbiorcy do nadawcy na temat stanu bufora. Zamiast tego połączenie jest ustanawiane z z góry wynegocjowaną, stałą szybkością transmisji. Nadawca po prostu zgadza się nie przekraczać tej szybkości, a odbiorca musi być skonfigurowany z wystarczającymi zasobami (np. wystarczająco dużym buforem), aby obsłużyć tę szybkość w każdych warunkach. Podejście to jest mniej dynamiczne, ale może być prostsze w przypadku aplikacji o przewidywalnym charakterze ruchu, takich jak strumieniowanie wideo o stałej przepływności. Jest bardziej powszechne w technologiach zorientowanych na połączenie, jak ATM.
Najprostsza Metoda: Stop-and-Wait
Najbardziej podstawową formą kontroli przepływu opartej na sprzężeniu zwrotnym jest protokół Stop-and-Wait. Stanowi on fundament, na którym budowane są bardziej złożone mechanizmy. Działa on niezwykle ostrożnie, ale gwarantuje brak przepełnień bufora.
Proces Stop-and-Wait
- Nadawca przesyła pojedynczą ramkę danych.
- Nadawca ZATRZYMUJE dalszą transmisję i CZEKA. Uruchamia licznik czasu.
- Odbiorca otrzymuje ramkę, przetwarza ją i, jeśli jest poprawna, odsyła do nadawcy małą ramkę kontrolną zwaną potwierdzeniem (ACK).
- Nadawca otrzymuje ACK, zatrzymuje swój licznik czasu i ma teraz pozwolenie na wysłanie następnej pojedynczej ramki. Następnie powtarza proces od kroku 2.
- Jeśli licznik czasu nadawcy wygaśnie przed otrzymaniem ACK (co oznacza, że ramka danych lub ACK została utracona), retransmituje on oryginalną ramkę.
Analiza: Doskonałe Bezpieczeństwo, Fatalna Wydajność
- Zaleta: Ten protokół jest całkowicie bezpieczny. Jest niemożliwe, aby nadawca zalał odbiorcę, ponieważ wysyła tylko jedną ramkę na raz i cierpliwie czeka na potwierdzenie przed kontynuowaniem. Jest prosty w implementacji i zrozumieniu.
- Wada: Jest niewiarygodnie nieefektywny, szczególnie na łączach o długim opóźnieniu propagacji. Nadawca spędza zdecydowaną większość czasu bezczynnie, czekając na powrót ACK od odbiorcy. Ten czas bezczynności to zmarnowana przepustowość kanału. Wyobraź sobie rozmowę, w której wypowiadasz jedno zdanie, a potem czekasz w całkowitej ciszy, aż druga osoba odpowie „Zrozumiałem”, zanim będziesz mógł powiedzieć następne zdanie.
Ilościowe Określenie Niewydajności
Wydajność Stop-and-Wait można obliczyć. Całkowity czas jednego cyklu to czas transmisji ramki plus czas potrzebny sygnałowi na dotarcie do odbiorcy i ACK na powrót. Ten dwukierunkowy czas podróży nazywa się Czasem Podróży w Obie Strony (RTT).