IP - jak to ugryźć.
14.07.2011 11:38
Hej.
Ostatnio kilka osób zwracało się do mnie z prośbą o wytłumaczenie o co chodzi w tym całym IP. Głównie pytali po co się daje jakieś maski, bramy i inne badziewia i w jaki sposób można sprawdzić czy adresy są w tej samej sieci. W zasadzie nie jest to skomplikowane, ponadto jest też trochę kalkulatorów, które sprawdzają czy dwa podane adresy są w tej samej sieci czy też nie. Ale to ani trochę nie pomaga zrozumieć zapaleńcom głodnym wiedzy o co chodzi, więc powielę to co jest już w sieci ale nie wiem czy w taki sam sposób ;)
Co jest potrzebne? Karta papieru, ołówek/długopis i ewentualnie kalkulator. Będzie klasycznie, jak w szkole ;)
Wybierzmy sobie jakąś przykładową parę adresów, powiedzmy 214.51.216.55/20 oraz 214.51.156.223/20.
Na pierwszy rzut oka są podobne, ale co to wszystko zawarte w nich oznacza? Rozłóżmy pierwszy z adresów na normalny dziesiętny system, czyli zapiszemy go w bardziej przystępnej formie dla celów edukacyjnych. (powyższe zapisy są w notacji CIDR)
214.51.216.55/255.255.240.0
Mamy tutaj adres IP hosta/podsieci oraz maskę. Jak zabrać się za maskę i dlaczego raz jest napisane /20 a raz /255.255.240.0? Otóż jest to dokładnie to samo. Rozpiszmy wszystko binarnie:
255.255.240.0 = 11111111.11111111.11110000.00000000
Explanation: Każdy adres IPv4 składa się od zawsze z 4 oktetów, czyli czterech sekcji, w których znajduje się 8 bitów. 4 sekcje po 8 bitów daje nam 32 bity. Notacja, która jest używana powszechnie w tej chwili została wprowadzona w celu ułatwienia życia. Explanation2: Policzcie ile jest jedynek. 20? Bardzo dobrze. Więc: /20 po adresie IP w notacji CIDR oznacza, że pierwsze 20 bitów jest zarezerwowanych, a pozostałe 12 bitów jest adresem hosta/podsieci. Analogicznie jeśli maska jest /24 to pierwsze 24 bity są zarezerwowane a pozostałe 8 to adresy hostów.
Idźmy dalej. Tutaj przyda się umiejętność przeliczania systemu dziesiętnego na binarny. Pokrótce wytłumaczę jeden ze sposobów:
adres IP: 214.51.216.55 - przeliczymy pierwszy oktet (pierwszy człon adresu IP) na system binarny 128|64|32|16|8|4|2|1 _1 |1 |0 |1 |0|1|1|0 Nie wiem na ile to jest czytelne ale: Jeden ze sposobów radzi aby zapisać sobie na kartce osiem liczb: 128 64 32 16 8 4 2 1 zabawa polega na sumowaniu kolejnych liczb tak, aby na koniec dały nam 214. Więc 128+64=192. Za mało, ale mieści się, więc pod 128 i 64 wpisujemy wartość 1 (prawda) 192+32=224. Ups, za dużo. Pod 32 wpisujemy 0 bo nie pasuje nam za bardzo (0 = fałsz) 192+16=208. Ok mieści się, więc pod 16 wpisujemy 1. 208+8=216. Za dużo, więc wpisujemy 0 pod 8 208+4=212. No już prawie, pod 4 wpisujemy 1 212+2=214. Jupi, trafiony zatopiony, wpisujemy 1 pod 2. Z tego wynika, że pod 1 wpisujemy 0 bo nie ma potrzeby dalszego liczenia ;) pierwszy oktet więc ma wartość 11010110
Wyglądać może nieciekawie ale jest to moim zdaniem najprostszy sposób. Kilka takich przeliczeń i następne już będziecie robić automatycznie w ciągu kilku sekund.
Wracając do naszego adresu, po przeliczeniu wszystkich oktetów, wiemy już, że binarnie wygląda on tak:
Pierwszy adres IP 11010110.00110011.11011000.00110111
drugi adres IP 11010110.00110011.10011100.11011111
Teraz czas na sprawdzenie czy powyższe adresy z maską /20 należą do tej samej sieci. Jak to się robi? Otóż wykonujemy na adresie w wersji binarnej i masce w wersji binarnej działanie logiczne za pomocą operatora 'i' (czyli po ludzku AND).
Gwoli przypomnienia operator logiczny AND zwraca prawdę tylko w jednym przypadku:
1 AND 1 = 1 1 AND 0 = 0 0 AND 1 = 0 0 AND 0 = 0
A oto działanie jakie należy wykonać
Pierwszy adres IP 11010110.00110011.11011000.00110111 AND 11111111.11111111.11110000.00000000 = 11010110.00110011.11010000.00000000 Drugi adres IP 11010110.00110011.10011100.11011111 AND 11111111.11111111.11110000.00000000 = 11010110.00110011.10010000.00000000
Mamy dwa wyniki. Aby sprawdzić czy adresy IP są w tej samej sieci trzeba je porównać: A) jeśli są identyczne, adresy należą do tej samej podsieci, B) jeśli nie są identyczne, adresy nie należą do tej samej podsieci.
11010110.00110011.11010000.00000000 - 214.51.216.55/20 11010110.00110011.10010000.00000000 - 214.51.156.223/20
Odpowiedź: adresy nie należą do tej samej sieci.
Proste? Proste. W chwili obecnej nikt już chyba nie uczy takich działań ale jeśli chcemy zrozumieć i wiedzieć o czym mówimy warto to wszystko znać. Jest mnóstwo aplikacji do policzenia sobie tego wszystkiego ale teraz macie wyłożone jak to wszystko działa ;)
To jeszcze tylko parę słów o wyniku: Adres sieci pierwszego IP to 214.51.208.0 a adres rozgłoszeniowy (broadcast) to 214.51.223.255 Adres sieci drugiego IP to 214.51.144.0 a adres rozgłoszeniowy to 214.51.159.255 W każdej z tych sieci może znaleźć się max 4096 hostów (w tym 2 zarezerwowane czyli możemy przypisać 4094 adresy) Widać również, który IP mieści się w którym przedziale i poniekąd jest to potwierdzenie wyniku, że są w różnych podsieciach.
Przykład kalkulatorka odnalezionego w sieci: http://42.pl/ipcalc/
Pytania można zadawać poniżej. Dziękuję za uwagę i pozdrawiam.