News for hackers. Stuff that matters.
Re:Go 1.17 is deprecating the traditional use of 'go get' by XorNot on Friday June 25, 2021 @11:09AM (#27631752)
There was literally no choice when it came to IPv6. Everyone who thinks they've got a clever compromise is forgetting that it's not a software problem where it matters.
Re:Go 1.17 is deprecating the traditional use of 'go get' by tialaramex on Friday June 25, 2021 @12:46PM (#27633229)
Right. The specific problem is that 2^32 isn't enough. The most naive "solutions" were from people who hadn't even recognised why it's 2^32. For example, let's just have numbers bigger than 255 between the dots ... why can't we do that?

But once you get past those, another layer of "solutions" see the immediate technical consequences of 2^32 not being enough but don't grok the bigger picture. For example let's just turn existing 32-bit IP addresses into a 64-bit IPng address by adding zeroes, and then all the old addresses are now networks with up to 4 billion nodes. But wait, all those addresses are assigned too now, so we still have an address shortage. Oops.

The least stupid people saw the new address scheme itself as logical but just felt like surely IPv6 should have resisted the urge to fix anything else. Sure, you're embarking on a multi-decade project that likely cannot ever be repeated, but let's just leave all the sharp edges and weird anomalies exactly as they are to minimise upgrade costs. This belief is less stupid, but it is still pretty stupid, that cost difference is a drop in the bucket, and this was our only chance to fix some pretty huge mistakes made when the Internet was newborn.

It would actually be cheaper for a lot of big outfits to go IPv6-only today (and then use edge translators) than drag their heels and try to stay on IPv4 as long as possible, but contrary to popular belief almost nobody really does "cost-benefit analysis" to decide what to do - they make a decision based on emotion and any such analysis is purely there to support that decision.

Buying more addresses is a budget line item you can see, but a lot of big IPv4 costs are hidden in existing practices that "always" have cost money but would vanish under IPv6, and some IPv6 costs are only there if you did no preparation. If you just count the need to replace those IPv4-only printer-copiers you purchased a year ago across the company, and forget that you intentionally chose not to ask bidders if they were IPv6 capable you're going to persuade yourself that it's cheaper to keep waiting.

Re:Go 1.17 is deprecating the traditional use of 'go get' by toast0 on Friday June 25, 2021 @01:40PM (#27633964)
IPv6 could have been a straight forward expansion of the address field without replacing ARP (which could easily have been extended for v6 addresses, just need to define an address type value) and header processing and address autoconfig and X and Y and Z.

It still would have taken a long time to deploy, because you still need hardware and software support in lots of places, but it might have been a little less long, and a little less bad along the way.

I don't think we got much of use from the new ways either. I can announce IPv6 ranges to my LAN from two different ISPs, but my clients will use an IP from one and send to the gateway from the other, so that doesn't help me.

Re:Go 1.17 is deprecating the traditional use of 'go get' by tialaramex on Friday June 25, 2021 @02:51PM (#27634811)
ARP is a broadcast protocol, so that's pretty bad news, whereas IPv6 Neighbour Discovery gets to use (link local) multicast.

On the cheapest budget cobbled together network, either one turns into a network broadcast. But even a bargain basement 1990s Ethernet chipset does onboard multicast filtering, so irrelevant neighbour discovery packets needn't wake up your OS whereas every ARP query must be drawn to the attention of every host's OS to confirm it's not for them.

However, spend a little more money and the network switch understands multicast, so now the data isn't even sent across links which don't have anybody listening to that address, whereas of course nothing can be done about broadcasts.

You couldn't have easily done this trick in IPv4 because the address space is too small, but in IPv6 choosing the Ethernet multicast addresses to make this work falls out very easily.

Re:Go 1.17 is deprecating the traditional use of 'go get' by drran on Friday June 25, 2021 @12:42PM (#27633175)
Embrace Extend Extinguish

I vote for IPv5 protocol, which will allow to cal any IPv4 host via IPv5-IPv4 NAT transparently at nearest bridge.

WHY I cannot do `ping6 127.0.0.1`? WTF? Is IPv6 is too small for whole IPv4 address space?

Re:Go 1.17 is deprecating the traditional use of 'go get' by tialaramex on Friday June 25, 2021 @01:06PM (#27633500)
You've listed a command line you'd like to run, but have you spent any time to decide what it is that you think it should actually mean?

Maybe you think it should just be exactly equivalent to ping6 ::1 - your ping6 could be updated to allow this but, like, why? That's not an improvement at all.

OK, so maybe it should be equivalent to ::127.0.0.1 - but that's very strange, an operating system could choose to have this do what you expect locally but it's not clear to what end and again it doesn't offer any wider improvement.

IPv6 is big enough that it contains the entire IPv4 address space - in several different places in fact although ::a.b.c.d is the most transparent. But, that's completely irrelevant to the problem, which I suspect means you still haven't quite grasped what the problem even is.

Re:Go 1.17 is deprecating the traditional use of 'go get' by drran on Friday June 25, 2021 @01:41PM (#27633979)
I expected (20+ years ago), that IPv6 address space will be extension of IPv4 address space, so `ping6 IPv4_ADRESS` will use IPv4 protocol internally, bind6(IPv4_ADDRESS, IPv4_PORT) will use IPv4 socket internally, and so on. It's easy to implement:

  an_ipv6_function(address) {
    if (address & 0xffffffffffff0000 == 0) {
      // Use legacy ipv4 protocol ...
    } else {
      // Use modern ipv6 protocol ...
    }
  }
Actual result: I cannot ping an ipv4 address using an ipv6 tool, or connect to an ipv4 server using an ipv6 only tool.
Re:Go 1.17 is deprecating the traditional use of 'go get' by cesarb on Friday June 25, 2021 @03:11PM (#27635015)
That already exists, it's called an "IPv4-mapped address". The IPv4 address 198.51.100.15 can be represented in IPv6 as ::ffff:c633:640f (normally shown as ::ffff:198.51.100.15). See in particular at https://man7.org/linux/man-pages/man7/ipv6.7.html the IPV6_V6ONLY option which can be used to disable that mapping.
Re:Go 1.17 is deprecating the traditional use of 'go get' by drran on Friday June 25, 2021 @05:24PM (#27636461)
Yes, I know about this mapping (I can read man pages too), but

a) ping6 ::ffff:127.0.0.1 doesn't work too;

b) it's not an IPv4 address, because the binary representation of ::ffff:127.0.0.1 != 127.0.0.1. It's the IPv4 address space mapped to an IPv6 address space (IPv4-mapped-on-IPv6).

c) IPv4 addresses in IPv6 address space are deprecated: https://datatracker.ietf.org/doc/html/rfc4291#section-2.5.5.... .

In short, IPv6 and IPv4 cannot coexist, so they must be separated, so we must keep IPv4, because it's mandatory, and we may skip IPv6, because it's optional. So, all internet providers in my area are skipping IPv6, because they can.

All that problems are created by lack of backward compatibility in IPv6 protocol.

Why? «Because backward compatibility with IPv4 is unnecessary. IPv6 is so much better. Everyone will jump to IPv6 till end of the next (1995) year.»

Re:Go 1.17 is deprecating the traditional use of 'go get' by slownews45 on Friday June 25, 2021 @01:17PM (#27633648)
You're wrong here. Folks actually deploying wanted better co-existence options for folks on IPv6, and it's shown up. You basically route ipv6 as IPv6 until you hit a network border that doesn't support IPv6, then go over to IPv4 for the rest. This let's me do IPv6 only devices without giving up IPv4.

As it is, they locked the upgrade cycle, because you can't do IPv6 only without losing access to IPv4 (historically).

In the end folks did get work arounds going using 464XLAT

https://datatracker.ietf.org/doc/html/rfc6877

Re:Go 1.17 is deprecating the traditional use of 'go get' by dcow on Friday June 25, 2021 @01:42PM (#27633986)
Why not IPv10?