Dlaczego adres sieciowy może nie być prawidłowym adresem hosta?

18

Więc ... Studiowałem na CCNA i takie i pracowałem z siecią IP przez co najmniej 8 ostatnich lat. Zawsze widziałem i mówiono mi, że adres sieci dla podsieci nie jest prawidłowym adresem hosta. Teraz najpierw zacznę od stwierdzenia, że ​​to prawda. Moje pytanie brzmi bardziej ... czy istnieje techniczny powód, dla którego nie można go użyć, czy też został on arbitralnie uzgodniony przy projektowaniu specyfikacji? Rozumiem, dlaczego nie można użyć adresu rozgłoszeniowego (ponieważ jest on faktycznie WYKORZYSTANY). Rzecz w tym, że kiedy widzę używany adres sieciowy, zwykle dotyczy to tylko routingu, który korzysta konkretnie z adresów SIECIOWYCH. W takim przypadku (adresy sieciowe są używane tylko wtedy, gdy oczekujesz adresu sieciowego) czy istnieje jakiś techniczny powód, dla którego nie mogły mieć rzeczywistego prawidłowego adresu hosta?

Władca Goblinów
źródło

Odpowiedzi:

16

O ile rozumiem, „adres sieciowy” jako adres specjalny jest artefaktem z klasowych sieci IP z przeszłości. Dziś używamy bezklasowego routingu między domenami ( CIDR ) w Internecie, który nie ma pojęcia adresu sieciowego (jeśli spojrzysz na RFC 4632 połączony powyżej, zobaczysz, że zawiera 256 możliwych adresów IP na starsze wersje Blok „C”, np. Brak zarezerwowanych adresów dla adresu sieciowego lub rozgłoszeniowego (chociaż rozgłoszenia są zdefiniowane jako niezbędne w innych RFC).

To powiedziawszy, nadal nie powinieneś przypisywać adresu sieciowego do żadnego konkretnego hosta w sieci: Adres sieciowy jest niezbędny do routingu. Ta koncepcja jest szeroko stosowana w RFC ( RFC 1812 ). Wystarczy spojrzeć na tablice routingu ( routepolecenie), zobaczysz, w jaki sposób używany jest adres Twojej sieci lokalnej do oddzielenia lokalnego ruchu sieciowego od tego, co musi przechodzić przez router. Co jeśli ten adres sieci lokalnej został przypisany do jakiegoś hosta?

Co gorsza: lepiej nie przypisywać adresów IP kończących się na zero, nawet jeśli ten adres nie jest adresem sieciowym. Np. Jeśli twoja sieć to 10.10.0.0/255.255.0.0, adres IP 10.10.5.0 nie jest twoim adresem sieciowym, ale lepiej nie przypisuj takiego adresu IP, nawet jeśli jest on całkowicie poprawny nawet w klasowych sieciach IP. Niektóre starsze stosy oprogramowania / adresu IP mogą mieć z tym problemy.

AKTUALIZACJA: autor : goblinlord

Zgodnie z RFC 1812 (sekcja 5.3.5.2) to, co nazywamy adresem sieciowym, pierwotnie było używane do „transmisji rozgłoszonych”, które wysyłałyby pakiet rozgłoszeniowy do pożądanej sieci. Ta funkcja stała się przestarzała z powodu ataków SMURF. Funkcja została oficjalnie zmieniona w RFC 2644 . Następnie kolejne implementacje powinny po cichu upuszczać pakiety z adresem źródłowym, jak opisano (adres sieciowy). Chociaż tak powinno się stać, jestem ciekawy, ile implementacji to robi.

Jest to dodatkowo dodane w RFC 3021, gdy adresowano podsieci / 31.

haimg
źródło
5
@grawity: Nie zawsze. Tylko w sieci większej niż / 31. Np. P2P może mieć dwa adresy i brak adresu rozgłoszeniowego.
haimg
3
Hmmm ... podoba mi się pierwsza część odpowiedzi ... że jest to artefakt z klasowych sieci IP. Mój drugi problem z drugą częścią polega na tym, że tabele routingu są używane specjalnie do trasowania do sieci. Jak rozumiem, tablica routingu jest sprawdzana tylko w celu trasy do sieci, do której odbiornik nie jest włączony (docelowy adres IP nie jest częścią twojej podsieci / sieci). Jest tak w przypadku ... patrząc na tablicę routingu, jasne jest, że adresy w niej są adresami sieciowymi, a nie adresami hosta, oddzielając to od adresu docelowego pakietu hosta. W rzeczywistym ruchu docelowy adres IP nigdy nie jest używany.
Goblinlord
1
Więc ... czy jest jakiś powód, aby rezerwować go specjalnie, jeśli te 2 instancje są już osobne (adres sieciowy w tablicy routingu i docelowy adres IP przy określaniu, czy należy spojrzeć na tablicę routingu)
Goblinlord,
1
@Goblinlord: Brak oficjalnego powodu, który mogłem znaleźć (najnowsze RFC itp.). Jednak tyle oprogramowania jest zbudowane przy założeniu, że adres sieciowy jest „specjalny”, że w praktyce lepiej nie używać go jako adresu IP hosta.
haimg
1
Istnieje wpis konfiguracji cisco, który pozwala, aby adres sieciowy był również hostem, który istnieje już od co najmniej 10 lat ... Nigdy go nie użyłem, ani nawet nie przetestowałem, a ze względu na możliwe problemy ze stosami, jak wspomniano, specjalnie nie nie zezwalam hostom na zakończenie w .0 lub .255 w sieciach, za które byłem odpowiedzialny, chociaż nie natknąłem się na inne adresy sieciowe lub rozgłaszane w użyciu przez mniej niż / 24s w @Home, a gdy CoreOS chciał wydajemy środkowe .0 i .255 jako hosty w / 23 i / 21s sanbrunocable, ręcznie je zarezerwowałem.
Nevin Williams,
5

Praktyczna odpowiedź brzmi: to naprawdę zależy. To zależy od:

  • Dokładny adres i jego znaczenie w wielu RFC
  • Wersja i wersja twojego systemu operacyjnego
  • ... I routera i każdego innego routera
  • ... I inteligencja i wyrafinowanie wszystkich administratorów sieci tych routerów ...

Podczas testowania tego nie napotkałem żadnych problemów z dostępem do żadnych stron; wydaje się, że ostatecznie wszystko zależy od kaprysów administratorów sieci. Zwykle urządzenie nadrzędne nie ma możliwości stwierdzenia, czy adres jest częścią adresu sieciowego czy rozgłoszeniowego, czy nie, ponieważ jest to po prostu adres w większym bloku dla nich ... Więc żaden dostawca usług internetowych nie zablokuje ci przypisania i używając twojego adresu sieciowego, chyba że przydzielono go tobie, a administrator sieci wyraźnie go zablokował.

Jestem pewien, że są analitycy bezpieczeństwa i hakerzy, którzy mają niesamowicie szczegółowe statystyki dokładnie, ile wariantów implementacji stosu TCP-IP jest na rynku oraz co robią i czego nie akceptują, ani nie pozwalają, i dokładnie jak i gdzie brakuje im znaku .

W rzeczywistości przeglądam i publikuję to z mojego adresu sieciowego.

Nie nazywaj mnie złym internautą, chyba że masz lepsze rozwiązanie tego domu z kartami: w rzeczywistości jest to możliwe. W rzeczywistości nikt tak naprawdę nie był wystarczająco inteligentny, aby usiąść i przemyśleć to wszystko we wszystkich możliwych iteracjach, aby wymyślić całkowicie głupi projekt, zanim ludzie zaczną go używać - jak w przypadku większości rzeczy w życiu. Wynik? Standardy, w których wiele rzeczy się nie sumuje i / lub gubi w tłumaczeniu.

Witamy w prawdziwym świecie. Nie pozwól, aby zniechęciło Cię to do ścigania wciąż nieuchwytnych optymalnych ideałów ... Nie oczekuj wsparcia od „oficjalnych” kanałów lub forów, chyba że zechcesz ubrudzić sobie ręce i poświęcić temu swój czas i życie, budując niezbędny konsensus i poruszanie się po polityce wokół tego.

Myślę więc, co próbowali powiedzieć inni plakaty: jeśli chcesz wprowadzić tę oficjalną politykę i wykorzystać ją w produkcji, jesteś sam. (Ale czy i tak nie jesteś?) Być może odniesiemy szczęście i opracujemy komputerową inteligencję IPv8, która jest wstecznie kompatybilna z IPv4 i IPv6 i wszystkimi ich uszkodzonymi implementacjami.

Dagelf
źródło
Oczywiście - gdy korzystasz z adresu sieciowego, urządzenie, do którego jest przypisane, może odbierać wszelkiego rodzaju ruch rozgłoszeniowy, ponieważ niektóre stosy sieciowe traktują to jako rozgłoszenie. Te jednak na ogół nie przeszkadzają, ponieważ są po prostu dyskretnie upuszczone. Ciekawe, jak wiele exploitów sieciowych polega na osobliwościach, które się z tym
wiążą
2

Jestem nowy w sieci, ale dam też 2 centy.

Jeśli mam podsieć / 28 od xxx0 - xxx15 Zgodnie ze wstępnie zdefiniowanymi regułami pozostanie 14 hostów możliwych do wykorzystania i 2 pozostałe. pozostałe dotyczą sieci i transmisji.

Pozwala, zamiast postępować zgodnie z powyższą regułą, faktycznie używać wszystkich 16 hostów. W takim przypadku wszystko byłoby w porządku, żadnych problemów. Ale gdyby komunikacja była potrzebna poza siecią, nie byłoby to możliwe ze względu na brak zasobów do wysyłania lub odbierania informacji.

Nie jestem dobry w wyjaśnianiu, ale mówiąc inaczej.

Gdybym mieszkał w domu na ulicy, a ulica zawierała 14 domów. Droga dojazdowa i wyjazdowa w celu uzyskania dostępu do głównej drogi.

Mój adres pocztowy to 1-14 Personal Street, Off Network Road.

To nie będzie problem dla listonosza. Załóżmy teraz, że deweloperzy zachłannie dodali 2 kolejne domy i pozbyli się ścieżek.

Wówczas mój nowy adres pocztowy będzie mieścić się w przedziale 1-16 Personal Street

W tym przypadku listonosz miałby kłopoty.

Zgadnij, daj mi znać, jeśli mówię o byku.

William
źródło
0

Adres sieciowy pozwala budować tabele tras z kolumną docelową o stałym rozmiarze (4 bajty IPv4) i operacjami binarnymi o stałym rozmiarze, dzięki czemu routing hosta i routing sieciowy są w rzeczywistości tym samym.

Wyobraź sobie następującą tabelę routingu: (ten komputer ma połączenie równoległe z innym komputerem i kartą sieciową)

Dest           Mask    Dev
192.168.0.123  /32     plip0   # This is a single host
192.168.0.0    /24     eth0    # This is a network

AND między adresem IP a maską sieci daje dokładnie to, czego potrzebujesz, liczbę 4 bajtów, którą można porównać z każdą linią bez dalszych obliczeń.

Zatem numer hosta zero jest szczególny w tym sensie, że po operacji AND jego adres naturalnie reprezentuje całą sieć.

Jeśli zdecydujesz się użyć numeru sieci jako numeru hosta, powstanie tabela taka:

Dest           Mask    Dev
192.168.0.0    /32     eth0    # This is the host (it's a redundant line)
192.168.0.0    /24     eth0    # This is the network

Wydaje się to uzasadnione, więc przypuszczam, że pojęcie adresu sieciowego jest używane do rutowania, dlatego postanowiono arbitralnie oznaczyć go jako adres specjalny i zakazać jego używania jako adresu hosta.

Cóż ... właściwie to nie jest takie proste. Postanowiłam spróbować (!!!):

# route add -net 192.168.0.0/32 eth0
# ping 192.168.0.0
Do you want to ping broadcast? Then -b
# telnet 192.168.0.0
Trying 192.168.0.0...
telnet: connect to address 192.168.0.0: Network is unreachable

Obecnie programy sieciowe nie pozwalają mi używać numeru sieci jako zwykłego adresu.

David Costa
źródło
Biorąc pod uwagę twój pierwszy przykład tabeli routingu, myślę, że to naprawdę zły sposób na robienie rzeczy ... jeśli masz inne hosty w podsieci .0.0, w jaki sposób komunikują się one ze sobą poprawnie, a także host .0.123 bez statycznego ustawiania tras na każdy host? To naprawdę nie wydaje się właściwy sposób na robienie rzeczy.
Goblinlord,
To tylko fikcyjny przykład, nigdy nie ustawiłbym takiej tabeli :-) Host .123 jest połączony połączeniem punkt-punkt, podczas gdy reszta to zwykła sieć Ethernet. Jeśli chcesz, aby inne maszyny miały dostęp do hosta .123, musisz wykonać dodatkową pracę, ale nie jest to niemożliwe.
David Costa
0

Szukając odpowiedzi na to pytanie, natknąłem się na ten artykuł z Cisco. Myślę, że poniższy cytat z tego artykułu ładnie podsumowuje.

[...] rozważ adres IP 172.16.1.10. Jeśli obliczasz adres podsieci odpowiadający temu adresowi IP, otrzymujesz odpowiedź na podsieć 172.16.0.0 (zero podsieci). Zauważ, że ten adres podsieci jest identyczny z adresem sieciowym 172.16.0.0, który był podsiecią w pierwszej kolejności, więc za każdym razem, gdy wykonujesz podsieć, otrzymujesz sieć i podsieć (zero podsieci) o nie dających się odróżnić adresach. Wcześniej było to źródłem wielkiego zamieszania .

Unikanie zamieszania jest dla mnie wystarczającym powodem.

Samuel Harmer
źródło
Wiem, że to pytanie zostało postawione dawno temu, ale właśnie przeglądałem te rzeczy. Cytowany artykuł mówi o „podsieci zero” lub pierwszej podsieci w adresie sieciowym. Jest to coś zupełnie innego iw każdej nowoczesnej sieci, nad którą pracowałem na każdym przełączniku, włączona jest funkcja „ip subnet-zero”. Wspomina również, że obecnie jest on domyślnie włączony na wszystkich ich przełącznikach (od wersji 12, która została wydana około 2003 r.).
Goblinlord,
0

RFC 1122 („Wymagania dotyczące hostów internetowych - warstwy komunikacyjne”) zabrania:

Adresy IP nie mogą mieć wartości 0 lub -1 dla żadnego z pól <Numer hosta>, <Numer sieci> lub <Numer podsieci>

Bryan
źródło
0

Adres sieciowy nie jest uważany za adres hosta, ale jest tylko liczbą. W obszarach o ograniczonym adresie, takich jak sieci punkt-punkt, często używana jest maska ​​/ 30, ale nadal wykorzystuje ona adresy hosta. Mniejszą praktyką, ale osiągającą tę samą zasadę, jest użycie maski / 31 i użycie jednego końca jako adresu sieciowego, a drugiego jako transmisji.

Dawny.

Router(config)#int gi0/0
Router(config-if)#ip add 10.0.0.0 255.255.255.254
Router(config-if)#no shut


Router2(config)#int gi0/0
Router2(config-if)#ip add 10.0.0.1 255.255.255.254
Router2(config-if)#no shut


        .0        .1
[Router]-----------[Router2]
   network      broadcast
cmd
źródło