[趣谈网络协议学习] 03 DHCP与PXE:IP是怎么来的, 又是怎么没的?

如何配置 IP 地址?

在linux中可以使用ifconfig, 也可以使用ip addr。 设置好了以后, 用这两个命令, 将网卡 up 一·下, 就可以开始工作了。
使用 net-tools:

sudo ifconfig eth1 10.0.0.1/24
$ sudo ifconfig eth1 up

使用 iproute2:

sudo ip addr add 10.0.0.1/24 dev eth1
$ sudo ip link set up eth1

有了目标ip地址,还需要目标MAC地址,而最终的目标MAC地址需要经过一个个网关才可以寻得,而当前需要寻得的是当前局域网中的网关的MAC地址。

Linux 默认的逻辑是,如果这是一个跨网段的调用,它便不会直接将包发送到网络上,而是企图将包发送到网关。

**Linux会判断这个目标ip地址和自己的其中一个网卡是否同一个网段,才会发送ARP请求,获取网关的MAC地址,然后将包发出去。 如果没有配置网关,包就发包出去。 **

所以配置ip地址之前需要知道系统中网卡的网段,或者向管理员申请分配一段正确的ip地址。 正配置的时候,一定不是直接用命令配置的,而是放在一个配置文件里面。 不同系统的配置文件格式不同,但是无非就是 CIDR、子网掩码、广播地址和网关地址。

动态主机配置协议(DHCP)

除了手动配置,还有一种是自动分配配置。

自动配置的协议,也就是称动态主机配置协议(Dynamic Host Configuration Protocol),简称DHCP。

有了这个协议,网络管理员需要配置一段共享ip地址,每一台新接入的机器都通过DHCP吸引,来这个共享的IP地址里申请,然后自动配置好就可以了,下线自动归还。 。

如果是数据中心里面的服务器,IP 一旦配置好,基本不会变,这就相当于买房自己装修。DHCP 的方式就相当于租房。你不用装修,都是帮你配置好的。你暂时用一下,用完退租就可以了。

DHCP 的工作方式

当一台机器新加入一个网络的时候,啥情况都不知道, 只知道自己的 MAC 地址。 怎么办?先吼一句, 我来啦, 有人吗?这时候的沟通基本靠“吼”。 这一步, 我们称为DHCP Discover。

通信都是广播包的形式,新来的机器使用IP 地址 0.0.0.0 发送了一个广播包,目的 IP 地址为255.255.255.255。广播包封装了 UDP, UDP 封装了 BOOTP。 其实 DHCP 是 BOOTP 的增强版。

1、新人叫一声:我是新来的(Boot request) ,我是XXX(MAC地址)我还没有 IP, 谁能给租给我个 IP 地址!
格式就像这样:

 

16846478-90448e3e4da057a3.png

Boot request.png

2、DHCP Server 分配 IP给新人
如果网络里面配置了DHCP Server,根据MAC 地址唯一性立刻能知道来了一个“新人”,需要租给它一个 IP 地址,这个过程称为DHCP Offer。 同时, DHCP Server 为此客户保留为它提供的 IP 地址, 从而不会为其他DHCP 客户分配此 IP 地址。
DHCP Offer 的格式就像这样, 里面有给新人分配的地址:

16846478-56d776296a430c9e.png

DHCP Offer.png

DHCP Server 仍然使用广播地址作为目的地址,因为此时新人自己还没有自己IP。除IP外, 服务器还发
送了子网掩码、 网关和 IP 地址租用期等信息。

3、新人选择其中一个 DHCP Offer, 一般是最先到达的那个, 并且会向网络发送一个 DHCP Request 广播数据包,
DHCP Request格式如下

 

16846478-40aee41133360dc8.png

DHCP Request.png

包中包含客户端的 MAC 地址、 接受的租约中的 IP 地址、 提供此租约的DHCP 服务器地址等, 并告诉所有 DHCP Server 它将接受哪一台服务器提供的 IP 地址, 告诉其他 DHCP 服务器, 谢谢你们的接纳, 并请求撤销它们提供的 IP 地址, 以便提供给下一个 IP租用请求者。

4、当 DHCP Server 接收到客户机的 DHCP request 之后,会广播返回给客户机一个 DHCP ACK消息包, 表明已经接受客户机的选择
DHCP ACK消息包格式如下

16846478-29756245104b74ae.png

DHCP ACK.png

IP 地址的收回和续租

客户机会在租期过去 50% 的时候, 直接向为其提供 IP 地址的 DHCP Server 发送 DHCP request 消息包。 客户机接收到该服务器回应的 DHCP ACK 消息包, 会根据包中所提供的新的租期以及其他已经更新的 TCP/IP 参数, 更新自己的配置。 这样, IP 租用更新就完成了

预启动执行环境(PXE)

例如数据中心要给几百台机器自动安装操作系统就需要PXE了。

PXE是什么?

PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux系列系统等。

PXE表现形式:

PXE最直接的表现是,在网络环境下工作站可以省去硬盘,但又不是通常所说的无盘站的概念,因为使用该技术的PC在网络方式下的运行速度要比有盘PC快3倍以上。当然使用PXE的PC也不是传统意义上的TERMINAL终端,因为使用了PXE的PC并不消耗服务器的CPU,RAM等资源,故服务器的硬件要求极低。

PXE启动原理

PXE 协议分为客户端和服务器端,由于还没有操作系统,只能先把客户端放在 BIOS 里面。当计算机引导时,BIOS把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行 。

PXE 客户端自己也需要有个 IP 地址,会发送一个DHCP 的请求, 让 DHCP Server 给它分配一个地址。DHCP Server 除了分配 IP 地址以外, 还可以做一些其他的事情。
这里有一个 DHCP Server 的一个样例配置:

ddns-update-style interim;
ignore client-updates;
allow booting;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option time-offset -18000;
default-lease-time 21600;
max-lease-time 43200;
range dynamic-bootp 192.168.1.240 192.168.1.250;
filename "pxelinux.0";
next-server 192.168.1.180;
}

如果想使用PXE, 则需要配置 next-server, 指向PXE 服务器的地址, 另外要配置初始启动文件filename。

PXE 客户端启动之后, 发送 DHCP 请求之后, 除了能得到一个 IP 地址, 还可以知道 PXE服务器在哪里, 也可以知道如何从 PXE 服务器上下载某个文件, 去初始化操作系统。

PXE 的工作过程

16846478-274845476fb7d8fd.png

PXE 的工作过程.png

首先, 启动 PXE 客户端。通过 DHCP 协议由DHCP Server 便租给客户端一个 IP 地址, 同时也给它 PXE 服务器的地址、 启动文件pxelinux.0。

其次, PXE 客户端知道要去 PXE 服务器下载这个文件后, 就可以初始化机器。于是便开始使用 TFTP 协议下载,所以 PXE 服务器上, 往往还需要有一个 TFTP 服务器。

然后, PXE 客户端收到这个文件后, 就开始执行这个文件。 这个文件会指示 PXE 客户端, 向TFTP 服务器请求计算机的配置信息 pxelinux.cfg,里面会说内核在哪里、 initramfs 在哪里。 PXE 客户端会请求这些件。

最后, 启动 Linux 内核。 一旦启动了操作系统, 以后就啥都好办了。

小结

  • DHCP 协议主要是用来给客户租用 IP 地址,和房产中介很像,要商谈、签约、续租,广播还不能“抢单”

  • DHCP 协议能给客户推荐“装修队”PXE,能够安装操作系统

参考资料:

趣谈网络协议(极客时间)链接:
http://gk.link/a/106nW


GitHub链接:
https://github.com/lichangke/LeetCode

知乎个人首页:
https://www.zhihu.com/people/lichangke/

简书个人首页:
https://www.jianshu.com/u/3e95c7555dc7

欢迎大家来一起交流学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值