Protokół Point-to-Point (PPP)

Format ramki PPP, metody uwierzytelniania i protokoły kontroli sieci.

Wprowadzenie: Uniwersalny Kabel Połączeniowy Internetu

We wczesnych dniach internetu, podłączenie pojedynczego komputera do sieci za pomocą prostego łącza szeregowego (takiego jak modem telefoniczny lub bezpośrednie połączenie kablowe) było wyzwaniem. Pierwsze popularne rozwiązanie, SLIP (Serial Line Internet Protocol), było bardzo proste. Potrafiło wysyłać pakiety IP, ale nie miało mechanizmów wykrywania błędów, zabezpieczeń ani możliwości obsługi protokołów innych niż IP. Potrzebne było bardziej solidne i elastyczne rozwiązanie.

Tak powstał Protokół Point-to-Point (PPP). Opracowany na początku lat 90-tych, PPP stał się de facto standardem do ustanawiania bezpośredniego połączenia między dwoma węzłami sieciowymi. Pomyśl o PPP jak o uniwersalnym „inteligentnym kablu połączeniowym” do internetu. On nie tylko przesyła bity; ustanawia połączenie, uwierzytelnia użytkownika, konfiguruje ustawienia sieciowe, takie jak adresy IP, i może przenosić ruch wielu protokołów sieciowych jednocześnie. Jego solidna i modułowa konstrukcja sprawiła, że jest niezwykle trwały, a jego zasady są nadal szeroko stosowane w technologiach takich jak dla połączeń szerokopasmowych.

Warstwowa Architektura PPP

PPP to nie jest pojedynczy, monolityczny protokół. To pakiet protokołów zorganizowanych w architekturę warstwową, co nadaje mu dużą elastyczność. Składa się z trzech głównych komponentów:

  1. Protokół Enkapsulacji:

    Definiuje „kopertę” lub format do transportu pakietów danych przez łącze punkt-punkt. PPP używa struktury ramki bardzo podobnej do HDLC (High-Level Data Link Control), w tym użycia sekwencji znaczników do oznaczania początku i końca ramek oraz pola FCS do wykrywania błędów.

  2. Link Control Protocol (LCP):

    LCP jest „negocjatorem” połączenia. Zanim jakiekolwiek dane zostaną wysłane, zadaniem LCP jest ustanowienie, skonfigurowanie i przetestowanie łącza danych. Negocjuje on różne opcje, takie jak maksymalny rozmiar ramki (MRU), protokół uwierzytelniania (jeśli jest wymagany) oraz mechanizmy wykrywania typowych problemów, jak błędnie skonfigurowane łącza (np. pętla zwrotna).

  3. Network Control Protocols (NCPs):

    To rodzina protokołów odpowiedzialnych za konfigurowanie różnych protokołów Warstwy Sieci, które będą używane na łączu PPP. PPP jest niezależny od protokołu, co oznacza, że może przenosić pakiety z różnych protokołów, jak IP, IPX czy AppleTalk jednocześnie. Dla każdego używanego protokołu sieciowego musi być aktywny odpowiedni NCP. Najczęstszym NCP jest Internet Protocol Control Protocol (IPCP), który odpowiada za przydzielanie i konfigurowanie adresu IP dla połączenia, a także innych parametrów, jak adresy serwerów DNS.

Anatomia Ramki PPP

Każda informacja przesyłana przez łącze PPP, czy to dane użytkownika, czy komunikat kontrolny, jest zamknięta w ramce PPP. Struktura ta jest w dużej mierze oparta na HDLC.

  • Znacznik (Flaga) (1 bajt): Ramka zaczyna się i kończy specjalną sekwencją heksadecymalną 0x7E (binarnie 01111110). Ten unikalny znacznik działa jako niezawodny separator między ramkami. PPP używa tej samej techniki wpychania bitów co HDLC, aby zapewnić, że ten wzorzec nie pojawi się przypadkowo w danych.
  • Adres (1 bajt): Ponieważ PPP działa na łączach punkt-punkt, cel jest już znany. To pole jest zatem zbędne i prawie zawsze ustawione na adres rozgłoszeniowy 0xFF (binarnie 11111111).
  • Sterowanie (1 bajt): To pole jest również pozostałością po HDLC. PPP nie używa mechanizmów kontroli przepływu ani sekwencjonowania HDLC, pozostawiając niezawodność protokołom wyższych warstw, takim jak TCP. W rezultacie to pole jest ustalone na wartość 0x03, co oznacza nienumerowaną ramkę informacyjną.
  • Protokół (1 lub 2 bajty): Jest to jedno z najważniejszych pól. Działa jak „manifest”, informując urządzenie odbierające, jakiego rodzaju ładunek znajduje się w polu Informacja. To właśnie pozwala PPP być protokołem wieloprotokołowym. Typowe wartości to:
    • 0x0021 dla pakietu IPv4
    • 0x8021 dla pakietów IPCP (IP Control Protocol)
    • 0xC021 dla pakietów LCP (Link Control Protocol)
    • 0xC023 dla pakietów PAP (Password Authentication Protocol)
    • 0xC223 dla pakietów CHAP (Challenge-Handshake Auth Protocol)
  • Informacja (Ładunek): Tutaj znajdują się właściwe dane. Może to być wiadomość negocjacyjna LCP, pakiet uwierzytelniający lub pełny datagram IP. Długość tego pola jest zmienna, do maksimum zdefiniowanego przez , która zazwyczaj wynosi 1500 bajtów, aby pasować do MTU Ethernetu.
  • Sekwencja Kontrolna Ramki (FCS) (2 lub 4 bajty): Pole do wykrywania błędów, zazwyczaj 16-bitowe CRC (CRC-16). Nadawca je oblicza, a odbiorca weryfikuje. Jeśli wartości się nie zgadzają, ramka jest cicho odrzucana, sygnalizując błąd transmisji.

Cykl Życia Połączenia PPP: Rozmowa Krok po Kroku

Ustanowienie połączenia PPP to wielofazowy proces, w którym każda faza opiera się na poprzedniej.

  1. Faza 1: Ustanowienie Łącza (Negocjacje LCP)

    Gdy połączenie fizyczne zostanie wykryte (np. sygnał nośnej modemu), łącze wchodzi w tę fazę. Dwa urządzenia wymieniają pakiety LCP, aby wynegocjować podstawowe parametry połączenia. Jest to dialog wykorzystujący komunikaty takie jak:

    • Configure-Request: „Chciałbym skonfigurować łącze z następującymi opcjami (np. MRU 1500 bajtów, używając CHAP do uwierzytelniania).”
    • Configure-Ack (Acknowledge): „Zgadzam się na wszystkie twoje proponowane opcje.”
    • Configure-Nak (Negative Acknowledge): „Zgadzam się co do zasady, ale nie mogę zaakceptować tej konkretnej wartości (np. twoje MRU jest za duże), spróbuj ponownie z tą alternatywą.”
    • Configure-Reject: „Nie rozumiem lub nie obsługuję jednej z opcji, o które prosisz. Kontynuujmy bez niej.”

    Ta faza kończy się, gdy obie strony wyślą i odbiorą komunikat Configure-Ack. Łącze jest teraz uważane za „otwarte”.

  2. Faza 2: Uwierzytelnianie (Opcjonalnie)

    Jeśli w fazie LCP wynegocjowano uwierzytelnianie, łącze przechodzi do tej fazy. Klient musi udowodnić swoją tożsamość serwerowi, używając uzgodnionego protokołu (zwykle PAP lub CHAP). Dopiero po pomyślnym uwierzytelnieniu połączenie może być kontynuowane.

  3. Faza 3: Konfiguracja Warstwy Sieci (Negocjacje NCP)

    Gdy łącze jest ustanowione i uwierzytelnione, odpowiedni NCP rozpoczyna własne negocjacje. W przypadku połączenia internetowego jest to IPCP. IPCP klienta wysyła Configure-Request, często prosząc serwer o przydzielenie mu dynamicznego adresu IP. Serwer odpowiada za pomocą IPCP Configure-Nak zawierającego wolny adres IP, który klient następnie potwierdza własnym Configure-Request, a serwer ostatecznie wysyła Configure-Ack. Adresy serwerów DNS mogą być również negocjowane w tej fazie. Po zakończeniu fazy NCP połączenie jest w pełni operacyjne.

  4. Faza 4: Zakończenie Łącza

    Gdy połączenie nie jest już potrzebne, musi zostać elegancko zamknięte. Każda ze stron może zainicjować zakończenie, wysyłając pakiet LCP Terminate-Request. Druga strona odpowiada Terminate-Ack, a łącze logiczne jest zamykane. Po tym następuje zakończenie połączenia fizycznego (np. odłożenie słuchawki modemu).

Bezpieczeństwo w PPP: PAP kontra CHAP

PPP zapewnia dwie podstawowe metody uwierzytelniania, które drastycznie różnią się poziomem bezpieczeństwa.

PAP (Password Authentication Protocol)

PAP to bardzo prosty, dwuetapowy mechanizm uwierzytelniania. Proces jest nieskomplikowany:

  1. Klient wysyła swoją nazwę użytkownika i hasło do serwera w formie jawnego tekstu.
  2. Serwer sprawdza dane w swojej bazie użytkowników i odsyła Authentication-Ack (sukces) lub Authentication-Nak (porażka).

Ostrzeżenie dotyczące bezpieczeństwa: Ponieważ hasło jest wysyłane bez szyfrowania, PAP jest wysoce niezabezpieczony i podatny na ataki polegające na podsłuchiwaniu. Jest uważany za przestarzały i nie powinien być używany na niezaufanych łączach.

CHAP (Challenge-Handshake Authentication Protocol)

CHAP to znacznie bezpieczniejszy, trzyetapowy protokół, który nigdy nie wysyła hasła przez łącze.

  1. Serwer wysyła do klienta komunikat „Wyzwanie” (Challenge), który zawiera losową wartość.
  2. Klient bierze tę wartość z wyzwania oraz swoje tajne hasło, łączy je i oblicza jednokierunkowy (zazwyczaj przy użyciu algorytmu MD5).
  3. Klient odsyła obliczoną wartość skrótu do serwera w komunikacie „Odpowiedź” (Response).
  4. Serwer, który również zna tajne hasło klienta, niezależnie wykonuje dokładnie to samo obliczenie skrótu. Następnie porównuje swój wynik ze skrótem otrzymanym od klienta.
  5. Jeśli skróty się zgadzają, serwer wysyła komunikat „Sukces” (Success); w przeciwnym razie wysyła komunikat „Porażka” (Failure).

Kluczowe zalety CHAP: Rzeczywiste hasło nigdy nie jest przesyłane przez sieć. Wyzwanie jest losowe przy każdej próbie uwierzytelnienia, co chroni przed atakami typu replay. Serwer może również okresowo wysyłać nowe wyzwania podczas trwania połączenia, aby upewnić się, że klient nie został rozłączony i zastąpiony.

    Protokół Point-to-Point (PPP) | Teleinf Edu