DHCP原理与实现
DHCP,DNS和HTTP是3种常见的高层协议。
一、动态主机配置协议DHCP
1、DHCP简介
DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。
DHCP的前身是BOOTP协议(Bootstrap Protocol),BOOTP被创建出来为连接到网络中的设备自动分配地址,后来被DHCP取代了,DHCP比BOOTP更加复杂,功能更强大。后面可以看到,在用Wireshark过滤显示DHCP包,需要输入过滤条件BOOTP,而不是DHCP,但或许是因为我使用的Wireshark版本是比较旧的1.12.9,没有在新版本中尝试过,也许可以输入DHCP让其只显示DHCP包。
2、DHCP的实现
交互图DHCP的实现分为4步,分别是:
第一步:Client端在局域网内发起一个DHCP Discover包,目的是想发现能够给它提供IP的DHCP Server。
第二步:可用的DHCP Server接收到Discover包之后,通过发送DHCP Offer包给予Client端应答,意在告诉Client端它可以提供IP地址。
第三步:Client端接收到Offer包之后,发送DHCP Request包请求分配IP。
第四步:DHCP Server发送ACK数据包,确认信息。
3、linux上的实现过程
linux过程演示从以上演示可以看出这四步的实现过程:
DHCPDISCOVER:DHCP客户端eth0这个网卡发起了一个广播,发送DHCPDISCOVER数据包,访问服务器端的67端口。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。
第一步DHCPOFFER:DHCP的服务器是192.168.199.254这个机器,服务器端发送DHCPOFFER数据包给用户端,表示可以提供192.168.199.130这个IP地址给它。在网络中接收到DHCPDISCOVER发现信息的DHCP服务器都会做出响应,然后从尚未出租的IP地址中挑选一个分配给DHCP客户机。
第二步DHCPDISCOVER:DHCP用户端再次以发起广播的方式,正式向服务器请求分配已提供的IP地址(即192.168.199.130)。正式请求DHCP服务器分配地址DHCPREQUEST采用广播包,是为了让其它所有发送DHCPOFFER数据包的DHCP服务器也能够接收到该数据包,然后释放已经OFFER(预分配)给客户端的IP地址。
第三步以广播方式回答,简单来说,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。此外,如果发送给DHCP客户端的地址已经被其他DHCP客户端使用,客户端会向服务器发送DHCPDECLINE信息包拒绝接受已经分配的地址信息。
DHCPACK:DHCP服务器端向DHCP客户端发送DHCPACK单播包,确认用户端的请求。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。
第四步