Re: IPv4 and IPv6
> I imagine that if they had instead just increased the address space without changing anything else (conceptually speaking), adoption would have been much faster and IPv4 would be just a footnote in history books by now.
Probably true, but then we'd also still be having to work around some of the issues that are "solved" in IPv6 - as in, they looked at what the problems were and didn't design in the same problem again !
Take one "simple" example - determining if another node is "locally connected". If your only experience is with small networks, ethernet, one subnet per network domain - then you'll be thinking that this isn't a problem (and I was in this camp too until the penny dropped). Simple solution, you look at your IP and the other node's IP, and if they are in the same subnet then you are "locally connected" (meaning that you can send a packet directly to the other node).
Trouble is, this isn't true in many networks. Take a wireless mesh for example, and I believe cellular systems can be similar - it needs a flat IP space so devices can move around freely, but propagating all that ARP broadcast traffic would be very wasteful, and so the nodes have to effectively "fake" the ARP process or bu**er about with routing tables to make what the end device sees as a flat network into something that's actually routed. One example of "IP in same subnet, isn't locally connected".
And then there are cases where you've added a second IP subnet to a network - a shared network, often done when you run out of addresses. Now you have a case of (unless you manually add routing rules to each device) "device in different subnet is actually locally connected".
In IPv6, the routing information provided to each node by the network has not just a list (note, list which may be one or more than one) of prefixes on the network, but also information on which of these are to be considered "locally connected". Thus the process is a bit more complicated than in IPv4, but it inherently supports all four combinations of "same prefix/different prefix" and "locally connected/not locally connected" while IPv4 only supports 2 of them without messing about.
This is one example where IPv6 appears more complicated (it did to me before I got my head around it), but which is there for a valid real-world reason.
Most of IPv6 isn't hard - it just looks daunting. Perhaps part of the problem is that there isn't a good online tutorial (at least I haven't found one) that can take someone with "basic IPv4 skills" and take them gently through a controlled learning process. Looking around, I've found lots of stuff, but a lot of it is either too basic and doesn't explain the "WHY ?" or too complex and anyone not already familiar with the subject matter is just going to drown.
The nearest I've got is to do the IPv6 certification at TunnelBroker.net. I think it still leaves a lot out that you need to know (at least if you are a serious network
nerdtechie), but it at least has a progression of steps with tests at each step to show you've grasped things so far.