> Can someone explain why it's ambiguous?

Because you don’t know how many zeroes are on each side around the 0001 in the middle.

It can be 2000:0000:1:0000:0000:0000:0000:1 or 2000:0000:0000:0000:0000:1:0000:1 etc.

This shortcut system of ipv6 only makes it worse. It's too hard to remember how it works.

Is it really hard to remember? A hint is in the syntax itself. What's in between the two colons '::'? Nothing. In other words, all zeros.

IPv4 also has a similar, though rarely documented or utilized, shortcut system. Try `ping 1.1` for example. It expands to 1.0.0.1.

":: is all zeros" is too hard??

How many zeros?

Exactly enough to fill out the address, which is always the same length. BTW, IPv4 does basically the same thing. The address 127.1 is equivalent to 127.0.0.1.

Not really the same, the mechanics are different and this particular behaviour is pretty much an accident, not abbreviation.

In IPv4 you also have 127.257 equal to 127.0.1.1, 123456789 equal to 7.91.205.21, and 010.010.010.010 is a well-know DNS server. This notation is also rejected by most implementations.

It is? Those alternate IPv4 notations are all accepted by Linux, FreeBSD, and MacOS. I remember playing around with "alternate notations" 30+ years ago on old SunOS boxes.

But IPv6 is "too hard"

There are a total of 8 groups of 4 hex digits, so 8 minus however many groups you already have.

google.com: 2607:f8b0:4009:819::200e (5 groups) -> 2607:f8b0:4009:0819:0000:0000:0000:200e (3 groups of added zeros)

a ULA address: fd2a:1::2 (3 groups) -> fd2a:0001:0000:0000:0000:0000:0000:0002 (5 added)

localhost: ::1 -> 0000:0000:0000:0000:0000:0000:0000:0001

However many are left. In what circumstances do you care?

However many it takes to make the whole A::B number exactly 128 bits long.

“Enough”

It's not just ":: is all zeroes"

… such as?

https://news.ycombinator.com/item?id=46338674

That's a post about invalid things that are not IPv6 addresses.

In IPv6 addresses, :: is all zeroes and there's no ambiguity.

I am not clear what your point is. The parent's point stands. A double colon only represents zeros (that were compressed and are not displayed).

Your link does not show different addresses from a valid compression, it shows different addresses from an invalid compression. The link examples what we don't do.

Conversely, if we compress the expanded addresses in your link, we will get 2 different compressed addresses.