DHCP,代码实现主机动态配置协议IP租用请求和应答

我们在上一节中完成了客户端请求和服务器应答的第一个步骤。客户端发出DHCP_DISCOVER消息,局域网内的所有DHCP服务器发出DHCP_OFFER消息,在该消息中包含一个特殊字段叫Your_IP_Address,这是服务器分配给客户端的IP地址,如下图:

屏幕快照 2019-04-01 下午5.58.14.png

客户端可能会同时受到多个DHCP服务器发送的回应,然后它从中选择一个服务器发送过来的IP地址,并构造一个DHCP_REQUEST发送给对方,在数据包的Options字段中,使用一个Option表示它向服务器请求该IP地址:

屏幕快照 2019-04-01 下午6.01.23.png

然后服务器会向客户端发送DHCP_ACK消息表示确认客户端的租借请求:

屏幕快照 2019-04-01 下午6.10.32.png

完成了上面步骤后,服务器会记录客户端硬件地址与租借地址的对应关系,客户端在租用IP后,想要续租时,依旧会与给定服务器交流,在续租时,它会向绑定服务器发送DHCP_REQUEST消息,在消息中附带续租时常,同时如果允许续租的话,服务器会向客户端发送DHCP_ACK消息,在消息里附带了服务器允许客户端继续租用给定IP的时间。

如果客户端需要离开网络,不再使用给定IP,它会向服务器发送DHCP_RELEASE消息表示放弃当前使用的IP,如此服务器就能回收IP资源,将宝贵的IP分发给其他需要的客户端,DHCP_RELEASE消息中包含了客户端当前使用的IP地址,其基本内容如下:

屏幕快照 2019-04-01 下午6.17.31.png

本节我们就使用代码实现该流程。 由于代码涉及到IP分配,为了不影响运行机器的网络功能,我们在运行协议时使用虚构的mac地址:

 //构造一个不存在的mac地址
	    public byte[] deviceFakeMacAddress() {
	    	byte[] fakeMac = new byte[macAddress.length];
	    	for (int i = 0; i < macAddress.length; i++) {
	    		fakeMac[i] = (byte) (macAddress[i] + 1);
	    	}
	    	
	    	return fakeMac;
	    }

在DHCPAppliacation中,我们把上节使用到mac地址的地方都改成上面函数,同时我们修改上节对DHCP_OFFER消息的解读,记录下服务器提供的IP:

private boolean readFirstPart(byte[] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值