• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie #2 - Kalkulator IP podsieci

Object Storage Arubacloud
+4 głosów
7,671 wizyt
pytanie zadane 29 kwietnia 2015 w C i C++ przez Qhoros Mądrala (7,110 p.)
edycja 29 kwietnia 2015 przez Qhoros

Witam ponownie. ;)
Dwa tygodnie temu dodałem pierwsze (moim zdaniem ciekawe ;)) zadanie dla naszej społeczności. Dostałem wiadomości od paru osób - to cieszy. Jakby ktoś jeszcze chciał spróbować swoich sił to odsyłam do zadania:
https://forum.pasja-informatyki.pl/10154/zadanie-%231-gra-w-statki 

Zawsze służę pomocą zarówno przy zakodowaniu fragmentu lub radą jak przez dany problem przebrnąć.

A teraz pora przejść do dzisiejszego zadania. Trochę trudniejszegego, ale trudność ta wynika tylko i wyłącznie na napisaniu odpowiedniego algorytmu. Dacie radę! Co prawda początkowo planowałem grę w sudoku, ale co się odwlecze to nie uciecze. ;) Zmieniłem temat, ponieważ parokrotnie odpowiadałem tutaj na pytania związane z tematyką adresacji. Projekt dotyczy połączenia kilku dziedzin, zatem to co tygryski uwielbiają najbardziej. :)

Krótki wstęp teoretyczny. Przy dzieleniu sieci na podsieci odróżniamy część przeznaczoną na sieć (w naszym przykładzie 3 pierwsze oktety w ramce) oraz część przeznaczoną na hosty (w tym przypadku ostatni oktet).


Każdy adres IPv4 składa się z 4 oktetów zawieracych 8 bitów, które przelicza się w następujący sposób:

Przeanalizuj kolejne kroki konwersji adresu binarnego na adres dziesiętny.

W przykładzie tym liczba binarna: 

10101100 00010000 00000100 00010100

po zamianie przestawiona jest w postaci: 

172.16.4.20

Podczas konwersji zachowaj następującą kolejność:
- Podziel 32 bity na 4 oktety.
- Zamień każdy oktet na postać dziesiętną.
- Wstaw kropkę pomiędzy tak otrzymanymi liczbami dziesiętnymi.

W zakresie wszystkich adresów związanych z każdą siecią IPv4, można wyróżnić trzy typy: 

Adres sieciowy (ang. network address) - Adres, który określa całą sieć.

Adres rozgłoszeniowy (ang. broadcast address) - Specjalny adres używany w celu wysyłania danych do wszystkich hostów w określonej sieci. 

Adres hosta (urządzenia końcowego) – Adres przyporządkowany urządzeniu końcowemu pracującemu w sieci.

Adres sieciowy jest standardowym sposobem odwoływania się do sieci. 

W zakresie adresów IPv4 związanych z daną siecią, pierwszy (najniższy) adres zarezerwowany jest dla adresu sieciowego. W adresie tym wszystkie bity w polu hosta mają wartość 0. 

Adres rozgłoszeniowy IPv4 jest specjalnym adresem występującym w każdej sieci, umożliwiającym jednoczesne komunikowanie się ze wszystkimi hostami w danej sieci. Oznacza to, iż aby wysłać dane do wszystkich urządzeń końcowych w danej sieci, host wysyła pojedynczy pakiet zaadresowany adresem rozgłoszeniowym. 

Adres rozgłoszeniowy jest ostatnim (najwyższym) adresem w zakresie adresów związanych z daną siecią. Jest to adres, w którym wszystkie bity znajdujące się w polu hosta mają wartość 1. W przypadku sieci 10.0.0.0 z 24 bitową maską sieciową, adres rozgłoszeniowy będzie miał postać 10.0.0.255. Adres ten określany jest również jako rozgłoszenie skierowane (ang. directed broadcast). 

Adresy hostów - Jak już wspomniałem, każde urządzenie końcowe musi być jednoznacznie określone za pomocą unikatowego adresu, aby móc dostarczyć do niego wysyłany pakiet. W adresacji IPv4 urządzenia końcowe pracujące w danej sieci, mogą mieć przypisane adresy z zakresu ograniczonego adresem sieciowym oraz rozgłoszeniowym. 

Przedrostki (prefixy) sieciowe 

Główne pytanie, które należy sobie zadać brzmi: Skąd mamy wiedzieć ile bitów reprezentuje część związaną z siecią, a ile bitów reprezentuje pole hosta? W przypadku, gdy opisujemy adresy sieciowe IPv4, informację o długości prefiksu dodajemy do adresu sieciowego. Długość przedrostka (prefixu) jest liczbą bitów w adresie, która określa bity (pole) sieci. Na przykład w zapisie 172.16.4.0 /24, „/24” to długość prefixu, która oznacza, iż pierwsze 24 bity określają adres sieci. Oznacza to, iż w tym przypadku ostatnie 8 bitów (ostatni oktet) pozostaje bitami (polem) hosta.

 

No i w końcu część główna, czyli podział sieci na podsieci.

Miał być "krótki" wstęp teoretyczny, a wyszło jak zwykle. ;)) Sorry, ale osoby, zaznajomione z tą tematyką chyba się nie obrażą za taką ścianę, a osobom, które dopiero się uczą na bank nie zaszkodzi.

W tym zadaniu nie uwzględniamy sieci VLSM (masek zmiennej dłguości), chcociaż całkiem niewykluczone, że za jakiś czas pojawi się zadanie związane z tą tematyką. Jeżeli czujesz się na siłach, to zawsze możesz spróbować na własną rękę.

Rozumiem, że nie każdy jest tutaj programistą, ale docelowo zadanie dotyczy napisania programu. Niemniej jeżeli masz pytania do samego podziału - także na nie odpowiem. Wszak jesteśmy tu by się swoją wiedzą wzajemnie dzielić i by każdego dnia stawać się odrobinkę mądrzejszymi. :))

Parę screenów z działania programu:

A tu przykład na ogromną przewagę szybkości obliczeń komputerów. Maksymalna liczba podsieci jaką udało mi się wygenorować:

A wszystkie wygenerowane podsieci dostępne pod tym linkiem (za duuuuużo spamu :)):

http://kabu.webd.pl/zelent/Podsieci.txt

3 odpowiedzi

0 głosów
odpowiedź 29 kwietnia 2015 przez Qhoros Mądrala (7,110 p.)
edycja 29 kwietnia 2015 przez Qhoros
Ciąg dalszy - sorry przekroczyłem liczbę znaków. :D

P.S. Nie bójcie się skali problemu. Mój kod to ledwie lekko ponad 400 linii, przy czym pisałem w C#. Ważne by najpierw program zwracał prawidłowy wynik, a dopiero potem warto "bawić się" w możliwe skracanie kodu. I pamiętajcie to nie wyścig, jesteśmy tu by się uczyć. Nikt nie będzie Cię oceniał, a do mnie możesz napisać z najgłupszym pytaniem, zawsze odpowiem. Każdy kiedyś zaczynał i niejedną osobę takie "głupie" pytanie zaprowadziło do zainteresowania się tematem na poważniej. Życzę Wam mile, a przede wszystkim kreatywnie spędzonych godzin przed monitorem. Następne zadanie zważywszy na okres (zbliżające się matury) wrzucę pewnie dopiero za miesiąc by nie zalewać Was dodatkową robotą.

Zdajcie wszystko jak najelpiej, rozwijajcie się i w razie czego zapraszam na priv.

Pozdrawiam, CODE ON! ;))
0 głosów
odpowiedź 29 kwietnia 2015 przez Kelmac Gaduła (3,970 p.)
Można zrobić taka baze projektów i zby różni uczestnicy forum pokazywali swoje pomysły i swoej algorytmy czy też działający program w róznych językach. Będzie to dośc motywujące a zarazem można zobaczyc jak inni kodują (styl pisania, nazywannie zmiennych, wykożystywanie funkcji itp)
komentarz 29 kwietnia 2015 przez Qhoros Mądrala (7,110 p.)
Jasne, ale dawanie kodu na samym początku strasznie rozleniwia. ;) Staniesz w środku zadania, popróbujesz i w końcu zajrzysz do gotowca. W takim przypadku musisz liczyć na swoją kreattność. :) Dlatego mając świadomość tego, że nie każdy jest jeszcze super zaawansowany odpowiadam na każde pytania/pomagam poprzez priv. :)

Pozdrawiam
0 głosów
odpowiedź 29 kwietnia 2015 przez zirael [PL] Mądrala (5,200 p.)
A może w ramach challengu pomyślimy o napisaniu mini gierki w SDL i dodamy możliwość gry przez sieć w oparciu o biblioteke WinSock? :)
komentarz 29 kwietnia 2015 przez Qhoros Mądrala (7,110 p.)
Zapraszam na priv, myślę, że się jakoś dogadamy. :)

Podobne pytania

0 głosów
2 odpowiedzi 566 wizyt
0 głosów
1 odpowiedź 646 wizyt
0 głosów
2 odpowiedzi 878 wizyt

92,579 zapytań

141,427 odpowiedzi

319,654 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...