Qual è la differenza tra l'indirizzo IP 0.0.0.0 e 127.0.0.1?


220

So che 127.0.0.1 ~ 127.255.255.254 sono gli indirizzi IP di loopback per la maggior parte dei sistemi operativi moderni e questi indirizzi IP possono essere utilizzati per fare riferimento al nostro computer.

Ma cos'è 0.0.0.0? Sembra che si riferisca anche al computer locale, quindi qual è la differenza ?

E potresti spiegarmi le seguenti connessioni IP:

screenshot di netstat -an output


6
Dai anche un'occhiata a questa domanda, in quanto fornisce dettagli su ciò che 0.0.0.0 è (e non è): serverfault.com/questions/228629/…
Ellie Kesselman,

Un moderno sistema operativo ::1userebbe come indirizzo di loopback.
Kasperd,

Risposte:


157

L'unica cosa è che non stai dicendo "tutti gli indirizzi dovrebbero avere accesso" - ciò avviene nei firewall e / o nel software del server e / o in altri livelli di sicurezza come tcpwrappers.

0.0.0.0, in questo contesto, significa "tutti gli indirizzi IP sul computer locale" (in effetti probabilmente "tutti gli indirizzi IPv4 sul computer locale"). Quindi, se la tua macchina web server ha due indirizzi IP, 192.168.1.1 e 10.1.2.1, e permetti a un demone server web come apache di ascoltare su 0.0.0.0, sarà raggiungibile in entrambi questi indirizzi IP. Ma solo a ciò che può contattare quegli indirizzi IP e le porte web.

Si noti che, in un diverso contesto (routing), 0.0.0.0 generalmente indica il percorso predefinito (il percorso verso "il resto" di Internet, a parte i percorsi nella rete locale ecc.).


quindi vuoi dire che il socket del server web è associato a tutti gli indirizzi disponibili quando è in ascolto su 0.0.0.0?
onmyway133,

0.0.0.0indica il percorso predefinito solo se è accompagnato dal prefisso /0(o maschera di rete 0.0.0.0)
minmaxavg

Da notare: se un processo è in ascolto su 0.0.0.0, sarà raggiungibile agli indirizzi IP di tutte le interfacce di rete della macchina che includono l'indirizzo attualmente configurato dell'interfaccia di loopback. Ma se il processo ascolto solo su una porta <portNumber> di un indirizzo di loopback, ad esempio 127.0.0.1, e quindi il processo è raggiungibile solo dalla stessa macchina per il targeting esattamente 127.0.0.1: <portNumber> . Prova questo strumento Python per giocare!
Gab 是 好人

77

Quando un servizio è in ascolto su 0.0.0.0 significa che il servizio è in ascolto su tutte le interfacce di rete configurate, mentre in ascolto su 127.0.0.1 il servizio è associato solo all'interfaccia di loopback (disponibile solo sulla macchina locale)


38

L'indirizzo IP 0.0.0.0può avere significati molto diversi, a seconda di dove viene utilizzato.

  • Non è un indirizzo valido da assegnare a un'interfaccia di rete effettiva, insieme a qualsiasi altro indirizzo nella sottorete 0.0.0.0/8 (ovvero qualsiasi indirizzo che inizia con 0.).
  • Non può essere utilizzato come indirizzo di origine su nessun pacchetto IP, a meno che ciò non accada quando un computer non conosce ancora il proprio indirizzo IP e sta tentando di acquisirne uno (esempio classico: DHCP).
  • Se utilizzato in una tabella di routing, identifica il gateway predefinito; una route a 0.0.0.0 è quella predefinita, ovvero quella utilizzata quando non è disponibile una route più specifica per un indirizzo di destinazione.
  • Infine, se visto nell'output del netstatcomando (che è quello che hai richiesto), significa che un determinato socket è in ascolto su tutti gli indirizzi IP disponibili del computer; quando un computer ha più di un indirizzo IP, un socket può essere associato solo a un indirizzo e una coppia di porte specifici, oppure a una porta ea tutti gli indirizzi; se vedi un indirizzo IP lì, significa che il socket è in ascolto solo su quella porta e quell'indirizzo specifico; se vedi 0.0.0.0, significa che è in ascolto su quella porta su tutti gli indirizzi della macchina, incluso quello di loopback ( 127.0.0.1).

3
Cosa significa arricciare 0.0.0.0? Curl sta davvero contattando e inviando una richiesta attraverso le interfacce disponibili? Come fa a sapere quale interfaccia è quella giusta? Capisco come un server potrebbe ascoltare su tutte le interfacce, ma qual è il meccanismo per un client di richiedere tutte le interfacce come quando faccio curl 0.0.0.0 o curl [::].
CMCDragonkai,

1
Molto probabilmente il sistema operativo ti impedirà di farlo, poiché non ha senso solo dal punto di vista della rete. Provare ping 0.0.0.0su un sistema Windows genera un messaggio di errore.
Massimo,

curl 0.0.0.0cede connection refusedsu Arch Linux. ping 0.0.0.0d'altra parte, sembra essere un alias per il ping 127.0.0.1quale funziona bene.
Matthias Braun l'

@MatthiasBraun connection refusedpotrebbe essere perché l'arricciatura per impostazione predefinita tenta di connettersi alla porta 80 / tcp. Prova a trovare le porte aperte con nmap -sV localhoste poi per esempio se 631 / tcp: curl 0.0.0.0:631.
Pablo A

27

La risposta di Lee B è giusta, ma ecco alcuni RFC rilevanti nel caso tu sia interessato.

0.0.0.0:

Da RFC1122 , sezione 3.1.2.3:

Riassumiamo ora i casi speciali importanti per gli indirizzi IP di classe A, B e C, utilizzando la seguente notazione per un indirizzo IP:

            { <Network-number>, <Host-number> }

        or
            { <Network-number>, <Subnet-number>, <Host-number> }

...

          (a)  { 0, 0 }

             This host on this network.  MUST NOT be sent, except as
             a source address as part of an initialization procedure
             by which the host learns its own IP address.

Solo che "questo host su questa rete" ... come afferma la risposta di Lee B, si traduce in tutti gli indirizzi IP disponibili sul tuo host. L'hosting di un servizio su 0.0.0.0 ospiterà automaticamente quel servizio su ogni interfaccia indirizzabile.

127.0.0.1:

Da RFC5735 :

127.0.0.0/8 - Questo blocco è assegnato per l'uso come indirizzo di loopback dell'host Internet. Un datagramma inviato da un protocollo di livello superiore a un indirizzo in qualsiasi punto di questo blocco ritorna all'interno dell'host. Questo è normalmente implementato usando solo 127.0.0.1/32 per il loopback. Come descritto in [RFC1122], Sezione 3.2.1.3, gli indirizzi all'interno dell'intero blocco 127.0.0.0/8 non compaiono legittimamente su nessuna rete.

La differenza tra 0.0.0.0 e l'indirizzo di loopback 127.0.0.1 è che l'indirizzo di loopback è progettato per consentire un'interfaccia IP perfettamente funzionante all'interno dell'host stesso, indipendentemente dall'aspetto del resto della configurazione di rete. Qualsiasi traffico inviato al dispositivo di loopback viene immediatamente ricevuto su di esso. Non è tanto che la rete di loopback "si riferisce" al tuo host ... è più come se tu avessi un segmento di mini rete nel tuo host a cui dispositivi, processi e socket possono essere aperti e connessi.


4

In parole povere: ascoltare su 0.0.0.0 significa ascoltare da qualsiasi luogo che abbia accesso in rete a questo computer, ad esempio da questo stesso computer, dalla rete locale o da Internet, mentre ascoltare su 127.0.0.1 significa ascoltare solo da questo stesso computer

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.