Perché un indirizzo di rete non può essere un indirizzo host valido?


18

Quindi ... ho studiato per CCNA e simili e ho lavorato con la rete IP almeno negli ultimi 8 anni circa. Ho sempre visto e mi è stato detto che l'indirizzo di rete per una sottorete non è un indirizzo host valido. Ora prima comincerò dicendo che so che questo è vero. La mia domanda è più ... c'è un motivo tecnico che non può essere utilizzato o è stato semplicemente concordato arbitrariamente quando è stata progettata la specifica? Capisco perché non è possibile utilizzare un indirizzo di trasmissione (perché è REALMENTE utilizzato). Il fatto è che quando vedo un indirizzo di rete utilizzato è normalmente solo nel routing che utilizza specificamente gli indirizzi NETWORK. Stando così le cose (indirizzi di rete utilizzati solo quando ti aspetti un indirizzo di rete) c'è qualche ragione tecnica per cui non possono avere l'indirizzo di rete un indirizzo host valido effettivo?

Risposte:


16

Per quanto ho capito, "indirizzo di rete" come indirizzo speciale è un artefatto proveniente dalle classiche reti IP del passato. Oggi usiamo Classless Inter-domain Routing ( CIDR ) su Internet, che non ha il concetto di un indirizzo di rete (se guardi RFC 4632 collegato sopra, vedrai che elenca 256 possibili indirizzi IP per legacy Blocco "C", ad es. Nessun indirizzo riservato per l'indirizzo di rete o broadcast (sebbene le trasmissioni siano definite essenziali in altri RFC).

Detto questo, non dovresti ancora assegnare un indirizzo di rete a un host specifico in una rete: l'indirizzo di rete è essenziale per il routing. Questo concetto è ampiamente utilizzato nelle RFC ( RFC 1812 ). Basta guardare le tabelle di routing ( routecomando), vedrai come il tuo indirizzo di rete locale viene utilizzato per separare il traffico di rete locale da ciò che deve passare attraverso il router. Cosa succederebbe se quell'indirizzo di rete locale fosse assegnato a qualche host?

Ancora peggio: è meglio non assegnare indirizzi IP che finiscono in zero anche se questo indirizzo non è un indirizzo di rete. Ad esempio, se la tua rete è 10.10.0.0/255.255.0.0, l'indirizzo IP 10.10.5.0 non è il tuo indirizzo di rete, ma è meglio non assegnare tale IP anche se è completamente valido anche su reti IP di classe. Alcuni software legacy / stack IP potrebbero avere problemi con esso.

AGGIORNAMENTO: di goblinlord

Secondo RFC 1812 (Sezione 5.3.5.2) ciò che chiamiamo un indirizzo di rete era originariamente utilizzato per "trasmissioni dirette" che avrebbero inviato un pacchetto di trasmissione alla rete desiderata. Questa funzione è stata resa obsoleta a causa degli attacchi SMURF. La funzione è stata ufficialmente modificata in RFC 2644 . Successivamente, ulteriori implementazioni dovrebbero far cadere silenziosamente i pacchetti con un indirizzo di origine come descritto (l'indirizzo di rete). Mentre questo è ciò che dovrebbe accadere, sono curioso di sapere quante implementazioni lo fanno effettivamente.

Questo è ulteriormente aggiunto a RFC 3021 quando è stata indirizzata la sottorete / 31.


5
@grawity: non sempre. Solo in una rete più grande di / 31. Ad esempio P2P può avere due indirizzi e nessun indirizzo di trasmissione.
haimg

3
Hmmm ... mi piace la prima parte della risposta ... che è un artefatto da reti IP di classe. Il mio problema con la seconda parte è che le tabelle di routing vengono utilizzate specificamente per instradare verso una rete. A quanto ho capito, la tabella di routing è solo vista per instradare verso una rete a cui il ricevitore non è attivo (IP di destinazione non parte della tua sottorete / rete). Stando così le cose ... quando si guarda una tabella di routing è chiaro che gli indirizzi in essa contenuti sono indirizzi di rete e non indirizzi host, quindi separano questo da un IP dest del pacchetto host. Nel traffico effettivo, un IP dest di un indirizzo di rete non viene mai utilizzato.
Goblinlord,

1
Quindi ... c'è qualche motivo per riservarlo specificatamente se queste 2 istanze sono già separate (indirizzo di rete nella tabella di routing e IP dest quando si determina se è necessario guardare una tabella di routing).
Goblinlord,

1
@Goblinlord: nessun motivo ufficiale che ho potuto trovare (recenti RFC, ecc.). Tuttavia, così tanto software è costruito con il presupposto che l'indirizzo di rete sia "speciale", che in pratica è meglio non usarlo come indirizzo IP host.
Haimg

1
Esiste una voce di configurazione di Cisco che consente all'indirizzo di rete di essere anche un host, che esiste da almeno 10 anni ... Non l'ho mai usato, o addirittura testato, e a causa di possibili problemi di stack come menzionato, in particolare non consentire agli host di terminare con .0 o .255 sulle reti di cui ero responsabile, anche se non avevo incontrato altri indirizzi di rete o di trasmissione in uso per minori di / 24, su @Home e mentre CoreOS voleva emettere il mezzo .0 e .255 come host in / 23's e / 21s di sanbrunocable, li ho riservati manualmente.
Nevin Williams,

5

Quindi la risposta pratica è: dipende davvero. Dipende da:

  • L'indirizzo esatto e i suoi significati nelle molte RFC
  • La versione e la revisione del tuo sistema operativo
  • ... E quello del tuo router e di ogni altro router a monte
  • ... E l'intelligenza e la raffinatezza di tutti gli amministratori di rete di quei router ...

Non ho riscontrato alcun problema nell'accedere a nessun sito durante il test; sembra che alla fine sia tutto lasciato ai capricci degli amministratori di rete. Di solito non c'è modo per un dispositivo a monte di dire se un indirizzo fa parte di una rete o di un indirizzo di trasmissione, oppure no, dato che è semplicemente un indirizzo in un blocco più grande per loro ... Quindi nessun ISP ti impedirà di assegnare e utilizzando il tuo indirizzo di rete, a meno che non lo abbiano assegnato a te e il loro amministratore di rete lo abbia esplicitamente bloccato.

Sono sicuro che ci sono analisti della sicurezza e hacker là fuori che hanno statistiche follemente dettagliate su quante varianti di implementazioni di stack TCP-IP sono là fuori e cosa fanno e non accolgono o consentono e esattamente come e dove mancano il loro segno .

È un dato di fatto, sto navigando e inviando questo dal mio indirizzo di rete.

Non chiamarmi brutto netizen a meno che tu non abbia una soluzione migliore per risolvere questo castello di carte: la realtà è che se è possibile, accadrà. La realtà è che nessuno abbastanza intelligente si è seduto e ha pensato a tutto in tutte le sue possibili iterazioni per trovare un design completamente a prova di errore, prima che le persone iniziassero a usarlo - come con la maggior parte delle cose nella vita. Il risultato? Standard in cui molte cose non si sommano e / o si perdono nella traduzione.

Benvenuto nel mondo reale. Non lasciare che ciò ti dissuada dall'inseguire gli ideali ottimali sempre inafferrabili ... Non aspettarti il ​​supporto dai canali o forum "ufficiali" a meno che tu non sia disposto a sporcarti le mani e dedicarti il ​​tuo tempo e la tua vita, costruendo il consenso necessario e la navigazione politica intorno a quello.

Quindi, penso a ciò che gli altri poster stavano cercando di dire: se vuoi fare questa politica ufficiale e usarla in produzione, sei da solo. (Ma non lo sei comunque?) Forse saremo fortunati e avremo un computer intelligence che ci progetterà un IPv8 retrocompatibile con IPv4 e IPv6 e tutte le loro implementazioni non funzionanti.


Naturalmente, quando si utilizza l'indirizzo di rete, il dispositivo a cui è assegnato può ricevere tutti i tipi di traffico di trasmissione poiché alcuni stack di rete lo trattano come una trasmissione. Questi, tuttavia, generalmente non interferiscono molto in quanto vengono semplicemente lasciati cadere silenziosamente. Sono curioso di sapere quanti exploit di rete dipendono dalle peculiarità che lo circondano ...
Dagelf,

2

Sono nuovo di rete ma darò anche i miei 2 centesimi.

Se avessi una sottorete / 28 da xxx0 - xxx15 Secondo le regole predefinite avremmo 14 host utilizzabili e 2 rimanenti. i restanti sono per rete e trasmissione.

Consente, invece di seguire la regola sopra, di utilizzare effettivamente tutti i 16 host. Quindi in quel caso tutto sarebbe ok, nessun problema. Ma se fosse necessaria la comunicazione al di fuori della rete, non sarebbe possibile a causa della mancanza di risorse per inviare o ricevere le informazioni.

Non sono bravo a spiegare ma per dirla in un altro modo.

Se vivessi in una casa in una strada e la strada contenesse 14 case. Una corsia dentro e fuori per l'accesso alla strada principale.

Il mio indirizzo postale sarebbe compreso tra 1-14 Personal Street, Off Network Road.

Non sarebbe un problema per l'uomo della posta. Ora supponiamo che gli sviluppatori siano diventati avidi e abbiano aggiunto altre 2 case e si siano sbarazzati dei vicoli.

Quindi il mio nuovo indirizzo postale dovrebbe variare da 1-16 Personal Street

In questo caso l'uomo della posta sarebbe nei guai.

Questa è una supposizione, fammi sapere se sto parlando di toro.


0

L'indirizzo di rete consente di creare tabelle di route con colonna di destinazione a dimensione fissa (4 byte IPv4) e operazioni binarie a dimensione fissa in modo che il routing dell'host e il routing della rete siano effettivamente la stessa cosa.

Immagina una tabella di routing come questa: (questo PC ha una connessione parallela con un altro PC e una scheda di rete)

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

L'AND tra l'indirizzo IP e la maschera di rete fornisce esattamente ciò di cui hai bisogno, un numero di 4 byte che può essere confrontato con ciascuna riga senza ulteriori calcoli.

Quindi l'host numero zero è speciale, nel senso che dopo l'operazione AND il suo indirizzo rappresenta naturalmente l'intera rete.

Se decidessi di utilizzare il numero di rete come numero host, si otterrebbe una tabella come questa:

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

Ciò sembra legittimo, quindi suppongo che il concetto di indirizzo di rete sia utilizzato per motivi di routing e quindi è stato deciso arbitrariamente di contrassegnarlo come indirizzo speciale e vietarne l'uso come indirizzo host.

Beh ... in realtà non è così semplice. Ho deciso di provarlo (!!!):

# 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

Al momento i programmi di rete non mi permettono di usare un numero di rete come un normale indirizzo.


Considerando il tuo primo esempio di tabella di routing, penso che sia davvero un brutto modo di fare le cose ... se hai altri host nella tua sottorete .0.0 come comunicano correttamente tra loro e con l'host .0.123 senza impostare staticamente route su ogni singolo host? Non sembra proprio il modo corretto di fare le cose.
Goblinlord,

È solo un esempio immaginario, non avrei mai impostato una tabella del genere :-) L'host .123 è collegato con una connessione punto a punto mentre il resto è la solita rete Ethernet. Se si desidera che altre macchine accedano all'host .123, è necessario eseguire ulteriori operazioni, ma non è impossibile.
David Costa,

0

Durante la ricerca della risposta a questa domanda mi sono imbattuto in questo articolo di Cisco. La seguente citazione di quell'articolo lo riassume bene penso.

[...] considera l'indirizzo IP 172.16.1.10. Se si calcola l'indirizzo della sottorete corrispondente a questo indirizzo IP, la risposta a cui si arriva è la sottorete 172.16.0.0 (sottorete zero). Si noti che questo indirizzo di sottorete è identico all'indirizzo di rete 172.16.0.0, che in primo luogo era sottorete, quindi ogni volta che si esegue la sottorete, si ottiene una rete e una sottorete (sottorete zero) con indirizzi indistinguibili. Questa era precedentemente una fonte di grande confusione .

Evitare la confusione è una ragione abbastanza buona per me.


So che questa domanda è stata posta molto tempo fa, ma stavo solo rivedendo queste cose. L'articolo che citi parla di "sottorete zero" o della prima sottorete in un indirizzo di rete. Questo è qualcosa di completamente diverso e in qualsiasi rete moderna su cui ho lavorato su ogni switch ha la funzione "ip subnet-zero" abilitata. Indica anche che in questi giorni è abilitato per impostazione predefinita su tutti i loro switch (dalla versione 12 che è stata rilasciata intorno al 2003).
Goblinlord,

0

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>


0

Un indirizzo di rete non è considerato un indirizzo host ma è solo un numero. Nelle aree ad indirizzo limitato come le reti punto-punto viene spesso utilizzata una maschera / 30, che tuttavia utilizza ancora gli indirizzi host. Una pratica minore, ma raggiunge lo stesso principio è quella di utilizzare una maschera / 31 e utilizzare un'estremità come indirizzo di rete e l'altra come trasmissione.

Ex.

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
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.