How Internet Protocol version 6 (IPv6) Works

Autoconfiguration is an incredibly useful solution because it allows devices on a network to address themselves with a link-local unicast address. This process happens through first learning the prefix information from the router and then appending the device’s own interface address as the interface ID. Every device on an Ethernet network has a physical MAC address, and that’s exactly what’s used for the interface ID. Since the interface ID in an IPv6 address is 64 bits in length and a MAC address is only 48 bits, the MAC address is padded in the middle with the extra bits-it’s padded with FFFE. For example, let’s say I have a device with a MAC address that looks like this: 0017.a4d2.27fc. After it’s been padded, it would look like this:

Result: 0017.a4FF.FEd2.27fc

Part of the process of padding (called modified eui-64 format) changes a bit to specify if the address is locally unique or globally unique. And the bit that gets changed is the seventh bit in the address. A bit value of 1 means globally unique, and a bit value of 0 means locally unique. Then, it is necessary to invert the universal bit (“u” bit) in the 6th position of the first octet.

Final result: 0217.a4FF.FEd2.27fc

To perform autoconfiguration, a host goes through a basic two-step process:

  1. The host needs the prefix information (similar to the network portion of an IPv4 address) to configure its interface, so it sends a router solicitation (RS) request for it. This RS is then sent out as a multicast to each router’s multicast address. The actual information being sent is a type of ICMP message, and like everything in networking, this ICMP message has a number that identifies it. The RS message is ICMP type 133.
  2. The router answers back with the required prefix information via a router advertisement (RA). An RA message also happens to be a multicast packet that’s sent to each node’s multicast address and is ICMP type 134. RA messages are sent on a periodic basis, but the host sends the RS for an immediate response so it doesn’t have to wait until the next scheduled RA to get what it needs.

IPv6 Autoconfiguration

In order to enable IPv6 on a router, you have to use the ipv6 unicast-routing global configuration command. By default, IPv6 traffic forwarding is disabled, so using this command enables it. Also, IPv6 isn’t enabled by default on any interfaces either, so we have to go to each interface individually and enable it. There are a few different ways to do this, but a really easy way is to just add an address to the interface.

Router#
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#
Router(config)#ipv6 unicast-routing
Router(config)#int fa 0/0
Router(config-if)#
Router(config-if)#ipv6 address 2001:db8:3c4d:15::/64 ?
eui-64 Use eui-64 interface identifier
<cr>

Router(config-if)#ipv6 address 2001:db8:3c4d:15::/64 eui-64 ?
<cr>

Router(config-if)#ipv6 address 2001:db8:3c4d:15::/64 eui-64
Router(config-if)#
Router(config-if)#end
Router#
Router#
Router#sh ipv6 int fa 0/0
FastEthernet0/0 is up, line protocol is up
IPv6 is enabled, link-local address is FE80::C600:2FF:FEF4:0
Global unicast address(es):
2001:DB8:3C4D:15:C600:2FF:FEF4:0, subnet is 2001:DB8:3C4D:15::/64
Joined group address(es):
FF02::1
FF02::2
FF02::1:FFF4:0
MTU is 1500 bytes
ICMP error messages limited to one every 100 milliseconds
ICMP redirects are enabled
ND DAD is enabled, number of DAD attempts: 1
ND reachable time is 30000 milliseconds
ND advertised reachable time is 0 milliseconds
ND advertised retransmit interval is 0 milliseconds
ND router advertisements are sent every 200 seconds
ND router advertisements live for 1800 seconds
Hosts use stateless autoconfig for addresses.
Router#

DHCPv6

DHCPv6 works pretty much the same way DHCP does in v4, with the obvious difference that it supports the new addressing scheme for IPv6. And it might come as a surprise, but there are a couple of other options that DHCP still provides for us that autoconfiguration doesn’t – DNS servers, domain names, or many of the other options that DHCP has always provided for us via IPv4 with autoconfiguration.

Upon booting up in IPv4, a client sent out a DHCP discover message looking for a server to give it the information it needs. In IPv6, the RS and RA process happens first. If there’s a DHCPv6 server on the network, the RA that comes back to the client will tell it if DHCP is available for use. If a router isn’t found, the client will respond by sending out a DHCP solicit message-a solicit message that’s actually a multicast message addressed with a source of ff02::1:2, meaning all DHCP agents, both servers and relays.

It’s good to know that there’s some support for DHCPv6 in the Cisco IOS. But it’s limited to a stateless DHCP server, meaning it doesn’t offer any address management of the pool, plus the options available for configuring that address pool are limited to the DNS, domain name, and SIP servers only. Here is the example of configuration of DHCPv6 on Cisco IOS:

Router(config)#ipv6 dhcp pool ?
WORD DHCP pool name
Router(config)#ipv6 dhcp pool local
Router(config-dhcp)#?
IPv6 DHCP configuration commands:
default            Set a command to its defaults
dns-server         DNS servers
domain-name        Domain name to complete unqualified host names
exit               Exit from DHCPv6 configuration mode
no                 Negate a command or set its defaults
prefix-delegation  IPv6 prefix delegation
sip                SIP Servers options
Router(config-dhcp)#dns-server ?
Hostname or X:X:X:X::X Server's name or IPv6 address
Router(config-dhcp)#domain-name ciscotests.org
Router(config-dhcp)#prefix-delegation ?
X:X:X:X::X/<0-128>  IPv6 x:x::y/
aaa                 Acquire prefix from AAA
pool                IPv6 prefix pool
Router(config-dhcp)#prefix-delegation pool ?
WORD IPv6 prefix pool
Router(config-dhcp)#prefix-delegation pool test ?
lifetime  Configure prefix lifetimes
<cr>
Router(config-dhcp)#prefix-delegation pool test lifetime ?
<60-4294967295>  Valid lifetime (seconds)
at               Expire prefix at a specific time/date
infinite         Infinite valid lifetime
Router(config-dhcp)#prefix-delegation pool test lifetime 3600 ?
<60-4294967295>  Preferred lifetime (seconds)
infinite         Infinite preferred lifetime
Router(config-dhcp)#prefix-delegation pool test lifetime 3600 3600 ?
<cr>
Router(config-dhcp)#prefix-delegation pool test lifetime 3600 3600
Router(config-dhcp)#

Now when we have the pool, the only thing that we need is to assign that pool to the interface:

Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#int fa 0/0
Router(config-if)#ipv6 dhcp server local
Router(config-if)#

ICMPv6

IPv4 used ICMP for many things, such as error messages like destination unreachable, and troubleshooting functions like Ping and Traceroute. ICMPv6 still does those things for us, but unlike its predecessor, the v6 flavor isn’t implemented as a separate layer 4 protocol. It’s an integrated part of IPv6 and is carried after the basic IPv6 header information as an extension header. And ICMPv6 adds another cool feature-it prevents IPv6 from doing any fragmentation through an ICMPv6 process called path MTU discovery. The source node of a connection will send a packet that’s equal to the MTU size of its local link’s MTU. As this packet traverses the path toward its destination, any link that has an MTU smaller than the size of the current packet will force the intermediate router to send a “packet too big” message back to the source machine. This message tells the source node what the maximum size is that the restrictive link will allow and asks the source to send a new scaled-down packet that can pass through. This process will continue until the destination is finally reached, with the source node now sporting the new path’s MTU. So now, when the rest of the data packets are transmitted, they’ll be protected from fragmentation.

ICMPv6 now takes over the task of finding the address of other devices on the local link. Address Resolution Protocol used to perform this function for IPv4, but that’s been renamed Neighbor Discovery in ICMPv6. This process is accomplished by using a multicast address called the solicited node address, and all hosts join this multicast group when they connect to the network. Part of their IPv6 address (the 24 bits farthest to the right) is added to the end of the multicast address FF02:0:0:0:0:1:FF/104. When this address is queried, the corresponding host will send back its layer 2 address. Devices can find and keep track of other neighbor devices on the network in pretty much the same way.

In IPv4, the protocol IGMP was used to allow a host device to tell its local router that it was joining a multicast group and would like to receive the traffic for that group. This IGMP function has been replaced by ICMPv6, and the process has been renamed multicast listener discovery.

Our Recommended Premium CCNA Training Resources

These are the best CCNA training resources online:

Click Here to get the Cisco CCNA Gold Bootcamp, the most comprehensive and highest rated CCNA course online with a 4.8 star rating from over 30,000 public reviews. I recommend this as your primary study source to learn all the topics on the exam. Cisco CCNA Gold Bootcamp
Want to take your practice tests to the next level? AlphaPreps purpose-built Cisco test engine has the largest question bank, adaptive questions, and advanced reporting which tells you exactly when you are ready to pass the real exam. Click here for your free trial. Cisco CCNA Gold Bootcamp