写在前面
本文看下DHCP和PXE相关内容。
1:正文
不知道你自己手动配置过IP地址没有,在Linux的环境中可以通过如下的命令们来进行配置:
$ sudo ifconfig eth1 10.0.0.1/24
$ sudo ifconfig eth1 up以及:$ sudo ip addr add 10.0.0.1/24 dev eth1
$ sudo ip link set up eth1
虽然可以手动配置,但是不能随意配置,为什么呢?因为啊如果是配置的IP地址和当前网络不在一个局域网中,则是无法和其他机器完成通信的,哪怕是连接在同一个交换机上也不行。具体原因是Linux在发送网络包之前会先判断,当前的目标IP地址是否和自己是一个局域网的,如果是一个局域网则会通过ARP请求获取目标IP的mac,并填充mac信息,最终将网络包发出去,但如果不是一个局域网(即和自己任何一张网卡的IP地址都不是一个网段)
的,则会尝试获取网关MAC,然后将包发送给网关,包到了网关,其实就出去了
。
但是,实际生活和工作中我们并没有手动配置过IP地址,你入职了一个新公司,是不是插上网线就能上网了,既然能上网了肯定是已经分配好了IP地址的。其实这是DHCP在默默的工作,DHCP,即动态主机配置协议,dynamic host configuration protocol。是一种负责维护IP段并给新成员分配IP的一种协议,当然是需要一个对应的DHCP server的。
1.1:DHCP的工作流程
当一个局域网有一个新成员加入时,这个新成员一穷二白,为什么说是一穷二白呢,因为它除了有MAC地址外啥都没有。所以第一步新成员会先吼一嗓子,使用BOOTP协议封装一个UDP的数据包,尝试获取一个IP地址,此时源IP是0.0.0.0,目标IP是255.255.255.255,即广播方式发送,而源MAC就是自己的MAC了,目标MAC是ff:ff:ff:ff:ff:ff,即广播MAC,这一步叫做DHCP discover
,对应的数据包格式如下:
接着DHCP server会收到这个请求,通过MAC判断还没有给其分配IP地址,就知道有一个新成员加入了,接着会分配一个IP地址,因为新成员到目前还是没有IP地址的,所以还是通过广播的方式来回复这个消息,格式如下:
这个过程叫做DHCP offer。
因为可能有多个DHCP server,所以新成员可能会收到多个DHCP offer,此时新成员一般是谁先到达使用谁的,并会告知多个DHCP server自己接收了哪个DHCP server分配的IP地址信息,此时因为还未最终确认所以源IP依然是0.0.0.0,数据包如下:
这个过程叫做DHCP request。
DHCP server在收到了DHCP request后就会回复一个ack消息,对IP地址的分配做最终的确认,注意因为IP地址还没有确认完成,所以目标IP依然使用广播的方式,消息格式如下:
这样新成员就有了自己的IP地址,加入到网络大家庭了!
1.1.1:IP地址的收回和续租
DHCP server分配的IP地址是有一个有效期的,就像我们北漂一族租房子,到期之前要提前告知房东,我还要续租,IP地址同样如此,一般会在到达到期时间的50%的时候重新发送一个DHCP request,请求DHCP server完成续租,接着DHCP server会回复一个ack完成续租。当然如果是不续租的话就会被收回了。
1.2:PXE
PXE全称是pre-boot execution environment,即预启动执行环境,为什么是预启动呢?因为此时是BIOS(一个小的操作系统)
刚启动,操作系统启动之前的阶段(当然也可能是空机器)。
对应有一个叫做PXE的协议,使用该协议可以完成空机器在首次启动时自动完成操作系统安装的工作,这在我们有大量空机器需要安装操作系统时就很有用了(数据中心场景???)
。我们需要PXE client和PXE server,其中PXE client内置在BIOS中,在BIOS启动后就会启动PXE client,因为PXE client需要通过网络请求来从PXE 服务器下载操作系统的安装包,所以首先会使用DHCP来获取一个IP地址(注意这个IP地址只用于安装操作系统使用,操作系统安装并启动成功后还需要自己通过DHCP来获取IP地址)
,和常规的DHCP过程不同之处在于,DHCP server除了返回IP地址信息外,还会告知PXE 服务器的地址,以及要下载的文件信息等,接着下载相关文件安装操作系统,这个过程如下:
操作系统启动后,在通过DHCP协议获取IP地址,就可以了。