Except that I still have no idea how v6 addresses work in LANs, since I don't know of there being local ranges like with v4 The general concept of IPv6 is that you don't default to RFC1918 or an equivalent It's specifically designed to be globally routable You restrict access with firewalls, not by abusing NAT There are reserved IPv6 private ranges Per RFC4193, fc00::/7 is reserved for that So you can use a generator tool like https://simpledns.plus/private-ipv6 to grab ranges for i.e. private VPN subnets How do I know it's actually unique? It doesn't matter, since you're not supposed to be advertising a route for it Your 192.168.1.1/24 wasn't unique either But that didn't matter, because it wasn't globally routable Also, why are they unique in the first place? As for how it's unique That block is 2.658456e+36 IPs i.e. Why can't I just do something like fd00:dead:beef:1243::/64 ? Well, if you pick a globally routable IP And that is, in fact, an existing host Guess where your traffic to that IP will be routed? You could use non-unique public IPv4 for your private subnets, if you wanted to And you can do the same for IPv6 But since that's literally begging for breaking changes, violates RFCs, and doesn't benefit you Isn't the fd prefix supposed to be for private networks though? That's what I understood from Wikipedia It's what we like to call "stupid" I'm responding to the question about why unique in the first place Since a custom range is a lot easier to remember If the subnet you want to use is a reserved private range Then you can That's what I've been saying this entire time What are the reserved private ranges though? I just said fc00::/7 But, if that is used, can't the rest be whatever? Also why does everything this generator gives start with fd when the range is fc00::/7 Well, let's think about this How many bits are required to specify "f"? fc00::/7 is the following range fc00:0000:0000:0000:0000:0000:0000:0000 to fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff Or 2658455991569831745807614120560689152 unique addresses Or, in a more human readable form Your subnet mask is 7 bits, so you have 7 network bits That leaves 121 host bits 2^121 = 2658455991569831745807614120560689152 But, like, I'm not sure where the d comes from Okay, what's the letter after c? Well it's d, but wouldn't the range be up to fcff:ffff:ffff:ffff:ffff:ffff:ffff:ffff Once you've hit fcff:ffff:ffff:ffff:ffff:ffff:ffff:ffff, what's the next character? Notice how there are 7 network bits What are the network bits How many network bits are needed for the first two hex values of the host to remain the same? A subnet specification is composed of two parts For IPv4, it's 32 bits. For IPv6, it's 128. The network mask specifies how many bits are dedicated to identifying the network The remaining bits are allocated to hosts So with an IPv4 subnet of 192.168.0.0/24, you have 24 network bits, leaving 8 host bits 2^8 gives you 256 possible hosts One of those addresses is reserved for the network ID (the lowest), and one for the broadcast address (the highest) So you get addresses 192.168.0.1-192.168.0.254 usable IPv6 follows the same structure, but with 128 bits So the first 4 bits, presented as hex value f, remain the same, as the mask is 7 bits long but the next 4 bits, initially presented as hex value c, are only partially covered by the mask So, if the last bit increments by one c becomes d Or, for binary representation The hex value c is the binary value 1100 If the fourth (unmasked) digit of c can change It will become 1 Binary 1101 is, of course, hex d If it was fc00::/8, then yes it would end at fcff:ffff:ffff:ffff:ffff:ffff:ffff:ffff But we have an additional network bit, so we can tick over to fd00:0000:0000:0000:0000:0000:0000:0000 Sigma, does that clear it up at all? wouldn't it be fc00::/6 and not fc00::/8 though? Since with 7 there's an additional bit? No, because fc00::/6 is adding a network bit to fc00::/7 Wait so what exactly does the mask mean So you'd be doubling the network size fc00::/6 is this range: fc00:0000:0000:0000:0000:0000:0000:0000 - ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff The mask is the length, in bits, of the network identifier How does the number going down increase the amount of bits? The higher the number of the subnet mask, the smaller the subnet what's the theoretical maximum numbers of IPv6 addresses? Because it's a mask, it specifies which bits do what Abe, 2^128 64 bits? 192.168.0.0/22 is 1024 addresses, 192.168.0.0/24 is 256 addresses Every time you increment the subnet mask by one Your number of IPs in the subnet halves No, 128-bits Hence why it's 2^128 :P Okay I'm dumb lol Why didn't ISP switch to it sooner? Originally because equipment supported it poorly Then inertia Then laziness and/or fear of change I still don't get how if the fc00 prefix is 7 bits, how is increasing it to 8 not increasing it, if that makes sense Don't think of increasing the subnet mask as "increasing" Every time it goes up by one You're cutting the network size in half But doubling the available number of networks Thats the same in v4 and v6 Yes If I convert fd to binary though, it's 8 bits? Yes, it's 8 bits, but 7 are "masked" and cannot change The 8th bit isn't masked, and so can change Oh so that's what masks are Can IPv6 private ranges travel through the Internet (I suppose the answer is no)? As a binary byte, 0xfc becomes 11111100 Only bit 8 can change, and so Sleepy, that depends what you mean by "travel through the internet" Private IPs, in the IPv4 sense, are not meant to be advertised as routable to other carriers. You can use them internally, or for things like VPNs But if you advertise "192.168.0.0/24 is a subnet under my control" Other BGP peers aren't going to route that subnet to you Since they're presumably RFC1918 compliant So is the fc00::/7 range like that as well? Yes, per RFC4193, that range must not be advertised (exported) or accepted (imported) by any AS (independent network operator) So it's in practice the same, yes