DHCP和PXE是怎么工作的
dhcp(Dynamic Host Configuration Protocol):配置一段共享IP地址,为新上线的机器分配IP地址,回收下线机器的IP地址。
正常情况下主机(DHCP client)和DHCP server交互通过四个数据包完成IP的配置,分为DHCP Discover、DHCP Offer、DHCP request、DHCP ACK四步:
如何为新机器分配IP
不完整的包是无法在网络上传输的
一、客户端申请地址(DHCP Discover)
新的机器上线还没有合法的IP地址时,会使用0.0.0.0
向255.255.255.255
这个地址发送广播包,广播包封装了UDP,UDP封装了BOOTP(Bootstrap Protocol)。这个包发出Boot request,意在告诉局域网中的主机,我还没有IP地址,我的MAC地址是xx:xx:xx:xx:xx:xx
,谁能给我一个IP地址?
物理层:包含网卡信息、使用了DHCP协议的UDP包等信息
数据链路层:包含主机MAC地址,广播MAC地址ff:ff:ff:ff:ff:ff
等信息
网络层:包含TTL、主机IP地址、广播地址等信息
传输层:udp的端口号等信息
应用层:Boot request中包含当前主机IP地址、DNS服务器地址(此时的主机一无所知,置为0.0.0.0),需要获取的子网掩码、网关、DNS等信息
后续主机和DHCP传输的四个包都是一步一步对以上信息的填补。
二、DHCPserver分配地址(DHCP Offer)
- 局域网中的主机收到网络包判断如果不是发给自己的则丢弃,DHCP服务器发现了dhcp类型的包,于是接收并解开分析,发现有一个新主机向自己申请IP地址,于是DHCP server会保留一个IP地址(期间不会分配给别人)。
- 新主机还没有分配到IP地址,DHCP server仍然需要使用⁄广播包的方式发送,在数据链路层添加自己的MAC地址,设置广播MAC地址。填充自己的IP地址到网络层,设置UDP端口信息,在Boot reply中设置Boot request请求的内容,并附加租约时间。
- 发送广播包
三、新主机选择DHCP Offer(DHCP request)
为什么叫选择DHCP Offer?因为如果有多个DHCP server,他们都会发送DHCP Offer广播包,此时新主机(DHCP client)会收到多个包,通常会选择最先到达的DHCP Offer。选择好offer之后此时的客户端仍然没有IP地址,继续发送广播包,称为DHCP request。
- 设置MAC地址信息,设置IP信息(0.0.0.0和255.255.255.255),设置UDP信息
- 设置Boot request接受的DHCP offer中的IP地址、DHCP server的IP地址、以及要下一次收到ACK的广播或单播模式。
- 通过广播包告诉所有DHCP server,我接受了那个DHCP server的Offer,请其他DHCP server撤销提供的IP地址
四、最终确认(DHCP ACK)
DHCP server收到DHCP request后会使用广播或单播的模式发送一个ACK包作为最终确认,完成这一步新机器的IP地址就设置完成了。
- 组装MAC头,根据request要求用单播还是广播(Bootp flags:BROADCAST设1为广播,设0为单播),单播设置新机器的MAC地址,广播则仍然是
ff:ff:ff:ff:ff:ff
,同理组装IP头,UDP头 - 组装应用层BOOTP头,包含要分配给主机的IP地址,主机网卡的MAC地址,以及子网掩码、网关、DNS、租期、续约时间等。
DHCP租约更新
通过以上内容我们知道DHCP分配的IP地址有租约一说,租期到了就需要收回地址,如果主机IP在租期到期后还需要继续使用,那么就要主动向DHCP server以单播的形式发送DHCP request来请求续租。
- 一般在租期过去1/2时发送请求DHCP request请求。
- DHCP server收到请求后会发送DHCP ACK,如果续约成功则返回新的租期给主机;如果DHCP server不允许主机继续使用IP,则DHCP ACK应答会告诉主机。申请失败后主机继续使用该IP,直到7/8时主机再次发送DHCP request请求,如果失败则该地址被释放。
HDCP与PXE
通过DHCP server和PXE server(Pre-boot Execution Environment)、TFTP server可以做到批量安装操作系统。
主机启动是通过BIOS读取MBR(Master Boot Record)来启动GRUB -> 通过GRUB加载内核、initramfs文件 -> 再由内核启动初始化操作系统。所以将PXE client放在BIOS里面,BIOS将PXE client调入内存,通过PXE client与PXE server传输数据和执行指令可以完成操作系统的自动安装
PXE安装过程
- 配置DHCP的
next-server
指向PXE server的地址,再配置filename
指向启动文件pxelinux.0 - 主机拿到IP地址的同时也会收到PXE server的IP地址和启动文件pxelinux.0路径,主机的PXE client通过TFTP下载pxelinux.0并执行,拿到pxelinux.cfg,该配置文件有内核、initramfs的路径。
- PXE client读取配置文件后逐个请求,完成安装后重启并从硬盘启动操作系统。
如果需要一些定制化的配置可以使用kickstart配置文件。
学习自:
《趣谈网络协议》刘超
《图解TCP/IP》
《图解HTTP》
《网络是怎样连接的》