Version 6 of the Internet Protocol provides additional capabilities over the current version 4. In many ways, version 6 provides several enhancements over the current standard. These include:
- The Simplified IPv6 Packet Header
- Larger Address Space
- IPv6 Addressing Hierarchy
- IPv6 Extendibility
- IPv6 Broadcast Elimination
- Stateless Autoconfiguration
- Integrated Mobility
- Integrated Enhanced Security
The header fields in an IPv4 packet are very detailed and complete. However, not all fields in the IPv4 packet header are used or required – for example the Type of Service field. Other headers, such as the Checksum, are no longer a necessity, nor are they used because transmission link quality has greatly improved over the years. In contrast, the header fields of an IPv6 packet are much simpler and contain the bare minimum of information required to route the packet. This allows for greater routing efficiency with IPv6 than is afforded by IPv4.
IPv6 addresses are 128-bits in length. This extended address length allows for billions of host addresses. This sheer amount of address space eliminates the need to perform Network Address Translation (NAT) in IPv6 because a global address can be assigned to each individual host. Because a global IP address can be assigned to each individual device, e.g. computers, laptops, and phones, we can return the Internet to a true end-to-end model when using IPv6.
Because of the much larger address space provided by IPv6, multiple levels of hierarchy can be used within the IPv6 address space. This allows providers and other organizations to use this hierarchy to better manage the IPv6 address space based on bit-boundaries. The use of an addressing hierarchy allows route summarization in IPv6 to be performed in a more organized manner than is currently performed using the IPv4 address space.
Unlike IPv4, IPv6 has a fixed-size header field and additional header extensions are included to support new features. These additional headers are outside the standard IPv6 header and are referenced in such a way that all individual internetwork devices can skip the extension if they don’t support it. This reduces the processing overhead of routers routing IPv6 packets.
In IPv6, ARP Broadcasts are replaced by Multicast packets on the local network segment. This prevents devices that do not need to receive these packets from receiving them, and avoids the problems that Broadcasts cause, e.g. wasting resources and network performance degradation.
Both IPv4 and IPv6 support stateful Autoconfiguration which allows network hosts to receive their addressing information from a network server, i.e. via DHCP. In addition to supporting stateful Autoconfiguration, IPv6 also supports stateless Autoconfiguration. Stateless Autoconfiguration allows hosts to configure their Unicast IPv6 addresses by themselves based on prefix advertisements from routers on the local network segment.
While Mobile IP is available for both IPv4 and IPv6, it is built into IPv6 whereas it is an added function in IPv4. IPv6 mobility allows IPv6-capable devices such as PDAs, cell phones and wireless laptops to roam between the IPv6 networks of wireless or cellular providers by using the Mobile IP protocol. This allows any IPv6 host to use Mobile IP as needed, while only IPv4 hosts that have this added functionality can use Mobile IP.
IPv6 uses the inbuilt security mechanisms afforded by the IP Security (IPsec) protocol. The key difference between IPSec in IPv4 and IPv6 is that it is optional in IPv4 but mandatory in IPv6. As defined in RFC 2460, IPv6 includes the use of the Authentication Header (AH) and Encapsulating Security Payload (ESP) extension headers in a complete implementation.
IPv6 Address Representation
There are three ways in which IPv6 addresses can be represented:
- The Preferred or Complete Address Representation or Form
- The Compressed Representation
- The IPv6 Addresses with an Embedded IPv4 Address
While the preferred form or representation is the most commonly used method for representing the 128-bit IPv6 address in text format, it is also important to be familiar with the other two methods of IPv6 address representation. These methods are described in the following sections
The preferred representation for an IPv6 address is the longest format, and is also referred to as the complete form of an IPv6 address. This format represents all 32 Hexadecimal characters that are used to form an IPv6 address. This is performed by writing the address as series of eight 16-bit Hexadecimal fields, separated by a colon, e.g. 3FFF:1234:ABCD:5678:020C:CEFF:FEA7:F3A0.
The compressed representation allows for IPv6 addresses to be compressed in one of two ways. The first method allows a double colon (::) to be used to compress consecutive zero values in a valid IPv6 address for successive 16-bit fields comprised of zeros or for leading zeros in the IPv6 address. When using this method, it is important to remember that the double colon can only be used once in an IPv6 address. An example of a compressed IPv6 address would be 3FFE::1/64.
The third representation of an IPv6 address is to use an embedded IPv4 address within the IPv6 address. When an IPv6 address is embedded with an IPv4 address, the first part of the IPv6 address uses the Hexadecimal notation and the remainder of the address is in the tradition dotted-decimal notation used by IPv4 addresses. However, it is permissible to convert the 32-bit dotted-decimal IPv4 address into Hexadecimal notation and embed that into the IPv6 address instead. The IPv6 address with an embedded IPv4 address is comprised of six fields of 16-bit Hexadecimal characters and four fields of 8-bit decimal characters. There are two kinds of IPv6 addresses that contain an embedded IPv4 address. These are:
- IPv4-compatible IPv6 addresses
- IPv4-mapped IPv6 addresses
IPv4-compatible IPv6 addresses have the first 96 bits set to 0 and are then followed by the 32-bit IPv4 address. An example of an IPv4-compatible IPv6 address would be 0000:0000:0000:0000:0000:0000:172.16.255.1. This same address can then be compressed as 0:0:0:0:0:0:172.16.255.1/128 or simply as ::172.16.255.1/128. Additionally, it is also important to remember that the decimal IPv4 address could be converted to Hexadecimal and used to create the IPv4-compatible IPv6 address 0:0:0:0:0:0: AC10:FF01/128 or simply ::AC10:FF01/128.
IPv4-mapped IPv6 addresses have the first 80 bits set to 0; the next 16 bits set to a value of all 1s, which is FFFF in Hexadecimal notation, and are then followed by the IPv4 dotted-decimal address. An example of an IPv4-mapped IPv6 address would be 0000:0000:0000:0000:0000:FFFF:172.16.255.1/128. Because it is perfectly legal to represent the address in the compressed form, the same address could also be written as either 0:0:0:0:0:FFFF:172.16.255.1/128 or ::FFFF:172.16.255.1/128. Additionally, the IPv4 address could be also converted to Hexadecimal producing the IPv4-mapped IPv6 address 0:0:0:0:0: FFFF:AC10:FF01/128 or simply ::FFFF:AC10:FF0/128.
The Different IPv6 Address Types
Unlike IPv4, IPv6 does not use Broadcast addresses. Instead, IPv6 supports and uses only the Unicast, Multicast and Anycast address classes or types also used by IPv4. IPv6 addresses can be classified as any one of the following:
- Link-Local Addresses
- Site-Local Addresses
- Aggregate Global Unicast Addresses
- Multicast Addresses
- Anycast Addresses
- Loopback Addresses
- Unspecified Addresses
IPv6 Link-Local can only be used on the local link, i.e. a shared segment between devices, and are automatically assigned to each interface when IPv6 is enabled on that interface. These addresses are assigned from the Link-Local prefix FE80::/10. To complete the address, bits 11 through 64 are set to 0 and the interface Extended Unique Identifier 64 (EUI-64) is appended to the Link Local address as the low-order 64 bits. The EUI-64 is comprised of the 24-bit manufacturer ID assigned by the IEEE and the 40-bit value assigned by that manufacturer.
Site-Local addresses are Unicast addresses that are used only within a site. Unlike Link-Local addresses, Site-Local address must be manually configured on network devices. These addresses are the IPv6 equivalent of the private IPv4 address space defined in RFC 1918 and can be used by organizations that do not have globally routable IPv6 address space. While still supported in Cisco IOS software, site-local addresses are deprecated by RFC 4193 which describes Unique-Local Addresses (ULAs), which serve the same function as Site-Local addresses and are not routable on the global IPv6 Internet.
Unique-Local Addresses are assigned from the FC00::/7, IPv6 address block, which is then also further divided into two /8 address groups referred to as the assigned and random groups. These two groups are the FC00::/8 and FD00::/8 IPv6 address blocks. The FC00::/8 block is to be managed by an allocation authority for /48s in use, while the FD00::/8 is formed by appending a randomly-generated 40-bit string, to derive a valid /48 block.
Aggregate Global Unicast Addresses are the IPv6 addresses used for generic IPv6 traffic as well as for the IPv6 Internet. These are similar to the public addresses used in IPv4. From a network addressing point of view, each IPv6 Global Unicast Address is comprised of three main sections: the prefix received from the provider (48-bit in length), the site prefix (16-bit in length) and the host portion (64-bit in length). This makes the 128-bit address used in IPv6. Aggregate Global Unicast Addresses for IPv6 are assigned by IANA and fall within the IPv6 prefix 2000::/3. This allows for a range of Aggregate Global Unicast Addresses from 2000 to 3FFF.
The Multicast addresses used in IPv6 are derived from the FF00::/8 IPv6 prefix. In IP version 6, Multicast operates in a different manner than that of Multicast in IPv4. There are two defined types of IPv6 Multicast address: permanent and temporary. Permanent IPv6 Multicast addresses are assigned by IANA while the temporary IPv6 Multicast addresses can be used in pre-deployment Multicast testing.
In IPv6, Anycast addresses use Global Unicast, Site-Local or even Link-Local addresses. However, there is an Anycast address reserved for special use. This special address is referred to as the Subnet-Router Anycast Address. The Subnet-Router Anycast Address is formed with the subnets 64-bit Unicast prefix, with the remaining 64 bits set to zero, for example: 2001:1a2b:1111:d7e5:0000:0000:000:0000.
IPv6 Loopback addresses can be represented as 0000:0000:0000:0000:0000:0000:0000:0001 in the preferred address format and use the prefix ::1. This means that in Loopback addresses, all bits are set to 0 except for the last bit which is always set to 1. These addresses are always automatically assigned when IPv6 is enabled on a device and therefore can never be changed.
In IPv6 addressing, unspecified addresses are simply Unicast addresses that are not assigned to any interface. These addresses indicate the absence of an IPv6 address and are used for special purposes that include IPv6 DHCP and DAD. Unspecified addresses are represented by all 0 values in the IPv6 address and can be written using the :: prefix. In the preferred format, these addresses are represented as 0000:0000:0000:0000:0000:0000:0000:0000.
Verifying and Troubleshooting Generic IPv6 Routing
As is the case with IPv4, Cisco IOS software provides several IPv6-specific commands that can be used to verify and troubleshoot generic IPv6 routing configurations and problems. When running IPv4, the show ip route command, along with supported keywords, is used to view the contents of the RIB. When using IPv6, the same is performed using the show ipv6 routecommand. This command supports the following keywords (in Cisco IOS 12.4):
| R1#show ipv6 route ? Hostname or X:X:X:X::X IPv6 name or address X:X:X:X::X/<0-128> IPv6 prefix bgp BGP routes connected Connected routes interface interface specific routes isis IS-IS routes local Local routes ospf OSPFv3 routes rip RIPng routes static Static routes summary Summary display | Output modifiers <cr> |
While the majority of these supported options require no explanation as they are described and illustrated in the ROUTE guide, there are some options that were not described that you should be familiar with. The interface keyword can be used to view all routes learned via a particular interface. This command is protocol independent and prints all know routes received via the specified interface regardless of routing protocol. The output of this command also includes static routes point out the specified interface, as well as the connected subnets for that specified interface. Following is a sample of the information printed by this command:
| R1#show ipv6 route interface fastethernet 0/0 IPv6 Routing Table – 7 entries Codes: C – Connected, L – Local, S – Static, R – RIP, B – BGP U – Per-user Static route I1 – ISIS L1, I2 – ISIS L2, IA – ISIS interarea, IS – ISIS summary O – OSPF intra, OI – OSPF inter, OE1 – OSPF ext 1, OE2 – OSPF ext 2 ON1 – OSPF NSSA ext 1, ON2 – OSPF NSSA ext 2 S ::/0 [1/0] via FE80::20D:28FF:FE9E:F940, FastEthernet0/0 OI 2001::2/128 [110/1] via FE80::20D:28FF:FE9E:F940, FastEthernet0/0 R 2002::2/128 [120/2] via FE80::20D:28FF:FE9E:F940, FastEthernet0/0 C 3FFE::/64 [0/0] via ::, FastEthernet0/0 L 3FFE::20F:23FF:FE5E:EC80/128 [0/0] via ::, FastEthernet0/0 |
The show ipv6 route local command prints information on all locally configured Global Aggregate Unicast addresses and subnets; however, keep in mind that this does not include assigned link local addresses. You can view assigned link local addresses using the show ipv6 interface [brief] command instead. Following is a sample of the information that is printed by the show ipv6 route local command:
| R1#show ipv6 route local IPv6 Routing Table – 7 entries Codes: C – Connected, L – Local, S – Static, R – RIP, B – BGP U – Per-user Static route I1 – ISIS L1, I2 – ISIS L2, IA – ISIS interarea, IS – ISIS summary O – OSPF intra, OI – OSPF inter, OE1 – OSPF ext 1, OE2 – OSPF ext 2 ON1 – OSPF NSSA ext 1, ON2 – OSPF NSSA ext 2 LC 2001::1/128 [0/0] via ::, Loopback0 LC 2002::1/128 [0/0] via ::, Loopback1 LC 2003::1/128 [0/0] via ::, Loopback3 L 3FFE::20D:28FF:FE9E:F940/128 [0/0] via ::, FastEthernet0/0 L FE80::/10 [0/0] via ::, Null0 L FF00::/8 [0/0] via ::, Null0 |
And finally, the show ipv6 route summary command prints a summary of the number of IPv6 routes known by the local device. This command shows the total number of routing entries, and further breaks this down by routing protocol (route source) and the number of prefixes. Following is a sample output of the information that is printed by this command:
| R1#show ipv6 route summary IPv6 Routing Table Summary – 7 entries 3 local, 1 connected, 1 static, 1 RIP, 0 BGP, 0 IS-IS, 1 OSPF Number of prefixes: /0: 1, /8: 1, /10: 1, /64: 1, /128: 3 |
In addition to basic show commands, you should also be familiar with the debugging suite of commands for generic IPv6 troubleshooting. Cisco IOS software provides a plethora of commands that can be used to troubleshoot IPv6 problems. IPv6 debugging is enabled using thedebug ipv6 privileged EXEC command. This command supports the following options:
| R1#debug ipv6 ? access-list IPv6 access list debugging cef IPv6 CEF information cpc IPv6 Common Parsing Cache debugging dhcp IPv6 DHCP debugging icmp ICMPv6 debugging inspect Stateful inspection events interface IPv6 interface debugging mfib IP Multicast forwarding information base mld Multicast Listener Discovery mobile MIPv6 Debugging mrib Multicast Route DB nat NAT-PT events nd IPv6 Neighbor Discovery debugging ospf OSPF information packet IPv6 packet debugging pim Protocol Independent Multicast policy IPv6 policy-based routing debugging pool IPv6 prefix pool debugging port-mapping IPv6 PAM events rip RIP Routing Protocol debugging routing IPv6 routing table debugging virtual-reassembly IPv6 Virtual Fragment Reassembly (VFR) debugging |
NOTE: While the majority of these options are beyond the scope of the TSHOOT certification exam, the following section describes some of the options with you should be familiar with.
The debug ipv6 packet <access-list|detail> command enables IPv6 debugging for IPv6 packets. As is the case with the debug ip packet command used when troubleshooting IPv4, you can restrict the output by specifying an ACL or specify that detailed information be included by appending the detail keyword. The following example illustrates how to configure an IPv6 ACL that permits only ICMPv6 packets and enable detailed IPv6 packet debugging, restricting the output to only ICMPv6 packets:
| R1(config)#ipv6 access-list TSHOOT-ICMP-ACL R1(config-ipv6-acl)#permit icmp any any R1(config-ipv6-acl)#exit R1(config)#exit R1# R1#debug ipv6 packet access-list TSHOOT-ICMP-ACL detail IPv6 unicast packet debugging is on (detailed) for access list TSHOOT-ICMP-ACL R1# *Mar 23 06:41:23.283: IPv6: Sending on FastEthernet0/0 *Mar 23 06:41:27.091: IPV6: source 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:27.091: dest 3FFE::20F:23FF:FE5E:EC80 *Mar 23 06:41:27.091: traffic class 0, flow 0x0, len 100+14, prot 58, hops 64, forward to ulp *Mar 23 06:41:27.095: IPV6: source 3FFE::20F:23FF:FE5E:EC80 (local) *Mar 23 06:41:27.095: dest 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:27.095: traffic class 0, flow 0x0, len 100+14, prot 58, hops 64, originating *Mar 23 06:41:27.095: IPv6: Sending on FastEthernet0/0 *Mar 23 06:41:27.099: IPV6: source 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:27.099: dest 3FFE::20F:23FF:FE5E:EC80 *Mar 23 06:41:27.099: traffic class 0, flow 0x0, len 100+14, prot 58, hops 64, forward to ulp *Mar 23 06:41:27.099: IPV6: source 3FFE::20F:23FF:FE5E:EC80 (local) *Mar 23 06:41:27.099: dest 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:27.099: traffic class 0, flow 0x0, len 100+14, prot 58, hops 64, originating *Mar 23 06:41:27.103: IPv6: Sending on FastEthernet0/0 *Mar 23 06:41:27.103: IPV6: source 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:27.103: dest 3FFE::20F:23FF:FE5E:EC80 *Mar 23 06:41:27.107: traffic class 0, flow 0x0, len 100+14, prot 58, hops 64, forward to ulp *Mar 23 06:41:27.107: IPV6: source 3FFE::20F:23FF:FE5E:EC80 (local) *Mar 23 06:41:27.107: dest 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:27.107: traffic class 0, flow 0x0, len 100+14, prot 58, hops 64, originating *Mar 23 06:41:27.107: IPv6: Sending on FastEthernet0/0 *Mar 23 06:41:27.111: IPV6: source 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:27.111: dest 3FFE::20F:23FF:FE5E:EC80 *Mar 23 06:41:27.111: traffic class 0, flow 0x0, len 100+14, prot 58, hops 64, forward to ulp *Mar 23 06:41:27.111: IPV6: source 3FFE::20F:23FF:FE5E:EC80 (local) *Mar 23 06:41:27.111: dest 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:27.111: traffic class 0, flow 0x0, len 100+14, prot 58, hops 64, originating *Mar 23 06:41:27.115: IPv6: Sending on FastEthernet0/0 *Mar 23 06:41:27.115: IPV6: source 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:27.115: dest 3FFE::20F:23FF:FE5E:EC80 *Mar 23 06:41:27.119: traffic class 0, flow 0x0, len 100+14, prot 58, hops 64, forward to ulp *Mar 23 06:41:27.119: IPV6: source 3FFE::20F:23FF:FE5E:EC80 (local) *Mar 23 06:41:27.119: dest 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:27.119: traffic class 0, flow 0x0, len 100+14, prot 58, hops 64, originating *Mar 23 06:41:27.119: IPv6: Sending on FastEthernet0/0 *Mar 23 06:41:28.671: IPv6: Sending on FastEthernet0/0 *Mar 23 06:41:32.095: IPV6: source FE80::20F:23FF:FE5E:EC80 (local) *Mar 23 06:41:32.095: dest 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:32.095: traffic class 224, flow 0x0, len 72+8, prot 58, hops 255, originating *Mar 23 06:41:32.095: IPv6: Sending on FastEthernet0/0 *Mar 23 06:41:32.095: IPV6: source 3FFE::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:32.099: dest FE80::20F:23FF:FE5E:EC80 *Mar 23 06:41:32.099: traffic class 224, flow 0x0, len 64+14, prot 58, hops 255, forward to ulp *Mar 23 06:41:33.283: IPv6: Sending on FastEthernet0/0 *Mar 23 06:41:37.095: IPV6: source FE80::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:37.095: dest FE80::20F:23FF:FE5E:EC80 *Mar 23 06:41:37.095: traffic class 224, flow 0x0, len 72+14, prot 58, hops 255, forward to ulp *Mar 23 06:41:37.095: IPV6: source FE80::20F:23FF:FE5E:EC80 (local) *Mar 23 06:41:37.095: dest FE80::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:37.095: traffic class 224, flow 0x0, len 64+16, prot 58, hops 255, originating *Mar 23 06:41:37.099: IPv6: Sending on FastEthernet0/0 *Mar 23 06:41:42.099: IPV6: source FE80::20F:23FF:FE5E:EC80 (local) *Mar 23 06:41:42.099: dest FE80::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:42.099: traffic class 224, flow 0x0, len 72+8, prot 58, hops 255, originating *Mar 23 06:41:42.099: IPv6: Sending on FastEthernet0/0 *Mar 23 06:41:42.099: IPV6: source FE80::20D:28FF:FE9E:F940 (FastEthernet0/0) *Mar 23 06:41:42.103: dest FE80::20F:23FF:FE5E:EC80 *Mar 23 06:41:42.103: traffic class 224, flow 0x0, len 64+14, prot 58, hops 255, forward to ulp |
NOTE: We can determine that these are ICMPv6 packets because of the specified protocol number of 58, which is the protocol number used by ICMPv6 as specified in RFC 2463.
Another useful troubleshooting command is the debug ipv6 routing command, which can be used to display information on IPv6 RIB and route cache updates. Again, this command is protocol independent and prints information for all routing protocols. Following is a sample of the information that is printed by this command:
| R1#debug ipv6 routing IPv6 routing table events debugging is on R1# R1#clear ipv6 route * R1# R1# *Mar 23 06:59:49.219: IPv6RT0: ospf 1, Delete 2001::2/128 from table *Mar 23 06:59:49.219: IPv6RT0: rip TSHOOT, Delete 2002::2/128 from table *Mar 23 06:59:49.219: IPv6RT0: rip TSHOOT, Delete 2003::2/128 from table *Mar 23 06:59:49.219: IPv6RT0: ospf 1, Route add 2001::2/128 [new] *Mar 23 06:59:49.219: IPv6RT0: ospf 1, Add 2001::2/128 to table *Mar 23 06:59:49.223: IPv6RT0: ospf 1, Adding next-hop FE80::20D:28FF:FE9E:F940 over FastEthernet0/0 for 2001::2/128, [110/1] *Mar 23 06:59:49.223: IPv6RT0: ospf 1, Reuse backup for 3FFE::/64, distance 110 *Mar 23 06:59:49.223: IPv6RT0: rip TSHOOT, Route add 2002::2/128 [new] *Mar 23 06:59:49.223: IPv6RT0: rip TSHOOT, Add 2002::2/128 to table *Mar 23 06:59:49.223: IPv6RT0: rip TSHOOT, Adding next-hop FE80::20D:28FF:FE9E:F940 over FastEthernet0/0 for 2002::2/128, [120/2] *Mar 23 06:59:49.223: IPv6RT0: rip TSHOOT, Route add 2003::2/128 [new] *Mar 23 06:59:49.223: IPv6RT0: rip TSHOOT, Add 2003::2/128 to table *Mar 23 06:59:49.227: IPv6RT0: rip TSHOOT, Adding next-hop FE80::20D:28FF:FE9E:F940 over FastEthernet0/0 for 2003::2/128, [120/2] *Mar 23 06:59:49.227: IPv6RT0: rip TSHOOT, Reuse backup for 3FFE::/64, distance 120 *Mar 23 06:59:49.227: IPv6RT0: Event: 2001::2/128, Del, owner ospf, previous None *Mar 23 06:59:49.227: IPv6RT0: Event: 2002::2/128, Del, owner rip, previous None *Mar 23 06:59:49.227: IPv6RT0: Event: 2003::2/128, Del, owner rip, previous None *Mar 23 06:59:49.231: IPv6RT0: Event: 2001::2/128, Add, owner ospf, previous None *Mar 23 06:59:49.231: IPv6RT0: Event: 2002::2/128, Add, owner rip, previous None *Mar 23 06:59:49.231: IPv6RT0: Event: 2003::2/128, Add, owner rip, previous None *Mar 23 07:00:02.251: IPv6RT0: rip TSHOOT, Delete 2003::2/128 from table *Mar 23 07:00:02.251: IPv6RT0: rip TSHOOT, Delete backup for 3FFE::/64 *Mar 23 07:00:02.251: IPv6RT0: Event: 2003::2/128, Del, owner rip, previous None |
From the debug output above, we can determine that the local router is running OSPFv3 using process ID 1. The router is also running RIPng, using an instance named TSHOOT. Both OSPFv3 and RIPng are using the default administrative distances of 110 and 120, respectively. We can also determine that the local router is receiving the 2001::2/128 prefix from another OSPFv3 router with the link local address FE80::20D:28FF:FE9E:F940. The router is also receiving the 2002::2/128 and 2003::2/128 prefixes via RIPng from another RIPng-enabled router with the link local address FE80::20D:28FF:FE9E:F940, i.e. the same router also running OSPFv3. While both all three prefixes are originally inserted into the routing table, we can see that the 2003::2/128 eventually removed. You can use this information to determine if this is what should be happening, e.g. maybe it complies with a configured RIPng filter, or troubleshoot the cause if this is not expected behavior; e.g. maybe the prefix is flapping.@
Verifying and Troubleshooting Basic IPv6 Protocol Operation
The Neighbor Discovery Protocol is a core element of IPv6. NDP operates at the Link Layer and is responsible for discovery of other nodes on the link, determining the link layer addresses of other nodes, finding available routers, and maintaining reachability information about the paths to other active neighbor nodes. NDP performs functions for IPv6 that are similar to the way ARP and ICMP Router Discovery and Router Redirect protocols do for IPv4. NDP defines five types of ICMPv6 packets, which are listed and described in Table 10-1:
| ICMPv6 Type | Message Type Description and IPv6 Usage |
|---|---|
| 133 | Used for Router Solicitation (RS) messages |
| 134 | Used for Router Advertisement (RA) messages |
| 135 | Used for Neighbor Solicitation (NS) messages |
| 136 | Used for Neighbor Advertisement (NA) messages |
| 137 | Router Redirect |
While you are not expected to perform any advanced NDP troubleshooting, you can leverage NDP to troubleshoot basic misconfigurations between devices on the local segment. For example, you could use the show ipv6 routers [conflict] command to determine the routers that reside on the local link (same multi-access segment) and verify that their NDP configuration parameters are the same as the local router as illustrated in the following output:
| R1#show ipv6 routersRouter FE80::20F:23FF:FE5E:EC80 on FastEthernet0/0, last update 2 min Hops 64, Lifetime 1800 sec, AddrFlag=0, OtherFlag=0, MTU=1500 HomeAgentFlag=0, Preference=Medium Reachable time 0 msec, Retransmit time 0 msec Prefix 3FFE::/64 onlink autoconfig Valid lifetime 2592000, preferred lifetime 604800Router FE80::213:7FFF:FEAF:3E00 on FastEthernet0/0, last update 0 min Hops 64, Lifetime 1800 sec, AddrFlag=0, OtherFlag=0, MTU=1500 HomeAgentFlag=0, Preference=Medium Reachable time 0 msec, Retransmit time 0 msec Prefix 3FFE::/64 onlink autoconfig Valid lifetime 2592000, preferred lifetime 604800Router FE80::20D:28FF:FE9E:F940 on FastEthernet0/0, last update 0 min Hops 64, Lifetime 1800 sec, AddrFlag=0, OtherFlag=0, MTU=1500 HomeAgentFlag=0, Preference=Medium Reachable time 0 msec, Retransmit time 0 msec Prefix 3FFE::/64 onlink autoconfig Valid lifetime 2592000, preferred lifetime 604800 |
From the output above, we can determine that there are three additional IPv6 routers on the local segment. All three routers have the same prefix and additional IPv6 configuration parameters. Using this command, you could troubleshoot misconfigured device issues by appending the conflicts keyword which prints information on received Router Advertisements that differ from the advertisements configured for any of the local interfaces:
| R1#show ipv6 routers conflictsRouter FE80::20F:23FF:FE5E:EC80 on FastEthernet0/0, last update 1 min, CONFLICT Hops 64, Lifetime 1800 sec, AddrFlag=0, OtherFlag=0, MTU=1500 HomeAgentFlag=0, Preference=Medium Reachable time 0 msec, Retransmit time 0 msec Prefix 3FFE::/64 onlink autoconfig Valid lifetime -1, preferred lifetime -1Router FE80::213:7FFF:FEAF:3E00 on FastEthernet0/0, last update 0 min, CONFLICT Hops 64, Lifetime 1800 sec, AddrFlag=0, OtherFlag=0, MTU=1500 HomeAgentFlag=0, Preference=Medium Reachable time 0 msec, Retransmit time 0 msec Prefix 3FFE::/64 onlink autoconfig Valid lifetime -1, preferred lifetime -1 |
Another useful command when troubleshooting basic IPv6 functionality is the show ipv6 trafficcommand. This command prints information on sent and received IPv6 packets which can be used to troubleshoot anything from Layer 1 / Layer 2 problems to device misconfigurations, depending on the information printed in the output. Following is a sample output of the information that is printed by this command:
| R1#show ipv6 traffic IPv6 statistics: Rcvd: 1710 total, 1710 local destination 0 source-routed, 0 truncated 0 format errors, 0 hop count exceeded 0 bad header, 0 unknown option, 0 bad source 0 unknown protocol, 0 not a router 0 fragments, 0 total reassembled 0 reassembly timeouts, 0 reassembly failures 0 unicast RPF drop, 0 suppressed RPF drop Sent: 1466 generated, 0 forwarded 0 fragmented into 0 fragments, 0 failed 0 encapsulation failed, 0 no route, 0 too big Mcast: 1655 received, 1412 sentICMP statistics: Rcvd: 168 input, 0 checksum errors, 0 too short 0 unknown info type, 0 unknown error type unreach: 0 routing, 0 admin, 0 neighbor, 0 address, 0 port parameter: 0 error, 0 header, 0 option 0 hopcount expired, 0 reassembly timeout,0 too big 5 echo request, 15 echo reply 0 group query, 0 group report, 0 group reduce 0 router solicit, 123 router advert, 0 redirects 11 neighbor solicit, 14 neighbor advert Sent: 107 output, 0 rate-limited unreach: 0 routing, 0 admin, 0 neighbor, 0 address, 0 port parameter: 0 error, 0 header, 0 option 0 hopcount expired, 0 reassembly timeout,0 too big 15 echo request, 5 echo reply 0 group query, 0 group report, 0 group reduce 0 router solicit, 56 router advert, 0 redirects 16 neighbor solicit, 15 neighbor advertUDP statistics: Rcvd: 571 input, 0 checksum errors, 0 length errors 0 no port, 0 dropped Sent: 346 outputTCP statistics: Rcvd: 0 input, 0 checksum errors Sent: 0 output, 0 retransmitted |
Parsing through the output above, if you notice a large number of errors, it may be due to Layer 1 issues. In such cases, proceed and troubleshoot this Layer using the appropriate commands and methodology, such as component swapping for example, until the errors are no longer present. As another example, if the local device is sending NDP message but shows that it is not receiving any and you know that there is at least another device connected to the local segment or link, you would verify connectivity between the two and check for intermediate device misconfigurations such as incorrect VLAN assignments or configurations on a switch, for example. As can be seen the information printed by this command can be very useful in helping identify and isolate a plethora of issues may cause IPv6 problems.