The mistakes and missed opportunities in the design of IPv6
ipv6.hanazo.no
ipv6.hanazo.no
Nobody wanted to touch middleboxes, routers, etc. half of the internet is running on software that is 10 years old, trunk networking is several times older. Very reliable and known of all its quirks, so it's unlikely to be replaced. New ISP's are the most likely to deploy ipv6 natively, and such ISP have to compete with other new and old ISP. Consumers don't care as long as things work most of the times, which ipv4 is _good enough_.
I would love to have a way to route my entire host to the internet, as it would make certain things easier, but I'm in the minority. Government policy could help ease the pain by requiring public institutions to implement it, but that's also a political problem.
I'd say it's more human nature.
We can see the problem looming in the horizon, we think we have some solution but implementing it will be painful now. However, the current solution isn't very painful yet, so it's better near-term to procrastinate. And so we postpone the change.
If IPv4 had some flaws that seriously hurt back in the mid-90s, we'd surely be over on IPv6 or something else by now.
IP Addresses were always interface-bound. And you always could have multiple addresse on the same interface. Your IPv4 loopback device has 2^24 addresses bound to it right in this moment. Do ping on 127.12.34.56 and you will see.
In addition, the manpage for ip-address makes this clear:
> The address is a protocol (IP or IPv6) address attached to a network device. Each device must have at least one address to use the corresponding protocol. It is possible to have several different addresses attached to one device. These addresses are not discriminated, so that the term alias is not quite appropriate for them and we do not use it in this document.
There's also ip unnumbered where an interface can reuse ip from one interface (typically from loopback) on other interfaces.
127.0.0.0/8 - This block is assigned for use as the Internet host
loopback address. A datagram sent by a higher-level protocol to an
address anywhere within this block loops back inside the host. This
is ordinarily implemented using only 127.0.0.1/32 for loopback.
-- https://datatracker.ietf.org/doc/html/rfc5735#section-3An ICMP Ping is a datagram in the sense of the second sentence.
Also:
This is ordinarily implemented using only 127.0.0.1/32 for loopback.
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>The need for CGNAT on IPv4 I can understand, it shows the extent of the problem and cost of acquiring IPv4 addresses, but they are also choosing to not deploy IPv6. Unlike the older ISPs they have no legacy to worry about with hardware to be upgraded and reconfigured and potentially a complex roll out, some of these companies are mere years old. When that use case can't bring IPv6 to the ISPs I have no idea what will.
https://apenwarr.ca/log/20170810
It has been submitted many times here:
https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...
You will find at the end that it has received an update of sorts here:
http://borg.uu3.net/~borg/?ipv6
It basically means, you grab IPv4 implementation, extend address space to 64bit, call it IPv6, vioala. Problem solved.
IPv4 was battle proven for years. It mistakes were sorted out (CIDR addressing, ARP poisoning, DHCP/BOOTP, etc). It was widely understood. NAT is okey, CGNAT is not. The only problem was the address space. And they failed it...
Of course you probably never worked with source routing in IPv4 - I spent a lot of time testing it because marketing couldn't prove none of our customers used it. Even then nearly all routers shipped configured to drop any packet with source address routing, but to comply with the rfcs we had to make it work.
The only place where source routing is used these days is MPLS-SR aka Segment Routing. The edge router precompute the path and sets all labels. Core routers just pop those labels and switch.
Most of time you just use normal routing or ocassionaly PBR (Policy Based Routing) with is not source routing. Src IP can be one of the parameters to decide.
123.123.123.123/48 or whatever would be completely useless and dropped by an incompatible router and a server wouldn’t know what the hell to send its packets back to if it even got a response from something with that.
By reducing the amount of work needed in order to get the new thing implemented. IPv4 is super simple by comparison to IPv6. I'd say there's at least an order of magnitude more complexity and legacy in IPv6 than in IPv4. Just look at the number of IPv4 vs IPv6 RFCs.
> 123.123.123.123/48 or whatever would be completely useless and dropped by an incompatible router [...]
It would still have been a new protocol, just able to share a lot of source code with IPv4.
I share the author's suspicion that 8-byte addresses would have made a world of difference in IPv6 adoption. It's hard to understand nowadays just how slow many networks were back then - 28.8kb/s dialup modems were introduced in 1994, and 56k wasn't available until 1997 or 1998. Two 16-byte addresses take 9ms to transmit at that speed.
Nobody wants IPv6. It's been 30 years now and we're what 60% complete? By any metric this is a massive failure.
Until IPv6 can enable some societal benefit the transition will continue to just limp along.
People buy products not technology.
> Nobody wants IPv6. It's been 30 years now and we're what 60% complete? By any metric this is a massive failure.
Yeah, this is a massive generalization, but I get the point you want to communicate.
IPv6 could have had a way to explicitly identify in the IPv6 header the route to the destination by AS number. I don't mean that applications should have been aware of AS numbers -- that could have been a system feature, or a first border gateway feature.
This would have made routers cheaper by making their routing tables much smaller (2^16 routes max) and would have made number portability easier by making it more tolerable to have huge IP->AS lookup tables outside the core routers. Though on the flip side it might have led to more fragmentation of the address space, so maybe it's better the way it is.
Nail on head. This is obvious not only in retrospect, but also to anyone just learning networking. We somehow expected the entire planet to become the death star with every blinking LED having a unique address.
It's obvious.
9,000,000 AD
Seems like 128bit wasn't enough.Then you just didn't read enough into IPv6 documentation yet. IPv6 addresses can be short if you want because of the `::` operator.
Example: Instead of IPv4 where you'd have the addresses `10.0.0.2` - `10.0.0.100` for clients on your LAN + a single global IPv4 address, you just have `2001:db8::2` - `2001:db8::100` (where `2001:db8` is the "house address" part of your LAN and `2-100` is the specific device address)
ULA makes it somewhat better, but not that much.
In my view, IPv6 requires DNS for all hosts to be manageable. We have mDNS which, when it works, makes that easier for internal hosts, but for external IPs using DynDNS is required.
Not saying all those changes were bad, but at least for me it also makes thinking about IPv6 when using it much more foreign than if it had been just a larger address space.
We are stuck here because the Internet runs on devices no one cares enough/has enough budget to update.
(This does point to the fact that maybe ipv6 and the associated implementations should have been designed with a view to a dual-stack mode which is basically "flip a switch and it'll mirror your ipv4 setup so you don't have to think about it until you locally need more address space", but I don't know if that's something that would have actually been feasible. But a lot of the complaining about ipv6 is because it was designed to operate fairly differently from ipv4 in a few keys ways which are not necessarily always better and add friction to the migration process)
If you think about it, that is what dual-stack is. You don't have to do anything unless you want more address space.
The issue is that often locally one doesn't need more address space, but the Internet as a whole does.
Whatever the technical merits/demerits of the protocol, I believe this brain-damaged approach to describing addresses is behind the “failure” of IPv6.
MAC addresses seem to thrive, both in Ethernet and Bluetooth. Sure, it's only 48 bits, but it's a bunch of hexadecimal digits with colons.
IPv6 failed because (1) it demanded too much of the networking hardware, (2) was a stupidly complex beast compared to IPv4 and (3) had the catch-22 of requiring both producers and consumers to upgrade at the same time to even make it usable, let alone widely beneficial. (Discounting 6to4 and other local patches.)
However, since I upgraded my AP, I realized my ISP actually does support IPv6 really well, so perhaps we're close now...
Grandparent is engaging in the classic tech industry tradition of talking confidently about something they have very little knowledge about. Surely old people learning hex isn't what's stopping IPv6 adoption but why not, they explained IP addresses it to their Nana once at Christmas (you never visit!) and she nodded politely and so they're an expert on networking.
I for one to still to this day and age don't really understand IPv6 addresses, and admittedly haven't tried much. I typically disable IPv6 at the kernel because it's been nothing but trouble.
On the contrary, the IPv6 headers have been explicitly simplified a lot in comparison with IPv4.
The increased complexity for the networking hardware has come only from the requirement of supporting both IPv4 and IPv6, instead of only one of them.
In my opinion, the most significant mistake of IPv6 has been that the IPv4 address space has not been considered a subset of the IPv6 address space.
Had this been done, it would have been relatively easy to mix arbitrarily in a network ancient IPv4 equipment that has never been updated with equipment implementing IPv6 and the gradual transition between the two protocols would have been very easy.
This suggestion has gotten brought up often over the past few decades.
Remember that every IP packet has a destination and source address. There is no physical way for a v4-only host to directly communicate with another host which has an address from a larger address space. Doing so requires NAT. Which can be and is used today for v4-v6 connectivity.
I'm rolling out services on v6 only now for my hobby projects. Just next week, I'll be switching over our company backups to v6 because I can have a dedicated port 22 on the backup machine instead of port forwarding. I've been running company VPNs v6-only (inside the VPNs) for some years now. Our corporate services and my private hobby projects are all v6-enabled (in addition to v4), the latter since 2018 or something.
A non-techie friend of mine has CGNAT at home on v4, and simply used his consumer-grade router to open a port to the v6 address of his NAS. He and some friends and colleagues from his Uni been using that for half a year before they stumbled into a situation where somebody had no v6 address and could not access the NAS.
I think we're getting there fast.
How are you measuring complexity?
IPv4 started simple, but had a lot of extensions (literally header "options") to fix and mitigate various issues and underspecified behaviour.
IPv6 started more complex, but had a lot of those shortcomings addressed from decades of experience in the real world.
In the Linux kernel, IPv6 is actually implemented with fewer lines of code than IPv4 (as of 6.12.19, IPv4 = 82kloc, IPv6 = 58kloc).
Also the post leaves something out that I think is equally bad: that hideous user hostile :-separated ASCII form. Just fixing this could really help adoption. What were they thinking? Using a character that requires a shift? And conflicts with the URL format?
“Use DNS” is the usual answer, and is a quick way to tell someone has never done IT or networking in the real world. DNS is a fragile inflexible protocol that requires standing up servers. It works for what it does but it does not eliminate the need for engineers to schlep IPs around.