Blog (7)
Komentarze (365)
Recenzje (0)
@997IP - jak to ugryźć.

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.

Wybrane dla Ciebie
Komentarze (23)