You might be familiar with the network concept of TCP/IP, or IPv4, or IP version 4. It’s been around since the early 1970’s. It’s a little convoluted, and can be a little heavy on the binary math when you are trying to figure out subnets – but it’s generally pretty straight-forward. What I mean is:
- The IP addresses are in human-readable (and memorable) form: 192.168.1.13
- The math required to do the subnetting is high-school level
- Information for how to understand IPv4 is everywhere.
There is one problem, there aren’t nearly enough IP addresses between 0.0.0.0 and 255.255.255.255, around 4.3 billion, in total. Consider there are 7.3 billion people on the planet, and many people have multiple devices, and many companies have thousands of devices – there just aren’t enough addresses. To make it worse, big companies like AT&T, IBM, and government own entire swaths of those Class A addresses, making IP addresses even more scarce. In 2011, IANA officially ran out of IPv4 addresses for the first time.
Luckily, everyone saw this coming. So, IPv6 came out in 1998.
Here’s some foreshadowing, this technology has been around for 17 years and it’s still pretty scarcely-used – there is a reason for that (in my humble opinion).
In fact, June 6th, 2012 was World IPv6 Day, don’t you remember the parades in the street?! Ok, sarcasm aside, many vendors did start enabling IPv6 by default, and it is pretty broadly available. Despite that, it’s still scarcely used by people on their home network, and most businesses still use IPv4. In a way, that makes sense – you want the rest of the Internet infrastructure to get up to speed first because end-users start using it. As I understand it, internet services and the internet backbone are ready – but no one else really is.
OK, so what is IPv6? Well, it’s a much, much bigger address space – and there are changes to virtually every protocol and system that is currently used with IPv4. So, that means there is both a learning curve for IT professionals, and it means the hardware and software you use must support it.
What does IPv6 look like?
Well, if you are familiar with a 192.168.1.32 IPv4 address, an IPv6 address would be something like 2001:0DB8:AC10:FF05:11BA::7334
Where IPv4 supports around 4 billion addresses, IPv6 supports 340,282,366,920,938,000,000,000,000,000,000,000,000 unique addresses!
Instead of 4 octets of 0-255 numbers, IPv6 has 8 groups or 4 hexadecimal digits. Each digit is called a nibble. Each group is separated by a colon. If you have groups of zeros, you can use a double-colon to represent n-number of zero-groups, but only exactly once. Since there needs to be 8 groups, if you have value:value:value::value – it can be determined that groups 4 through 7 are zero. It’s just a shorter way to write the RIDICULOUSLY long IPv6 address.
There is metadata in the address itself too. For example, the 4th nibble define the scope of the address – that is, how far out it can be routed: just on the local machine, on the local network, or out on the internet (there are actually 6 scopes). So for example, if the 4th nibble was FF08, then traffic can be routed within an organization – but if it’s FF0E, then it can be routed globally (over the internet).
Similar to IPv4 which has special addresses like 127.0.0.1 and special networks like 192.168.0.0, IPv6 has some special conventions too. For example: ::/128 is a temporary, internal address, before a device gets a real address, ::/0 means the default route, ::1/128 is a loopback address. FE80::/10 is the link local scope (the loopback network), FC00::/7 is the unique local scope – or a scope that is routable within your organization. Plus there are many, many more.
What are some obstacles to using IPv6?
The first one right off the bat, is the learning curve. I consider myself a mildly intelligent person, and I spent quite a bit of time reading and researching, and I completed this course on IPv6 and I’m only about 55% clear on most of it. It’s extremely convoluted. The design itself is great for machines, but horrible for humans to understand.
There are other human-factors too – like if you yell over a cubicle wall “what’s the IP address?” am I really supposed to respond: “2002:11BE:011A:FF0E:11BC:A588:FCDB:FC11 – got it?”
That isn’t just an inconvenience, if I understand correctly, just by giving a device an internet-routable address, you could expose a machine directly on the internet! Again, remember we’re not in IPv4 world anymore, so there is no practical reason to use NAT anymore. Every device could potentially use an internet-routable address – because there is an infinite supply now. So, you can’t just dig into IPv6 without having some understanding, because you could unknowingly open up all sort of security gaps and not even know it!
So to me, the convoluted nature of IPv6 is it’s biggest downfall. Not only is it much more complex than IPv4, it’s also much more difficult to work with because the subnetting math is all different, and the IP addresses aren’t really something you can say out loud or remember. I can remember 192.168.1.14 – but I can’t remember a 32-character hexadecimal number.
So why is this a non-starter, then?
There has been broad, but reluctant support for IPv6 across all of the hardware vendor, and all of the operating systems you use – yet it’s still not used in MOST places. This is because the learning curve is steep. The design of this didn’t take into account that humans need to work with IP addresses and subnets too! So – the learning curve is a big part of it.
The next big obstacle is that ISP’s still aren’t supporting it. Comcast started in 2013, but seems to have stalled. They have this website for IPv6 status updates: http://www.comcast6.net/ but it hasn’t been updated in over a year and half! I called my ISP (Brighthouse Networks) and they said they don’t have even any long term plans to support IPv6. Meanwhile, my router supports it:
and Windows 10, Mac OS X, Linux, and mobile OS’s already have it enabled by default, but still after 17 years, no one is digging in. If my home ISP doesn’t support IPv6, I can use it locally, but ultimately need to use IPv4 over the internet.
IPv6 might be technically great, but is ridiculously complex and difficult to grasp and use. It’s difficult to use a technology when you can’t “say” the thing you are working with, the IP address in this case. My guess is that they are working on a IPv7 which will have simpler structures. For example, in IPv6, each nibble is a 4-byte word. NO SYSTEM uses 4-bytes. You use bits, or you use an 8-bit/1-byte data structure. 1 byte is easier and simpler to represent, and it’s easier to calculate. So just this decision alone is an example of how systems in this protocol are needlessly complex.
Have you ever worked with that guy who LIKES to make things overly-complicated, so that he looks smart? Picture that guy, designing IPv6!
For me, just like everyone else, I am going to begrudgingly hang back, continue to use IPv4 until the next, better version comes along. If it doesn’t or if we have to use IPv6 the way it is – it will be yet another page of stupid in our history. You can have have a big address space AND have it routable, AND have it easy to learn/read/understand/say. If we all have to conform to this unnecessarily-complex approach, it will be annoying for all of us.
For anyone actually using IPv6 – I’m basing this off a few days of research, and a course I took. Am I wrong? Am I missing something?