Czym jest HDLC?
High-Level Data Link Control (HDLC) to protokół warstwy łącza danych, czyli warstwy 2 modelu OSI. Określa format ramek i procedury wymiany danych na jednym łączu między urządzeniami, na przykład między routerami po linii dzierżawionej. Zakres niezawodnego dostarczania zależy od użytej klasy procedury i trybu pracy.
Jego głównym celem jest umieszczenie pakietu z warstwy sieci w standardowej strukturze zwanej ramką. Ramka zawiera dane, adres, pole sterujące i sekwencję kontrolną do wykrywania błędów. Procedury HDLC obsługują łącza punkt-punkt i wielopunktowe, a rozwiązania wywodzące się z HDLC wykorzystano między innymi w PPP, Frame Relay i ISDN. Klasa procedury określa między innymi sposób numerowania ramek, potwierdzania oraz obsługi błędów.
Stacje i tryby pracy
Przed analizą ramki trzeba rozróżnić role urządzeń, nazywanych stacjami, oraz tryby pracy łącza HDLC.
Typy stacji
- Stacja pierwotna (primary): Kontroluje działanie łącza, wydaje polecenia, inicjuje transfer danych i obsługuje procedury odzyskiwania po błędach.
- Stacja wtórna (secondary): Działa pod kontrolą stacji pierwotnej. Wysyła odpowiedzi na jej polecenia, a w trybie NRM nadaje po odpytywaniu.
- Stacja połączona (combined): Łączy funkcje stacji pierwotnej i wtórnej. Może wysyłać oraz odbierać polecenia i odpowiedzi, dzięki czemu obie stacje mogą działać jako równorzędni partnerzy.
Tryby pracy
- Tryb normalnej odpowiedzi (NRM, Normal Response Mode): Niezrównoważona konfiguracja dla łączy wielopunktowych. Obejmuje jedną stację pierwotną i co najmniej jedną stację wtórną. Stacja wtórna nadaje dopiero po odpytywaniu, czyli po otrzymaniu pozwolenia od stacji pierwotnej.
- Tryb asynchronicznej odpowiedzi (ARM, Asynchronous Response Mode): Inny tryb niezrównoważony. Pozwala stacji wtórnej inicjować transmisję bez oczekiwania na odpytanie. Stacja pierwotna zachowuje kontrolę nad zestawieniem łącza i procedurami odzyskiwania po błędach.
- Tryb asynchroniczny zrównoważony (ABM, Asynchronous Balanced Mode): Stosuje dwie stacje połączone działające jako równorzędni partnerzy, szczególnie na łączach punkt-punkt. Każda stacja może inicjować transmisję bez osobnego pozwolenia drugiej, co wspiera komunikację pełnodupleksową.
Budowa ramki HDLC
HDLC umieszcza dane i komunikaty kontrolne w określonej strukturze zwanej ramką. Każde pole ma funkcję zdefiniowaną przez wybraną procedurę. Kolejność pól jest stała dla danego formatu, a flagi oddzielają ramki w strumieniu.
- Znacznik (flaga) (8 bitów): Ramka zaczyna się i kończy sekwencją:
01111110. Flaga jest ogranicznikiem, który pozwala wykryć początek i koniec ramki w strumieniu bitów. Jedna flaga może jednocześnie oznaczać koniec jednej ramki i początek następnej. - Adres (8 lub 16 bitów): W podstawowym formacie pole ma 8 bitów, a format rozszerzony może używać 16 bitów lub większej liczby bitów. Pole identyfikuje stację docelową. Na łączu punkt-punkt może mieć ustaloną wartość, natomiast w konfiguracji wielopunktowej wskazuje jedną ze stacji wtórnych. W procedurach obsługujących rozgłaszanie wartość złożona z samych jedynek może pełnić funkcję adresu rozgłoszeniowego.
- Sterowanie (8 lub 16 bitów): Pole określa funkcję ramki i może zawierać numery sekwencyjne używane do kontroli przepływu oraz błędów. Wyróżnia się ramki informacyjne (I), nadzorcze (S) i nienumerowane (U), rozpoznawane na podstawie początkowych bitów pola.
- Informacja (zmienna długość): Pole przenosi dane z wyższej warstwy, zazwyczaj pakiet z warstwy sieci, na przykład pakiet IP. Występuje w ramkach informacyjnych i w niektórych ramkach nienumerowanych. Długość może zmieniać się do wynegocjowanego maksimum.
- Sekwencja kontrolna ramki (FCS) (16 lub 32 bity): Pole służy do wykrywania błędów. Nadawca oblicza wartość algorytmu dla pól adresu, sterowania i informacji. Odbiorca wykonuje analogiczne obliczenie. Niezgodność wyników oznacza uszkodzenie ramki, która zostaje odrzucona. Długość FCS i użyty wielomian są częścią formatu wybranej procedury.
Wstawianie bitów
Gdy sekwencja znacznika 01111110 pojawi się w danych użytkownika, odbiornik mógłby potraktować ją jako koniec ramki. HDLC stosuje wtedy technikę wstawiania bitów (bit stuffing, zero-bit insertion). Wstawianie dotyczy danych między flagami, więc sam ogranicznik nadal wyznacza granicę ramki.
- Działanie nadawcy: Nadajnik analizuje strumień danych między flagami. Po wykryciu pięciu kolejnych jedynek automatycznie wstawia przed wysłaniem dodatkowy bit 0.
- Działanie odbiorcy: Odbiornik analizuje strumień. Po pięciu kolejnych jedynkach usuwa następujące 0, jeśli należy ono do wstawionych bitów danych. Flagę rozpoznaje jako ogranicznik
01111110na granicy ramki. Nie usuwa jej końcowego zera jako wstawionego bitu. Inne sekwencje mogą oznaczać przerwanie albo błąd zgodnie z procedurą.
Mechanizm sprawia, że w poprawnie zakodowanych danych sekwencja znacznika nie występuje jako niezamierzony fragment ramki. Odbiornik może zachować przezroczystość danych po usunięciu wstawionych zer.
Pole sterujące i typy ramek
Pole sterujące ma 8 bitów w formacie podstawowym i 16 bitów w formacie rozszerzonym. Jego struktura określa funkcję ramki.
Ramki Informacyjne (I-frames)
Ramki I przenoszą dane użytkownika z warstwy sieci. Pole sterujące zaczyna się od 0. Numery nadania i odbioru pozwalają potwierdzać dane oraz zachować ich kolejność, jeśli wybrana procedura to obsługuje.
- N(S) - numer sekwencyjny nadania: 3-bitowy numer sekwencyjny ramki wychodzącej. Pole ma 8 wartości (), lecz w podstawowym trybie modulo 8 maksymalny rozmiar okna wynosi 7, aby odróżnić ramki nowe od powtórzonych. Format rozszerzony używa 7 bitów, numeracji modulo 128 i maksymalnego okna 127.
- N(R) - numer sekwencyjny odbioru: 3-bitowy numer sekwencyjny potwierdzający odebrane ramki. Wskazuje numer następnej ramki oczekiwanej przez stację, więc niejawnie potwierdza ramki do N(R)-1. Jest elementem mechanizmu okna przesuwnego HDLC. W formacie rozszerzonym N(R) również ma 7 bitów.
- Bit P/F - Poll/Final: W trybach niezrównoważonych stacja pierwotna ustawia go na 1 w poleceniu odpytania stacji wtórnej. Stacja wtórna ustawia go na 1 w ostatniej ramce odpowiedzi, sygnalizując jej zakończenie. W trybie zrównoważonym znaczenie P/F wynika z tego, czy ramka jest poleceniem, czy odpowiedzią.
Ramki Nadzorcze (S-frames)
Ramki S służą do kontroli przepływu i błędów. Nie przenoszą danych użytkownika. Pole sterujące zaczyna się od 10. Zawierają numer N(R), który może potwierdzać wiele kolejnych ramek.
- Typ (2 bity): Definiuje funkcję ramki S:
- Receive Ready (RR): Potwierdza odebrane ramki do N(R)-1 i wskazuje gotowość na przyjęcie kolejnych.
- Receive Not Ready (RNR): Potwierdza odebrane ramki, ale nakazuje nadawcy tymczasowe wstrzymanie transmisji (kontrola przepływu).
- Reject (REJ): Negatywne potwierdzenie żądające retransmisji ramek od N(R), czyli od pierwszej brakującej ramki.
- Selective Reject (SREJ): W procedurach, które go obsługują, żąda retransmisji wybranej ramki wskazanej przez numer sekwencyjny.
- N(R) - Numer Sekwencyjny Odbioru: Taka sama funkcja jak w ramkach I, służy do potwierdzania danych.
Ramki Nienumerowane (U-frames)
Ramki U są używane do celów zarządzania łączem, takich jak ustanawianie i zakańczanie połączeń. Nie posiadają numerów sekwencyjnych. Pole sterujące zaczyna się od 11. W zależności od procedury mogą przenosić informacje zarządzające oraz ustanawiać tryb pracy łącza.
Popularne ramki U to:
- SABME (Set Asynchronous Balanced Mode Extended): Polecenie ustanowienia łącza HDLC w trybie ABM z rozszerzonymi (7-bitowymi) numerami sekwencyjnymi.
- DISC (Disconnect): Polecenie zakończenia łącza logicznego.
- UA (Unnumbered Acknowledgment): Odpowiedź używana do potwierdzenia przyjęcia polecenia U, takiego jak SABME lub DISC.