要点记录:
1、要求UPnP设备支持DHCP和Auto-IP机制;
2、UPnP设备接入网络时,如果没有自实现DHCP Server,需要先发出DHCPDISCOVER消息,在定义的时间(依赖于软件实现)内,如果接收到DHCPOFFER信息,则采用DHCP Server动态分配的IP地址,否则,采用Auto-IP机制获取IP地址;
3、当UPnP设备需要采用Auto-IP机制时,需要遵从下列规则:
1)获取的IP地址范围为169.254/16(169.254.1.0 ~ 169.254.254.255);
2)建议采用伪随机算法(可以使用设备的MAC地址作为种子源)获取IP地址以减少多个Auto-IP UPnP设备同时接入时,IP地址冲突的可能性;
3)必须对获得的IP地址进行测试以避免IP地址冲突;
4)对IP地址测试的方式为发送包含对应IP地址的ARP Probe包,之后监听回复包或是包含相同IP地址的ARP Probe包,如果存在,则生成新的IP地址并测试,尝试的次数依赖于软件实现;如果未监听到冲突包,则按照2秒的间隔发送4次相同的包,以确保IP地址的有效性,4次全部成功后,每2秒发送一次gratuitous ARP,发送2次,The purpose of these gratuitous ARPs is to make sure that other hosts on the net do not have stale ARP cache entries left over from some other host that may previously have been using the same address;
4、有效的IP地址可被设备存储作为下一次该网络的第一候选IP地址,这样可以减少地址冲突;
5、地址冲突检测应当存在于对应的网络生命周期(从接入对应网络开始,到断开对应连接结束);
6、当检测到包含相同IP地址的ARP Probe包时:
1)立即申请并获取新的IP地址;
2)如果已有TCP连接或是其他需要保留IP地址时:
i)如果距离上次冲突时间间隔大于某个时间值(依赖于软件实现,协议中举例值为10秒),则记录当前时间作为冲突时间,同时广播1条以当前IP地址和MAC地址为source address的gratuitous ARP;
ii)如果距离上次冲突时间间隔小于某个时间值,则立即申请并获取新的IP地址;
7、成功获取IP地址后,后续的ARP包都应当以broadcast而非unicast的形式发送,以便及时发现IP地址冲突;
8、Source address为169.254/16域内的设备,相应的数据包会被路由自动滤除,详情请Google。