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.
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.
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:
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
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.
Debugowanie
Debugowanie to niezwykle wartościowa umiejętność przy wykrywaniu błędów lub nieprawidłowo działających mechanizmów w naszej sieci, nie inaczej jest w przypadku protokołu CDP. Przeczytasz o tym w naszym darmowym NSSletterze – mailingu dla sieciowców głodnych wiedzy.
Dołączając uzyskasz dostęp również do archiwum – tematykę tego artykułu rozszerzyliśmy w NSSletterze 046. Rozwiń swoją wiedzę już teraz i zapisz się używając formularza poniżej.
Z CDP/LLDP korzystam tylko w sieciach gdzie uplinki do urządzeń mam rozproszone po różnych miejscach (wieloklatkowe biurowce w których sieć budowana jest z wielu punktów). W innym przypadku nie widzę sensu (punkt widzenia z perspektywy ISP).
Punkt widzenia z perspektywy ISP jak najbardziej mile widziany, dzięki! Komentarz złoto, ale komentujący skandal (😉)
show ip arp details
show mac address-table address
show cdp neighbors interface
W sieci \’campusowej\’ to typowy zestaw komend żeby odnaleźć switcha do którego jest podłączony jakiś host. Klikamy je na Core 😉 , namierzanie takiego SW bez CDP byłoby delikatnie mówiąc kłopotliwe . Oczywiście można też użyć jakiegoś softu jak ktoś ma wdrożony (np. Prime / ISE itp )
No raczej, Prime i ISE są bardzo wygodne w takich zastosowaniach 🙂 Ale chyba i tak każdy zaczynał od CDP ;D