Łącze danych

Mechanizmy Kontroli Przepływu

Zarządzanie prędkością transmisji danych między nadawcą a odbiorcą w warstwie 2.

Niedopasowanie szybkości nadawcy i odbiorcy

Kontrola przepływu jest potrzebna, gdy szybkość nadawania przekracza szybkość odbioru lub przetwarzania danych. Odbiornik może przyjmować dane wolniej z powodu ograniczonej przepustowości łącza, obciążenia procesora albo niewielkiego bufora. Bez ograniczenia tempa nadawca doprowadza do gromadzenia danych po stronie odbiorczej.

Serwer może wysyłać dane szybciej, niż odbiornik może je przyjmować i przetwarzać. Odbiornikiem może być starsza drukarka, tani czujnik IoT albo komputer zajęty innymi zadaniami. Gdy urządzenie nie sygnalizuje dostępnego miejsca w buforze, kolejne ramki mogą zostać odrzucone.

Tym mechanizmem jest Kontrola Przepływu. Zestaw zasad i procedur reguluje szybkość transferu między dwoma węzłami. Celem jest dopasowanie tempa nadawania do ilości danych, którą odbiornik może przechować i przetworzyć. W warstwie łącza mechanizm działa między sąsiednimi węzłami, natomiast w warstwie transportowej TCP używa okna odbiorczego do ograniczenia danych wysyłanych do hosta docelowego. Kontrola przepływu opisuje możliwości odbiorcy, podczas gdy kontrola przeciążenia odnosi się do obciążenia całej sieci. oraz realizują tę funkcję na różnych zakresach.

Bufor odbiorczy i jego przepełnienie

Karta sieciowa (NIC) ma ograniczoną ilość dedykowanej pamięci zwanej buforem odbiorczym. Bufor przechowuje ramki do czasu ich pobrania przez urządzenie.

Odbiór obejmuje dwa etapy:

  1. Nadejście danych: Ramki danych docierają z łącza sieciowego z szybkością transmisji nadawcy. Karta sieciowa umieszcza te przychodzące ramki w buforze odbiorczym.
  2. 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 pobiera je z bufora, bufor zaczyna się zapełniać. Ograniczona pojemność prowadzi wtedy do stanu zwanego przepełnieniem bufora (buffer overrun lub buffer overflow).

Skutek przepełnienia: utrata ramek

Gdy bufor odbiorczy jest pełny, nowe ramki nie mają miejsca i karta sieciowa je odrzuca. Nadawca może wykryć utratę dzięki mechanizmom wyższej warstwy, na przykład timerom retransmisji i potwierdzeniom TCP. Retransmisje zwiększają ruch oraz zmniejszają użyteczną przepływność. Kontrola przepływu ogranicza liczbę ramek trafiających do zapełnionego bufora. W protokołach z oknem odbiornik może ogłosić rozmiar dostępnego okna, a wartość zero wstrzymuje zwykłą transmisję do czasu zwolnienia miejsca. TCP stosuje także sondowanie zerowego okna, aby wykryć jego ponowne otwarcie.

Dwie strategie kontroli przepływu

Strategie kontroli przepływu różnią się sposobem koordynacji nadawcy z odbiorcą. Mechanizmy mogą korzystać ze sprzężenia zwrotnego od odbiorcy albo narzucać skonfigurowany wcześniej limit szybkości nadawania.

1. Kontrola ze sprzężeniem zwrotnym

Odbiorca przekazuje nadawcy informację o gotowości albo rozmiarze dostępnego okna. Nadawca dostosowuje do niej tempo transmisji. Informacja może oznaczać „przestań wysyłać” albo „możesz wysłać jeszcze 8 ramek”. W oknie przesuwnym potwierdzenie zwalnia miejsce na kolejne ramki, a numeracja pozwala rozpoznać kolejność. Rozmiar okna może być wyrażony w ramkach albo w bajtach, zależnie od protokołu. TCP, HDLC i LLC typu 2 używają mechanizmów opartych na takim sprzężeniu.

2. Kontrola z limitem szybkości

Nadawca stosuje limit uzgodniony podczas ustanawiania usługi albo połączenia, dzięki czemu odbiorca może przygotować zasoby dla określonego ruchu. Sam limit nie przekazuje bieżącego stanu bufora. W ATM kontrakt ruchowy opisuje parametry źródła i warunki zgodności ruchu, a kształtowanie ogranicza wysyłanie do ustalonego profilu. ATM definiuje też funkcje sprzężenia zwrotnego, dlatego stanowi przykład użycia parametrów szybkości, lecz nie czystej klasy bez informacji zwrotnej.

Stop-and-Wait: jedna ramka w toku

Najprostszą formą kontroli przepływu opartej na sprzężeniu zwrotnym jest protokół Stop-and-Wait. Ogranicza on liczbę niepotwierdzonych ramek do jednej. Wariant z potwierdzeniami i retransmisją łączy kontrolę przepływu z mechanizmem odzyskiwania po błędach.

Przebieg Stop-and-Wait

  1. Nadawca przesyła pojedynczą ramkę danych.
  2. Nadawca ZATRZYMUJE dalszą transmisję i CZEKA. Uruchamia licznik czasu oczekiwania.
  3. Odbiorca otrzymuje ramkę, przetwarza ją i, jeśli jest poprawna, odsyła do nadawcy małą ramkę kontrolną zwaną potwierdzeniem (ACK).
  4. 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.
  5. Jeśli licznik czasu nadawcy wygaśnie przed otrzymaniem ACK, co oznacza utratę ramki danych lub ACK, wariant niezawodny retransmituje oryginalną ramkę. Numery sekwencyjne pozwalają odbiorcy rozpoznać powtórzenie, gdy pierwotna ramka dotarła, lecz zaginęło potwierdzenie.

Zalety i ograniczenia Stop-and-Wait

  • Zaleta: Jedna niepotwierdzona ramka ogranicza ilość danych oczekujących u odbiorcy. Mechanizm jest prosty do implementacji i analizy, a jego stan łatwo opisać za pomocą timera i potwierdzenia.
  • Wada: Na łączach z dużym opóźnieniem nadawca czeka na ACK zamiast wysyłać kolejne ramki. Czas oczekiwania zmniejsza wykorzystanie kanału. Przy dużym RTT pojedyncza ramka zajmuje łącze tylko przez krótki fragment cyklu, a pozostały czas przypada na oczekiwanie.

Obliczenie wykorzystania łącza

W uproszczonym modelu czas jednego cyklu obejmuje transmisję ramki (Ttx)(T_{tx}) oraz czas od zakończenia tej transmisji do odebrania ACK. Ten drugi składnik oznaczono jako Czas Podróży w Obie Strony (RTT). Wartość RTT obejmuje drogę do odbiorcy i powrót potwierdzenia, a w praktyce także opóźnienia przetwarzania. Wzór pomija czas transmisji ACK i ewentualne oczekiwanie po błędzie.

W tym modelu kanał służy do transmisji danych tylko podczas (Ttx)(T_{tx}). Wykorzystanie łącza (U)(U) wynosi:
U=TtxTtx+RTTU = \frac{T_{tx}}{T_{tx} + RTT}
Model opisuje pojedynczą ramkę i zakłada poprawne potwierdzenie. Dla przykładowego łącza satelitarnego przyjmijmy RTT równe 500 milisekund i czas transmisji ramki równy 1 milisekundzie. Po wyrażeniu obu czasów w milisekundach wykorzystanie wynosi 1/(1+500)≈0.2%1 / (1 + 500) \approx 0.2\% . Kanał pozostaje bezczynny przez 99.8% czasu. Metody okna przesuwnego pozwalają wysłać wiele ramek przed oczekiwaniem na ACK.

Powiązane artykuły