Hacker News
points by MisterMunchkin 15 hours ago | 0 comments
I still think we should just extend the length of IPv4. In my proposed system, existing addresses would become a subnet of the new set.

Eg 192.168.0.1 becomes 0.0.0.0.192.168.0.1

And then we dish out all the new address space. You would get the network providers to handle address conversion until software and hardware has been updated. Because all the existing addresses are reserved in the new set, it doesn’t affect them.

Keeps all the nice parts of IPv4, doesn’t require everyone to switch to an entirely new system, backwards compatible with existing hardware/software. Problem solved.

[–] mort96 15 hours ago
> backwards compatible with existing hardware/software

Absolutely not. Existing IPv4 hardware and software expects addresses to be 4 bytes long. They expect packets to have a 4 byte source address at offset 12 in the header, then a 4 byte destination address at offset 16. Everything breaks if you try to give them a header with an 8 byte source address at offset 12 and an 8 byte destination address at offset 20.

[–] throw0101c 15 hours ago
> Absolutely not. Existing IPv4 hardware and software expects addresses to be 4 bytes long.

As does DNS.

"A" records are fixed at 32 bits, so you have to add a new record type and update all DNS software, plus user-space API/library code and data structures to ask for and store the new record type.

Just like IPv6.

There is no "just" adding more addresses: whatever scheme anyone comes up with is the same amount of work as IPv6.

* https://github.com/becarpenter/misc/blob/main/why6why.md

[–] malfist 13 hours ago
For every complex and difficult problem, someone has an easy, simple and wrong solution. Usually the presence of "just" is a good clue.
[–] knottn 15 hours ago
The set of all ip hardware and software is much much larger than just what currently exists, as it includes all hardware and software that is yet to be produced. Said another way, it’s a foolish consistency.
[–] mort96 15 hours ago
I responded to a claim about existing hardware/software.
[–] dspillett 15 hours ago
That would still constitute an entirely new system, just one that looks very like the previous one. So much code and other infrastructure (routing tables in hardware etc.) relies on IPv4 addresses being 32-bits not 64 and that would all need to change, complete with extra new stuff being added for that translation layer while both are in operation (which would end up being near permanent, people will find ways to keep the old stuff running as long as they can). I expect that this new scheme would just become a new version of CGNAT, “Global NAT” perhaps, with the same problems that adds.

IIRC something like that was considered when IPv6 was first being designed, be deemed insufficient for the long-term future. 64-bits is thought to be enough to stave off address starvation though, which is why IPv6 address ranges are usually assigned as /64s (my homer link has a /48 range should I wish to use it all!), so I can see your reasoning on that level.

[–] arjie 12 hours ago
128 innit? Otherwise your /64 would have no subnets.
[–] dspillett 10 hours ago
Yes, the whole address is 128 bits.

Hence my having a /64 (/48 in fact, should I ever enable more than the current /64) shows that 64-bits is enough for global addressing. If it wasn't then giving me a /64 would be part of a path to creating an address exhaustion problem just like the one with IPv4 (which was exacerbated somewhat by handing out /8 ranges unnecessarily in the early days).

[–] arjie 9 hours ago
Ah, I misunderstood while skimming the comment thread. Reasonable claim. Thanks for explaining.
[–] georgyo 15 hours ago
This is all the bad parts of ipv6 with none of the good parts...

You still need to have routers, clients, and absolutely everything to understand the new scheme to use those new addresses.

[–] charlieyu1 15 hours ago
Not using hex is a plus I guess?
[–] growse 15 hours ago
You're welcome to not use hex. For either addressing scheme.
[–] charlieyu1 11 hours ago
IPv6 is 16 bytes, the person I replied to gives a 8 bytes scheme
[–] dspillett 10 hours ago
However many bytes are used in the scheme, you could in theory use decimal or hexadecimal to represent an address in string form for either scheme. Once the string is unpacked and interpreted, the address is just a number.

Though I've never seen a v6 address represented that way, it would make then noticeably longer, so I don't know if anything will accept such a string as a valid address. Though IPv4-mapped addresses are sometimes show as a mix (::ffff:10.5.2.1 for 10.5.2.1) so maybe I'm wrong there.

Likewise I've never seen IPv4 addresses written in hex in the wild, but the relevant specs say it is valid. `ping 0xc0a82bc2` works just as well as `ping 192.168.43.194` but I doubt many forms accepting IPv4 addresses will validate that and allow it.

[–] bottled_poe 15 hours ago
And vice-versa for decimal on ipv6 if desired, I guess?
[–] throw0101c 15 hours ago
> And vice-versa for decimal on ipv6 if desired, I guess?

Or octal:

* https://networkingtoolbox.net/ip-address-convertor/represent...

[–] bluGill 15 hours ago
Computers use binary. Hex is a human convenience. For anyone in computers hex is much better than decimal for obvious reasons. For anybody not in computers hex makes no sense and I'd need weeks of math lectures (which they wouldn't do the homework for and thus fail) to explain it.
[–] Sharlin 14 hours ago
Honestly IPv4 addresses should always have been formatted in hex, like FF 00 00 69, with whatever delimiter. Would make it trivial to write directly as a 32-bit int, and parsing and formatting a string would also be cheaper. And you could have funny blocks like CAFE.0.0.
[–] WorldMaker 14 hours ago
You can indeed make good use of those funny names in IPv6. If your /64 or /56 prefix is $prefix you can assign your coffee pot to $prefix::cafe or maybe keep it just fe80::cafe if you only want link local access to your coffee pot.
[–] ndriscoll 15 hours ago
How does 192.168.0.1 talk to 192.0.0.0.0.168.0.1? Like, literally, how does it make a packet with that destination address?

The entire ipv4 space is already mapped to reserved subsets of ipv6, by the way. e.g. ::ffff:0:0/96 (i.e. 0.0.0.0.0.0.0.0.0.0.255.255.w.x.y.z) or 64:ff9b::/96. v6 devices can already "talk to" v4. The problem is the ipv6 space is obviously not a subset of ipv4, so v4 doesn't have a clean way to talk to or even about v6.

[–] zamadatix 15 hours ago
Lots have thoughts on this, few take the time to review the existing implementations/proposals and explain both how it is their approach doesn't run in to the same problems as well as the problems their proposal still doesn't resolve.

Most of the time, this results in people thinking the big problems are one set like "if only there was a way to translate" while the real remaining problems are another set like "and how do you get people to want to transition when it works well enough for those clients in the translated state".

[–] Sharlin 15 hours ago
> until software and hardware has been updated

Yeah, about that part. This is a "now draw the rest of the fucking owl" type of idea.

[–] orangeboats 14 hours ago
It's always the same with those "I hope IPv6 were just IPv4 with more octets" proposals on Hacker News, aka Godwin's law of the Internet Protocol.

It turns out when you ignore the hardest part of the problem, you can always make a good-looking proposal!

[–] mahboi 10 hours ago
That isn't the hardest part. We already got software and hardware supporting IPv6, and yet...
[–] orangeboats 10 hours ago
It still is. A lot of IoT and "smart" devices are still dreadfully slow in updating their software.
[–] mahboi 9 hours ago
Iot isn't what's holding ipv6 back. There are tons of websites and even cloud platforms with totally ipv6-capable hardware and OSes, but the services are v4-only or strongly v4-preferred.
[–] orangeboats 4 hours ago
IoT was an example, a glaring one at that.

IPv6-lacking hardware and software definitely do exist in the wild, have you seen how some programs from incompetent developers accept only IPv4 addresses in the config files? I think all of us have seen at least one such program.

Often times it's just a matter of using another function to parse the address string. But you are shit outta luck if the program is closed source.

[–] mahboi 3 hours ago
Yeah it's in the wild, but random crappy software isn't the reason all these big services are v4-only. Transitioning from v4 to v6 requires redoing your entire network, except you still have to maintain the v4 side until everyone else has done this. So it's not worthwhile unless you have an easy way to go v6-native and only use v4 at the ends, eg cellular networks.
[–] cr3ative 15 hours ago
Hey, if you want to add OAuth and JWT to that idea for some reason, boy do I have an RFC for you https://www.ietf.org/archive/id/draft-thain-ipv8-00.html
[–] teddyh 8 hours ago
It’s a draft RFC.
[–] Dagger2 7 hours ago
So is this: https://datatracker.ietf.org/doc/html/draft-meow-mrrp

Being an IETF draft means nothing at all, as covered in this IETF draft: https://datatracker.ietf.org/doc/draft-wkumari-not-a-draft/

[–] teddyh 7 hours ago
Yes, that was my point.
[–] andix 15 hours ago
There is barely any legacy hardware/software that doesn't work with IPv6. It's just not an issue.

Dual-stack is also the default, and CG-NAT exists as a fallback. For IPv6 only websites there is still the option to use a HTTP proxy.

[–] spauldo 58 minutes ago
There's still quite a few pockets of the industry where IPv6 just isn't available. Industrial control systems, for instance - there's lots of PLCs and SCADA software that are still IPv4-only. It's changing slowly, but industrial computing runs on thirty year time scales and there's still a lot of stuff out there that won't even run on modern operating systems. We use 32-bit Windows XP VMs or sometimes even FreeDOS for some of the software we use.
[–] icedchai 15 hours ago
This seems achievable if you can figure out how to fit 64-bits into 32. ;)
[–] zeroq 15 hours ago
Kids these days can fit 64-bits into a 3-bit hole, and if you squint hard enough it still sounds like a robot. Amazing times, I tell you.
[–] vrighter 14 hours ago
just put it in the square hole!
[–] _blk 15 hours ago
You just drop the top half. Or xor it? That'd make for some nice traffic-pattern art ;)

Now the reason this doesn't work is that the address length is not encoded, so if you make the address longer, no one knows about it and they [routers and destinations] just assume the wrong address and send it on or discard the frame

[–] orangeboats 15 hours ago
>Eg 192.168.0.1 becomes 0.0.0.0.192.168.0.1

How is this different from ::192.168.0.1? :)

[–] wpm 15 hours ago
I can read one at a glance and the other makes me fill in the blanks myself after having to count how many invisible blanks I need to fill in.

Of all the sins of IPv6, its tied between using ':' as the separator, and the god awful '::' "just skip writing the address because we made them too fucking big lol"

Wouldn't have been a problem if they hadn't given every square millimeter of the planet 100 billion addresses.

[–] orangeboats 15 hours ago
You are telling me ::192.168.0.1 is not immediately visible as 16-4 bytes?

Fine, let's change the question.

Without counting, how many zeroes are there in 192.168.0.0.0.0.0.1?

[–] mahboi 8 hours ago
You don't need 192.168.0.0.0.0.0.1. 40 bits covers the world easily, like 1.2.3.4.5. This doesn't mean the field has to be only 40 bits, could be 128 and you don't write the trailing 0s. Of course this means no SLAAC.

But I don't get why the other commenter was proposing putting the 0s at the beginning instead of the end. Shouldn't the new address space be under the existing subnets?

[–] throw0101c 14 hours ago
> I can read one at a glance and the other makes me fill in the blanks myself after having to count how many invisible blanks I need to fill in.

The protocol chosen for IPng, SIPP, did actually have "only" 64 bits, but this was deemed not enough as folks did not want to have to worry about running out again (amongst other reasons), and so tweaked it to have a fixed 128 bits:

* https://datatracker.ietf.org/doc/html/rfc1752

SIPP originally was variable-length capable, but it was decided fixed-length was better (e.g., for hardware like ASICs).

> Wouldn't have been a problem if they hadn't given every square millimeter of the planet 100 billion addresses.

For the record: IPv6 gives 10¹⁷ addresses per mm²; in terms of volume, 10⁸ IPv6 addresses per mm³ throughout the Earth.

[–] wpm 14 hours ago
You're right, my 100B per square millimeter undershot by six orders of magnitude.

I woulda thought 18 quintillion would've been enough addresses for the next century or two but good thing we locked in all this extra data we throw away with a '::'.

I'm sure it was all well considered by intelligent people, but it was still a dumb decision.

[–] ndriscoll 13 hours ago
What problem does 128 bits cause? Just that you don't like :: for a run of 0s? Do you need to care about ipv6 addresses in your work? Because I can tell you that when I'm trying to design simple, efficient routing and firewall rules (with e.g. 100s of thousands of endpoints across different datacenters on different continents), it's really nice to be able to subnet things the way I'd like instead of the way I must to squeeze things into the space I have, and not have to worry about backing myself into a corner later because I gave the wrong number of bits to various dimensions. And worst case, if you somehow got it wrong, just give yourself an entire /64 or more to try again, with it being compatible with what you did (no need to do a phased migration that requires reclamation as you go along).

Like I only tangentially interact with this stuff, but I can't imagine how a network operator wouldn't prefer we live in an all ipv6 world.

[–] cowlevel 10 hours ago
Don't forget you want extra bits for hierarchical routing. Companies like Amazon and cloudflare have many separate address blocks instead of one big one because that's what was available, but it means every router in the internet has to remember all their blocks instead of just one.
[–] growse 14 hours ago
My blog's hosted on either 3106689564 or 42540619367231808600192856535952785520 depending on your addressing scheme.

See, no colons in sight!

[–] mahboi 8 hours ago
whoa you got a 310 number
[–] gwbas1c 14 hours ago
I believe that was proposed before IPv6.

That being said, we should take the time to understand why IPv4 is still hanging around when IPv6 has been around since before most people got internet access. What is really holding IPv6 back?

[–] mahboi 9 hours ago
Everything in v6 was for a good reason, but it was targeting now-outdated use cases. Separately, there's no good migration path from v4. They should've kept the v4 address blocks in v6, and following the natural consequences of that, it'd be way easier to migrate. But they didn't do this with v6 because they were trying to solve the address fragmentation issue upfront, which again had valid reasoning but in hindsight wasn't the right move.
[–] binaryturtle 12 hours ago
You could just use something like fd00:dead:beef::192:168:0:1 for your internal IPv4 host(s). Basically do a human-readable mapping of your IPv4 LAN IPs into a IPv6 private space. Now you only need to remember the ULA prefix and then can continue to use your IPv4 just with colons instead dots. Problem solved. :-)
[–] throw0101c 15 hours ago
> I still think we should just extend the length of IPv4. In my proposed system, existing addresses would become a subnet of the new set.

There is no "just" extending the address length:

      So it's a matter of mathematical and physical fact that to expand
      the address size, you must change the protocol, and that means 
      [three] things immediately:

            You have to change the version number.

            You have to add new code to handle the new version.

      […]

            You need a coexistence technique so that updated systems, 
            with the new protocol, can connect to old systems that know 
            nothing of the new protocol.

      Two minutes of thought show that this third requirement has only 
      two solutions:

            (3A) Dual stack, in which the new machines speak both 
                 the old (IPv4) and new (IPng) protocol.

            (3B) Translation, in which something translates addresses
                 between the old and new protocols.
* https://github.com/becarpenter/misc/blob/main/why6why.md

* https://datatracker.ietf.org/doc/html/rfc1671

> Keeps all the nice parts of IPv4, doesn’t require everyone to switch to an entirely new system, backwards compatible with existing hardware/software. Problem solved.

You have to ship new code to every 'network element' to support your "IPv4+" plan. Just like with IPv6.

You also have to update DNS to create new resource record types ("A" is hard-coded to 32-bits) to support the new longer addresses, and have all user-land code start asking for, using, and understanding the new record replies. Just like with IPv6. (A lot of legacy code did not have room in data structures for multiple reply types: sure you'd get the "A" but unless you updated the code to get the "A+" address (for "IPv4+" addresses) you could never get to the longer with address… just like IPv6 needed code updates to recognize AAAA, otherwise you were A-only.)

You need to update socket APIs to hold new data structures for longer addresses so your app can tell the kernel to send packets to the new addresses. Just like with IPv6. In any 'address extension' plan the legacy code cannot use the new address space; you have to:

* update the IP stack (like with IPv6)

* tell applications about new DNS records (like IPv6)

* set up translation layers for legacy-only code that cannot be update to reach IPv4+-only destination (like IPv6 with DNS64/NAT64, CLAT, etc)

You're updating the exact same code paths in both the "IPv4+" and IPv6 scenarios: dual-stack, DNS, socket address structures, dealing with legacy-only code that is never touched to deal with the larger address space.

"Just adding more bits" means updating a whole bunch of code (routers, firewalls, DNS, APIs, userland, etc) to handle the new data structures. There is no "just": it's the same work for IPv6 as with any other idea.

[–] mahboi 10 hours ago
This gets brought up on every ipv6-related submission, and the basic idea is sound. https://news.ycombinator.com/item?id=48781622
[–] cowlevel 10 hours ago
Not really, it assumes people will make IPv5 devices without a reason to. If you can get them to make IPv5 you can use the same mechanism to get them to make IPv4/6 dual-stack.
[–] mahboi 10 hours ago
People already make ipv6 devices, that's not the problem though. It's also maybe possible to do ipv5 with ipv6 hardware at least on the hosts, since the v6 header is totally fine for this.
[–] cowlevel 3 hours ago
Well then how's that different from just v6?
[–] mahboi 3 hours ago
V4 address blocks, DHCP, and NAT, not SLAAC. So if I have 1.2.3.4 in ipv4, my ipv5 address is also 1.2.3.4. Ipv5 isn't a separate network from v4, it shares all the v4 state, and I can enable without giving it much thought. And once there's enough adoption, I can start handing out addresses like 1.2.3.4.5 that are incompatible with v4-only hosts.
[–] mitxela 15 hours ago
That's literally what ipv6 does.
[–] harrouet 15 hours ago
You can do this in IPv6
[–] mahboi 9 hours ago
Not really. My home IP is 71.177.17.171, how do I get an equivalent v6 that gets routed directly to me? NAT64 and 6to4 don't do this.
[–] Dagger2 7 hours ago
It's not clear what you're asking for exactly.

You have 2002:47b1:11ab::/48. If your ISP supports it, packets sent to that /48 will be delivered to you as native v6 packets, otherwise they'll be stuffed into a v4 packet which will be sent to 71.177.17.171. Or there's ::ffff:71.177.17.171 which will reach you using unmodified v4 packets.

That's two different ways your v4 address is present in v6.

[–] mahboi 7 hours ago
I would like 71.177.17.171, encoded as 2002:47b1:11ab:: or whatever static prefix, to go directly to my router as v6 packets without ever being translated to v4. 2002:47b1:11ab:: doesn't do that, it goes to a 6to4 relay and is translated to v4. I'm pretty sure every ISP will at best give you a v4 /32 and an unrelated v6 /64. I don't want that separate v6 address, I want the same logical address for both.
[–] Dagger2 3 hours ago
2002:47b1:11ab::/48 will go to your router if you announce it in BGP. It only goes to a 6to4 relay if there's no more-specific route.

(On home Internet you'll probably need your ISP to handle the announcements, like they already do for your v4 address.)

[–] mahboi 3 hours ago
Even if I owned my ISP, pretty sure no other ISP would honor that announcement. That's a reserved 6to4 range.
[–] TZubiri 15 hours ago
I recall something like this, what did you call this? ipv8?

the thing is that it does require a switch similar to ipv6. but maybe there’s a subnet that maps 1 to 1 with the legacy block?

something like this could theoretically be pinned onto ipv6 AND anyone could do it, just select a 98 bit prefix you own, and the rest of the 32 bits you can map to ipv4.

phase -1 could be tunneling traffic through a single zone proxy which would be inefficient and is purely conceptual

phase 0 would be the same, but with an anycast ipv6,same ip that resolves differently based on location, like 8.8.8.8

phase 1 would be the mapping prefix to ipv4 (and viceversa?) being distributed to the routing tables like, which could be done via application logic (most efficient), or via some deep arcane isp routing conf files, or just a hell of a lot of routing table entries for each ipv4 but duplicated, possibly programatically controlled by an application that generates router table files as a target, thus avoiding desyncs and effectively becoming the first option of application level implementation

maybe something like this already exists though

of course it’s horrible hacking (as hacking in the non crime sense often is), but it allows for a purely technical solution to issues of political and administrative nature.. which is all the rage nowadays

[–] cowlevel 10 hours ago
There already is a subnet. Actually a few. ::ffff:192.168.0.1 is reserved for when you need to pass an ipv4 address through an ipv6 API (e.g. v6 client application on a dual-stack OS on a dual-stack network) and 64:ff9b::192.168.0.1 is reserved as an actual address for NAT64 gateways to use (v6-only client, network has a NAT64 gateway somewhere on it)
[–] inglor_cz 15 hours ago
This reminds me of the following XKCD:

https://xkcd.com/927/

[–] nekusar 15 hours ago
That was kinda the way IPv5 proposed to handle it.

But the big big problem isn't windows/Linux/mac. Writing drivers for those are "easy".

The problem lies in all the networking gear speaks only IPv4 and/or 6. LLM assisted hacks can get into maintenance areas, but these devices are also built to support the least amount of things. Like, there may not be enough ram or storage to even run it.

And 20 years in, you see how well IPv6 has taken off :eyeroll:

And even on my network, I disabled IPv6. My upstream ISP is doing something that makes '6 unstable, but '4 is fine. And I find most network engineers don't have to maintain '6, so they never really learn it.

[–] spauldo 55 minutes ago
I thought IPv5 was a protocol designed for telecoms to route voice data over packet networks, though? It wasn't supposed to be a replacement for IPv4.