我刚开始使用IPv6,所以在过去的几天里我做了很多阅读。不幸的是,我的一些问题在我的研究中没有得到解答。
我的目标是跟踪分配的地址以及分配的接口。根据我的阅读,接口可以通过几种方式获取IPv6地址,我在下面的子部分中列出了这些方法。我已经突出了我到目前为止所发现的内容,并在这些部分提出了一些问题。如果有人可以对我所学到的内容进行任何更正,或者对问题有答案,请这样做。如果有人知道某个地方我可以找到更多信息,我不介意自己更多地研究它。
编辑:我发现前缀委派实际上并未导致地址分配。 DHCP服务器使用它来获取要从其他DHCP服务器使用的前缀。
获取IPv6地址的方法是:
SLAAC用于小型网络,为接口生成IPv6地址。它需要(几乎)没有配置,基本上如下工作:
FE80::/10
)生成链路本地IPv6地址。 NS
)消息。如果有回复,则该地址正在使用中且无法使用。自动配置中止,配置应手动进行。 问题1a:这里真的没有倒退吗? 假设在超时时间结束时没有收到回复,则假定该地址是唯一的,并将其指定为接口的链路本地地址。
现在该节点已连接到此链接上的所有其他节点
节点等待接收路由器通告(RA
),或者向所有路由器的多播组发送路由器请求(RS
)消息。当路由器收到RS
时,它将以RA
回复。 RA
将包含前缀。
NS
消息吗? 如果有回复,则地址已在使用中,地址分配必须手动进行。 问题1b:同样,是否有任何自动恢复方式? 问题3:接口可以有多个地址。实际上,在上述过程结束时,单个接口将具有2个地址 - 链路本地地址和全球单播地址。是否可以使用SLAAC获取此接口的其他地址?或者必须使用其他方法(例如DHCPv6)?
节点可以使用上面的步骤1-3获得链路本地地址。我相信这是可选的,它可以简单地使用::/128
(未指定)作为DHCP请求中的源地址,直到为其分配地址。
有两种获取地址的方法 - 正常和快速提交。普通是4消息交换(Solicit
,Advertise
,Request
,Reply
),而快速是2消息交换(Solicit
,{{1} })。当客户端在Reply
消息中使用Rapid-Commit
选项请求快速提交时,即可完成快速提交。它基本上与普通相同,因为它对我的使用没有任何影响,我现在暂时忽略它。
此外,消息可能通过中继进行代理。从中继发送到服务器的消息是Solicit
消息,从服务器发送到中继的消息是RELAY_FORW
消息。客户端和服务器之间的实际对话框完全封装在RELAY_REPL
选项中。对于以下内容,我只处理非中继消息。如果消息被中继,则很容易对原始消息进行说明,并且以下内容仍然存在。
地址分配如下:
OPTION_RELAY_MSG
消息"多播地址。此消息的目的是发现本地链路上DHCP服务器的身份。Solicit
消息响应本地多播地址。Advertise
消息,其中包含指示其希望拥有IP地址的选项。 问题4:在我看过的PCAP文件中,看起来此消息仍然发送到多播地址Request
。是不是因为没有直接发送到收到广告的DHCP服务器? ff02::1:2
进行响应。这是分配地址的一般方法,但更具体地说,有3种方法可以做到这一点:
Reply
)IA_NA
)IA_TA
)所有这三种方法都是通过在PD
中包含一个选项来完成的,该选项随后由服务器填充并在Request
中返回。对于前两个,返回完整的IPv6地址,然后可以将其分配为接口的IP地址。对于第三个,返回类似于SLAAC方法中的Reply
的前缀。然后,此前缀与接口标识符一起使用,以创建完整的全局IPv6地址。
问题5:在我的pcap捕获中,我发现RA
和Solicit
通常也包含这些选项。这在非快速案例中似乎是多余的,因为Advertise
和后续Request
也必须包含该选项。在Reply
中包含此选项的目的是什么?在Solicit
执行此操作之前,DHCP服务器在Advertise
中创建IP地址(或前缀)的目的是什么?
问题6:RFC指出可以包含Request
(或IA_NA
)选项的多个实例。我认为这意味着接口将具有多个地址。客户端是否只在IA_TA
中包含该选项的多个实例以获取多个地址?如果DHCP服务器可以提供一些但不是所有地址会发生什么?整个Request
是否表示失败?或者给出了一些地址?
对于DHCPv6,可以使用Reply
消息发布正在使用的地址。客户端可以使用Release
消息拒绝服务器在Reply
中分配的地址,而不是使用该地址。
如果客户端无法发送Decline
或Release
,服务器将继续保留客户端的地址,直至其过期。
问题7:如果客户端无法发送Decline
(或Release
)并重新启动,则会启动新的DHCP请求。 DHCP服务器会回复旧地址吗?或者它是否会假设这是对额外IP地址的请求并分配一个新地址?
我不确定如何释放SLAAC或DHCP Decline
创建的地址。也许这些地址的发布只在内部完成,没有外部设备需要知道该事件。
正如我在开头所说,我的目标是跟踪当前有效的所有地址分配。我的计划是做以下事情:
PD
至Reply
,Request
,Confirm
,Renew
或Rebind
{{1} }}, 请执行下列操作:
Solicit
选项Rapid-Commit
或Client-DUID
IA_NA
,请设置IA_TA
IA
或map[address]=Client-DUID
到Decline
后,请执行以下操作
Reply
或Release
IA_NA
,请设置删除IA_TA
问题8:如何检测SLAAC生成的地址或DHCP IA
地址?我可以使用消息中的某些字段来重新生成完整的IP地址吗?我已经有了前缀,但接口ID未知。
这是否足以维护分配给客户端的IP地址列表?
答案 0 :(得分:1)
好的 - 所以我做了更多的研究,现在我得到了大部分答案。
首先,进行修正。使用DHCP无法通过PD
获取地址。这就是DHCP服务器获取网络前缀以用于它们托管的DHCP客户端的方式。还有另一个DHCP服务器处理分发这些前缀。因此,PD
可以作为获取IP地址的方法被忽略。
问题1a / b:这里真的没有回落吗?
答:没有自动回退机制。一个可以实现,但它是自定义的。
问题2:这也是一条NS消息吗?
答案:是的
问题3:接口可能有多个地址。实际上,在上述过程结束时,单个接口将具有2个地址 - 链路本地地址和全球单播地址。是否可以使用SLAAC获取此接口的其他地址?或者必须使用其他方法(例如DHCPv6)?
答案:可以使用SLAAC生成多个地址。客户端可以使用来自多个路由器的路由器通告,并且每个路由器可以通告多个前缀。主机可以使用每个前缀创建全局单播地址。
问题8(已修改):如何检测SLAAC生成的地址?我可以使用消息中的某些字段来重新生成完整的IP地址吗?我已经有了前缀,但接口ID未知。
答案:检测它们的唯一方法是收听NS
条消息。由于这些消息是可选的,因此无法保证检测SLAAC生成的地址。
我仍然没有问题4-7的答案,但我现在不太关心它们。
谢谢!
答案 1 :(得分:0)
第三种获取IPv6地址的方法是手动配置。