# Introduction

We made a real mess of distributing IPv4 addresses!&#x20;

Back in the early days of computing, when we only had one computer per site, it looked like 2^32 (4,294,967,296) IPv4 addresses would last forever. And then came 1980 and the IBM PC, the distributed computing revolution took place and suddenly, we could see a time in the very near future when the Internet would run out of addresses. It is not so much that we ran out of addresses, but early on we used an allocation called *classful addressing* that was very wasteful in address utilization. Large companies got class A addresses, but even Microsoft and Apple didn’t need 16,777,216 IP addresses.&#x20;

Other techniques were introduced which improved the efficiency (VLSM and CIDR) but too late. Around the time we ran out of IPv4 address blocks, surveys tended to say that only about 15% of addresses were used. From c.1992 the IETF began working on the problem. One of the kludges to mitigate the problem was PAT/NAT and RFC1918, we have been using that extensively ever since.

There was already an [IPv5](https://datatracker.ietf.org/doc/html/rfc1819), although no one ever calls it that and nobody has ever really used it. IPv4 is a packet-based protocol, Internet Stream Protocol (IPv5?) was supposed to be a connection-oriented protocol for voice over the Internet. It used the IP type identifier 5.&#x20;

The IETF released [IPv6](https://datatracker.ietf.org/doc/rfc1883/) in 1995, so it is an old protocol! The most [recent version](https://datatracker.ietf.org/doc/rfc8200/) of the standard was released in 2017 and it is NOT compatible with IPv4, they are completely different protocols. The main motivation was bigger address space. IPv4 had 2^32 IP addresses, IPv6 has 2^128 (3.4×10^38). I have seen the comment (which may be apocryphal) that there is an IPv6 address for every grain of sand on the planet!&#x20;

I hope I have this right, by my calculations it seems to be 340,282,366,920,938,463,463,374,607,431,768,211,456 addresses!&#x20;

The folks had years of experience with IPv4 to build on and they did make some improvements. One of the reasons IPv4 headers were hard to process was because of the variable length. Some effort was made to fix the header size and to allow for flexible header extensions. The checksum was also removed.&#x20;

Subnetting is difficult in IPv4; in IPv6, all user subnets are /64. This means that the smallest subnet has 2^64 IP addresses, the square of all the addresses in the original Internet!!&#x20;

We do have to calculate subnets on the Internet/ISP side, more of that after. There are no broadcasts in IPv6, but there is an all-nodes multicast address and a flexible way for every subnet to have global multicast addresses. Multicast in IPv4 was difficult/impossible to use on the Internet.

IPv6 hosts have an auto-configuration protocol, *Stateless Address Auto Configuration* (SLAAC) via a *Neighbour Discovery Protocol* (NDP) with *Duplicate Address Detection* (DAD). This can be handy for configuring routers and appliances, but we still need to use DHCPv6 for client networks, there are things like DNS that SLAAC was never designed to distribute. In theory this means we do not have to renumber networks when you move from supplier to supplier.&#x20;

IPv6 had built in mobility for mobile devices, which allows these devices to move from network to network with renumbering. Internet Protocol Security (IPSEC) was developed for IPv6 and can also be used in IPv4. IPv4 had a maximum packet size of 2^16, IPv6 allows for Jumbo-grams with packets up to 2^32.&#x20;

We mentioned NAT and PAT previously. IPv6 goes back to the original idea of the internet, end-to-end connectivity. This also raises security concerns! Most people found it difficult to remember and type IPv4 addresses, you can forget trying to do that with IPv6!
