Wiem, że jeśli mam sieć, 83.23.159.0/24
to mam 254 użytecznych adresów IP hosta, ponieważ:
83.23.159.0 (in binary: host portion all zeros) is the subnet address
83.23.159.1-254 are host addresses
83.23.159.255 (in binary: host portion all ones) is the broadcast address
Rozumiem użycie adresu rozgłoszeniowego, ale nie rozumiem, do czego kiedykolwiek używany jest adres podsieci. Nie widzę powodu, dla którego adres docelowy pakietu IP miałby być ustawiony na adres podsieci, więc dlaczego sama podsieć potrzebuje adresu, jeśli nigdy nie będzie punktem końcowym przepływu AN? Według mnie marnotrawstwem jest niedopuszczenie do używania tego adresu jako adresu hosta.
Podsumowując, moje pytania to:
- Czy miejscem docelowym pakietu IP jest kiedykolwiek adres IP podsieci?
- Jeśli tak, w jakich przypadkach i dlaczego?
- Jeśli nie, to dlaczego nie zwolnić tego adresu dla dowolnego hosta?
ifconfig
nie narzeka, gdy ustawisz adres hosta 24-net na 0 lub 255. Po prostu spróbuj go użyć.Odpowiedzi:
Tak. Jest to prawidłowy adres IP, więc można go użyć.
Jest to po prostu jeden z 255 użytecznych adresów IP w / 24
Jeśli masz starożytny sprzęt, musisz sprawdzić, czy używa pierwszego czy ostatniego adresu jako adresu sieciowego. (.0 lub .255 dla sieci z maską FF.FF.FF.00)
To sprawia, że dobrym nawykiem jest pomijanie tego adresu IP. A nawyki nabyte dawno temu trudno zignorować.
A ludzie, którzy nie znają tła, nie używają go „, ponieważ inni też go nie używają, więc korzystanie z niego musi być błędne” lub ponieważ nie zdają sobie sprawy, że „0” może być pierwszą liczbą.
[Edytuj] Grezzo właśnie przetestował to na Windows XP, w którym GUI sieci Windows „pomocnie” zapobiegał temu ustawieniu. Windows 7 ma takie samo zachowanie. Następnie wypróbowałem to na hoście innym niż Windows, gdzie to po prostu działa. Jeśli używasz systemu Windows, być może będziesz musiał ręcznie skonfigurować sieć za pomocą IPconfig, aby ustawić ją na wszystkie zera.
[Edytuj 2]
Im dłużej z tym pracuję, tym bardziej się mylę.
Rfc4632 - Bezklasowy routing między domenami nie wydaje się go zabraniać, ale nie pozwala na to wprost.
Ten post ServerFault wspomina: „Z przyczyn historycznych wiele systemów operacyjnych traktuje pierwszy adres jako transmisję. Na przykład pingowanie xxx0 z OS X, Linux i Solaris w mojej sieci lokalnej (/ 24) otrzymuje odpowiedzi. Windows nie pozwala ci pingować pierwszy adres domyślnie, ale możesz go włączyć za pomocą metody WIP SetIPUseZeroBroadcast. Zastanawiam się, czy nie możesz użyć .0 jako adresu hosta w sieci z wszystkimi systemami Windows. ” .
To to samo pytanie, ale nie odpowiedź.
Adres sieciowy jest również używany w tablicach routingu. Ale nie rozumiem, dlaczego to nie zadziała z tego powodu. Ta sama notacja w tablicach routingu prowadziłaby do właściwej sieci. Gdy znajdzie się w odpowiedniej sieci, dotrze do komputera z IP 0.
(Wszystko to dla 192.168.1 / 24.
Jeśli użyjesz 192.168.0 / 23, wówczas 192.168.1.0 będzie prawidłową i bezpieczną wartością w środku zakresu)
[Edytuj 3]
Jeszcze jeden link do tego samego pytania. Wydaje się to dość popularne na wymianie stosu:
/superuser/379451/why-can-a-network-address-not-be-a-valid-host-address
I jedna myśl:
Docelowy_IP jest prawdopodobnie AND z masztem sieciowym (szybka operacja sprzętowa), zanim zostanie porównany z wpisami w tablicach routingu. Ale:
(Pół-losowy adres IP) 192.168.0.42 I 255.255.255.0 da 192.168.0.0
Ale 192.168.0.0 I 255.255.255.0 również da 192.168.0.0
[Edytuj 4 - Długo po napisaniu tej odpowiedzi - może być konieczne przepisanie całego postu z powodu tych nowych informacji ]
RFC923 stwierdza na stronie 3, że:
Cytując @ylearn na naszej stronie poświęconej inżynierii sieci
Wydaje mi się, że pierwsza dokumentacja tego pochodzi z RFC950, który odwołuje się do RFC943 (który zastąpił RFC923 powyżej, ale używa tego samego języka dla specjalnych adresów):
źródło
Adres z zerową częścią hosta odnosi się do samej sieci, a nie do konkretnego hosta.
Historycznie ten zerowy adres hosta służył jako alternatywny adres rozgłoszeniowy, a urządzenia nadal tak reagują.
Więc muszę się nie zgodzić z kilkoma innymi odpowiedziami: nie, zero nie jest idealnie użytecznym adresem hosta. Jeśli potrzebujesz więcej niż 254 adresów, musisz utworzyć większą podsieć.
Spójrz, mój router Linksys, którego adres
.1
odpowiada na pingi.0
. (Maska sieci jest255.255.255.0
, więc ostatni oktet odpowiada numerowi hosta).Gdybym przypisał
.0
adres do jakiegoś hosta, nie byłbym w stanie pingować go bez routera, który odpowiedziałby również jego odpowiedziami. Jak widać, niektóre narzędzia, takie jak wersja routera,ping
traktują0
jak transmisję.Możesz nagiąć reguły, jeśli chcesz załatać wszystkie stosy protokołów i inne oprogramowanie, na które ma wpływ takie gięcie. W przeciwnym razie trzymaj się zasad.
Przykładem.
Pracowałem w firmie, która zaprojektowała węzeł sieci zbudowany w 14-gniazdowej obudowie, obsługujący wiele niezależnych obrazów systemu operacyjnego na kilku typach kart, wszystkie komunikujące się za pośrednictwem płyty montażowej. Nastąpiła konfiguracja sieci na płycie montażowej z konwencją, która
127.X.0.Y
jest wewnętrznym adresem IP węzła Y w gnieździe X, wszystkie ponumerowane od 1.Zasadniczo podsieci adres pętli zwrotnej dla naszych własnych celów. Aby działało, musieliśmy załatać jądro Linuksa tu i tam i IIRC, trochę przestrzeni użytkownika.
Ponieważ ta sieć była używana tylko wewnątrz urządzenia, a większość programów wymagających pętli zwrotnej korzysta z
127.0.*
sieci (a właściwie z określonego adresu127.0.0.1
), która nadal działała normalnie, wszystko było fajne.źródło
w rzeczywistości zależy to od maski sieci, na przykład dla sieci 83.23.159.0/23, 83.23.159.0 to doskonale użyteczny adres IP
źródło
Wygląda na to, że tutaj jest trochę pomieszania z podstawowymi sieciami.
„Starożytny sprzęt”, o którym mowa w jednej z odpowiedzi, nie używałby IP Subnet Zero - używanie adresu IP xxx0 z siecią skonfigurowaną dla / 24 CIDR lub 255.255.255.0 to zupełnie inna sprawa.
Zero podsieci IP
Użyteczne adresy IP hosta w podsieci
Zarówno adres sieciowy, jak i adres rozgłoszeniowy są zastrzeżone i nie mogą (zgodnie z obecnymi i poprzednimi standardami sieciowymi) być przypisane do urządzenia. Użycie xxx0 jako adresu hosta w systemie / 24 jest nieprawidłowe. Nawet jeśli Linux pozwala ci go używać, nie oznacza to, że ma rację, to po prostu oznacza, że Linux myśli, że wiesz, co robisz.
Jeśli twój system pozwala przypisać hostowi xxx0 jako adres IP4 i wydaje się, że działa - istnieje prawdopodobieństwo, że dany host odbiera CAŁY ruch skierowany na DOWOLNE urządzenie w tej sieci, więc jego sieć prawdopodobnie nie działa optymalnie.
źródło
RFC 1122 („Wymagania dotyczące hostów internetowych - warstwy komunikacyjne”) zabrania:
źródło
Właściwie odpowiedź jest podstawową podsieci. Adres IP „wszystkich zer” podsieci w połączeniu z identyfikatorem sieci służy do obliczenia, do którego pakietu należy wysłać.
W twoim przykładzie masz podsieć 255.255.255.0. Każde urządzenie, które zna protokół TCP / IP, użyje maski sieci w połączeniu z adresem IP, aby obliczyć, czy pakiet jest przeznaczony dla sieci lokalnej (wykonując logiczną operację AND), czy też musi zostać wysłany przez bramę / router.
Sądzę więc, że powodem, dla którego nie można użyć adresu IP, jest to, że jest już używany do „definiowania” granic sieci wraz z maską sieciową według projektu.
źródło
Poprosiłem o ponowne przesłanie mojej odpowiedzi od NetworkEngineering , więc zrobię to z pewnymi modyfikacjami dla tej strony.
W RFC919 zawiera odniesienie do ogólnej akceptacji adresu sieciowego:
Zapewnia to konwencję, która powinna wyjaśnić nasze rozumienie, gdyby ktoś wymienił „10.1.2.0” jako sieć, a nie host w sieci.
Odtąd użycie „0” w adresach IP zostało zdefiniowane w RFC923 i przeniesione w kolejnych RFC:
W tym przykładzie podano konkretnego hosta w bieżącej sieci (0.0.0.37), używając zer w części sieci adresu, ale tak naprawdę nie wyjaśnia przeciwnego przypadku (0 w części hosta adresu). Jednak ponieważ zdefiniował „0” jako „to”.
W RFC1060 adres „0.0.0.0” został wyraźnie udokumentowany jako „ten host w tej sieci”:
Ponieważ wszystkie zera części hosta adresu oznaczały „ten host”, logicznie wynika z tego, że nie można go użyć jako adresu hosta.
Wracając do bezpośredniej odpowiedzi na pytania:
Zgodnie z tym, co znajduję w RFC, nie należy tego używać. Przyznaję, że nie jest tak jasno określony, jak bym chciał, ale to wszystko jest wspólne w wielu standardach. Kiedy standardy są w pewnym momencie mniej rygorystyczne, wydaje się, że branża „ustala się” w ogólnie przyjętej interpretacji.
Ponadto na podstawie zawartości oprogramowania RFC można napisać, aby założyć, że ten adres służy do adresowania sieci, a nie konkretnego hosta. Lub nawet bardziej dosłownie jako swego rodzaju „sprzężenie zwrotne” (tzn. Ten host w określonej sieci).
Dlaczego więc niektóre systemy operacyjne wyraźnie na to zezwalają? Wyobrażam sobie wiele rzeczy związanych z czasem / zasobami programisty lub nikt tak naprawdę nie pomyślał o dodaniu kontroli poprawności. Logika musi być nieco bardziej zaangażowana niż „jeśli kończy się na 0”, ponieważ większa podsieć (a / 23 lub większa) będzie zawierać prawidłowy adres IP .255 i .0 (tj. 10.1.2.0/23 zawiera oba poprawne adresy IP adres 10.1.2.255 i 10.1.3.0). Chociaż niektóre organizacje unikają również używania poprawnych adresów w większych podsieciach, aby uniknąć dziwnych problemów z oprogramowaniem, które nie obsługuje poprawnie nowoczesnej podsieci.
Co do tego, dlaczego nie zwolnić tego jednego adresu IP, po prostu sprowadza się do kosztów / korzyści. Wprowadzenie tej zmiany zajęłoby dużo czasu i wysiłku, aby odzyskać jeden adres IP na podsieć. W ilu przypadkach, gdy potrzebujesz dodatkowych adresów IP, wystarczy tylko jeden adres? O wiele łatwiej jest dodać drugą podsieć lub powiększyć bieżącą podsieć, potencjalnie dając wiele adresów do użycia zamiast tylko jednej, nie wprowadzając przy tym większych zmian w oprogramowaniu / sprzęcie.
źródło