-
简介
DHCP:(Dynamic Host Configuration Protocol)动态主机配置协议,主要为了让一台电脑插入网线就实现上网的效果,而一台电脑需要上网需要配置一些信息,而DDHCP报文的定义就是为了拿到这些配置信息。包括:
- IP地址
- 子网掩码
- 默认路由的IP地址
- 域名服务器的IP地址
-
DHCP在客户服务端的交互流程
- client--->server:
需要IP地址的主机A,广播发送DHCPDISCOVER报文(源地址为0.0.0.0【因为这个时候client还没有ip地址】,目的地址为255.255.255.255【广播】),用来发现DHCP服务器的IP地址。
- server--->client:
- 本地网络的所有主机都可以收到DHCPDISCOVER报文,但只有DHCP服务器会回复这个报文
- DHCP服务器收到报文后,查找该计算机的配置信息,能找到返回给主机A。【注:一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。该地不可撤销这种分配方式叫:静态分配】
- 找不到该主机A的配置信息,从IP地址池(address pool)中去一个IP地址分配给主机A,这种方式叫动态分配。
- 被分配到的IP地址是有时效性的,主机A可以用这个IP地址的时间称为租用期。当当租用期到期之后,客户机可以提出延长租用期的要求并续订租约,这个操作叫租用期延长
- 给主机A回复:这个报文叫DHCPOFFER报文,表明提供IP地址等信息
- client:
主机A拿到IP地址等信息
-
DHCP中继代理
在DHCP服务器和客户端之间转发DHCP数据包。我们不希望再子网中提供过多的DHCP服务器,于是一个网络中至少有一个DHCP中继代理(通常是路由器)。
- 主机A发出DHCPDISCOVER的广播报文---->路由器收到----->路由器以单播的方式向DHCP服务器转发这个报文--->路由器收到DHCP服务器的反馈报文---->路由器发给主机A
-
DHCP的详细工作流程
- DHCP服务端被动打开UDP 的 67端口
- DHCP客户端从68的UDP端口发送DHCPDISCOVER报文
- DHCP客户端收到服务端的DHCPOFFER报文(可能会有几个)
- DHCP客户端从中选一个DHCPOFFER报文,并发出DHCPREQUEST报文【更新租约期】
- DHCP服务器回复DHCPACK报文,或者DHCPNACK报文
- DHCP客户端发出DHCPRELEASE报文【客户端停止服务器提供的租用期,发送此报文】
- 抓包
- 在linux上,dhcp客户端申请一个ip地址:udhcpc命令
root@pc123:/# ifconfig eth0 up root@pc123:/# udhcpc -i eth0 udhcpc: started, v1.32.0 udhcpc: sending discover udhcpc: sending discover udhcpc: sending select for 192.168.1.152 udhcpc: lease of 192.168.1.152 obtained, lease time 86400 /etc/udhcpc.d/50default: Adding DNS 192.168.1.1 root@pc123:/#