2.5.1 NDP消息
即插即用
承载所有
NDP
消息的
IPv6
数据包的跳数被限制为
255
功能
·
路由器发现
(
Router Discovery
)
发现
本地路由
·
前缀发现
(
Prefix Discovery
)
发现分配给该链路的
前缀
·
参数发现
(
Parameter Discovery
)
发现相连链路的
参数
(
如
:
链路的
MTU---
取最新的
、跳数限制
)
·
地址自动配置
(
Address Autoconfigutation
)
能够确定它的
完整地址
·
地址解析
(
Address Resolution
)
不需要
ARP
能发现
链路层的地址
·
下一跳确定
(
Next-Hop Determination
)
能确定到达目的节点下一条链路层节点
,
本地目的节点
或到达目的节点的
路由器
·
邻居不可达检测
(
Neighbor Unreachability Detection
)
·
地址冲突检查
(
Duplicate Address Detection
)
·
重定向
(
Redirect
)
IPv4
是
ICMP
协议
NDP
消息
·
路由器请求消息
(
Router Solicitation
,
RS
)
请求发送一个
RA
·
路由器通告消息
(
Router Advertisement
,
RA
)
通告路由器的
存在
和
链路细节
(
链路前缀、链路
MTU
、跳数限制
)
·
邻居请求消息
(
Neighbor Solicitation
,
NS
)
请求邻居链路层地址
(
并且
冲突检测
、
邻居不可达检测
)
·
邻居通告消息(
Neighbor Advertisement
,
NA
)
·
重定向消息(
Redirect
)
RS--------------------------------------------------------------------------------
IPv6
源地址
:
1
)发出
接口所分配的
IPv6
地址
2
)
::
(出现在
没有分配地址的情况
,节点刚刚开始进行地址自动配置时会出现没有地址)
IPv6
目的地址
:
所有路由器
(
FF02::2
)
Type
:
133
code
:
0
checksum
Reserved
:
保留
(
32b
)
option
包括始发接口的链路层地址。
若源地址未指定
,
则不一定包含。
RA--------------------------------------------------------------------------------
Type
:
134
code
:
0
checksum
Cur hop limit
:
跳数限制
如果接收到的
cur hop limit
的值不为
0
,
则主机应该把它的
curhoplimit
变量值修改成接收到的值。
Flags
:
M
anaged address configuration
管理地址的配置标记
,
置位则利用
DHCPv6
协议
告诉
链路的主机使用有状态地址分配
,
否则用
无状态地址分配
O
ther configuration
其他的有状态配置
,
置位则会
告诉
链路的主机
使用
DHCPv6
来获取
其他链路信息
。
M
和
O
可以一起使用。
Home Agent
Prf
(
Default Router preference
,
2b
)
proxy
保留
Router lifetime
路由器生存时间
,
只有始发路由器是
缺省路由器
才为非
0
,
·
非
0 1
)
主机不存在
,
则添加一个新的条目到默认路由列表
2
)主机存在,则重新刷新默认路由列表时间
·
0
马上使该条目失效
reachable time
邻居可达时间,用于实现
NDP
协议中
邻居不可达性检测
功能的字段
retrans timer
重传计时,用于实现
NDP
协议有
关地址解析和邻居不可达性检测功能的字段,它指定重传邻居请求消息之间的最小时间
option
·
发起
RA
消息的
接口的链路层地址
·
RA
消息所在链路的
MTU
说明
·
分配给链路的一个或多个
前缀
。该消息是无状态地址自动配置的基本信息
不一定使以前接收到的广播所包含所有信息失效
·
非请求
RA
可能不完整(不包括所有选项)
·
请求式
RA
则必须包含所有选项。
NS--------------------------------------------------------------------------------
IPv6
源地址
:
1
)发出
接口所分配的
IPv6
地址
2
)
::
(地址冲突时)
IPv6
目的地址
:目标地址或多播地址(
FF02::1+
接口
ID
后
24
位)
如果
NS
被发送到请求
组播地址
,则发送该
NS
的主机必须在
NS
中放入自己链路地址作为
源链路地址选项,发送源不确定时不放入
。在其他情况下,发送者应该(没有强制必须)包含源链路选项。在多播式请求中包含源链路地址选项可以让目标主机能够利用该地址来回复
NA
。
Type
:
135
code
:
0
checksum
Reserved
Target Address:
请求目标
IPv6
地址
,
不可能是一个组播地址
,
目标地址是一个正在进行重复地址检测的临时地址。
option
始发接口的链路层地址
NS
和
NA
都可以用来进行
重复地址检测
。特别的,重复地址检测通过发送携带
不确定源
ip
地址
,
目标地址为自己临时地址
的
NS
信息来进行。这个
NS
信息会
触发已经使用这个地址的节点用这个地址来回复
一个多播
NA
来表明所请求的地址已经在使用。
如果收到的
NS
不满足所有以下的有效性检测,节点必须丢弃这个
NS.
1)
IP
的
hop limit
字段的值为
255
。数据报不能被中间路由器转发。
2)
如果
NS
包括了
authentication
扩展头
,
而且数据报检测正确。
3)
ICMP
校验和正确
有效
4)
ICMP
的
code
字段值为
0
5)
ICMP
的长度至少有
24
字节。
6)
Target Address
不是组播地址
7)
所有选项的长度都大于
0
8)
如果
IP
源地址是不确定地址
(
即全
0
地址
),
则
IP
目的地址是请求组播地址。
9)
如果
IP
源地址是不确定地址,则数据报中不包括源链路地址选项。
10)
必须忽略保留字段的值,以及无法识别的选项。
NA--------------------------------------------------------------------------------
IPv6
源地址
:发出
接口所分配的
IPv6
地址
IPv6
目的地址
:
1
)邻居请求的源地址
2
)所有节点(
FF02::1
)
-------
与
S
位相关
Type
:
136
code
:
0
checksum
Flags
·
R
outer :
路由标记位,标明始发节点是路由器,用于在
邻居可达性检测
中检查
变为主机
的路由器
·
S
olicited :
请求标记,表示答复一个邻居通告消息
·
O
verride :
覆盖标记,表示邻居通告消息超出任何现有邻居的缓存条目,需要所缓存的链路层地址。
·
Reserved
Target Address:
1
)
邻居请求信息的目标地址
2
)
自己地址
(
未请求的通告
,
发送者节点的链路层发生变化
)
option
目标链路层地址(自己的链路层地址)
如果
NA
数据报不满足以下所有条件,主机必须丢弃收到的数据报。
·
The IP Hop Limit field has a value of 255, i.e., the packet could not possibly have been forwarded by a router.
·
IP
数据报的
hop limit
字段的值为
255
。
·
If the message includes an IP Authentication Header, the message
authenticates correctly
.
·
ICMP
Checksum
is valid.
·
ICMP
Code
is 0.
·
ICMP
length
(derived from the IP length) is 24 or more octets.
·
Target Address
is not a multicast address.
·
If the IP Destination Address is a multicast address the Solicited flag is zero.
非答复一个邻居请求
·
All included options have a length that is
greater than zero
.
Redirect----------------------------------------------------------------------------
IPv6
源地址
:
发出
接口所分配的
IPv6
地址
IPv6
目的地址
:
1
)
邻居请求的源地址
2
)
所有节点
(
FF02::1
)
Type
:
137
code
:
0
checksum
目标地址
:
更好的下一跳地址
目的地址
:
被重定向的目标地址的
ipv6
地址
option
目标节点链路层地址
option
可选项
-----------------------------------------------------------------------
TLV
Type
·
1
源链路层地址
·
2
目标链路层地址
·
3
前缀信息
·
4
重定向的报头
·
5 MTU
Length 8B/32B
Value
:长度可变(
8b
倍数)
·
只要前缀条目的失效时间一到,这个
条目就被丢弃
。对于目的缓存条目,并
不需要做对应的更新
。
·
只要默认路由器列表的某个条目的失效时间一到,这个条目就被
丢弃
。当从默认路由器列表中删除某个路由器条目的时候,主机必须
更新
目的缓存中所有使用这个路由器作为下一跳的条目。
前缀列表的更新和默认路由器列表的更新的处理是不一样的。
临时
IP--->NS IP
冲突检测(有状态自动配置)
--->IP&
接口绑定
--->
发
RS&
接收
RA--->
根据
M&O
标志位指示
--->
----------------------------------------------------------
路由器发现
RA
默认间隔:
200s ipv6 nd ra-interval
生存时间
:
1800s ipv6 nd ra-lifetime
不希望某个路由作为默认网关
,
设为
0
可达时间
:
0 ipv6 nd reachable-time
M
标记:
ipv6 nd managed-config-flag
O
标记:
ipv6 nd other-config-flag
禁止发
RA
包:
ipv6 nd suppress-ra
地址自动分配
MAC-to- EUI64
转换法:
1)
MAC
中间插入
FFFE
2)
U/L
位
(
第
7
位
)
取反
如
:
0000:0B0A:2D51 ------ 0020:0BFF:FE0A:2D51 (IPv6
的一半
) + 64
位前缀
(
FE80::/64
)
有状态自动配置:借助
DHCPv6
。(收到
M
置位的
RA
)
无状态自动配置:
RA
中获得链路链路前缀
+
接口
ID
自动配置
只在支持多播的链路上
使用,并且要求接口也支持多播。除了两个例外:一是路由器生成链路本地地址。二是路由器在绑定地址之前进行重复地址检测。
邻居冲突检测(任意播除外)
获取新地址为临时状态的地址(地址冲突检测没完之前,该地址不能用),发送目标为自己的
NS
请求验证。临时地址不是唯一的,自动配置就会停止,然后需要手动配置了。
邻居地址解析
(IPv4
使用
ARP)
私有地址
私有地址回复
....
安全
邻居不可达检测
·
incomplete
:
正在解析邻居地址解析
,
发送至被请求节点组播地址
,
但还没收到
NA
·
reachable
:
在
reachable time
内收到某些可达性信息确认
(
默认
30s
)
·
stale
:
超过
reachable time
才收到可达性信息确认
·
probe
:
每经过
retransmit time
或每
1000ms
(
前者没指定
),
向目标节点发送
NS
搜索可达性确认
·
delay
:一个数据包
stable
状态时等待
5s
,如果还没收到可达性确认则转换到
probe
。(可达性机会的优化)
incomplete
---
可达性信息确认
---->
reachable
----
超过
reachable_time--->
stable
---
有数据包到达时
-->
delay
-----
超过
5s
没可达性消息确认
---->
Probe
------>
发送
NS