Protokół DHCP
Podstawą udanej komunikacji jest poprawnie wykonana adresacja sieciowa, każde urządzenie sieciowe, aby mogło komunikować się z pozostałymi musi mieć przypisany adres IP i maskę sieci, aby uzyskać połączenie z Internetem będzie potrzebny adres bramy i serwera (bądź serwerów) DNS (DNS tak naprawdę nie jest konieczny ale jego brak sprawi, że nie będzie można wykorzystywać adresów domenowych np. uzyskanie połączenia z serwerem interia.pl się nie powiedzie ale gdy użyjemy adresu IP 217.74.72.58 już tak). Konfigurację sieciową możemy wykonać samemu ale znacznie łatwiej jest wykorzystać do tego protokół DHCP.
Na samym początku, gdy standardy sieciowe raczkowały konfigurację sieciową należało wykonać samemu. Gdy sieć była mała nie był to problem, ale wraz ze wzrostem liczby urządzeń proces ten stał się mało efektywny. Często dochodziło do pomyłek czego następstwem były kłopoty z działaniem samej sieci (duplikacja adresów IP, błędna maska itp.). Opracowano protokół BOOTP (ang. Bootstrap Protocol), który dbał o to, aby dostarczyć adresy nowo podłączanym urządzeniom. BOOTP nie był pierwszym protokołem realizującym te zadanie przed nim był protokół RARP – ang. Reverse Address Resolution Protocol, szybko jednak z niego zrezygnowano protokół uznano za nieefektywny, gdyż po prostu przyznawał adres IP bez maski oraz adresu bramy. Protokół BOOTP był pierwszym działającym rozwiązaniem problemu ręcznego przypisywania adresów, lecz jak to w życiu bywa nie ustrzeżono się błędów w implementacji tego rozwiązania. Po wprowadzeniu poprawek powstaje DHCP (ang. Dynamic Host Configuration Protocol). Po pewnym czasie całkowicie wypiera on protokół BOOTP.
Główne różnica pomiędzy protokołem BOOTP a DHCP są następujące:
- W BOOTP wykorzystywano wstępnie zdefiniowaną bazę możliwych do przypisania adresów IP (przechowywana w statycznym pliku tekstowym). W bazie definiowano powiązanie adresu MAC klienta z adresem IP. Zgłaszającemu się klientowi, który musiał być wprowadzony do bazy przekazywano zdefiniowany przez administratora adres IP. Brak powiązania uniemożliwiał wykonanie przypisania. Protokół DHCP natomiast wykorzystuje mechanizm dynamicznej alokacji adresów.
- DHCP wykorzystuje mechanizm dzierżawy (wynajęcia) możliwych do przypisania adresów IP w protokole BOOTP brak jest dzierżawy a zarezerwowane adresy IP mogą być przypisane tylko odgórnie zdefiniowanym hostom.
- BOOTP nie potrafi przekazać wszystkich informacji (przekazuje informację tylko o adresie IP, adresie bramy, masce podsieci i adresie serwera DNS), natomiast protokół DHCP obsługuje wiele różnych parametrów konfiguracyjnych.
- Protokół DHCP do prowadzenia komunikacji używa protokołu UDP, który do działania wykorzystuje port 67 oraz 68. Sam zaś protokół został zdefiniowany w dokumencie RFC 2131, a opcje konfiguracyjne protokołu zostały zawarte w dokumencie RFC 2132.
- Protokół DHCP jest protokołem warstwy aplikacji, który oprócz automatycznego przypisywania adresów IP, masek sieciowych, bram czy serwerów DNS oferuje również konfigurację: nazw domenowych, serwerów NTP (synchronizacja czasu) itp.
W sieci, obsługiwanej przez protokół DHCP można wyróżnić trzy odrębne podmioty. W tradycyjnej sieci czy to domowej czy działającej w małej firmie można wyróżnić klientów (te hosty, które potrzebują adresu IP) i serwer (odpowiedzialny za przydział adresów). Natomiast jeśli klient i serwer znajdują się w różnych podsieciach (w różnych domenach rozgłoszeniowych), niezbędny będzie pośrednik (proxy), który odpowiada za przekazanie rozgłoszeń DHCP dalej. Pośrednik pełni rolę przekaźnika, przekazuje rozgłoszenie DHCP (broadcast) pochodzące od klienta w kierunku serwera oraz przekazuje informacje zwrotne (od serwera do klienta).
Myślę, że wątpliwości ostatecznie rozwieje poniższy rysunek. W sieci 10.0.0.0/24 pośrednika nie ma, ponieważ host WindowsXP_3 ma bezpośredni kontakt z serwerem DHCP (oba komputery znajdują się w tej samej podsieci), natomiast w przypadku hosta WindowsXP_1 oraz hosta WindowsXP_2 aby możliwa była komunikacja z serwerem DHCP, kolejno routery R1 oraz R2 muszą pośredniczyć w przekazywaniu pakietów DHCP, tak więc oba routery pełnią rolę pośrednika.
Oczywiście najważniejszą funkcją serwera DHCP jest przypisanie klientowi adresacji. Do wykonania zadania wykorzystuje mechanizmy alokacji adresów:
- alokacja ręczna – to administrator przypisuje adresy IP, które mają trafić do określonego klienta, a zadaniem serwera DHCP jest dostarczenie tych adresów,
- alokacja automatyczna – serwer DHCP z wstępnie zdefiniowanej puli adresów, klientom automatycznie przypisuje na stałe statyczny adres IP. W mechanizmie tym brak jest dzierżawy adresu.
- alokacja dynamiczna – w przeciwieństwie do alokacji automatycznej, serwer zgłaszającym się klientom na pewien ustalony przez administratora czas wydzierżawia adres IP. Adresy są przypisywane z zdefiniowanej puli adresów. Adres IP, któremu czas dzierżawy minął wraca do puli dostępnych (ponownie do wykorzystania) adresów bądź gdy klient zgłasza taką potrzebę okres dzierżawy zostaje wydłużony.
Budowa pakietu DHCP
W pakiecie DHCP można wyróżnić następujące pola:
Kod operacji (OP) – rodzaj pakietu: żądanie DHCP (wartość 1) bądź odpowiedź DHCP (wartość 2),
Typ warstwy fizycznej – rodzaj wykorzystanej warstwy sprzętowej (Ethernet, IEEE 802.11, ATM ) np. 1 to Ethernet, 15 to Frame Relay a 20 to linia szeregowa,
Długość adresu sprzętowego – pole zawiera długość adresu sprzętowego (8-bitowa),
Liczba skoków – wartość wykorzystywana przez pośredników w celu odnalezienia serwera DHCP, przed wysłaniem wartość pola jest ustawiana na 0,
Identyfikator transakcji – wygenerowana wartość losowa służąca do powiązania żądania z odpowiedzią (wartość 32-bitowa),
Liczba sekund – liczba sekund jaka upłynęła, od wysunięcia pierwszego żądania bądź od prośby o odnowę dzierżawy,
Flagi – określają rodzaj ruchu sieciowego wykorzystywanego przez klienta DHCP (unicast, broadcast) np. wartość flagi ustawiona na 1 oznacza ruch rozgłoszeniowy,
Adres IP klienta – adres IP klienta, w przypadku wysunięcia żądania o adres IP pole ustawiane jest na 0 natomiast w przypadku odnowy dzierżawy umieszczany jest aktualnie wykorzystywany adres IP,
Twój adres IP – adres IP jaki oferuje nam serwer,
Adres IP serwera – pole zawiera adres IP serwera DHCP,
Adres IP bramy – pole zawiera adres IP bramy domyślnej, informacja ta m.in. jest wykorzystywana, gdy w procesie przydzielania adresu IP uczestniczą pośrednicy tak aby możliwa była komunikacja pomiędzy różnymi podsieciami,
Sprzętowy adres klienta – adres MAC klienta,
Nazwa serwera – nazwa serwera (opcjonalna), w polu tym podczas wymiany pakietów (DHCPOFFER lub DHCPACK) serwer może umieścić domenową nazwę serwera DNS,
Nazwa pliku startowego – nazwa pliku startowego używanego przez DHCP (wartość opcjonalna, gdy klient zgłasza takie żądanie w komunikacie DHCPDISCOVER),
Opcje – pola dodatkowe powodujące rozszerzenie struktury pakietu DHCP o nowe funkcje.
Proces wymiany pakietów klient – serwer
Proces wymiany pakietów DHCP odbywa się według schematu zaprezentowanego poniżej:
Najczęściej proces przypisania adresu IP odbywa się pomiędzy klientem a serwerem. Proces ten również określany jest również jako DORA tj. odkrycie (ang. Discover), oferta (ang. Offer), żądanie (ang. Request) i potwierdzenie (ang. Acknowledgment). Jak widać opiera się on na czterech pakietach.
Aby lepiej zrozumieć przebieg wymiany pakietów pomiędzy klientem a serwerem DHCP omówienie procesu przypisania adresu IP przeprowadzimy na przechwyconych pakietach.
Topologia sieciowa na której będziemy bazować została przedstawiona poniżej. Omówienie procesu DORA rozpoczniemy od komunikacji pomiędzy hostem WindowsXP_3 a serwerem DHCP (bez pośrednika) a następnie przyjrzymy się wymianie pakietów pomiędzy hostem WindowsXP_1 a serwerem DHCP (wersja z pośrednikiem).
W przedstawionym scenariuszu funkcję serwera DHCP pełni system Windows Server z zainstalowaną rolą serwera DHCP. Serwer będzie przydzielać adresy IP z puli od 10.0.0.100 do 10.0.0.200 z maską 255.255.255.0 Oprócz adresu IP serwer dostarczy hostom informację o adresie bramy – 10.0.0.2 oraz adresie serwera DNS – 10.0.0.2
Po skonfigurowaniu puli adresów serwer jest gotowy, aby pełnić rolę serwera DHCP – nikomu jeszcze nie przyznał adresu IP.
Po podłączeniu klienta i wzajemnej wymianie pakietów hostowi zostaje przypisany adres 10.0.0.100
Po sprawdzeniu konfiguracji sieciowej hosta, utwierdzamy się w przekonaniu, że cała zdefiniowana na serwerze DHCP konfiguracja została poprawnie dostarczona zgłaszającemu się hostowi.
Jak widać serwer DHCP działa prawidłowo, nastąpiła wymiana pakietów czego konsekwencją jest przypisanie parametrów sieciowych hostowi. Ale żeby proces ten zrozumieć i aby poznać jego przebieg trzeba zajrzeć nieco w głąb a mówiąc dokładniej trzeba przyjrzeć się jakie informacje zawierają poszczególne pakiety.
Wymianę pakietów DHCP inicjuje klient. Gdy host w sposób statyczny nie ma przypisanego adresu IP, rozpoczyna proces odszukania serwera DHCP. Host nie posiada żadnych ustawień, nie zna nawet adresu IP serwera, który by mu te dane dostarczył. Dlatego wysyła pakiet rozgłoszeniowy na który odpowie serwer.
Wykrywanie serwera DHCP – pakiet DHCPDlSCOVER
Komputer bez konfiguracji sieciowej zostaje podłączony do sieci. Skonfigurowane opcje nakazują użycie serwera DHCP. W tym celu wysyła pakiet rozgłoszeniowy DHCPDlSCOVER (pkt 6). Pole warstwy 2 łącza danych zostaje ustawione na broadcast (pkt 1 – ff:ff:ff:ff:ff:ff ), to samo dzieje się z polem warstwy 3 (warstwa sieciowa, pkt 4 – 255.255.255.255). Dodatkowo w polu warstwy 2 zostaje umieszczony adres MAC klienta (pkt 2 – 08:00:27:d2:ab:01) a w polu warstwy 3 źródłowy adres IP zostaje ustawiony na 0.0.0.0 (pkt 3). Jako protokołu transportu DHCP używa UDP (User Datagram Protocol). Zgłaszający się klient wysyła komunikat do serwera na port 67 (pkt 5). Został również wygenerowany identyfikator transakcji, który pozwala ze sobą powiązać kolejne pakiety (pkt 7 – 0xea045b81, jak się przekonasz wartość ta pojawia się we wszystkich następnych pakietach DHCP).
Oferta DHCP – pakiet DHCPOFFER
Gdy nasłuchujący serwer odbierze żądanie DHCP, przeszukuje swoją bazę celem odszukania wolnego adresu IP (adres ten zostanie wydzierżawiony). Po odnalezieniu adresu IP, następuje wysłanie do klienta oferty – pakiet DHCPOFFER (pkt 6). Pakiet zawiera informację o początkowej konfiguracji klienta, tj. proponowany adres IP (pkt 8 – 10.0.0.100), maska podsieci (pkt 10 – 255.255.255.0), brama domyślna (pkt 12 10.0.0.2), czas trwania dzierżawy (pkt 13 – 8 dni) oraz adres IP serwera składającego ofertę (pkt 14). Dodatkowo serwer przekazuje dane o: czasie odnowy dzierżawy (pkt 11 – 4 dni), czasie ponownego wiązania (pkt 12 – 7 dni), serwerze DNS czy usłudze nazw NetBIOS. W pakiecie jako źródłowy adres MAC zostaje umieszczony adres MAC serwera (pkt 2 – 08:00:27:16:02:b6), natomiast adresem docelowym jest adres rozgłoszeniowy (pkt 1 – ff:ff:ff:ff:ff:ff ). Zostaje również umieszczona informacja o adresie MAC klienta (pkt 9 – 08:00:27:d2:ab:01). W warstwie sieciowej jako źródłowy adres zostaje umieszczony adres serwera (pkt 3 – 10.0.0.2), natomiast adresem docelowym jest adres broadcast (pkt 4 – 255.255.255.255). Serwer wysyła do klienta pakiet UDP na port 68 (pkt 5). Pakiet zawiera ten sam identyfikator transakcji, który znajdował się w pakiecie DHCPDlSCOVER (pkt 7 – 0xea045b81). Dzięki temu mamy pewność, że pakiet ten jest faktycznie odpowiedzią na wcześniejszy pakiet żądania adresu IP)
Żądanie DHCP – pakiet DHCPREQUEST
Kiedy klient odbierze od serwera komunikat DHCPOFFER, odsyła mu komunikat DHCPREQUEST. Nadal w komunikacji pomiędzy serwerem a klientem są używane komunikaty rozgłoszeniowe (warstwa 2 – pkt 1 , warstwa 3 – pkt 2), ponieważ proces przypisania adresu IP jeszcze się nie zakończył a dodatkowo użycie broadcastu gwarantuje, że inne serwery DHCP (jeśli oczywiście takowe istnieją) dowiedzą się o przyjęciu oferty (pkt 4 – adres 10.0.0.100) przez klienta od danego serwera DHCP. Pakiet ten rozpoczyna dzierżawę adresu a w przypadku jej przedłużenia zapoczątkowuje jego odnowę. Użyty identyfikator transakcji (pkt 3 – 0xea045b81) wiąże pakiet DHCPREQUEST z poprzednimi pakietami.
Potwierdzenie DHCP – pakiet DHCPACK
Po odbiorze pakietu DHCPREQUEST serwer ustanawia dzierżawę wcześniej zaoferowanego adresu IP i jednocześnie tworzy nowy wpis ARP powiązujący adres IP z adresem MAC klienta. Zostaje odesłany (rozgłoszenie w warstwie 2 i 3 – pkt 1 oraz pkt 2), pakiet DHCPACK (pkt 4) który tak naprawdę jest duplikatem komunikatu DHCPOFFER. Po odebraniu przez klienta komunikatu DHCPACK, klient może zacząć wykorzystywać przydzielone mu przez serwer adresy IP. Użyty identyfikator transakcji (pkt 4 – 0xea045b81) wiąże pakiet DHCPACK z poprzednimi pakietami, proces dobiega końca.
Zanim adres IP zostanie użyty przez hosta, wykonuje on sprawdzenie czy nie został on użyty przez inne urządzenie (czy nie nastąpiła duplikacja adresu IP). Sprawdzenie polega na wysłaniu pakietów ARP z zapytanie – „kto używa danego adresu IP?” – w naszym przypadku zapytanie dotyczy adresu 10.0.0.100 Stąd na poniższym rysunku można zaobserwować wysłanie 3 pakietów ARP, które utwierdzają hosta w przekonaniu, że adres jest wolny. Sprawdzenie może również wykonać sam serwer DHCP przed wysłaniem pakietu oferty – DHCPOFFER
Poniżej przykład, w którym to nastąpiło zdublowanie adresu IP. Na jednym z komputerów adres IP 10.0.0.100 został przypisany statycznie natomiast drugi komputer ten sam adres IP otrzymał od serwera DHCP.
Jak można zaobserwować po poniższym zrzucie przechwyconych pakietów komputer WindowsXP_3 adres 10.0.0.100 (pkt 1) pozyskał od serwera DHCP i następnie celem sprawdzenia dostępności adresu zostały wygenerowane pakiety ARP (pkt 2) mające na celu sprawdzenie czy przypadkiem adres nie jest już wykorzystywany. Pakiety ARP potwierdzają fakt użycia adresu 10.0.0.100 (pkt 5). Host ponownie rozpoczyna negocjację adresu IP (pkt 3) po jej skończeniu komputerowi zostaje przydzielony adres IP 10.0.0.101 (kolejny wolny z puli serwera DHCP). Tym razem weryfikacja kończy się sukcesem – żadne z urządzeń nie korzysta z zaproponowanego adresu IP (pkt 4).
Proces wymiany pakietów klient – serwer, wykorzystanie urządzenia pośredniczącego
Teraz gdy omówiliśmy proces przydzielania adresu IP hostowi, który ma bezpośredni kontakt z serwerem DHCP przejdźmy do bardziej złożonej topologii a mianowicie użyjemy pośrednika, który rozgłoszenia DHCP otrzymane od klienta przekaże pod wskazany adres, czyli do serwera DHCP.
Topologia naszej testowej sieci nie zmieniła się i jest pokazana na poniższym rysunku (tak dla przypomnienia). Naszym celem będzie przypisanie adresu IP hostowi WindowsXP_1 oraz hostowi WindowsXP_2. Jak widać poniżej oba hosty znajdują się w odrębnych podsieciach (w innych niż serwer DHCP – 10.0.0.0/24), host WindowsXP_1 znajduje się w sieci 192.168.0.0/24, natomiast host WindowsXP_2 w sieci 172.16.0.0/24. Tak więc pośrednikiem dla hosta WindowsXP_1 będzie router R1 natomiast dla hosta WindowsXP_2 router R2. Oba routery zostały skonfigurowane w ten sposób, aby zapytania DHCP przekazywać pod adres IP 10.0.0.2 (i oczywiście odpowiedzi).
Oba hosty: WindowsXP_1 oraz WindowsXP_2 jak już zostało zaznaczone leżą w odrębnych, różnych podsieciach, tak więc konfiguracji wymaga również sam serwer DHCP. Na serwerze zostały skonfigurowane dwie pule adresów od x.x.x.100 do x.x.x.200 w zależności od obsługiwanej podsieci. Od tej pory serwer może przydzielać adresy IP zgłaszającym się hostom.
Do omówienia procesu wymiany pakietów będzie nam potrzebna znajomość adresów MAC interfejsów routera. Wymianę pakietów rozpatrzymy pomiędzy hostem WindowsXP_1 a serwerem DHCP (wymiana pomiędzy WindowsXP_2 a serwerem przebiega analogicznie). Tak więc na zrzucie poniżej zostały przedstawione adresy MAC interfejsów routera R1.
Ruch sieciowy został przechwycony w dwóch miejscach: na hoście WindowsXP_1 oraz na interfejsie f0/0 routera R1. Przyjęto założenie – po lewej znajduje się zrzut przechwyconych pakietów pochodzący z hosta WindowsXP_1, natomiast po prawej z interfejsu f0/0 routera R1.
Host WindowsXP_1 celem zdobycia informacji o adresie IP, zaczyna od odszukania serwera DHCP i w tym celu wysyła rozgłoszenie – pakiet DHCPDISCOVER. W polu warstwy drugiej jako adres docelowy zostaje umieszczony rozgłoszeniowy adres ff:ff:ff:ff:ff:ff (pkt 1) natomiast w polu warstwy trzeciej adres 255.255.255.255 (pkt 4). Źródłowym adresem MAC jest interfejs hosta WindowsXP_1 – pkt 2 natomiast pole adresu źródłowego IP zostaje ustawione na 0.0.0.0 (pkt 3).
Rozgłoszenie te trafia do routera R1 (interfejs f1/0), który te rozgłoszenie przekształca i wysyła pod adres serwera DHCP (10.0.0.2 – pkt 5), jako źródłowy adres IP zostaje ustawiony adres interfejsu f1/0 routera R1 (192.168.0.1 – pkt 6). Źródłowy adres MAC zostaje zastąpiony przez adres MAC interfejsu f0/0 (gdyż przez ten interfejs pakiet opuszcza router R1 – pkt 7). Adresem docelowym MAC jest adres serwera DHCP (pkt 8). W pakiecie opuszczającym router R1 pole Hops zmienia wartość z 0 na 1 (by dostać się do serwera DHCP trzeba przejść przez router – pkt 9) a także zostaje uzupełnione pole Relay agent IP address adresem IP: 192.168.0.1 (adres IP pośrednika – pkt 10). Pakiety te, stanowiące spójną komunikację pomiędzy hostem a serwerem można powiązać ze sobą, polem transakcji (Transaction ID – pkt 11).
Po otrzymaniu pakietu DHCPDISCOVER serwer odsyła pakiet oferty DHCPOFFER (pkt 1). Źródłowym adresem MAC jest adres serwera DHCP (pkt 2) natomiast docelowym adresem jest adres MAC interfejsu f0/0 routera R1 (pkt 3). Adresy IP zostają uzupełnione na podstawie informacji znajdujących się w pakiecie DHCPDISCOVER, czyli jako źródłowy adres zostaje ustawiony adres IP serwera DHCP (pkt 4) natomiast jako docelowy adres – interfejs f1/0 routera R1 (pkt 5). Pakiet zawiera ofertę dla hosta WindowsXP_1, tak więc znajdują się w nim informacje o: proponowanym adresie IP (pkt 6), masce sieciowej (pkt 7) oraz adresie bramy (pkt 8). Skąd wiadomo z jakiej puli serwer DHCP ma przydzielić parametry sieciowe? Ano wiadomo stąd, że adresem IP wysyłającym rozgłoszenie jest adres 192.168.0.1 Serwer DHCP analizując pakiet sprawdza czy posiada zdefiniowaną pulę obejmującą ten adres IP, jeśli tak zostaje oferta wysłana.
Pakiet DHCPOFFER po dotarciu do interfejsu f0/0 zostaje wysłany do klienta poprzez interfejs f1/0. W tym celu docelowy adres MAC zostaje zastąpiony adresem MAC hosta WindowsXP_1 (pkt 9) oraz źródłowym adresem MAC staje się adres MAC interfejsu f1/0 routera R1 (pkt 10). Numer transakcji pozostaje bez zmian (pkt 11).
Po otrzymaniu pakietu DHCPOFFER host odsyła pakiet DHCPREQUEST (pkt 1) Wymiana pakietu przebiega w podobnie jak w przypadku pakietu DHCPDISCOVER, host wykorzystuje adresy rozgłoszeniowe (pkt 3) natomiast pośrednik przekazuje informacje w kierunku serwera (pkt 4). Identyfikator transakcji pozostaje bez zmian (pkt 2).
Serwer po otrzymaniu pakietu DHCPREQUEST wysyła pakiet potwierdzenia DHCPACK (pkt 1) z numerem transakcji (pkt 2).
Ostatnim etapem jest sprawdzenie czy oferowany przez serwer DHCP adres 192.168.0.100 nie jest przypadkiem używany w tym celu host WindowsXP_1 rozsyła rozgłoszenie ARP.
Gdy odpowiedź na wysłany pakiet ARP nie jest udzielona, host zaczyna korzystać z przydzielonego mu adresu IP.
Fakt przydzielenia adresu IP zostaje odnotowany na serwerze DHCP.
Działanie protokołu DHCP zostało omówione 🙂 W kolejnym wpisie zajmiemy się jego konfiguracją.