The internet is based upon a networking protocol called IPv4, which is the underlying basis for both TCP (used by HTTP and chat applications) and UDP (used for video and audio applications). This uses a 4-byte IP address, like 192.168.54.32, to identify both of the end-points in the channel. (Most humans and many applications use a DNS name instead, which translates www.infoq.com into a numeric IPv4 address like 63.246.7.184.)

Unfortunately, the IPv4 address space is running out, and quickly. According to @ipv4countdown, we have passed the 100 day mark for available addresses; the total stands at less than 160 million addresses left. To put it in perspective, that's around 9.137.0.0 addresses left. We've burnt through (or aren't able to allocate) 245.0.0.0 IPv4 addresses, so they're running out fast. The data is shown in a countdown at Hurricane Electric, an IPv6 provider.

There are still some IPv4 addresses available. Some of the early pioneers of networking have a large number of (potentially unused) IP addresses; and due to some acquisitions mean that a single organisation owns a significant chunk of the internet. However, this is merely delaying the inevitable, probably only by a matter of months. This 2006 Map of the Internet by xkcd shows the top level /8 addresses (i.e. 1.0.0.0) and the fact that companies like Apple, DEC, Bell Labs and Boeing each got given 1/256th of the IPv4 address space shows some concern.

Some argue that use of NAT (combined with UPnP) solves the problem, by reducing the demand for public IP addresses, but this is rarely the case. Mobile networks typically use an IPv4 NAT to allocate devices one of the "private" classes of network, such as the 10.x.x.x network or the 192.168.x.x network commonly found at hotspots. These work by not being publicly routable, but the router itself still needs an IPv4 address in order to operate at all.

The only long term solution is IPv6. This increases the space massively for networks, and most network gear made in the last decade supports IPv6, as well as operating systems which support it natively as well. The key problem has been in the delayed roll out of IPv6 to end customers, or for xDSL modems to be able to support IPv6 (most of which only support IPv4). British Telecom has been rolling out its 21st century network (moving telephony to an IP backbone) but laughably on 20th century networking protocols.

IPv6 itself uses a different notation to IPv4 addresses. Instead of four dotted decimal digits, IPv6 uses 128 bits (c.f. IPv4's which are represented as groups of hex like 1234:5678:90ab:cdef:1234:5678:90ab:cdef . To support backward compatibility, IPv4 addresses can be written as 0000:0000:0000:0000:0000:0000:63.246.7.184 . (This also helps demonstrate the massive increase in numbers that IPv6 brings over IPv4). Fortunately, for any number with a 0 prefix, the 0 can be inferred; so 0:0:0:0:0:0:63.246.7.184 is the same address; and any (single) consecutive sequence of 0 can be replace with a double colon, so ::63.246.7.184 has exactly the same value.

A couple of translation mechanisms exist. Firstly, a website can have both an IPv4 address (with an A record) and an IPv6 address (with an AAAA record). Sites which have both can be accessible over either network; the system will try both addresses and return the first. (Some systems looked up an IPv6 address initially and then fell back to IPv4 - however, the latest Mac OSX update switched the priority of the two.)

Another advantage of IPv6 is that network cards can be self configuring. Using a discovery mechanism, IPv6 clients can discover an IPv6 address by a broadcast from an IPv6 router. The client then uses its Mac address (or a random number) to fill in the bottom part of the address, giving a unique address on the local system. Whilst this works well for clients, servers often need to be configured with a specific IP address so that it can be registered in DNS.

Some special addresses are used at the moment. FF01:: is used as a node-local multicast network (i.e. for that specific machine), whilst FF02:: and FF05:: are for link-local (same immediate network) and site-local multicast respectively. Others are ::1 , which is localhost (c.f. 127.0.0.1). Local addresses (automatically discovered) begin FE80:: . If you have a computer which supports IPv6 networking, you'll already have an FE80:: address assigned; unlike IPv4, each network card can have many IPv6 addresses assigned to it (including loopback) at one time. And unlike IPv4, which allocates one IP address per block to be a 'broadcast' address, IPv6 usually uses a link-local or other broadcast mechanism instead of a specific address to which machines broadcast data.

When the IPv4 address space runs out, countries will exhaust their national supply, which might take another six to twelve months. Once that's done, no new IP addresses will be allocatable and any new connections will have to be hidden behind NAT or a migration to IPv6.

Fortunately, this has not gone unnoticed by cable providers and ISPs, who are investing in IPv6 but not rolling it out aggressively. However, there may be a rush to provide IPv6 connectivity in the next year or two; the question is, is it too litte, too late?