(upbeat music)
- So the title of this video I recognize
looks a little strange, ARP and the IPv6 Solution (chuckles)
but in order for me to really talk about the
Solicited Node Multicast address,
we first have to understand something that happens
in the world of IP version four which is called ARP
or the Address Resolution Protocol.
Haven't really discussed it up until now, but we need
to understand this so that the Solicited Node Multicast
address will make some more sense.
So let's go back to our whiteboard here for a moment.
Let's assume that this is your laptop.
This is you.
This is you on a network.
And here is a laptop connected to a router.
And somewhere on here was DHCP Server.
Usually the DHCP Server is not actually on your wire,
but just to make the drawing a little bit easier
I'm gonna do it.
Okay so the router has a network interface card,
an Ethernet NIC, just like you have an Ethernet NIC.
And his Ethernet NIC has a MAC address on it
that was created by the manufacturer.
Let's say the MAC address is 0011:2222:3333.
And because he's a router, we have statically configured
an IP address on him, 2.2.2.2/24.
Okay, now your NIC card also has a MAC address on it.
Every NIC card does.
Let's say that's yours.
And let's say after doing DHCP process
and obtaining an IP address, you learned this information.
You learned that your IP address is 2.2.2.1
and your learned that your default gateway was 2.2.2.2.
So you learned all this via DHCP.
Okay, statistics show that
when a laptop creates traffic
or a tablet or a smartphone, people have done studies
trying to answer the question what percentage of traffic
that a laptop creates is destined for its own local subnet,
and what percentage of traffic is destined for other subnets
or the rest of the world.
And most of the time it's 20, 80.
In other words, roughly 20% of the traffic that you generate
is for your own local network, and 80% of the traffic
is going out to the rest of the world.
So we know that this PC right here at some point
he's gonna want to bring up a webpage or he's gonna want
to open up his email program.
He's gonna open up something where he's gonna want
to send a packet to the outside world.
So let's say the PC does something like this.
So here's a little thought bubble from the PC
and he says, "I want to go to the website
"that is at 7.7.7.7.
"That is NOT on my own subnet!!"
Because remember he always says a comparison
of his source address and the destination
of where he wants to go.
In this case he's saying, "Okay, that's not me.
"That's not here."
He says, "Okay, well, I'm gonna create my packet anyway."
He says, "Okay, here we go, here's my IP packet,
"and the source of the IP packet
"is gonna be me, 2.2.2.1."
The destination is gonna be 7.7.7.7.
And then he says, "When I send that down
"to the Ethernet NIC card, the NIC card is gonna have
"to put that into an Ethernet frame."
And an Ethernet frame has a source and destination MAC.
He says, "All right, well the source MAC,
"that's pretty easy, that's mine."
And the destination is,
huh, well, he says,
"I know that when I create an Ethernet frame,
"the destination of the frame has to be somebody
"on my wire."
And he says, "But ultimately the person I'm trying to reach
"is not on my wire.
"They're not in my subnet."
And so the PC says, "Well, is there anybody on my wire
"that might know how to get here?
"Oh, yeah, the router, that's why I have him
"in the first place, the default-gateway."
So he says, "What I should do is at layer two,
"I should destine my Ethernet MAC address
"to the MAC address of the router."
That way the router will pick up this Ethernet frame
and when he sends it up the stack to the networking layer
then he'll realize that it's a packet that's not for him
that needs to be routed.
He says, "But, huh, interesting.
"I know the router's IP address, but I don't know
"his layer two address.
"How am I gonna resolve that address?"
That's where he kicks in and uses something called
the Address Resolution Protocol, ARP,
and this is what ARP was designed to do.
When you know the layer three address of someone
in your subnet, and that's the key.
ARP is only used when you're trying to resolve someone
in your subnet.
For example, he would never ARP for 7.7.7.7
because that device is clearly not on this wire.
So when you're trying to reach someone in your subnet
and you know their layer three address,
but you don't know their layer two MAC address,
this is where we use ARP.
So with ARP, it would look like this.
This packet would be put on hold.
You'd have to put it in memory and store it in memory.
And he would create what's called an ARP Request.
And the source would be himself,
and the destination would be the router
he's trying to talk to.
And an ARP request actually has a few more fields than that
but we'll just keep it simple.
And then he would create his layer two header.
And the source of his layer two header would be himself,
0011:3333:4444,
and the destination would be a broadcast.
And a broadcast MAC address is all ones,
or ffff in hexadecimal.
So that is a special MAC address.
That is the broadcast MAC address.
It's for everybody on the wire.
And that's what the layer two frame would look like.
Everybody on the wire would see it.
Everybody would say, "Oh this is for me."
But when everybody is stripped off this layer two header
revealing what was behind it, they would recognize,
"Oh, this isn't for me, except the router."
The router would say, "Oh, somebody's sending
"an ARP request to me, alright."
Guess what he's gonna send back?
He's gonna send, I'm not gonna draw it here,
I'm just gonna write the name of it.
He would send back an ARP Response.
And in that response he would say, "I am 2.2.2.2.
"My MAC is
"0011:2222:3333."
When we know someone's layer three address
who is in our subnet but we don't know their layer two
address and we need to talk to them, this is the process.
We send out a broadcast to everybody called an ARP Request.
But inside the body of that packet we say,
"Hey, this is the guy I'm actually looking for."
And if that guy actually exists,
he sends back an ARP Response directly to us
giving us his MAC address.
And now that the MAC address is known, this packet,
which has been waiting forever up here to go
to the web server, we can now actually address it
at layer two to the router,
and away it goes.
Now the laptop can put this on the wire.
The router at layer two will think it's for him,
so he will pick it up, and everybody else on this wire
will ignore it.
And then when the router strips off the layer two header,
he'll see this and recognize that it's not for him.
Now what in the world does this have to do with IPv6
and why is this grouped in with the IPv6 videos?
The reason I want to bring this up is because this is
a classic case in the world of IP version four
of usage of a broadcast.
In IP version four there's a lot of things that go out
as broadcasts.
ARP Requests are one of them.
You see ARP Requests all the time all day long on networks.
ARP Requests go out as broadcasts,
and there's a lot of other stuff that goes out
as broadcasts as well.
Well in the case of IPv6, in this exact same process
where the laptop would say, "I know the IPv6 address
"of my router.
"What I don't know is his MAC address."
You might be tempted to think, "Oh, well there must be
"an ARP v6", and there's where your mistake would be.
There is no such thing as ARP in the world of IPv6.
As a matter of fact, when I was showing you all those
different types of IPv6 messages, Link-Local, global,
site local, did I ever show you an IPv6 address
that was a broadcast address?
No, I didn't, because they don't exist.
There's no such thing as a broadcast address
in the world of IPv6.
So think about that for a second.
In this case we needed to figure out
what his MAC address was.
And since we didn't know it, and we had to create
an Ethernet frame, and an Ethernet frame requires
a destination MAC address, but we didn't know
the destination MAC address.
So what did we do?
We just broadcast it.
So how is IPv6 gonna do this if there's no such thing
as a broadcast?
This is where that Solicited Node Multicast address
comes into play.
What I'm gonna do is I'm going to save this
so I can refer back to it,
but then I'm going to change it, IPv6 ND,
and we're gonna replace it with IPv6.
Okay, so here we are.
Now let's go ahead and replace some of this stuff.
Okay, so let's say that the router
now has, I'm gonna give him a really small IPv6 address.
It's mostly zeros so I can condense it down, 2001::1.
So most of the bits in this 128-bit address are zeros.
And we also know he's got to have a Link-Local address.
Let's just make that simple as well.
And we know he's listening to the all routers address
which is that.
And we know he's listening to the all hosts address,
which is that.
Now there's another address that he's listening to.
Let me change his Link-Local just a little bit,
fe80::
0011:11ff:
fe33:4444.
All right, so let's say that this is a Link-Local address
and this is derived from his MAC address.
For every interface ID that he has
that's unique to him, so right now he actually
has two interface IDs, doesn't he?
Actually if I derive it from his MAC,
I actually probably should have looked at his MAC
and actually used that,
so fe80::0211
:22ff:fe22:3333.
There we go.
Okay, because this is actually derived off of his real
MAC address right there.
I just used EU 1/64 to come up with that.
And just to make things simple, let's just say that
his global prefix is just like that too,
0211:22ff:fe.
I gotta do it over here.
Okay, this makes it easy because now we've used
his MAC address in the interface ID of both his global
prefix as well as his Link-Local prefix.
Okay, so every device does this.
I'm just gonna focus on the router for a moment,
but then we'll see how the laptop does this as well.
So the router, once he comes up with an interface ID,
he also comes up with a special address called
a Solicited Node Multicast Address.
And you can see here this one is a nightmare to remember.
Look how long and that pattern, good luck with that.
You're going to have to memorize that pattern.
But it's 104-bit pattern that never changes,
and the last 24-bits, 'cause it has to be 128-bits,
so the last 24-bits are actually taken
from the interface ID itself.
So based on this, here's how he's gonna come up
with a Solicited Node Multicast Address.
I'm gonna get rid of the DHCP Server so I have a little
bit of room here at the right.
And I'll put this in green to make it
a little bit different.
So it's gonna be ff02::1:
so the last 24-bits.
So let's see here, I'm gonna put a red line
under these last 24-bits of the interface-ID.
So there's 16-bits.
There's 20.
There's 24 right there.
So those are the last 24-bits.
'Cause remember it said right here,
after this pattern right here, the remaining 24-bits
are taken from the interface-ID.
So I've already started that pattern.
I shortened my zeros.
I used colon, colon for the zeros right there.
And I've got to put in the ff,
and then the rest of it I'll put it in blue.
Okay so that is the Solicited Node Multicast address.
Now let's go over to this laptop here.
He creates his IPv6 Link-Local address.
So that's gonna be
fe80::0211
:33ff:
fe33:4444.
Okay, and I've already explained how that's derived.
Now he says, "Okay, duplicate address detection."
You know send out a neighbor solicitation
making sure that nobody else has that.
Great, nobody's got it.
Then he says, "Okay, now I need to send out
"a router solicitation."
So ICMPv6 Router Solicitation.
Solicitation, yeah I got that right there.
So the source is gonna be his
fe80::0211:
33ff:fe33:4444,
I'm sort of running out of room here.
And the destination will be the all multicast router's
address, ff02::2.
So that is my router solicitation.
The router gets that, the router responds back.
Now he uses his Link-Local address as the source, fe80,
responds back to this guy's Link-Local and he says,
"Hey, buddy, I'm using the 2001 prefix."
So the laptop says, "Oh, okay, great, then let me go ahead
"and configure myself with 2001, and then I'll use
"the exact same interface ID that I did before, /64."
He does duplicate address detection for that.
Now he says, let's put that little thought
bubble in there again.
He says, "I want to go to
"the website at 2001",
let's say 2004:4444::1.
"That's NOT on my subnet!!"
He says okay.
The same thing as before.
Right here he said, "Okay when it's not on my subnet
"I need to go to my router, but hmm, didn't know
"the MAC address of my router."
So what did I do?
In IP version four, I sent out a broadcast
called an ARP Request.
The router got it, sent an ARP Response back
and that's how I learned about the MAC address
of the router.
In IPv6, we send out,
and I don't know if I'm gonna have
enough room here for this,
an ICMPv6 Neighbor Solicitation.
And so here we go.
Source is gonna be his Link-Local,
and the destination is gonna be
the Solicited Mode Multicast address of the router.
Now you might be wondering well, wait a second.
Let me put this in a box here, if I can squeeze it all in.
You might be wondering okay, I understand how when
the PC sent the Neighbor Solicitation,
I understand how he knew about this part
because that's standard.
Everybody knows about that.
But how did he come up with the last 24-bits?
Well, remember when he sent out a router solicitation
to the all routers address
and he got a router advertisement back?
What was the source?
So let me just write that up here just to refresh
your memory.
Initially he sent out a router solicitation
to the all IPv6 router's address,
and then he got back a router advertisement.
Now what did I say was the source
of that router advertisement?
I said it was the Link-Local address of the router,
fe80::0211,
I'm kinda running out of room here,
but it was this.
Well remember how we said the interface ID here
was used to create the Solicited Node Multicast address?
So just like the router was able to create that for himself
the host, the PC said, "Hmm, okay, I now know what
"the router's Link-Local address is because he responded
"to me with a router advertisement, so I know
"that he is listening to a Solicited Node Multicast address
"that was derived from this, and that's how he was able
"to come up with that himself."
As a matter of fact, the laptop also had to create
a Solicited Node Multicast address.
I'll see if I can room up here to do that.
So the laptop, he said, "Alright, my Solicited Node,
"just in case anybody ever needs to resolve me
"and figure out what my MAC address is,
"is 33:4444."
Remember it was the last 24-bits after that static pattern,
it was the last 24-bits of the interface ID
that was put in here.
So every device comes up with a Link-Local address
for itself and a Solicited Node Multicast address
for itself.
And if anybody every needs to ARP for it,
well, there is no ARP in the world of IPv6,
but there is Neighbor Solicitation,
and they will send a Neighbor Solicitation
to your Solicited Node Multicast address
which is what you're listening for.
And then the router in turn will respond back,
and this is the final piece,
he'll respond back with a neighbor advertisement,
ICMPv6 Neighbor Advertisement,
and that is how this PC will learn of the MAC address
of the router.
So to recap in the world of IP version four
to learn someone's MAC address who is on your same wire,
you sent out an ARP Request and you got back
and ARP Response.
In the world of IPv6, you send out a Neighbor Solicitation
and you get a Neighbor Advertisement back.
In the world of IP version four, a lot of protocols
use broadcasts.
In the world of IP version six, there is no broadcast.
If you absolutely must talk to everybody who is on your wire
you send a packet to this address,
the all IPv6 nodes address.
That's basically the equivalent of a broadcast.
Even though it's a multicast, everybody's listening to it,
but usually we don't send stuff to that.
We send stuff either to the all routers address
or we send it to their Solicited Node Multicast address
or to their Link-Local address.
So I know there's a lot of addresses here in IPv6,
and that's just something you're gonna have to go over
and over and over again to memorize.