Podcast 21T37 ARP w Wireshark’u [Tego Nie Wiesz]
Więcej miejsc do posłuchania:
WERSJA TEKSTOWA:
Cześć, witam Cię w dzisiejszym odcinku mojego podcastu. Dzisiejszy temat to Protokół ARP.
Zacznijmy od powodu stosowania tego protokołu. Po co się go w ogóle stosuje? Jak zapewne wiesz komunikacja IP i komunikacja MAC są ze sobą powiązane. Są to dwie odrębne warstwy, ale muszą ze sobą jakoś współpracować. Jeżeli chodzi o adresację to najczęściej, jak parzysz na stronę komputera, to dostaje on adres z DHCP. Nie ma to akurat większego znaczenia czy jest to adres z DHCP czy adres IP jest statyczny. Dostaje adres IP. Jeżeli adres IP innego urządzenia w sieci jest lokalny, z tego samego zakresu maski adresowej i sieci, to jest potrzebna informacja na poziomie adresu MAC. Pytanie jest takie: Ja mam adres x.x.x.1, Ty masz adres x.x.x.2, jesteś w mojej sieci, ale jak mam się do Ciebie odezwać budując ramkę na poziomie warstwy drugiej, czyli na poziomie Ethernetu.
Nasz komputer wie, że adres IP jest z tej samej lokalnej sieci. Z punktu widzenia mechanizmu L2 wie, że trzeba odpytać broadcastem czy w ogóle jesteś w tej sieci. Jeśli chodzi o Ethernet założenie jest takie, że jeśli czegoś nie wiemy, to odpytujemy wszystkich w naszej sieci lokalnej. Jeżeli chodzi o adresacje IP, koncepcja jest zupełnie inna – jest to koncepcja maski i informacji na poziomie naszego lokalnego komputera, iż jesteśmy w tej samej sieci, lub odpytujemy jakąś sieć zdalną, gdzieś poza naszą lokalną siecią.
Skupmy się na razie na naszej lokalnej sieci. Więc jeżeli chodzi o adres IP, to nasz komputer szukając sąsiada, wie, że jest on w naszej lokalnej sieci. Jeżeli chodzi natomiast o adres MAC, to my tego nie wiemy. Wiemy jaki my mamy adres MAC jako komputer, ale nie wiemy jaki adres MAC ma sąsiad. Jak się o tym dowiedzieć? Tak jak już wspomniałem broadcastem. Musi on być w jakiś ustrukturalizowany sposób wysłany. Do tego właśnie służy protokół ARP. Jest on protokołem warstwy drugiej, w związku z tym mamy ramkę Ethernetową a w niej źródłowy adres MAC (sMAC) i docelowy adres MAC (dMAC). Jeżeli nie znamy adresu MAC sąsiada, to wpisujemy w polu adres dMAC, adres broadcastowy i wtedy to zapytanie idzie do wszystkich.
Wyobraźmy sobie, że jesteśmy sąsiadem i przychodzi do nas takie zapytanie. Najpierw sprawdzamy, czy ono jest do nas. Jeżeli jest w adresie dMAC, jest broadcast to oczywiście każde urządzenie go sprawdzi. Jeżeli jest tam konkretny adres MAC, to nasze urządzenie odpowie, tylko jeżeli tam będzie nasz adres MAC.
Koncentrujemy się nadal na protokole ARP. Mamy więc broadcast w zapytaniu. Przyjmujemy jako zdalna maszyna to zapytanie ARP i pytanie jest o adres IP. Tzn, że każda maszyna w ramach tego protokołu ARP i analizy, odczytuje sobie o jaki adres IP jest zapytanie. Jeżeli to jest mój adres IP, to ja wtedy ARP-em, już unicastem odpowiadam, na poziomie ramki drugiej L2 adresu MAC i Ethernetu, jaki jest mój MAC, bo ja jestem tym sąsiadem, który ma adres IP, o który pytasz. Czyli broadcastem w jedną stronę, unicastem z powrotem, jest odpytywany każdy sąsiad, przy pierwszym nawiązaniu komunikacji. Ponieważ przy odpowiedzi i powiązaniu tej informacji na stacji końcowej jest realizowany dynamiczny wpis do tablicy ARP i on w tej tablicy pozostaje, dopóki nie minie time out – nie wyłączymy urządzenia lub nie będzie ponownej komunikacji z danym hostem, wtedy ten licznik czasu jest restartowany.
ARP nam pomaga w naszej sieci lokalnej dowiedzieć się, jaki jest adres MAC dla szukanego adresu IP. Jest to powiązane z faktem, że kiedyś, co dziś jest rzadko spotykane, sieć lokalna nie musiała być w oparciu o IP, mógł to być inny protokół. Nie był potrzebny protokół ARP.
Co ciekawe, jeżeli patrzysz na IPv6 to założenie jest takie, że IP jest tak powszechne, że tą funkcjonalność dowiadywania się o adresie MAC wbudowano już bezpośrednio w IPv6 i nie ma już przy wykorzystywaniu tego protokołu takiego mechanizmu jak ARP. W ogóle zostało to zintegrowane w standardzie komunikacji IPv6. Idea odpytywania o adres MAC jest oczywiście podobna, ale nie jest to już zewnętrznym protokołem typu ARP, tylko jest to jeden z elementów IPv6.
Wracając jeszcze do scenariusza ARP. Potrzebujemy odpytywać ARP o adresy MAC nie tylko wtedy, kiedy szukamy sąsiada lokalnego, czyli mamy adres IP w naszej sieci lokalnej, ale również w przypadku, kiedy chcemy się odnieść do Internetu lub innej sieci, która jest już poza naszą siecią lokalną. Wtedy też potrzebujemy się dowiedzieć, jaki jest adres MAC, ale nie adres MAC tamtego zdalnego komputera, tylko adres MAC routera, który jest wskazany jako gateway. Dlatego, że jak widzimy adres IP, na naszym końcowym hoście, czyli na naszym komputerze, chcemy się odnieść załóżmy do Google, to oczywiście ta nazwa domenowa jest rozwiązywana na adres IP, nasz komputer widzi, że ten adres IP jest spoza naszej sieci lokalnej, więc chce wysłać pakiet do routera, który jest naszą bramą. Mamy w naszej konfiguracji IP informację, jaki adres IP jest gateway-em czyli bramą. Teraz jeżeli mamy ten adres IP, to nasz komputer potrzebuje się dowiedzieć (jeżeli używamy Ethernetu, a dziś praktycznie wszędzie tak jest) jaki jest adres MAC interfejsu naszego routera, po to, aby móc stworzyć odpowiednią ramkę Ethernetową na poziomie L2, do tego routera. W tej ramce będzie oczywiście adres sMAC naszego komputera, adres dMAC gateway-a. Na poziomie IP, będzie źródłowy IP (sIP) naszego komputera i docelowy IP (dIP) systemu Google. Więc mamy tutaj różnice pomiędzy powiązaniem dIP i dMAC w przypadku odnoszenia się do sieci WAN, czyli jakiejś sieci, poza naszą lokalną adresacją.
Mam nadzieję, że jest to wystarczająco jasno opowiedziane. Jeżeli masz jakieś pytania, zadaj je w komentarzu. Jeśli chciałbyś zobaczyć, jak wygląda szczegółowo parametr sMAC, dMAC przy odpowiedzi ARP-owej to zapraszam Cię do poniedziałkowego odcinka, gdzie pokazuje w Wireshark konkretne parametry komunikacji ARP-owej.
To tyle na dziś, dziękuję Ci za uwagę i do usłyszenia już za tydzień.






