Why allocating /48s for end users in IPv6 is a good idea.

There are people out there already worrying that assigning /48s to end users in IPv6 is going to cause problems in the long term, matching the existing IPv4 problems with address shortages. I'm going to try and present a few ways to understand just why it's not going to happen that way.

Firstly, we'll need to think about the world population. Current figures show that we're at around 7 billion people. Taking the worst-case model the UN is prepared to consider, we're unlikely to reach more than 35 billion people worldwide before 2100. Against that, we have assigned a single /3 for unicast, and kept 5 /3 blocks in reserve.

A quick bit of maths shows us that we have 245 /48s to assign, before we have to use up more of the reserved address space. This is (roughly) 35,000 billion blocks to use. We have already determined that we're not going to have more than 35 billion people any time soon; so, let's assume that there are 3,500 billion people on Earth, or 500 times the current population. That's still enough /48s for each person to use an average of 10. So, one /48 at home (65,000 individual networks, of which a "typical" home might have two WiFi networks, one "server" network and a wired network). One /48 in the office (again, 65,000 individual networks in the office). Three /48s on the mobile network (one for each handset, plus one for your mobile broadband dongle). We're still only using 5 of the 10 we can allow after a 500 times population growth. Assume that ISP overheads (running routers and the like) cost a typical user another /48, and we're still within a safety margin.

Note also that we haven't yet permitted the use of the reserved /3s. If we have population growth well beyond that which we currently believe the planet can sustain, and we use more blocks that I have considered (I've assumed one connection at work, three mobile connections, one at home), we still have room to expand into. And it gets better: if the UN's worst-case projection is vaguely accurate, and we stabilise at under 70 billion people, we can each fill 50 /48s before we have to use some of the reserves.

In short, big numbers are hard. It's all too easy to see that the IPv6 address is only 96 bits longer than the IPv4 address, but hard to get a handle on just how much extra space that represents.


How MIMO works - and why it's amazing

Long term readers may recall my mentioning in my OFDM post that I was going to try and understand MIMO. I think I've made sense of it - and it's completely and utterly mindblowing that the processing power needed to do this exists in something I can buy for under £100.

Described simply, OFDM and related channel coding technologies produce signals of very clearly defined form, which can be arranged such that instead of interfering destructively, they interfere constructively. If I transmit two or more OFDM signals on the same frequency on different antennae (in different places), you can use the information from two or more antennae to reconstruct not just one of the original signals, but both of them. You do this by relying on the fact that each signal has taken a different path to get to each of your receive antenna; in pseudomath terms, if antenna 1 transmits signal 1, you receive "(path loss for path 1) * (signal 1) + (path loss for path 2) * (signal 2)" at your first antenna, and "(path loss for path 3) * (signal 1) + (path loss for path 4) * (signal 2)" at your second antenna. The OFDM signals are set up to include pilot tones, so that you can calculate values for each of the four path loss terms, and thus adjust and subtract to get back the original two signals.

The neat thing is that you don't have to slow down either signal to make this possible; an OFDM signal from antenna 1 at 150MBit/s can still be decoded, even as you add a second OFDM signal to antenna 2 at 150MBit/s.

So, that's how MIMO gives you more speed. How does it give you more range as well? This is a tradeoff - recall that Shannon's limit stops you going infinitely fast over a given channel. However, if I need to communicate between A and B at 1MBit/s, in a MIMO world, I can send two OFDM signals at 0.5MBit/s (with associated range). I can alternatively send two 1MBit/s signals, each of which is 50% ECC data, making dropouts easy to correct. Lots of options here, all of which can help.