Perché non è possibile utilizzare tutti gli zeri nella parte host dell'indirizzo IP per un host?


21

So che se ho una rete 83.23.159.0/24ho 254 indirizzi IP host utilizzabili perché:

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

Comprendo l'uso di un indirizzo di trasmissione, ma non capisco a cosa serva mai l'indirizzo di sottorete. Non vedo alcun motivo per cui l'indirizzo di destinazione di un pacchetto IP sia impostato sull'indirizzo di sottorete, quindi perché la sottorete stessa ha bisogno di un indirizzo se non sarà mai l'endpoint di un flusso IP? A me sembra uno spreco non permettere a questo indirizzo di essere usato come indirizzo host.

Per riassumere, le mie domande sono:

  1. La destinazione di un pacchetto IP è mai impostata sull'indirizzo IP della sottorete?
  2. Se sì, in quali casi e perché?
  3. Se no, allora perché non liberare quell'indirizzo da usare per qualsiasi host?

2
ifconfignon si lamenta quando si imposta l'indirizzo dell'host di 24 net su 0 o 255. Provare a usarlo.
ott--

2
L'ho fatto. Sembra funzionare per un .0. Ma potrebbe rompere il software più vecchio. .255 funzionerà anche se non si utilizzano protocolli che richiedono la trasmissione. Immagino che puoi configurarlo se configuri manualmente le tabelle ARP con indirizzi permanenti su tutti i computer, ma yuk!
Hennes,


1
Non sono d'accordo con quel John. L'ho ricontrollato e non risponde alla domanda specifica posta. Che è piuttosto un caso limite.
Hennes,

1
Questa domanda viene ora posta anche sul nuovo sito di ingegneria della rete. Quelle risposte (su http://networkengineering.stackexchange.com/questions/11200/what-is-the-purpose-of-network-address-aka-subnet-address ) hanno informazioni che non sono ancora nei post di Server Fault .
Hennes,

Risposte:


12

La destinazione di un pacchetto IP è mai impostata sull'indirizzo IP della sottorete?

Sì. È un indirizzo IP valido quindi può essere utilizzato.

Se sì, in quali casi e perché?

È semplicemente uno dei 255 IP utilizzabili in a / 24

Se no, allora perché non liberare quell'indirizzo da usare per qualsiasi host?

Se si dispone di hardware antico, è necessario verificare se utilizza il primo o l'ultimo indirizzo come indirizzo di rete. (.0 o .255 per reti con maschera FF.FF.FF.00)

Questo rende una buona abitudine saltare quell'IP. E le abitudini apprese molto tempo fa sono difficili da ignorare.

E le persone che non conoscono lo sfondo non lo usano 'perché altri non lo usano neanche, quindi deve essere sbagliato usarlo' o perché non si rendono conto che '0' può essere un primo numero.

[Modifica] Grezzo lo ha appena testato su Windows XP, dove la GUI della rete Windows ha "utile" impedito questa impostazione. Windows 7 ha lo stesso comportamento. Ho quindi provato su un host non Windows dove funziona. Se usi Windows, potresti dover configurare la tua rete manualmente tramite IPconfig per impostarla su tutti gli zeri.

192.168.1.0_on_win7 192.168.1.0_on_FreeBSD

[Modifica 2]

Più lavoro a lungo con questo, più mi confondo.

Rfc4632 - Il routing interdominio senza classi non sembra vietarlo , ma non lo consente nemmeno esplicitamente.

Questo post di ServerFault menziona: "Per motivi storici, molti sistemi operativi trattano il primo indirizzo come una trasmissione. Ad esempio, il ping xxx0 da OS X, Linux e Solaris sulla mia rete locale (/ 24) ottiene risposte. Windows non consente di eseguire il ping il primo indirizzo per impostazione predefinita, ma potresti essere in grado di abilitarlo utilizzando il metodo WMI SetIPUseZeroBroadcast. Mi chiedo se potresti cavartela usando 0 come indirizzo host su una rete completamente Windows. " .

È la stessa domanda, ma non una risposta.

L'indirizzo di rete viene utilizzato anche nelle tabelle di routing. Ma non riesco a capire perché a causa di ciò non funzionerebbe. La stessa notazione nelle tabelle di routing verrebbe indirizzata alla rete corretta. Una volta sulla rete giusta arriverebbe a un PC con IP 0.

(Tutto questo per un 192.168.1 / 24.
Se si usasse 192.168.0 / 23, 192.168.1.0 sarebbe un valore valido e sicuro al centro dell'intervallo)

[Modifica 3]

Un altro link alla stessa domanda. Sembra piuttosto popolare nello scambio di stack:

/superuser/379451/why-can-a-network-address-not-be-a-valid-host-address

E un pensiero:

Destination_IP è probabilmente AND ed con il mast di rete (un'operazione veloce in hardware) prima di essere confrontato con le voci nelle tabelle di routing. Ma:

(Un IP semi-casuale) 192.168.0.42 E 255.255.255.0 produrrebbe 192.168.0.0
Ma 192.168.0.0 E 255.255.255.0 produrrebbero anche 192.168.0.0


[Modifica 4 - Molto tempo dopo la stesura di questa risposta - Potrebbe essere necessario riscrivere l'intero post a causa di queste nuove informazioni ]

RFC923 afferma a pagina 3 che:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

Citando @ylearn sul nostro sito di ingegneria di rete

Credo che la prima documentazione di ciò provenga da RFC950 che fa riferimento a RFC943 (che ha superato RFC923 sopra ma utilizza la stessa lingua per indirizzi speciali):

     It is useful to preserve and extend the interpretation of these
     special addresses in subnetted networks.  This means the values
     of all zeros and all ones in the subnet field should not be
     assigned to actual (physical) subnets.

Quindi, per chiarire, stai dicendo che xxx0 / 24 è un indirizzo IP valido per un host? Se è così, allora perché (quando provo a impostare il mio indirizzo IP su 192.168.1.0 con una maschera di rete di 255.255.255.0) Windows XP dice " La combinazione di indirizzo IP e maschera di sottorete non è valida. Tutti i bit nel parte dell'indirizzo host dell'indirizzo IP è impostata su 0. Inserire una combinazione valida di indirizzo IP e maschera di sottorete. "
Grezzo,

3
Windows è sbagliato. (O detto con meno forza: Windows è eccessivamente attento a lavorare con qualsiasi combinazione di sistemi). Ho appena provato questo sul mio sistema Windows 7 e ho avuto lo stesso errore di te. Ho installato un sistema FreeBSD pulito e testato dove funziona. (Lo aggiungerò al post)
Hennes il

Grazie, sei stato davvero utile. Volevo solo aggiungere che la GUI in OS X non ti permetteva nemmeno di farlo, ma scommetto che ifconfig lo farebbe. Non riesco a capire perché la risposta di m0ntassar abbia ottenuto più voti - non prova nemmeno a rispondere alla mia domanda. Un'altra cosa; quando si dice " Se si dispone di hardware antico, è necessario verificare se utilizza il primo o l'ultimo indirizzo come indirizzo di rete ", si intende l' indirizzo di trasmissione .
Grezzo,

Sì, intendevo l'indirizzo di trasmissione. Accidenti, dov'è quel pulsante "modifica commento più vecchio di 5 minuti".
Hennes,

Dolce, ho appena provato a eseguire il ping di .0 e .255, entrambe le volte che la mia PS3 ha risposto (tutto il resto è wireless, quindi suppongo sia per questo che è arrivato prima) da .65 in modo da confermare che nella mia rete entrambi sono usati per la trasmissione che è perché (normalmente) non dovremmo usare neanche per un vero indirizzo host.
Grezzo,

15

Un indirizzo con una porzione di host tutto zero fa riferimento alla rete stessa, piuttosto che a un host particolare.

Storicamente, questo indirizzo zero host è stato utilizzato come indirizzo di trasmissione alternativo e i dispositivi continuano a rispondere in questo modo.

Quindi, non sono d'accordo con alcune altre risposte: no, zero non è un indirizzo host perfettamente utilizzabile. Se hai bisogno di più di 254 indirizzi, devi creare una sottorete più grande.

Guarda, il mio router Linksys, il cui indirizzo .1risponde ai ping di .0. (La maschera di rete è 255.255.255.0, quindi l'ultimo ottetto corrisponde al numero host.)

webserver:~# ping  192.168.1.0
Do you want to ping broadcast? Then -b
webserver:~# ping -b 192.168.1.0
WARNING: pinging broadcast address
PING 192.168.1.0 (192.168.1.0) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.46 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.812 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.819 ms

Se avessi assegnato l' .0indirizzo a qualche host, non sarei stato in grado di eseguire il ping senza che il router rispondesse con le sue risposte. E come puoi vedere, alcuni strumenti come la versione di quel router pingtrattano 0come una trasmissione.

Puoi piegare le regole, se sei disposto a patchare tutti gli stack di protocollo e altri software interessati da tale flessione. Altrimenti, attenersi alle regole.

Caso in questione.

Ho lavorato presso un'azienda che ha progettato un nodo di rete integrato in uno chassis a 14 slot, che esegue numerose immagini di sistemi operativi indipendenti su diversi tipi di schede, tutte comunicanti tramite un backplane. C'era una configurazione di rete sul backplane con una convenzione che 127.X.0.Yè l'indirizzo IP interno del nodo Y nello slot X, tutti numerati da 1.

Fondamentalmente abbiamo subnetizzato l'indirizzo di loopback per i nostri scopi. Per farlo funzionare, abbiamo dovuto patchare il kernel Linux qua e là e IIRC, un po 'di spazio utente.

Dal momento che quella rete era utilizzata solo all'interno della scatola e la maggior parte dei programmi che richiedono il loopback usano la 127.0.*rete (e in effetti l'indirizzo specifico 127.0.0.1) che ha continuato a funzionare normalmente, tutto è andato bene.


7

in realtà dipende dalla maschera di rete, ad esempio per la rete 83.23.159.0/23, 83.23.159.0 è un indirizzo IP perfettamente utilizzabile


3
+1 - 83.23.158.255 sarebbe anche un indirizzo host valido. Le persone restano bloccate dalle regole dei no 0 e dei 255 senza considerare la subnet mask.
joeqwerty,

1
Sono consapevole che un indirizzo xxx0 è valido con una maschera di rete inferiore a / 24, ma noto che nella mia domanda ho specificato una maschera di rete / 24, quindi non hai risposto alla mia domanda. Non stavo parlando di tutti gli 0 o 255 nell'ultimo quartetto / byte, ho detto tutti gli 0 o 255 nella "porzione host" dell'indirizzo IP. Ciò tiene conto della maschera di rete.
Grezzo,

2
Risposta breve di @Grezzo: non-CIDR e roba legacy si rompe con .0, MS non lo consente completamente. Ma IPv6 è imminente, quindi perché preoccuparsi? ;)
Sammitch il

2
Questa non è davvero una risposta poiché la domanda non riguarda realmente la numerologia della notazione dei punti ma lo stato / il significato di un indirizzo host 0 in qualsiasi sottorete di larghezza.
Kaz,

2
Non vedo perché questa risposta abbia così tanti voti positivi. 83.23.159.0/23 non è "tecnicamente" una rete valida. 83.23.159.0 con una maschera 23 è in realtà un IP proprio nel mezzo della rete 83.23.158.0/23. La domanda non era "perché non posso avere .0 alla fine dell'ip", era "perché non posso usare l'indirizzo con la parte host tutti zeri". Nel tuo esempio, l'indirizzo "tutti gli zeri host" sarebbe 83.23.158.0. Come menzionato in altre risposte, questo è storicamente un indirizzo inutilizzabile (l '"indirizzo di rete") e sebbene possa funzionare su alcuni sistemi operativi, non è consigliabile provare a usarlo.
USD

3

Sembra che ci sia un po 'di confusione qui con le reti di base.

L '"hardware antico" a cui si fa riferimento in una delle risposte non userebbe la sottorete IP zero - l'uso dell'indirizzo IP xxx0 con una rete configurata per una maschera di sottorete / 24 CIDR o 255.255.255.0 è un problema completamente diverso.

Sottorete IP zero

  • L'hardware precedente non utilizzava la sottorete IP zero, ovvero non utilizzava la prima sottorete su un sistema di rete multi-sottorete. Quindi su una rete / 23 o 255.255.254.0 la sottorete XXX0 e tutti i suoi indirizzi non verrebbero utilizzati. I router moderni non hanno questa limitazione, ma possono essere configurati per utilizzare questo vecchio modello IE e non utilizzare la sottorete zero, se lo si desidera.

Indirizzi IP host utilizzabili su una sottorete

  • Rete di base:
    • Con / 24 ovvero subnet mask di 255.255.255.0
    • xxx0 è riservato come indirizzo di rete. Router e protocolli di routing (EIGRP, RIP2, ecc.) Utilizzano l'indirizzo di rete per definire i segmenti di rete per spostare i pacchetti all'interno e attraverso i confini della rete.
    • xxx255 è riservato per l'indirizzo di trasmissione
    • È prassi comune utilizzare gli indirizzi .1 o .254 sui router in modo da lasciare 253 numeri IP utilizzabili.

Sia l'indirizzo di rete che l'indirizzo di trasmissione sono riservati e non possono (in base agli standard di rete attuali e precedenti) essere assegnati a un dispositivo. L'uso di xxx0 per un indirizzo host su un sistema / 24 è errato. Anche se Linux ti consente di usarlo non significa che sia giusto, significa solo che Linux pensa di sapere cosa stai facendo.

Se il tuo sistema ti consente di assegnare xxx0 come indirizzo IP4 a un host e sembra funzionare, è probabile che quel particolare host stia ricevendo TUTTO il traffico destinato a QUALSIASI dispositivo su quella rete, quindi la sua rete probabilmente non funziona in modo ottimale.


1
Hai detto " xxx0 è riservato come indirizzo di rete (pensalo come indirizzo globale o puntatore all'intera sottorete) " ma non hai spiegato a cosa serve effettivamente, e quindi non hai spiegato perché non può essere usato per un host
Grezzo,

2
Aggiornato il mio post. La linea di fondo è che l'assegnazione dell'indirizzo di rete a un dispositivo è contro le specifiche e mentre si potrebbe cavarsela usando in una piccola rete stub si corre comunque il rischio che se il router ottiene un aggiornamento software (o se si cambiano router ) che il dispositivo o l'intera rete potrebbero smettere di funzionare correttamente.
TheSteven

3

RFC 1122 ("Requisiti per host Internet - Livelli di comunicazione") lo proibisce:

Gli indirizzi IP non possono avere il valore 0 o -1 per nessuno dei campi <Numero host>, <Numero rete> o <Numero sottorete>


1
Vero per quanto va. Ma se effettivamente vai alla sezione 3.3.6 come suggerisce, otterrai la spiegazione completa.
Michael Hampton

@MichaelHampton Perché BSD 4.2 utilizza 0 come broadcast?
Grezzo,

3
@Grezzo Praticamente. Sei bloccato con questo perché gli anni '80 non moriranno.
Michael Hampton

0

In realtà la risposta è la base della sottorete. L'IP "tutti zeri" della tua sottorete combinato con l'id di rete viene utilizzato per calcolare la destinazione del pacchetto.

Nel tuo esempio hai una sottorete di 255.255.255.0. Qualsiasi dispositivo che conosce il protocollo TCP / IP utilizzerà la maschera di rete combinata con l'indirizzo IP per calcolare se il pacchetto è destinato alla rete locale (eseguendo un'operazione logica AND) o se deve essere inviato attraverso il gateway / router.

Quindi immagino che il motivo per cui l'IP non può essere utilizzato è perché è già utilizzato per "definire" i confini della rete insieme alla maschera di rete in base alla progettazione.


Dici che " Qualsiasi dispositivo che conosce il protocollo TCP / IP utilizzerà la maschera di rete combinata con l'indirizzo IP per calcolare se il pacchetto è destinato alla rete locale (eseguendo un'operazione logica AND) ", ma ANDing 83.23.159.0 con 255.255 .255.0 e ANDing 83.23.159.1 con 255.255.255.0 producono lo stesso risultato (83.23.159.0), quindi l'utilizzo di questo calcolo per capire se è destinato alla rete o al router funziona ancora anche quando un host ha l'indirizzo .0
Grezzo

0

Mi è stato richiesto di ripubblicare la mia risposta da NetworkEngineering , quindi lo farò con alcune modifiche per questo sito.

In RFC919 , fa riferimento all'accettazione generale dell'indirizzo di rete:

However, as a notational convention, we refer to
networks (as opposed to hosts) by using addresses with zero fields.
For example, 36.0.0.0 means "network number 36"

Ciò fornisce una convenzione che dovrebbe chiarire la nostra comprensione se qualcuno dovesse menzionare "10.1.2.0" come rete e non un host sulla rete.

Da lì, l'uso di "0" in un indirizzo IP è stato definito in RFC923 e riportato in RFC successivi:

Special Addresses:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

Questo esempio fornisce un host specifico sulla rete corrente (0.0.0.37) utilizzando gli 0 nelle porzioni di rete dell'indirizzo, ma in realtà non chiarisce il caso opposto (0 nella porzione dell'host dell'indirizzo). Tuttavia, poiché ha definito "0" come "questo".

In RFC1060 l'indirizzo "0.0.0.0" era chiaramente documentato come "questo host su questa rete":

     (a)   {0, 0}

        This host on this network.  Can only be used as a source
        address (see note later).

Poiché tutti gli zero per la parte host dell'indirizzo significavano "questo host", ne consegue logicamente che non è utilizzabile come indirizzo host.

Tornare a rispondere direttamente alle tue domande:

  1. La destinazione di un pacchetto IP è mai impostata sull'indirizzo IP della sottorete?
  2. Se sì, in quali casi e perché?
  3. Se no, allora perché non liberare quell'indirizzo da usare per qualsiasi host?

Secondo quello che trovo negli RFC, questo non dovrebbe essere usato. Devo ammettere che non è chiaramente specificato come vorrei, ma è tutto comune in molti standard. Quando gli standard sono un po 'meno rigidi su un punto, l'industria sembra "sistemarsi" in un'interpretazione generalmente accettata.

Inoltre, in base al contenuto del software RFCs può essere scritto per presumere che questo indirizzo sia usato per indirizzare la rete e non un determinato host. O ancora più letteralmente come una sorta di "loopback" (ovvero questo host sulla rete specificata).

Quindi perché alcuni sistemi operativi ne consentono chiaramente l'utilizzo? Immagino che molte cose dipendono dal tempo / risorse dello sviluppatore o che nessuno ha davvero pensato di aggiungere il controllo di validità. La logica deve essere un po 'più coinvolta di "se termina in 0" poiché una sottorete più grande (a / 23 o più grande) conterrà un indirizzo IP valido di .255 e .0 (ovvero 10.1.2.0/23 contiene entrambi IP validi indirizzo di 10.1.2.255 e 10.1.3.0). Sebbene alcune organizzazioni evitino anche l'uso di tali indirizzi validi in subnet più grandi per evitare eventuali problemi strani con software che non supporta correttamente le subnet moderne.

Quanto al perché non liberare quell'indirizzo IP, si riduce semplicemente a costi / benefici. Ci vorrebbe molto tempo e sforzi per apportare questa modifica per recuperare un indirizzo IP per sottorete e in quanti casi è necessario un indirizzo IP aggiuntivo, sarà sufficiente un solo indirizzo? È molto più semplice aggiungere una seconda sottorete o ampliare la sottorete corrente, potenzialmente offrendoti molti indirizzi da utilizzare invece di uno solo senza apportare modifiche importanti a nessun software / hardware in atto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.