> ## Content Index
> Fetch the complete content index at: https://innasiec.pl/llms.txt
> Use this file to discover other available public pages before exploring further.

# Protokoły WAN - HDLC, Point-to-point protocol PPP
- URL: https://innasiec.pl/protokoly-wan-hdlc-ppp/
- Published: 2017-12-01T13:29:44.000Z
- Updated: 2024-06-24T20:32:17.000Z
- Author: Rafał Rudewicz
- Tags: #wordpress, Routing & Switching, #toc

Wykupując od dostawcy dedykowane łącze, otrzymujemy usługę w warstwie 1 modelu ISO/OSI. Twój dostawca, zgodnie z umową, zobowiązuje się do dostarczenia każdego wysłanego bitu. 

HDLC był powszechnie stosowany w technologiach WAN (połączenie klient -> ISP) jako protokół warstwy drugiej w połączeniach punkt-punkt.

Standardowa **ramka HDLC zaproponowana przez IEEE spełnia tylko kilka istotnych funkcji**. Jak każdy inny protokół warstwy łącza danych, posiada nagłówek pozwalający określić początek ramki oraz pole FCS, które pozwala określić, czy ramka nie uległa uszkodzeniu podczas transmisji.

Cisco dodało dodatkowe pole "Type", określające, jaki protokół warstwy wyższej jest używany. Pozwala to na równoczesne stosowanie dwóch różnych protokołów, np. IP w wersjach 4 i 6.

Mówiąc o łączach szeregowych, trzeba pamiętać, że nie są one udostępniane z standardowymi prędkościami znanych z interfejsów Ethernetowych. Prędkości nie są ujednolicone, istnieją dwie równoległe konwencje prędkości dostępne dla Ameryki (linia T) oraz dla Europy (linia E).

| Nazwa standardu prędkości | Prędkość wyrażona w kilobitach na sekundę |
| ------------------------- | ----------------------------------------- |
| DS0                       | 64Kbps.                                   |
| Fractional T1             | Wielokrotność 64Kbps, maksymalnie do x24. |
| DS1 (T1)                  | 1.544Mbps (24 DS0)                        |
| E1 (Europa)               | 2.048Mbps (32 DS0)                        |
| DS3 (T3)                  | 44.736 Mbps (28 DS1)                      |
| E3 (Europa)               | 34 Mbps (16 E1)                           |

### Konfiguracja HDLC

Standardowe interfejsy sieciowe nie wymagają konfiguracji warstwy pierwszej - wystarczy podłączony kabel, ani warstwy drugiej. W przypadku interfejsu administracyjnie zamkniętego może być konieczne wydanie komendy `no shutdown`. Podobnie jak w przypadku interfejsów Ethernetowych, wystarczające powinno być nadanie odpowiedniego adresu, na przykład poprzez wpisanie komendy `ip address`.

**Wchodzimy do konfiguracji interfejsu i wydajemy polecenia:**

- `ip address adres_ip mask`
- `no shutdown`

**Pozostałe polecenia są opcjonalne**, jeśli interfejs jest aktywny w warstwach pierwszej i drugiej (**up/up**), ale mogą być konieczne, jeśli interfejs jest w stanie (**up/down**):

- `encapsulation hdlc` – wymuszamy enkapsulację HDLC na interfejsie
- `clock rate` wybrana\_prędkość
- `bandwidth` wybrana\_prędkość

### PPP Point to Point protocol

Protokół PPP jest podobny do HDLC - oba są protokołami warstwy łącza danych używanymi w połączeniach szeregowych. Jednak w przeciwieństwie do HDLC, który jest standardem IEEE oraz Cisco HDLC, PPP wprowadzony w 1990 roku, posiada dodatkowe usprawnienia.

PPP, czyli Protokół Punkt-Punkt, został zdefiniowany w 1990 roku i wyposażony w kilka dodatkowych funkcji w porównaniu do swojego poprzednika, HDLC. 

### Funkcje PPP

- Definiuje nagłówek i stopkę.
- Wspiera zarówno połączenia synchroniczne, jak i asynchroniczne
- Poprzez dodanie pola "Type" w nagłówku, możliwe jest obsługiwane różnych protokołów warstwy 3 przy użyciu pojedynczego połączenia.
- Wspiera autentykację za pomocą protokołów Password Authentication Protocol (PAP) oraz Challenge Handshake Authentication Protocol (CHAP).
- Wspiera funkcję Multilink, która pozwala na grupowanie kilku interfejsów WAN w jeden logiczny, z zastosowaniem load-balancingu.
- Umożliwia detekcję błędów, pozwalając na ustalenie procentowej tolerancji dla błędów przed wyłączeniem interfejsu. Obsługuje również kompresję danych.
- Definiuje podwarstwę **Network Control Protocols (NCP)**, w której zdefiniowane są protokoły kontrolne wspierające integrację protokołów warstwy wyższej. Na przykład, dla IPv4 w PPP zdefiniowany jest IPCP, który odpowiada za połączenie między warstwą 2 i 3.

### Elementy PPP

**Ramka HDLC-podobna**

Definiuje zawartość ramki, która została stworzona na bazie oryginalnie zaproponowanej przez IEEE ramki HDLC.

**Protokół Kontroli Łącza LCP**

Subwarstwa definiują funkcje, które ułatwiają komunikację z warstwą fizyczną oraz usprawniają pracę warstwy łącza danych. Zawiera funkcje takie jak:

- **Magic number** – każdy router wysyłając ramkę umieszcza w niej swój losowo wybrany numer, jeśli otrzyma ramkę z tym numerem, ramka jest traktowana jako zapętlona, a interfejs powinien zostać automatycznie wyłączony.
- **Monitorowanie jakości łącza** – wyłącza interfejs po przekroczeniu progu tolerancji na błędy.
- **Multilink PPP** – pozwala na równoważenie ruchu poprzez kilka interfejsów połączonych ze sobą logicznie.
- **PAP lub CHAP** – wspiera autentykację.

Subwarstwa PPP definiuje kategorie protokołów, z których każdy odpowiada za komunikację z innym protokołem wartstwy sieciowej. Na przykład dla IP w wersji 4 mamy zdefiniowany IPCP, dla IP w wersji 6 IPv6CP, dla Cisco Discovery Protocol CDP mamy CDPCP.

### Autentykacja PPP

Jedną z fundamentalnych kwestii dotyczących bezpieczeństwa jest zweryfikowanie, czy druga strona naszej komunikacji jest tym, za kogo się podaje, oraz czy powinna otrzymać przesyłane do niej dane. Zazwyczaj nie jesteśmy w stanie fizycznie sprawdzić, jakie urządzenie znajduje się po drugiej stronie "kabla" i czy przypadkiem nie zostało podmienione.  
W protokole PPP mamy do dyspozycji dwie metody autentykacji drugiej strony komunikacji:

- **Password authentication Protocol - PAP**
- **Challenge Handshake Authentication Protocol - CHAP**

Oba protokoły wymieniają dane między sobą, jednak z pewnymi różnicami.  
Jedną z kluczowych różnic między tymi dwoma protokołami jest kwestia, kto inicjuje proces autentykacji.  
**W przypadku PAP jest to router, który ma zostać uwierzytelniony, natomiast w CHAP sytuacja wygląda odwrotnie - to router autentykujący stawia wyzwanie (challenge) drugiej stronie**. Kolejną różnicą jest sposób przesyłania hasła: **PAP przekazuje hasło w formie niezaszyfrowanej**, co oznacza, że każdy podsłuchujący może je odczytać, podczas gdy **CHAP korzysta z funkcji haszującej MD5.**

![Autentykacja PAP](https://innasiec.pl/content/images/2024/06/Autentykacja-WAN.webp)

**Stosowanie protokołu PAP ze względów bezpieczeństwa nie jest najlepszym rozwiązaniem w dzisiejszych czasach**. Istnieją jednak pewne wyjątki od tej zasady. PAP powinien być nadal używany w przypadku starszych urządzeń, które nie obsługują protokołu CHAP. Ponadto, gdy chcemy zasymulować proces logowania i uwierzytelniania użytkownika, konieczne jest zastosowanie PAP ze względu na jawność przekazywanych komunikatów.

```
hostname Bob
Bob(config)# username Ted password Buggie
Bob(config)# interface serial 0/0/0
Bob(config-if)# ip address 10.1.1.1 255.255.255.252
Bob(config-if)# encapsulation ppp
Bob(config-if)# ppp authentication pap
Bob(config-if)# ppp pap sent-username Bob password Fuzzy 
```

```
R2#hostname Ted
Ted(config)# username Bob password Fuzzy
Ted(config)# interface serial 0/0/0
Ted(config-if)# ip address 10.1.1.2 255.255.255.252
Ted(config-if)# encapsulation ppp
Ted(config-if)# ppp authentication pap
Ted(config-if)# ppp pap sent-username Ted password Buggie 
```

Uwierzytelnianie poprzez CHAP jest znacznie bezpieczniejsza od PAP ze względu na zastosowanie jednokierunkowej funkcji hashującej MD5\. Oznacza to, że hash jest generowany każdorazowo (jest unikatowy) i losowo. Nawet jeśli zostanie podsłuchany, nie ma możliwości na jego podstawie odtworzenia oryginalnych danych do logowania ani ich ponownego wykorzystania.

❗

PAP i CHAP działają w subwarstwie LCP. Jeśli proces uwierzytelniania nie powiedzie się, LCP pozostanie zamknięte.

```
R1#hostname Bob
Bob(config)# username Ted password Buggie
Bob(config)# interface serial 0/0/0
Bob(config-if)# ip address 10.1.1.1 255.255.255.252
Bob(config-if)# encapsulation ppp
Bob(config-if)# ppp authentication chap
```

```
R2#hostname Ted
Ted(config)# username Bob password Buggie
Ted(config)# interface serial 0/0/0
Ted(config-if)# ip address 10.1.1.2 255.255.255.252
Ted(config-if)# encapsulation ppp
Ted(config-if)# ppp authentication chap
```

![](https://innasiec.pl/content/images/2024/06/uwierzytelnianie_wan_chap.webp)

### Co to jest Multilink?

Multilink PPP jest użyteczną funkcją w ramach protokołu PPP w sytuacji posiadania co najmniej dwóch równoległych interfejsów sieciowych pomiędzy dwoma urządzeniami. 

Dzięki MLPPP możliwe jest połączenie tych fizycznych interfejsów w jeden interfejs logiczny. Przede wszystkim, umożliwia to zwiększenie przepustowości między urządzeniami, jednocześnie redukując skomplikowanie połączeń w warstwie 3 sieci. Dodatkowo, **MLPPP wprowadza mechanizm rzeczywistego balansowania obciążenia**, polegający na podziale ramek na mniejsze jednostki, które są wysyłane równocześnie przez wiele interfejsów i ponownie składane na urządzeniu docelowym.

**Bez zastosowania MLPPP, konieczne byłoby przydzielenie osobnych podsieci dla każdego indywidualnego łącza**, co skutkowałoby dodatkowymi relacjami sąsiedztwa w protokołach routingu oraz koniecznością wprowadzenia dodatkowych wpisów tras o równoważnym priorytecie. 

![Multilink PPP pomiędzy dwoma routerami](https://innasiec.pl/content/images/2024/06/multilink_ppp.webp)

### Konfiguracja Multilink

```
Bob(config)# interface serial 0/0
Bob(config-if)# encapsulation ppp
Bob(config-if)# ppp multilink group 1
Bob(config)# interface serial 0/1
Bob(config-if)# encapsulation ppp
Bob(config-if)# ppp multilink group 1
Bob(config)# interface multilink 1
Bob(config-if)# ip address 10.1.1.1 255.255.255.252
Bob(config-if)# encapsulation ppp
Bob(config-if)# ppp multilink
Bob(config-if)# ppp multilink group 1
```

```
Ted(config)# interface serial 0/0
Ted(config-if)# encapsulation ppp
Ted(config-if)# ppp multilink group 1
Ted(config)# interface serial 0/1
Ted(config-if)# encapsulation ppp
Ted(config-if)# ppp multilink group 1
Ted(config)# interface multilink 1
Ted(config-if)# ip address 10.1.1.2 255.255.255.252
Ted(config-if)# encapsulation ppp
Ted(config-if)# ppp multilink
Ted(config-if)# ppp multilink group 1
```

### Weryfikacja konfiguracji Multilink

W celu zweryfikowania poprawnego działania multilinku można sprawdzić jego konfigurację zarówno jako interfejsu logicznego, jak również zweryfikować konfigurację jako elementu protokołu punkt-punkt. Na koniec warto również upewnić się, czy fizyczne interfejsy składowe są poprawnie podniesione (stan up/up).

```
Bob#show interfaces multilink 1
Multilink1 is up, line protocol is up
  Hardware is multilink group interface
  Internet address is 10.1.1.1/30
  MTU 1500 bytes, BW 3088 Kbit/sec, DLY 100000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation PPP, LCP Open, multilink Open
  Open: IPCP, CDPCP, loopback not set

Bob#show ppp multilink

Multilink1, bundle name is Ted
  Endpoint discriminator is Ted
  Bundle up for 00:46:33, total bandwidth 3088, load 1/255
  Receive buffer limit 24000 bytes, frag timeout 1000 ms
    0/0 fragments/bytes in reassembly list
    0 lost fragments, 1 reordered
    0/0 discarded fragments/bytes, 0 lost received
    0x6A received sequence, 0x70 sent sequence
  Member links: 2 active, 0 inactive (max not set, min not set)
    Se1/1, since 00:46:34
    Se1/0, since 00:46:33

Bob#show ip interface brief
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            unassigned      YES unset  administratively down down
FastEthernet0/1            unassigned      YES unset  administratively down down
Serial1/0                  unassigned      YES unset  up                    up
Serial1/1                  unassigned      YES unset  up                    up
Serial1/2                  unassigned      YES unset  administratively down down
Serial1/3                  unassigned      YES unset  administratively down down
Multilink1                 10.1.1.1        YES manual up                    up
```