The IANA has run out of IPv4 addresses. That doesn't mean that IPv4 is exhausted; it just means that the supply is gone. The IANA assigns addresses to regional internet registries, which then assign them to networks such as ISPs, who in turn assign them to customers, and often they then get assigned once more beyond that. APNIC, the registry for the Asia-Pacific region, has already effectively exhausted their allocation from IANA. It's not surprising that they'd run out first, since the Asia-Pacific region currently has the fastest growth rate in terms of Internet deployment, but had a relatively small initial allocation of IPv4 addresses, since most early deployment occurred in the USA and Europe.
At some point soon, we're going to start finding end users wanting IP addresses and not being able to get them. IPv6 has been around for more than a decade, but even with a real need to switch most people over within a year, it still hasn't seen widespread deployment. In this article, we'll look at some of the reasons.
One of the initial problems with IPv6 was that the spec was finalized without any kind of migration plan. IPv6 datagrams have a different structure to IPv4 ones, so the entire network needs to be IPv6-aware before you can use it. This was later addressed, with protocols like 6to4 (from 2001, five years after IPv6 was finished). Prior to that, using IPv6 required an explicitly configured tunnel, which was more effort than even most technically competent people could be bothered with.
6to4 is an interim mechanism that allows two IPv6 endpoints to communicate over the Internet, without upgrading the backbone. A number of relay routers bridge the IPv4 and IPv6 Internets, so you can send IPv6 packets encapsulated in IPv4 packets between two IPv6 networks across an IPv4 network.
The biggest problem with 6to4 is that it requires a public IPv4 address. If you have a network of machines behind a NAT router, then you can't just use 6to4 on one of the computers. You can run 6to4 on the router and use IPv6 on the internal network, but this requires the router to support it, which it doesn't always. This is especially true for consumer Internet connections, which typically have a router provided by the ISP. This has been supplied by the lowest bidder, and usually doesn't support IPv6 in any form.
The Teredo protocol is somewhat more flexible. This shipped by default with Windows Vista, and wraps IPv6 packets in UDP datagrams instead of in IPv4 packets. It is designed to allow a computer from behind a NAT to communicate with a relay that forwards packets to the IPv6 Internet, without requiring any intervening routers to be aware of it.
The biggest downside of Teredo is that it adds more overhead, because each packet now contains an IPv4 header, a UDP header, and an IPv6 header.