25.0. IntroductionIPv6 was initially developed to resolve a critical problem with the existing Internet Protocol (commonly called IPv4). An IPv4 address has 4 octets, or 32 bits, to identify every device on the Internet. If each node has a single unique address, then there can be at most 4,294,967,296 (that is, 2^32) devices on the Internet. And that doesn't account for the fact that most routers and many servers have several addresses. And, in fact, the situation is worse than that because of how IP addresses were originally allocated. With a handful of large organizations using Class A and B addresses, and large blocks of the IPv4 address range set aside for things like multicasting, the Internet Assigned Number Authority (IANA) was quickly running out of addresses. The Internet Engineering Task Force (IETF) went off to create a new version of the IP protocol with larger addresses to fix this problem. Many options were considered, and in the end they came up with IPv6. Of course, in the meantime, because the available assignable address ranges were rapidly running out, a few simple interim standards such as NAT and CIDR were drafted that effectively saved IPv4 for many years to come. Today the case for IPv6 is somewhat different. The force driving the new protocol is still based on increasing the number of addresses, but it is now a local rather than a global problem. Several large telephone companies, particularly in Asia, have started to encounter problems in assigning an IP address to every cellular telephone. If they start with a Class A address (such as the ubiquitous 10.0.0.0/8 range from RFC 1918), then they can address at most 16,777,216 devices. So it is easy to see how a national network with many millions of subscribers would quickly exhaust the available addressing. These companies could adopt an elaborate set of overlapping address ranges segregated by NAT, but IPv6 is a much more natural and flexible solution to the problem. IPv6 AddressingWhen the IPv4 address has 32 bits, the IPv6 address is represented by a (hopefully) inexhaustible 128-bit number. The full IPv6 address is written as eight blocks, each containing four hexadecimal numbers. These blocks are separated by colons ":". A hex number represents a 4-bit field, so a group of 4 hex numbers represents 16 bits. So we must have 8 such groups of numbers to make up the full 128 bits of the IPv6 address: x:x:x:x:x:x:x:x As we will discuss in a moment, many types of standard IPv6 address implementations involve a lot of sequential zeroes in the address. When this happens, there are some useful rules that allow us to simplify the address. It's easiest to understand these rules with a concrete example. Suppose we have this address: FEC0:0000:0000:0001:0000:0000:0000:0001/64 We can first delete all of the high order zeroes in each group of four hex numbers. FEC0:0:0:1:0:0:0:1/64 Then we can replace the longest set of consecutive zeroes with simply "::": FEC0:0:0:1::1/64 This object is now much easier to work with. Also note that in the example, we have included the prefix size /64, at the end of the address. This convention is identical to the prefix size bit count used in IPv4 addresses. This is not only similar in appearance to the IPv4 CIDR representation of addresses, but it has the same function, allowing routers to establish multiple hierarchical address summarizations in the network. Addressing StandardsThe IANA has allocated several ranges of IPv6 addresses for different purposes. RFC 4294 defines these rules, updating the earlier RFC 3513 document. This document defines three general classes of addressesUnicast, Multicast and Anycast. In addition, the standard defines several different types of Unicast address. As with IPv4, these different address types are uniquely identified by the first few bits of the address. A unicast address identifies a single interface on a device. This is essentially the same as in IPv4 addressing, except that sometimes IPv4 addresses can represent two or more interfaces or devices through mechanisms like NAT and HSRP. A multicast address in IPv6 functions exactly the same as in IPv4. Please refer to Chapter 23 for more information about IPv4 multicast protocols. Anycast is a relatively new concept with IPv6, although it was proposed as an extension for IPv4 and is actually used in a limited way with the example of an IPv4 Anycast Rendezvous Point for multicast traffic (please refer to Chapter 23 for an example). An anycast address can represent several different interfaces or devices, any one of which may receive the packet. There are IPv4 mechanisms for achieving this effect. The virtual IP address in VRRP and HSRP is effectively an anycast as any of the devices in the group can handle the packet. The VRRP or HSRP protocol simply elects which device is currently handling a particular address on behalf of the group. Similarly, load balancing devices are often used to stand in front of a pool of servers, accepting packets for a single destination address and distributing the connections among the pool. With IPv6, though, this concept is formalized. Normally people say that the "closest" anycast device will respond, but as the examples in the previous paragraph suggest, there are many other more sophisticated applications for this anycast concept than merely finding the closest of a group of devices. Perhaps the biggest change is that there is no broadcast in IPv6. The different types of address are specified by the first several bits, as shown in Table 25-1.
The Link Local Unicast is an address that is not permitted to "leak" off of the local network segement. The Site Local Unicast is similarly not permitted to leak out of an enterprise network (similar to RFC 1918 addresses). Note, however, that the Site Local Unicast definition is no longer considered part of the IPv6 addressing standard. In addition, there are standard methods for encapsulating IPv4 addresses inside of IPv6 addresses. The so-called "IPv4-Compatible Address" follows the convention of just putting the IPv4 address into the last 32 bits of the 128-bit IPv6 address and padding all of the higher order bits with zeroes. For example, the address 192.168.11.1 would be written as 0:0:0:0:0:0:C0A8:0B01 or ::C0A8:B01, or following another convenient standard for representing IPv6 address that contain IPv4 address, ::192.168.11.1. Once again, this method is also deprecated because it doesn't match well with newer methods for interoperating IPv4 and IPv6 networks. However, you will sometimes see it in use in older IPv6 implementations. Another common method for writing IPv4 addresses inside of IPv6 addresses is called "IPv4-Mapped Addressing", and it follows a similar strategy. Once again, the last 32 bits encapsulate the IPv4 address, but in this method, the IPv4 address is padded by 16 binary ones and 80 zeroes. So this time the address 192.168.11.1 becomes 0:0:0:0:0:FFFF:C0A8:0B01, or ::FFFF:C0A8:B01. Finally, some Cisco documentation talks about so-called Site-Local addressing, which has a binary prefix of 1111 1110 11, or FEC0::/10 in hex. The Site-Local addressing concept has now been deprecated and removed from the IPv6 standard. While individual sites are free to continue using this addressing scheme and manually block these addresses from leaking out of a particular administrative area by means of access-lists, these addresses are now considered to be standard unicast addresses. IEEE EUI-64 IdentifiersOne thing that you will run into quickly in working with IPv6 is the EUI-64 identifier for an interface. The EUI-64 identifier is essentially an extension of the already familiar 48-bit MAC address commonly used on Ethernet interfaces. RFC 4291 defines a way of using this EUI-64 address to build a unique IPv6 address automatically for an interface. Routing ProtocolsBesides the rather large addressing differences already discussed, IPv6 is essentially IP as we already know it. It carries TCP and UDP and other higher layer protocols with no changes to those higher layer protocols. Telnet in IPv6 is Telnet. SMTP is still SMTP, and so forth. Even the routing protocols that we use to distribute information about where different hosts exist on the network are very familiar from the protocols we have already discussed in this book. There are obviously some differences just due to the differences in addressing. Cisco routers implement several different IPv6 routing protocols, and we will show examples of RIP and OSPF for IPv6 in particular. There is also an IOS implementation of MBGP that allows you to carry IPv6 addressing, which we will discuss briefly in this chapter. Cisco routers also implement a version of the IS-IS routing protocol for IPv6. However, as we don't cover this protocol for IPv4, we will not cover it for IPv6 either. EIGRP for IPv6 became available in IOS Version 12.4(6)T, unfortunately putting it out of reach for most currently installed routers. |