IPv4 has this too. It’s normally not routable so it’s safe to ignore in both IPv4 and IPv6.
Instead of DHCP…
The following is a gross simplification, but works for understanding the most common cases:
The original (heavy emphasis on this word) idea of IP is that addresses are unique for every interface. Additionally MAC addresses (48 bits) are also unique for every interface.
In IPv4, you’re trying to make interfaces that are unique in 48 bit IDs unique in 32 bit IDs. It doesn’t take a pigeon to realize there will be collisions. Therefore you need a person to manually assign addresses. If you automate that person, that becomes DHCP.
In IPv6, you’re making a 48 bit unique ID unique in a 128 bit namespace. You literally don’t need to do anything and you can still guarantee it’s unique. That’s how you automatically assign IPv6 addresses without DHCPv6.
As for how MAC addresses are assigned uniquely, the first 24 bits are a vendor prefix. The vendors then ensure each device they produce is unique.
With ipv6 the address is too long and incomprehensible to remember.
The problem is that nobody should be memorizing arbitrary 128 bit numbers, or even 32 bit arbitrary numbers. Especially since the numbers don’t even correspond to a machine, but instead an interface on the machine. Yes, 32 bit IPv4 addresses are easier to memorize, but you shouldn’t be memorizing them in the first place. Services run off of names. If the names aren’t working, fix the name service.
Ideally NDN solves this problem completely. Every host/packet is identified by a name, not an address. If you need to fetch something, all you need to do is provide the name and somebody (doesn’t have to be the original machine) will provide it to you.
The point I’m making is that IP addresses are useful/used because they are the canonical way of reaching a service. If you have a name (via DNS), it still needs to be translated into an address because routing depends on arbitrary numerical addresses.
But they shouldn’t be, and they don’t have to be. They identify an interface, not the host. We have services on a single host running across multiple interfaces (multiple ports), or in some cases multiple services running on a single interface (k8s, cloudflare), or even sometimes multiple interfaces/servers masquerading as a single interface (DNS root servers).
The correct way to handle this is to identify services by a name, which means routing itself should be handled via name, not IP addresses. This is one of the things Named Data Networks (NDN) tries to solve. In this scheme, everything has a name. Not a numeric address. Memorizing 10.0.0.1 becomes a lot less important when you can always reach your service at “foo/bar/service”.
Needless to say, this is currently not feasible because every single IP router in the world needs to be replaced with a NDN router, in which nobody would do. Vendors have already shown that when they can adapt new technologies or implement NAT, they will implement NAT.
IPv4 has this too. It’s normally not routable so it’s safe to ignore in both IPv4 and IPv6.
The following is a gross simplification, but works for understanding the most common cases:
The original (heavy emphasis on this word) idea of IP is that addresses are unique for every interface. Additionally MAC addresses (48 bits) are also unique for every interface.
In IPv4, you’re trying to make interfaces that are unique in 48 bit IDs unique in 32 bit IDs. It doesn’t take a pigeon to realize there will be collisions. Therefore you need a person to manually assign addresses. If you automate that person, that becomes DHCP.
In IPv6, you’re making a 48 bit unique ID unique in a 128 bit namespace. You literally don’t need to do anything and you can still guarantee it’s unique. That’s how you automatically assign IPv6 addresses without DHCPv6.
As for how MAC addresses are assigned uniquely, the first 24 bits are a vendor prefix. The vendors then ensure each device they produce is unique.
The problem is that nobody should be memorizing arbitrary 128 bit numbers, or even 32 bit arbitrary numbers. Especially since the numbers don’t even correspond to a machine, but instead an interface on the machine. Yes, 32 bit IPv4 addresses are easier to memorize, but you shouldn’t be memorizing them in the first place. Services run off of names. If the names aren’t working, fix the name service.
Ideally NDN solves this problem completely. Every host/packet is identified by a name, not an address. If you need to fetch something, all you need to do is provide the name and somebody (doesn’t have to be the original machine) will provide it to you.
So a problem just came up today that encapsulates why IP addresses are still useful.
I have a webservice at http://jeopardy.local:9981, but typing that into a web browser gives “Server Not Found”.
But if I type in http://<ipaddress>:9981 it works perfectly.
It turns out that the problem is that flatpak Web browsers can’t resolve mdns names.
The world is full of stuff like this which unfortunately makes ip addresses the most reliable way to reach selfhosted services.
The point I’m making is that IP addresses are useful/used because they are the canonical way of reaching a service. If you have a name (via DNS), it still needs to be translated into an address because routing depends on arbitrary numerical addresses.
But they shouldn’t be, and they don’t have to be. They identify an interface, not the host. We have services on a single host running across multiple interfaces (multiple ports), or in some cases multiple services running on a single interface (k8s, cloudflare), or even sometimes multiple interfaces/servers masquerading as a single interface (DNS root servers).
The correct way to handle this is to identify services by a name, which means routing itself should be handled via name, not IP addresses. This is one of the things Named Data Networks (NDN) tries to solve. In this scheme, everything has a name. Not a numeric address. Memorizing 10.0.0.1 becomes a lot less important when you can always reach your service at “foo/bar/service”.
Needless to say, this is currently not feasible because every single IP router in the world needs to be replaced with a NDN router, in which nobody would do. Vendors have already shown that when they can adapt new technologies or implement NAT, they will implement NAT.
Edit NDN wikipedia article https://en.wikipedia.org/wiki/Named_data_networking