DHCP 与arp

     最近公司设备增加了个添加静态arp的新功能,测试的时候发现了DHCP和arp的有趣的现象。简单的测试环境,用H3C5500作为DHCP server,笔记本作为客户端。H3C做server时DHCP OFFER和ACK报文都是单播回复的,如果用tftpd32那个软件做server则回复报文是广播。交换机配置如下:

[H3C]int vlan 38

[H3C-Vlan-interface38]ip add 192.168.50.1 255.255.255.0

[H3C-Vlan-interface38]un sh

 Interface Vlan-interface 38 is not shut down

[H3C]dhcpserver ip-pool lab

[H3C-dhcp-pool-lab]network 192.168.50.0 24  

[H3C-dhcp-pool-lab]dns-list 202.102.24.35

[H3C-dhcp-pool-lab]gateway-list 192.168.50.1

[H3C-dhcp-pool-lab]expired day 0 hour 0 minute 1

[H3C-dhcp-pool-lab]qu

[H3C]dhcp server forbidden-ip 192.168.50.1

[H3C]intvlan 38

[H3C-Vlan-interface38]dhcp select server global-pool

配置完成后笔记本获取到地址192.168.50.2,查看交换机的arp表

[H3C]dis arp

                Type: S-Static    D-Dynamic

IPAddress       MAC Address     VLAN ID Interface              Aging Type

172.0.37.254     000f-e2d4-9dc0  70      GE1/0/5                20    D

192.168.50.2    0025-b363-1735  38       GE1/0/8                18   D

可以看到交换机学习到了笔记本的mac和ip的对应关系。笔记本无线网卡mac为0025-b363-1735

此时添加一条静态arp,IP地址设置为192.168.50.2,mac为0025-b363-1736

[H3C]arp static 192.168.50.2 0025-b363-1736  38 gig 1/0/8 

[H3C]dis arp

                Type: S-Static    D-Dynamic

IPAddress       MAC Address     VLAN ID Interface              Aging Type

192.168.50.2    0025-b363-1736  38       GE1/0/8                N/A   S

添加成功后,笔记本执行ipconfig /release  ipconfig/renew 重新获取地址,通过wireshark抓包发现如下现象:

1client广播发送dhcp discovery

2 DHCP server单播回复offer,server给client分的地址是192.168.50.2


3 client广播发request

4 server单播回ACK


发现上面4个步骤中,server给client回报文的目的mac地址都是根据client发过来报文的源mac地址,在client发续租报文时发现以下现象

5 client单播发dhcp request续租报文


6 server回复,此时发现server回复的时候会查arp表,根据IP地址来选择mac地址,组包。所以目的mac变成了0025-b363-1736

7 client当然收不到此报文,所以继续发续租包,直到租约到期,重新开始DHCP获取地址的过程


发现此现象后想了想,为什么2个阶段,server回复报文的mac地址不一样,为什么第一阶段不会查询arp表。发现开始阶段的request报文没有源IP地址(0.0.0.0)而续租阶段确定了源地址(192.168.50.2),没有源地址的话就直接按照上个报文的源mac作为目的mac组包回复,有地址的话就查询arp表,找对应的mac组包回过去。

这只是个人理解,大家有什么不同意见请一起讨论。








你可能感兴趣的:(DHCP)