InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

100 days of IPv4 left

Posted by Alex Blewitt on Nov 25, 2010

Sections
Development
Topics
Java ,
Languages ,
Websphere ,
Programming ,
IBM ,
Application Servers ,
Companies ,
Agile in the Enterprise ,
Architecture ,
IPv4 ,
IPv6 ,
Network Programming ,
Agile

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?

  • This article is part of a featured topic series on Agile

No comments

Watch Thread Reply

Educational Content

Evolution in Data Integration From EII to Big Data

Approaches to integrating data are changing with emergence of cloud computing.

Winning Hearts and Minds: How to Embed UX from Scratch in a Large Organization

Michele Ide-Smith presents the lessons learned in the process of introducing UX principles and techniques into a large organization through a series of small steps.

LMAX Disruptor: 100K TPS at Less than 1ms Latency

Dave Farley and Martin Thompson discuss solutions for doing low-latency high throughput transactions based on the Disruptor concurrency pattern.

Thoughts on Test Automation in Agile

Rajneesh Namta shares his thoughts, experiences, and some of the critical lessons learned while implementing software test automation on a recent Agile project.

Actor Interaction Patterns

Dale Schumacher presents several patterns of actor interaction that can be used in collaborative programs written in any language.

Scalaz: Functional Programming in Scala

Rúnar Bjarnason discusses Scalaz, a Scala library of pure data structures, type classes, highly generalized functions, and concurrency abstractions to perform functional programming in Scala.

Faster, Better, Higher – But How?

One of the main challenges when designing software architecture is considering quality attributes. Not only their design turns out to be difficult, but also the specification of these attributes.

Software Naturalism - Embracing the Real Behind the Ideal

Michael Feathers analyzes real code bases concluding that code is not nearly as beautiful as designers aspire to, discussing the everyday decisions that alter the code bit by bit.