到目前为止,开发板要得到IP地址可以通过两种协议,BOOTP和DHCP,都是基于客户端到服务端的模式,都是用UDP传输。
先分析一下DHCP协议,开发板使用LwIP协议栈,默认首先采用DHCP协议获取自己的IP地址。
DHCP client:Lm3s8962开发板
DHCP server:路由器 这里要注意的是,windows也分为客户端版和服务器版,一般使用的都是客户端版,所以和开发板一样DHCP client ,而没有开启DHCP服务。
Step1:DHCP client:发送DHCP discover 报,寻找DHCP server。
和BOOTP一样,采用的都是UDP的68 和 67号端口。
开始并不知道自己的IP地址,只填充了自己的mac地址,目标MAC地址和目标IP地址都是广播地址,在同一个子网里边的所有主机都会收到该报文。“谁是DHCP服务器,我要一个IP地址”
step2:DHCP server: DHCP 服务器受到该请求之后,生成了一个IP地址,但不能立即分配给客户端,它先要判断网络内是否有人使用这个IP地址,如果没人使用,就再分配给client。(“我打算把192.168.0.194分配出去,有没有人在使用它?”)
step3:DHCP server:等到一段时间没人回应,就说明没人使用这个IP地址,分配给刚才请求的client。
并告之租用期限7天。(广播:“我把192.168.0.194分配给FF:FF:FF:FF:F1:F1了”)
step4:DHCP client:收到了DHCP server的广播之后,还要广播确认一下是否是把192.168.0.194分配给我。
step5:DHCP server:把刚才的offer 改为ACK再广播出去,(“对就是分配给你的,放心用吧”)
step 6:DHCP client在使用之前,还必须广播两次ARP,看是否有人再用,确实没有人回应的话,才敢开始使用刚才分配的IP地址。
[ 本帖最后由 academic 于 2010-11-8 16:28 编辑 ]