TL;DR: Constants shouldn't be hard coded in the software, they should always be in a separate config The problem is that it's the 60s. My first thought was "security", but unless you an also teach them about elliptic curves, they're going to use the security of the 1960s, which as we now know isn't very secure. Maybe at least having security baked in would help make it easier to switch to better security later, like…
I really don't understand what stopped ipv4 from being extended like this: w.x.y.z == 0.0.0.0.w.x.y.z In fact, you can even ping any 32 bit unsigned integer and it will turn it into an ipv4. Try it: `ping 134744072` will ping `8.8.8.8` So why not 64 bit? 32 bits fit in 64. Instead we now have 2 concurrent protocols. ps. 8*256^3 + 8*256^2 + 8*256 + 8 = 134744072
So the only real option is creating a new protocol with a new protocol ID in the header. And if we're making a new protocol anyways, we might as well design it to fix more problems than just address space exhaustion.
And that's what IPv6 is. The Wikipedia article has a lot of details on the kinds of changes it makes and why: https://en.wikipedia.org/wiki/IPv6#Comparison_with_IPv4