252
96
I understand that 127.0.0.1 points to localhost
, and so does 0.0.0.0 (correct me if I'm wrong). So, what's the difference between 127.0.0.1 and 0.0.0.0?
252
96
I understand that 127.0.0.1 points to localhost
, and so does 0.0.0.0 (correct me if I'm wrong). So, what's the difference between 127.0.0.1 and 0.0.0.0?
236
127.0.0.1
is the loopback address (also known as localhost).
0.0.0.0
is a non-routable meta-address used to designate an invalid, unknown or non applicable target (a no particular address placeholder).
In the context of a route entry, it usually means the default route.
In the context of servers, 0.0.0.0 means "all IPv4 addresses on the local machine". If a host has two ip addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs.
127.0.0.1 is the loopback Internet protocol (IP) address also referred to as the “localhost.” The address is used to establish an IP connection to the same machine or computer being used by the end-user.
The same convention is defined for computer’s that support IPv6 addressing using the connotation of ::1. Establishing a connection using the address 127.0.0.1 is the most common practice; however, using any IP address in the range of 127...* will function in the same or similar manner. The loopback construct gives a computer or device capable of networking the capability to validate or establish the IP stack on the machine.
Source: 127.0.0.1 – What Are its Uses and Why is it Important?
The class A network number 127 is assigned the "loopback" function, that is, a datagram sent by a higher level protocol to a network 127 address should loop back inside the host. No datagram "sent" to a network 127 address should ever appear on any network anywhere.
Source: Network Numbers
The purpose of the loopback range is testing of the TCP/IP protocol implementation on a host. Since the lower layers are short-circuited, sending to a loopback address allows the higher layers (IP and above) to be effectively tested without the chance of problems at the lower layers manifesting themselves. 127.0.0.1 is the address most commonly used for testing purposes.
Source: IP Reserved, Loopback and Private Addresses
For more information see https://askubuntu.com question What is the loopback device and how do I use it? and why is loopback IP address from 127.0.0.1 to 127.255.255.254?.
"0.0.0.0" is a valid address syntax. So it should parse as valid wherever an IP address in traditional dotted-decimal notation is expected. Once parsed, and converted to workable numeric form, then its value determines what happens next.
The all-zero value does have a special meaning. So it is "valid", but has a meaning that may not be appropriate (and thus treated as not valid) for particular circumstances. It is basically the "no particular address" placeholder. For things like address binding of network connections, the result can be to assign an appropriate interface address to the connection. If you are using it to configure an interface, it can remove an address from the interface, instead. It depends on the context of use to determine what "no particular address" really does.
In the context of a route entry, it usually means the default route. That happens as a result more of the address mask, which selects the bits to compare. A mask of "0.0.0.0" selects no bits, so the compare will always succeed. So when such a route is configured, there is always somewhere for packets to go (if configured with a valid destination).
In some cases, merely "0" will also work and have the same effect. But this is not guaranteed. The "0.0.0.0" form is the standard way to say "no particular address" (in IPv6 that is "::0" or just "::").
Source: What is the meaning of the IP address 0.0.0.0
In the Internet Protocol version 4 the address 0.0.0.0 is a non-routable meta-address used to designate an invalid, unknown or non applicable target. To give a special meaning to an otherwise invalid piece of data is an application of in-band signaling.
In the context of servers, 0.0.0.0 means "all IPv4 addresses on the local machine". If a host has two ip addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs.
In the context of routing, 0.0.0.0 usually means the default route, i.e. the route which leads to "the rest of" the internet instead of somewhere on the local network.
Uses include:
- The address a host claims as its own when it has not yet been assigned an address. Such as when sending the initial DHCPDISCOVER packet when using DHCP.
- The address a host assigns to itself when address request via DHCP has failed, provided the host's IP stack supports this. This usage has been replaced with the APIPA mechanism in modern operating systems.
- A way to specify "any IPv4-host at all". It is used in this way when specifying a default route.
- A way to explicitly specify that the target is unavailable.1
- A way to specify "any IPv4 address at all". It is used in this way when configuring servers (i.e. when binding listening sockets). This is known to TCP programmers as INADDR_ANY. (bind(2) binds to addresses, not interfaces.)
In IPv6, the all-zeros-address is written as "::".
Source: 0.0.0.0
When a client boots up for the first time, it is said to be in the Initializing state, and transmits a DHCPDISCOVER message on its local physical subnet over User Datagram Protocol (UDP) port 67 (BootP server). Since the client has no way of knowing the subnet to which it belongs, the DHCPDISCOVER is an all subnets broadcast (destination IP address of 255.255.255.255), with a source IP address of 0.0.0.0. The source IP address is 0.0.0.0, since the client does not have a configured IP address. If a DHCP server exists on this local subnet and is configured and operating correctly, the DHCP server will hear the broadcast and respond with a DHCPOFFER message. If a DHCP server does not exist on the local subnet, there must be a DHCP/BootP Relay Agent on this local subnet to forward the DHCPDISCOVER message to a subnet that contains a DHCP server.
This relay agent can either be a dedicated host (for example, Microsoft Windows Server), or router (for example, a Cisco router configured with interface level IP helper statements).
...
After the client receives a DHCPOFFER, it responds with a DHCPREQUEST message, indicating its intent to accept the parameters in the DHCPOFFER, and moves into the Requesting state. The client may receive multiple DHCPOFFER messages, one from each DHCP server that received the original DHCPDISCOVER message. The client chooses one DHCPOFFER and responds to that DHCP server only, implicitly declining all other DHCPOFFER messages. The client identifies the selected server by populating the Server Identifier option field with the DHCP server's IP address. The DHCPREQUEST is also a broadcast, so all DHCP servers that sent a DHCPOFFER will see the DHCPREQUEST, and each will know whether its DHCPOFFER was accepted or declined. Any additional configuration options that the client requires will be included in the options field of the DHCPREQUEST message. Even though the client has been offered an IP address, it will send the DHCPREQUEST message with a source IP address of 0.0.0.0. At this time, the client has not yet received verification that it is clear to use the IP address.
...
Client-Server Conversation for Client Obtaining DHCP Address Where Client and DHCP Server Reside on Same Subnet
Source: Understanding and Troubleshooting DHCP in Catalyst Switch or Enterprise Networks
This document explains how to configure a default route, or gateway of last resort. These IP commands are used:
ip default-gateway
ip default-network
and ip route 0.0.0.0 0.0.0.0
ip route 0.0.0.0 0.0.0.0
Creating a static route to network 0.0.0.0 0.0.0.0 is another way to set the gateway of last resort on a router. As with the ip default-network command, using the static route to 0.0.0.0 is not dependent on any routing protocols. However, ip routing must be enabled on the router.
Note: IGRP does not understand a route to 0.0.0.0. Therefore, it cannot propagate default routes created using the ip route 0.0.0.0 0.0.0.0 command. Use the ip default-network command to have IGRP propagate a default route.
Source: Configuring a Gateway of Last Resort Using IP Commands
3In the context of servers, 0.0.0.0 means "all IPv4 addresses on the local machine". If a host has two ip addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs. - that did it for me – Rafael Eyng – 2019-04-09T14:23:14.127
115
They are not the same.
127.0.0.1
is part of the 127/8 network which is reserved and points to the same computer.
0.0.0.0
is a special IP address that means different things depending on context.
In the Internet Protocol Version 4, the address 0.0.0.0 is a non-routable meta-address used to designate an invalid, unknown or non-applicable target. To give a special meaning to an otherwise invalid piece of data is an application of in-band signaling.
You might have mistaken 0.0.0.0 for 127.0.0.1 when you look at netstat and see the local address listening on as 0.0.0.0, but this is a different way 0.0.0.0 is used.
In the context of servers, 0.0.0.0 means "all IPv4 addresses on the local machine". If a host has two ip addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs.
In the context of routing, 0.0.0.0 usually means the default route, i.e. the route which leads to "the rest of" the internet instead of somewhere on the local network.
0.0.0.0
can also sometimes indicate a broadcast, meaning to all computers on the network. – James Mertz – 2015-08-03T15:19:42.763
8@KronoS I thought broadcasts are things like 255.255.255.255
(or more realistically something like 192.168.1.255
for a local network) – Nick T – 2015-08-03T16:51:56.183
1
@NickT Ah you are correct: A special definition exists for the IP broadcast address 255.255.255.255. It is the broadcast address of the zero network or 0.0.0.0, which in Internet Protocol standards stands for this network, i.e. the local network. Transmission to this address is limited by definition, in that it is never forwarded by the routers connecting the local network to other networks.
@KronoS You're confusing the broadcast addr with loopback. The loopback is 0.0.0.0 which as described above listens all the local addresses. The broadcast (in a simple way) is the 255 of the networks to "broadcast" to all addresses in that network. – Desorder – 2015-08-03T21:13:05.703
This is incomplete – many operating systems actually let you connect to 0.0.0.0, which then behaves like a loopback address. – user1686 – 2015-08-04T07:48:57.007
16
127.0.0.1 is one of the addresses of local computer, but any address 127.x.y.z also is another address of the computer (called "loopback address"), except 127.0.0.0 (loopback subnet) and 127.255.255.255 (broadcast address for the loopback subnet).
127.x.y.z means "here".
0.0.0.0 is totally different: 0.0.0.0 is not the address of anything, it is the joker, as *
in shell.
You can't send data to 0.0.0.0 or actively open a TCP connection to 0.0.0.0 because there is nothing there; 0.0.0.0 isn't even an unreachable or non routable address, it is meaningless in a context where an address is expected.
You can use the joker 0.0.0.0 in contexts where an address can be optionally provided, to mean I don't care.
For example, when you actively open a TCP connection to some TCP server (a TCP server is created by a passive TCP open), you need to specify the address of the TCP server (IP and port number), and you can optionally choose a local address. (Because your socket is not a server socket, nobody can open a connection to it and the address on your side of the connection is usually not very important.)
The bind
system call is used to choose the local address of a TCP socket. The data passed to bind
is really a set of constraints: constraint on IP address, constraint on TCP port. The usual text notation is IP:port. 0.0.0.0:0 means any IP and any port is acceptable, it is the null constraint. 0.0.0.0:20 means local port must be 20, any IP is acceptable (0.0.0.0:20 is used by conforming FTP servers for data connection in active mode).
The TCP/IP subsystem will choose the address for your side of the TCP connection if you don't choose one, using the routing table, based on the destination address: the local TCP socket address will be the local address associated with the route corresponding to the destination address.
I previously mentioned the shell "meta-character" *
, but the power of combining meta-characters with characters like *foo*
(any file name containing "foo") doesn't exist with IP address constraints, it's all or nothing: either a single IP address is deemed acceptable or all addresses are. Logic does not dictates that it must be this way. You could extend the interface with a richer constraint language.
Precision:
The sentence 127.x.y.z means "here" doesn't imply that all these addresses are the same. They represent different "locations" (socket addresses), inside the local "computer", inside the local IP stack actually.
Remark: a computer with virtualization (emulation, hardware virtualization, paravirtualization, whatever you can think of...) has multiple independent IP stacks.
When I typed a random address starting with 127 (e.g 127.16.23.42) in my browser, it didn't connect to localhost. – whoKnows – 2015-08-03T21:02:26.320
@whoKnows Of course. localhost is 127.0.0.1, not 127.16.23.42. – curiousguy – 2015-08-03T21:47:44.510
I see. So 127.0.0.1 means localhost, but 127.x.y.z could mean the local computer, if it was set up that way? – whoKnows – 2015-08-03T21:56:46.863
2@whoKnows No: 127.x.y.z belongs to this computer for any x y z. "localhost" is just a name for 127.0.0.1, so forget "localhost". Use the -n
or -d
flag of netstat
and related programs to show numerical addresses, not names. 127.0.0.1 is not the same IP adress as 127.16.23.42. So 127.0.0.1:80 and 127.16.23.42:80 represent distinct TCP endpoint addresses, a webserver at the one address cannot be found at the other address. – curiousguy – 2015-08-03T23:45:25.880
6
Typically you use bind-address 0.0.0.0 to allow connections from outside networks and sources. Many servers like MySQL typically bind to 127.0.0.1 allowing only loopback connections, requiring the admin to change it to 0.0.0.0 to enable outside connectivity.
1
You may be interested in this Chrome bug tracker discussion about how to handle
– Jeremy Banks – 2015-08-02T21:34:57.6970.0.0.0
in address input.7In most server configurations 0.0.0.0 means, listen on ALL addresses! This will make your server available on the internet. If you do that for some local server without any security (it's only listening on localhost, right?) that's bad. Don't do that! – Josef says Reinstate Monica – 2015-08-03T16:25:09.180
57Answer your question literally, the difference is
2130706433
. – Shaz – 2015-08-03T16:51:52.517@Josef That's where firewalls in routers come in. – None – 2015-08-03T18:31:30.863
Try
ping 127.0.0.1
vsping 0.0.0.0
. – jamesdlin – 2015-08-04T19:30:22.6072
@Mast oh, you are one of the people who setup a totally insecure system, because the firewall will fix it all? Usually, this systems then can be found with https://www.shodan.io/ :3 The next level of this mindset is "we totally can use a 5 year old WordPress installation, we got a WAF". I don't recommend anyone going down this path, ever!
– Josef says Reinstate Monica – 2015-08-05T14:45:34.960@Josef You're stating one extreme, I'm stating the other. The truth is in the middle. I'm not saying it's a good practice by the way, but under usual circumstances it isn't as dangerous as you state. – None – 2015-08-05T14:55:27.640
1It's 127.0.0.1
INADDR_LOOPBACK
vs. 0.0.0.0INADDR_ANY
which is used for socket binding to all available interfaces so you listen on all IPs of the host. – CodeAngry – 2015-08-06T00:08:17.240@Mast no (v)Server you rent is behind a restrictive firewall, usually. There are tens of thousands open servers out there (e.g. https://blog.shodan.io/its-the-data-stupid/ ) And the reason is exactly that it's so easy today to install anything in the cloud without caring about security!
– Josef says Reinstate Monica – 2015-08-06T13:50:43.2172@Shaz I'd like to upvote your comment but as it's currently at 42 I can't bring myself to do it... – Jenny D – 2018-03-27T07:44:25.477