Network Computing is part of the Informa Tech Division of Informa PLC

This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.

Understanding IPv6: The Ping Before Solicited-Node Multicast

In a previous blog, we looked at the basics of IPv6 solicited-node multicast. Going back to our Router A and Router B environment, if we sniff the wire while pinging from Router A's IPv6 address to Router B's IPv6 address, what will we see? Spoilers! Suffice it to say we will see some IPv6 solicited-node multicast very much in action.

 

Ping in IPv4

Before we jump into IPv6, let's first do an IPv4 ping from Router A to Router B. When we sniff the wire we can review the mechanisms of how IPv4 does all of this on the wire.

When ping 10.10.10.2 is entered on Router A, the router knows it is being asked to build an ICMP echo request message and put it "out on the wire" with a destination IP address of 10.10.10.2. But in order to make the request "ready" to put out on the wire to get to 10.10.10.2, Router A needs more than simply the destination IPv4 address.

For the purposes of this post, we will look at four things the router needs before sending the ICMP echo request out on the wire. These four are:

  • Destination MAC address
  • Source MAC address
  • Source IP address
  • Destination IP address

Of these four values, Router A can already fill in three of them.

From the "ping 10.10.10.2" command itself, Router A knows the destination IP address.

Therefore, Dest IP = 10.10.10.2.

Since this is not an extended ping, Router A also knows what source IP it is going to use. It is going to use the IP address that is "nearest" to the destination IP address according to its routing table. That means it will use the interface that is directly on this subnet.

Therefore, Source IP = 10.10.10.2.

Now that Router A knows what source IP address it is going to use, it now knows what source MAC address it is going to use.

Therefore, Source MAC address = c464.130a.a280.

Now we are only missing one thing: the destination MAC address that goes along with destination IP address 10.10.10.2. Obviously we need to know this prior to sending the ICMP echo request out on the wire. Router A, at this point in time, however, does not know the MAC address associated with IP address 10.10.10.2.

It's time to turn to ARP -- the Address Resolution Protocol originally defined by RFC 826. Let's take a look at a definition of ARP:

ARP is used to locate the Ethernet address associated with a desired IP address. When a machine has a packet bound for another IP on a locally connected Ethernet network, it will send a broadcast Ethernet frame containing an ARP request onto the Ethernet. All machines with the same Ethernet broadcast address will receive this packet. If a machine receives the ARP request and it hosts the IP requested, it will respond with the link layer address on which it will receive packets for that IP address.

Now let's look at this on the wire:

Note the details:

  • Line 13: ARP request for 10.10.10.2 with source MAC: c464.130a.a280 (Router A), destination MAC: broadcast
  • Line 14: ARP response from Router B that 10.10.10.2 is at MAC address: c4:64:13:0a:b0:00
  • Line 15: ICMP echo request (ping) can now be sent out on the wire since Router A now knows the destination MAC address

Ping in IPv6

Ping for IPv6 is very similar to ping for IPv4, but it uses an ICMPv6 echo request message that goes "out on the wire." Again, in order to make the request "ready" to get to 2001:DB8::AB:2, Router A needs more than just the destination IPv6 address.

For the purposes of this post we will look at the same four things the router needs before sending this ICMPv6 echo request out on the wire. These four are:

  • Destination MAC address
  • Source MAC address
  • Source IPv6 address
  • Destination IPv6 address

From the "ping 2001:DB8::AB:2" command itself, Router A knows the destination IPv6 address.

Therefore, Dest IPv6 = 2001:DB8::AB:2.

Since this is not an extended ping, Router A also knows what source IP it is going to use. It will use the IPv6 address that is "nearest" to the destination IPv6 address according to its routing table. That means it will use the interface that is directly on this subnet.

Therefore, Source IPv6 = 2001:DB8::AB:1.

Now that Router A knows what source IPv6 address it is going to use, it now knows what source MAC address it is going to use.

Therefore, Source MAC address = c464.130a.a280.

Now we are only missing one thing: the destination MAC address that goes with destination IPv6 address 2001:DB8::AB:2. Obviously, we need to know this prior to sending the ICMPv6 echo request out on the wire. Router A at this point in time, however, does not know the MAC address associated with IP address 2001:DB8::AB:2.

Time to turn to … um … Wait a second. We can't use ARP as we understood it in IPv4. Why? Because it sends a broadcast. IPv6 doesn't HAVE broadcast. So how do we do "address resolution" of an IPv6 address to a MAC address?

In my next post, we shall see exactly what happens on the wire in IPv6 so that Router A can discover the MAC address of 2001:DB8::AB:2.