进行DHCP IPV6连接的时候,经常遇到设备获取过一次地址后,在短时间内再次重新主动进行一次DHCP IPV6连接,会连接失败,从抓包来分析就是上行服务器不响应。

通过与服务器方的沟通,了解到一点,服务器会记录请求设备的mac和DUID(是唯一标识一台DHCPv6设备(包括客户端、中继和服务器)的标识符,用于DHCPv6设备之间的相互验证),发现的设备DUID会一直变动,导致校验失败,所以服务器就不响应了。
找到原因,接下来就到了分析源码的时候了:
/*
* 2 bytes for the 'duid type' field.
* 2 bytes for the 'htype' field.
* (not stateless) 4 bytes for the 'current time'.
* enough bytes for the hardware address (note that hw_address has
* the 'htype' on byte zero).
*/
len = 4 + (ip->hw_address.hlen - 1);
if (duid_type == DUID_LLT)
len += 4;
if (!buffer_allocate(&duid->buffer, len, MDL))
log_fatal("no memory for default DUID!");
duid->data = duid->buffer->data;
duid->len = len;
/* Basic Link Local Address type of DUID. */
i

在DHCPv6连接过程中,设备在短时间内重复请求可能导致服务器不响应,原因是DUID(设备唯一标识)的LLT类型使得每次请求的DUID内容变化。解决方法是将DUID类型改为LL类型,使其始终与设备MAC地址一致,确保一致性,以通过服务器校验。通常开源DHCPv6实现允许通过参数配置DUID类型。
最低0.47元/天 解锁文章
1471

被折叠的 条评论
为什么被折叠?



