Vraag Wat is het verschil tussen IP-adres 0.0.0.0 en 127.0.0.1?


Ik weet dat 127.0.0.1 ~ 127.255.255.254 de loopback IP-adressen zijn voor de meeste moderne besturingssystemen en deze IP-adressen kunnen worden gebruikt om naar onze eigen computer te verwijzen.

Maar wat is 0.0.0.0? Het lijkt erop dat het ook naar de lokale computer verwijst, dus wat is het verschil?

En, kunt u de volgende IP-verbindingen voor mij uitleggen:

screenshot of netstat -an output


207
2017-10-25 07:22


oorsprong


Bekijk ook deze vraag, want deze geeft details over wat 0.0.0.0 is (en niet is): serverfault.com/questions/228629/... - Ellie Kesselman
Een modern besturingssysteem zou gebruiken ::1 als loopback-adres. - kasperd


antwoorden:


Het enige ding is dat u niet zegt "alle adressen zouden toegang moeten hebben" - dat gebeurt in uw firewall (s) en / of de serversoftware en / of andere beveiligingslagen zoals tcpwrappers.

0.0.0.0 betekent in dit verband "alle IP-adressen op de lokale computer" (in feite waarschijnlijk "alle IPv4-adressen op de lokale computer"). Dus als uw webservermachine twee IP-adressen heeft, 192.168.1.1 en 10.1.2.1, en u staat toe dat een webserverdaemon als apache op 0.0.0.0 luistert, dan is deze op beide IP-adressen bereikbaar. Maar alleen voor wat contact kan maken met die IP-adressen en de webpoort (en).

Merk op dat, in een andere context (routing), 0.0.0.0 meestal de standaardroute (de route naar "de rest van" het internet betekent, afgezien van routes in uw lokale netwerk, enz.).


143
2017-10-25 08:55



Dus je bedoelt dat de socket van de webserver gebonden is aan beschikbare adressen als het luistert op 0.0.0.0? - onmyway133
0.0.0.0 betekent de standaardroute enkel en alleen als het vergezeld gaat van een voorvoegsel /0 (of netmasker 0.0.0.0) - minmaxavg
Om op te merken: als een proces luistert naar 0.0.0.0, zal het bereikbaar zijn op IP-adressen van alle netwerkinterfaces van de machine, waaronder het momenteel geconfigureerde adres van de loop-back-interface. Maar als het proces alleen luistert op een poort <poortnummer> van een loopback-adres, bijvoorbeeld 127.0.0.1, en dan is het proces alleen bereikbaar van dezelfde machine door gericht op exact 127.0.0.1: <poortnummer>. Proberen deze python gereedschap  spelen! - Gab是好人


Wanneer een service luistert op 0.0.0.0 betekent dit dat de service luistert op alle geconfigureerde netwerkinterfaces, bij luisteren op 127.0.0.1 is de service alleen gebonden aan de loopback-interface (alleen beschikbaar op de lokale computer)


75
2017-10-25 07:33





Het IP-adres 0.0.0.0 kan heel verschillende betekenissen hebben, afhankelijk van waar het wordt gebruikt.

  • Het is geen geldig adres dat moet worden gegeven aan een daadwerkelijke netwerkinterface, samen met een ander adres in het 0.0.0.0/8 subnet (dat wil zeggen, elk adres dat begint met 0.).
  • Het kan niet worden gebruikt als het bronadres van een IP-pakket, tenzij dit gebeurt wanneer een computer nog steeds zijn eigen IP-adres niet kent en probeert er een te verwerven (klassiek voorbeeld: DHCP).
  • Als het wordt gebruikt in een routeringstabel, wordt de standaardgateway geïdentificeerd; een route naar 0.0.0.0 is de standaardroute, d.w.z. de route die wordt gebruikt als er geen specifiekere route beschikbaar is voor een bestemmingsadres.
  • Ten slotte, gezien in de uitvoer van de netstat commando (dat is waar je om vroeg), het betekent dat een bepaalde socket luistert naar alle beschikbare IP-adressen die de computer heeft; wanneer een computer meer dan één IP-adres heeft, kan een socket alleen aan een specifiek adres en poortpaar of aan een poort en allemaal adressen; als je daar een IP-adres ziet, betekent dit dat socket alleen op die poort en dat specifieke adres luistert; als je het ziet 0.0.0.0, het betekent dat het naar die poort luistert allemaal adressen van de machine, inclusief de loopback-one (127.0.0.1).

38
2017-08-12 06:45



Wat betekent het als je 0.0.0.0 omverwaart? Neemt curl feitelijk contact op en verstuurt een verzoek via beschikbare interfaces? Hoe weet het welke interface de juiste is? Ik begrijp hoe een server op alle interfaces kan luisteren, maar wat is het mechanisme voor een client om alle interfaces aan te vragen, bijvoorbeeld wanneer ik 0.0.0.0 of krul [::] krul. - CMCDragonkai
Het besturingssysteem zal je waarschijnlijk blokkeren om dat te doen, omdat het niet alleen logisch is vanuit het perspectief van netwerken. Proberen ping 0.0.0.0 op een Windows-systeem resulteert in een foutmelding. - Massimo
curl 0.0.0.0 opbrengsten connection refusedop Arch Linux. ping 0.0.0.0, aan de andere kant, lijkt een alias te zijn ping 127.0.0.1 dat werkt prima. - Matthias Braun
@ MatthiasBraun het connection refused is mogelijk omdat krul standaard probeert verbinding te maken met poort 80 / tcp. Probeer je open poorten te vinden met nmap -sV localhost en dan bijvoorbeeld voor 631 / tcp: curl 0.0.0.0:631. - Pablo Bianchi


Het antwoord van Lee B is goed, maar hier zijn enkele relevante RFC's voor het geval u geïnteresseerd bent.

0.0.0.0:

Van RFC1122, Paragraaf 3.1.2.3:

We vatten nu de belangrijke speciale gevallen samen voor Klasse A, B,               en C IP-adressen, met behulp van de volgende notatie voor een IP               adres:

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

Alleen dat, "deze host op dit netwerk" ... zoals het antwoord van Lee B zegt vertaalt dit naar alle beschikbare IP-adressen op uw host. Hosting van een service op 0.0.0.0 host die service automatisch op elke adresseerbare interface.

127.0.0.1:

Van RFC5735:

127.0.0.0/8 - Dit blok is toegewezen voor gebruik als het loopback-adres van de internethost. Een datagram verzonden door een hoger protocol naar een adres ergens binnen dit blok loopt terug in de host. Dit wordt gewoonlijk geïmplementeerd met alleen 127.0.0.1/32 voor loopback. Zoals beschreven in [RFC1122], Paragraaf 3.2.1.3, verschijnen adressen binnen het gehele blok 127.0.0.0/8 nergens legitiem op een netwerk.

Het verschil tussen 0.0.0.0 en het loopback-adres 127.0.0.1 is dat het loopback-adres is ontworpen om een ​​volledig functionerende IP-interface binnen de host zelf mogelijk te maken, ongeacht hoe de rest van de netwerkconfiguratie, indien aanwezig, eruitziet. Alle verkeer dat naar het loopback-apparaat wordt verzonden, wordt er onmiddellijk op ontvangen. Het is niet zozeer dat het loopback-netwerk "verwijst" naar je eigen host ... het is meer alsof je een minisynchronisatiesegment in je host hebt dat apparaten, processen en sockets kan openen en waarmee je verbinding kunt maken.


26
2017-08-12 06:20





Eenvoudig gezegd: luisteren op 0.0.0.0 betekent luisteren vanaf elke locatie met netwerktoegang tot deze computer, bijvoorbeeld vanaf deze computer, vanaf een lokaal netwerk of vanaf internet, terwijl luisteren op 127.0.0.1 betekent alleen luisteren vanaf deze computer


3
2017-12-28 10:28