9

I've been seeing the IP address 0.0.0.1 being used in Nginx config and codes for OpenResty, and I have no idea what it is.

One Google result shows that it is a valid and reserved address, but I found no clue on how to use it. Can someone please help me learn more about it?

2

2 Answers 2

11

I don't think you can assign any 0.0.0.0/8 address to a host machine.

The 0.0.0.0/8 network is reserved by IANA as per RCF 5735. It's "Present use" reason is for:

"This" network.

I did find IANA IPv4 Special-Purpose Address Registry page that explains the use of special addresses. In this document it is a bit more specific about 0.0.0.0/8 and says that it's for "This host on this network"

Some important terminology

Source

  • A boolean value indicating whether an address from the allocated special-purpose address block is valid when used as the source address of an IP datagram that transits two devices.

Destination

  • A boolean value indicating whether an address from the allocated special-purpose address block is valid when used as the destination address of an IP datagram that transits two devices.

Forwardable

  • A boolean value indicating whether a router may forward an IP datagram whose destination address is drawn from the allocated special-purpose address block between external interfaces.

Globally Reachable

  • A boolean value indicating whether an IP datagram whose destination address is drawn from the allocated special-purpose address block is forwardable beyond a specified administrative domain.

Reserved-by-Protocol

  • A boolean value indicating whether the special-purpose address block is reserved by IP, itself. This value is "TRUE" if the RFC that created the special-purpose address block requires all compliant IP implementations to behave in a special way when processing packets either to or from addresses contained by the address block.

0.0.0.0/8 is listed only as a source address and is reserved-by-protocol. It is not a destination, forwardable, or globally reachable address.

After doing a bit more digging, RCF 1122 and RCF 1700 both back this up.

RCF 1122 states a { 0, <Host-number> } address 

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

RCF 1700 states a { 0, <Host-number> } address 

Specified host on this network. Can only be used as a source address.

After all of this looking, I'm still unclear exactly how one of the 0.0.0.0/8 addresses would be used. From my understanding, it seems like one of these addresses are somehow used as a source address, prior to a computer obtaining an IP address.

One guess I have is it could maybe be used in ARP or a DCHP DISCOVERY request. Even with that, in my experience the source address of a DHCP DISCOVERY is 0.0.0.0/32

UPDATE: I found one example where 0.0.0.1 is used in an ARP request for an Alcatel-Lucent line card in which it refers to 0.0.0.1 as the sender of the request.

This could be commonly used in RAPS (Ring Automatic Protection Switching) cards, link aggregation/multi-chassis link aggregation, or other passive hardware.

3
  • 3
    I'm going to do more looking, and maybe message someone to see if I can get a more clear, real world explanation on how one of these addresses might be used.
    – DrZoo
    May 15, 2019 at 2:23
  • 1
    In this case, according to the configuration notes for this OpenResty load balancer, it is server 0.0.0.1; # just an invalid address as a place holder. May 15, 2019 at 3:39
  • 3
    @Anaksunaman I found one example, which I added to the answer.
    – DrZoo
    May 15, 2019 at 4:40
0

All IP addresses with zero in the first octet (denoted as 0/8 or 0.0.0.0/8 or 0.0.0.0 to 0.255.255.255) were reserved and designated for use in potential device autoconfiguration, before DHCP or its predecessor BOOTP existed. RFC 1122 Section 3.2.1.3 specifies the use of the addresses in 0/8 as follows:

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

The only IP address out of this range that is actually in use however is 0.0.0.0, the rest remained reserved but unused ever since.

There is an ongoing effort to reclaim various unused/reserved/underutilized parts of the IPv4 address space called the IPv4 Unicast Extensions project. Their draft draft-schoen-intarea-unicast-0-02 pertaining to 0/8 proposes to remove the special status (except 0.0.0.0/32) and also documents three known uses of this range:

  • RFC 3338(an IPv6 transition mechanism) used 0/8 addresses as synthetic addresses representing surrogate IPv6 addresses, but this practice has already been deprecated by RFC 6535, which indicated that this transition mechanism should switch to RFC 1918 private addresses.
  • RFC 7453 (an MPLS-related SNMP MIB definition) overloads the meaning of addresses in 0/8 by designating them as local identifiers, contrasting with IPv4 addresses. Before production use of 0/8 on the global Internet occurs, this MIB should be updated to provide a separate field for local identifiers and to deprecate the old semantics.
  • RFC 6235 and RFC 8932 both provide mechanisms for anonymizing network flow datasets that can map addresses into 0/8 in order to obscure them. Implementers SHOULD take into account that source addresses in the future may already lie in this range and will still require anonymization; an IPv4 address SHOULD NOT be assumed to have been anonymized already merely because it is within 0/8.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .