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