CDP – młotek w skrzynce narzędziowej sieciowca

Niezależnie od rodzaju przyjętej fuchy dobry fachowiec ma zawsze przy sobie młotek. Narzędzie to proste, a jednocześnie skuteczne. Raczej niewielkie, a jakże potężne. W zasobach sieciowca świetną analogią do wspomnianego młotka jest protokół CDP – niezwykle przydatne narzędzie zarówno podczas inwestygacji problemu jak i wprowadzania nowej konfiguracji. W tym artykule bierzemy go na warsztat i sprawdzamy od środka!

Poznajmy CDP

CDP to skrót od Cisco Discovery Protocol, co od razu wskazuje na to, że jest to protokół własnościowy firmy Cisco. Działa on w warstwie drugiej modelu sieciowego ISO/OSI. Dzięki temu wystarczy, że dwa urządzenia zostaną połączone kablem i ustanowią połączenie na poziomie warstwy łącza danych, by protokół CDP mógł działać. Przytoczony kabel jest tylko uogólnieniem, ponieważ Cisco Discovery Protocol może działać niezależnie od użytego rodzaju medium przewodowego i protokołu. Jedynym wyjątkiem są subinterface’y Frame Relay w trybie multipoint, które to nie są wspierane.

Cisco Discovery Protocol jest domyślnie włączony na urządzeniach firmy Cisco. Oznacza to, że zaraz po włączeniu urządzenie obsługujące CDP będzie mogło odbierać i wysyłać wiadomości CDP na wspieranych interfejsach. Jedynym warunkiem wstępnym jest to, by interfejs obsługiwał nagłówek Subnetwork Access Protocol (SNAP), który to po prostu jest rozszerzeniem nagłówka 802.2 LLC. CDP obecnie dostępny jest w wersji drugiej, która wzbogaciła go względem pierwszej o dodatkowe informacje wymieniane między połączonymi urządzeniami.

Zastosowania CDP

Dotychczas zdjęliśmy tylko wierzchni płaszcz z protokołu CDP. Pod nim schowane są potencjalne zastosowania i zalety związane z jego używaniem. Poniżej wymieniam trzy zastosowania, które w mojej ocenie są najważniejsze i przynoszą najwięcej korzyści. Oczywiście każdy z przykładów zawiera w sobie dodatkowe cechy.

Znajdowanie sąsiadów

Głównym zastosowaniem protokołu CDP jest odnajdywanie sąsiadów w sieci. Zakładając, że urządzenia w sieci mają włączoną obsługę CDP, po zalogowaniu się na każde z nich będziemy w stanie odnaleźć jego bezpośrednich sąsiadów. Bardzo ważne jest to, że nie otrzymamy automatycznie całej topologii sieci. Protokół CDP działa na styku dwóch połączonych ze sobą urządzeń, przez co widzieć będziemy tylko sąsiadów w ramach jednej domeny kolizyjnej.

Wśród urządzeń wspierających CDP, a tym samym możliwych do odnalezienia w ramach sąsiedztwa, można wymienić między innymi:

  • Switche
  • Routery
  • WLAN kontrolery
  • Access Pointy
  • IP Phone’y

Możliwość odnajdywania sąsiadów w sieci może okazać się bardzo pomocna podczas inwestygacji problemów. Dla przykładu będąc mocno zainteresowanym znalezieniem źródła pochodzenia danego adresu MAC w sieci dowiadujemy się, że trafia on na dany Switch z urządzenia podłączonego do portu GigabitEthernet0/1. Przy użyciu protokołu CDP okazuje się, że do tego portu podłączony jest Access Point firmy Cisco. Zatem naturalnie można kontynuować inwestygację w celu potwierdzenia, że dany MAC pochodzi z sieci WLAN.

Równie skuteczna może się okazać pomoc CDP w przypadku konfiguracji nowych ustawień w sieci. Dla przykładu otrzymując zadanie zmiany VLAN-u na połączeniu od Switcha A do Switcha B wystarczy, że zalogujemy się na dowolny z nich i przy pomocy protokołu CDP dowiemy się na którym porcie podłączony jest poszukiwany sąsiad.

Często zdarza się też, że musimy rozwiązać bardzo palący problem i nie mamy czasu na przeglądanie dokumentacji sieci w celu zapoznania się z topologią. Albo co gorsze i równie możliwe – taka dokumentacja w ogóle nie istnieje! Protokół CDP pomoże nam odnaleźć się w sieci i dotrzeć chociażby od Switcha Accessowego do urządzenia w warstwie Core.

CDP przyda się także gdy chcemy wykonać dokumentację sieci i potrzebna jest nam topologia sieci. Jest to niestety zadanie manualne lub co najwyżej półautomatyczne, ale niezwykle skuteczne.

Wspomaganie negocjacji PoE

Często w sieci pojawiają się urządzenia zasilane przez PoE, np. Access Pointy i IP Phone’y. Po podłączeniu ich do Switcha PoE na portach do tych urządzeń wysyłana jest domyślna porcja mocy. Dzięki wiadomościom CDP wysyłanym przez podłączone urządzenia końcowe, a mówiąc dokładniej dzięki informacjom zawartym w tych wiadomościach, Switch może się dowiedzieć jaka dokładnie ilość mocy jest potrzebna na danym porcie. Następnie Switch może zwiększyć lub zmniejszyć moc wysyłaną do konkretnych urządzeń. W konsekwencji mamy dwa pozytywne wyniki takiego działania – urządzenia końcowe otrzymują odpowiednią dawkę energii, a Switch nie alokuje niepotrzebnie zbyt dużej ilości mocy do portów, które tego nie wymagają.

Więcej o PoE przeczytasz w dedykowanym artykule – LINK.

Wspomaganie działania SNMP

Co jeśli zależy nam na odtworzeniu topologii sieci ale ręczne sprawdzanie urządzenia po urządzeniu nie wchodzi w grę? Pomocne mogą się okazać narzędzia służące do zarządzania siecią (Network Management System – NMS), które korzystają z protokołu SNMP. A gdzie tu jest CDP? Wspomniane narzędzia zarządzające mogą odpytywać urządzenia o poszczególne obiekty w bazie CISCO-CDP-MIB. Dzięki temu poznają sąsiadów danego urządzenia, dokładne porty użyte po obu stronach połączenia, typ/model urządzenia po drugiej stronie, jego adres IP itp. Mając taką bazę wiedzy to już kwestia dobrego NMS by był w stanie odwzorować te dane w formacie graficznym.

Przykładową bazę MIB dla CDP znajdziesz tutaj – LINK.

Więcej o SNMP przeczytasz w dedykowanym artykule – LINK.

Działanie CDP

Dotychczas informacje wysyłane w ramach działania tego protokołu określałem mianem wiadomości CDP. Wiemy już natomiast, że CDP działa w warstwie łącza danych, zatem informacje wymieniane między urządzeniami zawarte są w ramkach. Jako przykład użyję jedną z próbek ruchu dostępnych na stronie Wireshark, a dokładniej mówiąc plik „SampleCaptures/cdp_v2.pcap”.

Wszystkie ramki CDP wysyłane są okresowo na adres multicast 01:00:0C:CC:CC:CC. Urządzenia z włączoną obsługą CDP odbierają ramki z takim adresem docelowym i odczytują zawarte w nich informacje. Co ważne, urządzenia nigdy nie przekazują tych ramek dalej, po odczytaniu danej wiadomości jest ona usuwana. To jest powód dla którego znani są wyłącznie bezpośrednio podłączeni sąsiedzi, a nie cała topologia sieci.

Widoczny adres docelowy w ramce CDP.
Widoczny adres docelowy w ramce CDP.

Ramki CDP wysyłane są okresowo – domyślnie jest to 60 sekund, wartość ta jest konfigurowalna. Urządzenie, które odbierze ramkę CDP, odczytuje informacje w niej zawarte i zapisuje je w specjalnie przeznaczonej do tego tabeli. Tabela ta odświeżana jest za każdym razem, gdy urządzenie otrzyma nową ramkę CDP z danego źródła. Ramka CDP zawiera także pole Time To Live (TTL), które informuje urządzenie odbiorcze jak długo przesyłana informacja powinna być składowana. TTL domyślnie wynosi 180 sekund, co jest jednoznaczne z nieodebraniem trzech kolejnych ramek CDP z rzędu.

Domyślna wartość TTL zawara w ramce CDP.
Domyślna wartość TTL zawara w ramce CDP.

Zawartość ramki CDP

Kluczowe informacje w ramce CDP zawarte są w blokach danych nazywanych Type-Length-Value (TLV). Poniższa lista przedstawia niektóre TLV, które można spotkać w ramkach CDP:

  • Address – zawiera adres IP urządzenia wysyłającego ramkę.
  • Capabilities – określa typ urządzenia i jego możliwości, np. Switch.
  • Device ID – nazwa urządzenia.
  • Energywise – zbiór informacji potrzebnych podczas negocjacji mocy przydzielanej przez PoE na danym porcie.
  • Full or Half Duplex – wskazuje skonfigurowany tryb duplex portu na którym wysyłana jest dana ramka.
  • IP Network Prefix – zawiera listę prefiksów IP do których urządzenie może wysyłać pakiety IP.
  • Location – zawiera informacje, które Switch może wysłać do urządzeń końcowych. Mogą to być np. informacje o położeniu geograficznym.
  • Native VLAN – określa VLAN przypisywany nietagowanym ramkom odebranym na danym porcie.
  • Platform – platforma sprzętowa urządzenia nadawczego.
  • Port-ID – nazwa i numer portu, z którego wysyłana jest ramka.
  • Version – zawiera informacje o oprogramowaniu używanym na urządzeniu nadawczym.
  • VTP Management Domain – nazwa domeny VTP skonfigurowanej na urządzeniu nadawczym.

Poniższy rysunek przedstawia pola TLV w przykładowej ramce CDP:

Pola TLV w przykładowej ramce CDP.
Pola TLV w przykładowej ramce CDP.

Konfiguracja CDP

CDP jest domyślnie włączone na wszystkich urządzeniach firmy Cisco. Można je wyłączyć w trybie konfiguracji globalnej w poniższy sposób:

Switch_Blue#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Switch_Blue(config)#no cdp run

Ponowne włączenie CDP globalnie można zrealizować w następujący sposób:

Switch_Blue#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Switch_Blue(config)#cdp run

CDP można też wyłączyć na konkretnym porcie:

Switch_Blue#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Switch_Blue(config)#interface GigabitEthernet 1/0/1
Switch_Blue(config-if)#no cdp enable

Ponowne włączenie na konkretnym porcie:

Switch_Blue#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Switch_Blue(config)#interface GigabitEthernet 1/0/1
Switch_Blue(config-if)#cdp enable

Możliwa jest także zmiana częstotliwości wysyłania ramek CDP (timer) oraz licznika TTL dla czasu przechowywania odebranych informacji (holdtime). Poniższe komendy zmieniają timer i holdtime na odpowiednio 30 i 90 sekund:

Switch_Blue#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Switch_Blue(config)#cdp timer 30
Switch_Blue(config)#cdp holdtime 90

CDP jest domyślnie włączone w wersji drugiej począwszy od IOS 12.0(3)T. Możliwy jest jednak powrót do wersji pierwszej w poniższy sposób:

Switch_Blue#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Switch_Blue(config)#no cdp advertise-v2

Debugowanie CDP

Przede wszystkim warto upewnić się czy CDP jest włączone. Można to zrobić przy pomocy komendy show cdp. Tak wygląda output komendy przy CDP włączonym globalnie:

Switch_Blue#show cdp
Global CDP information:
Sending CDP packets every 60 seconds
Sending a holdtime value of 180 seconds
Sending CDPv2 advertisements is enabled

Jak widzisz output zawiera informację o włączonej wersji CDP oraz wartościach timerów. Natomiast przy CDP wyłączonym globalnie output tej samej komendy prezentuje się następująco:

Switch_Blue#show cdp
% CDP is not enabled

Status CDP można też sprawdzić dla konkretnego portu używając komendy show cdp interface <nazwa_portu>. Output tej komendy przy włączonym CDP na porcie wygląda następująco:

Switch_Blue#show cdp interface GigabitEthernet1/0/1
GigabitEthernet1/0/1 is up, line protocol is up
Encapsulation ARPA
Sending CDP packets every 60 seconds
Holdtime is 180 seconds

Po wyłączeniu CDP na tym samym porcie dostaniemy poniższy output:

Switch_Blue#show cdp interface GigabitEthernet1/0/1
CDP is not enabled on interface GigabitEthernet1/0/1

Bazując na poniższej topologii sprawdzimy jak prezentują się kolejne outputy komend dotyczących CDP i jakie informacje są w nich zawarte.

Przykładowa topologia sieci.
Przykładowa topologia sieci.

W celu poznania sąsiadów urządzenia o nazwie Switch_Blue musimy się na nie zalogować i wykonać komendę show cdp neighbors. Wynik wykonania tej komendy jest następujący:

Switch_Blue#show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone,
D - Remote, C - CVTA, M - Two-port Mac Relay
Device ID Local Intrfce Holdtme Capability Platform Port ID
Switch_Yellow
Gig 1/0/3 154 S I WS-C2960S Gig 1/0/13
Switch_Green
Gig 1/0/4 176 S I WS-C3560C Gig 0/14
Switch_Red
Gig 1/0/2 163 R S I WS-C4500X Ten 1/1/2
WLC_1
Gig 1/0/5 155 H AIR-CT550 Gig 0/0/1
AP_1
Gig 1/0/1 133 T B I AIR-CAP16 Gig 0

Powyższy output zawiera podstawowe informacje na temat znalezionego sąsiada – jego nazwę, typ urządzenia, platformę sprzętową, nazwy i numery portów po obu stronach oraz licznik TTL. Możliwe jest także wyświetlenie dokładniejszych informacji. Poniższy przykład pokazuje to dla Access Pointa o nazwie AP_1:

Switch_Blue#show cdp neighbors GigabitEthernet 1/0/1 detail
Device ID: AP_1
Entry address(es):
IP address: 192.168.10.25
IPv6 address: FE80::1AE7:28FF:FED1:9E60 (link-local)
Platform: cisco AIR-CAP1602I-E-K9, Capabilities: Trans-Bridge Source-Route-Bridge IGMP
Interface: GigabitEthernet1/0/1, Port ID (outgoing port): GigabitEthernet0
Holdtime : 161 sec
Version :
Cisco IOS Software, C1600 Software (AP1G2-K9W8-M), Version 15.3(3)JC14, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2017 by Cisco Systems, Inc.
Compiled Sun 29-Oct-17 16:14 by prod_rel_team
advertisement version: 2
Duplex: full
Management address(es):
IP address: 192.168.10.25
Total cdp entries displayed : 1

Omawianą tablicę znalezionych sąsiadów można wyczyścić poleceniem clear cdp table. Zacznie się ona uzupełniać automatycznie wraz z otrzymywaniem kolejnych ramek CDP.

 Switch_Blue#clear cdp table

Oprócz tego możliwe jest także wyświetlenie statystyk CDP:

Switch_Blue#show cdp traffic
CDP counters :
Total packets output: 4860, Input: 5291
Hdr syntax: 0, Chksum error: 0, Encaps failed: 0
No memory: 0, Invalid packet: 0,
CDP version 1 advertisements output: 0, Input: 0
CDP version 2 advertisements output: 4860, Input: 5291

Zerowanie przedstawionych powyżej statystyk wykonuje się komendą clear cdp counters:

Switch_Blue#clear cdp counters

CDP należy do podstawowych narzędzi używanych przez sieciowców w topologiach opartych na urządzeniach Cisco. Przydaje się zarówno w chwili poznawania sieci jak i poszukiwania przyczyny zaistniałego problemu, a konfiguracja jest prosta i przyjemna. Mam dobrą informację dla osób, które nie mają styczności ze sprzętem Cisco lub po prostu wolą korzystać z otwartych protokołów – LLDP powinno spełnić te wymagania przy okazji nie odstając od zalet protokołu CDP.

Jak często korzystasz z CDP? Czy dostrzegasz jakieś inne zalety tego protokołu? A może wady?

🗳 Jak przydatna była ta publikacja?