详解DHCP

  • 如果需要和其他机器通讯,我们就需要一个通讯地址,即给网卡配置一个地址
  • 可以使用 ifconfig,也可以使用 ip addr。配置好了以后,将网卡 up 一下,就可以开始工作了
使用 net-tools:
$ sudo ifconfig eth1 x.x.x.x/24
$ sudo ifconfig eth1 up
使用 iproute2:
$ sudo ip addr add x.x.x.x/24 dev eth1
$ sudo ip link set up eth1
  • 如果我们配置一个无关的地址,比如周围的机器都是192.168.1.x
  • 我非得配置一个123.123.123.123,会发生什么呢?
  • 如果这样配置,那么包会发不出去
  • 只要是在网络上跑的包,都是完整的,可以有下层没上层,绝对不可能有上层没下层
  • 虽然它有自己的源 IP 地址 123.123.123.123,也有目标 IP 地址 192.168.1.x
  • 但是包发不出去,这是因为 MAC 层还没填
  • 自己的 MAC 地址自己知道,但是目标 MAC 填什么呢?
  • 是不是填 192.168.1.x 这台机器的 MAC 地址呢?
  • 当然不是。Linux 首先会判断,要去的这个地址和我是一个网段的吗
  • 或者和我的一个网卡是同一网段的吗?
  • 只有是一个网段的,它才会发送 ARP 请求,获取 MAC 地址。如果发现不是呢?
  • Linux 默认的逻辑是,如果这是一个跨网段的调用,它便不会直接将包发送到网络上,而是企图将包发送到网关
  • 如果没有配置网关呢?那包压根就发不出去。
  • 如果你配置了网关的话,Linux 会获取网关的 MAC 地址作为目标IP的MAC地址,然后将包发出去。
  • 对于 192.168.1.x 这台机器来讲,虽然路过它家门的这个包,目标 IP 是它
  • 但是无奈 MAC 地址不是它的,所以它的网卡是不会把包收进去的
  • 如果将网关也配置为 192.168.1.x 呢?
  • 不可能,Linux 不会让你配置成功的,因为网关要和当前的网络至少一个网卡是同一个网段的
  • 怎么可能 123.123.123.123 的网关是 192.168.1.x 呢?
  • 所以,当你需要手动配置一台机器的网络 IP 时,一定要好好问问你的网络管理员
  • 如果在机房里面,要去网络管理员那里申请,让他给你分配一段正确的 IP 地址
  • 当然,真正配置的时候,一定不是直接用命令配置的
  • 而是放在一个配置文件里面。不同系统的配置文件格式不同
  • 但是无非就是 CIDR、子网掩码、广播地址和网关地址
  • 配置了 IP 之后一般是不能变的,这对于配置一个服务端的机器还可以
  • 但是如果是客户端的机器呢?
  • 我带着我的笔记本浪迹天涯,每次使用都要配置IP地址,那岂不是非常low?
  • 因此,我们需要有一个自动配置的协议,也就是动态主机配置协议(Dynamic Host Configuration Protocol),简称DHCP
  • 有了这个协议,网络管理员就轻松多了。他只需要配置一段共享的 IP 地址
  • 每一台新接入的机器都通过 DHCP 协议,来这个共享的 IP 地址里申请
  • 然后自动配置好就可以了。等人走了,或者用完了,还回去,这样其他的机器也能用
  • 所以说,如果是数据中心里面的服务器,IP 一旦配置好,基本不会变,这就相当于买房自己装修
  • DHCP 的方式就相当于租房。你不用装修,都是帮你配置好的。你暂时用一下,用完退租就可以了

讲到这里,你是不是对DHCP更好奇了呢?

下面我们来看看DHCP是怎么工作的

  • 当一台机器新加入一个网络的时候,肯定一脸懵,啥情况都不知道,只知道自己的 MAC 地址。怎么办?
  • 先吼一句,我来啦,有人吗?这时候的沟通基本靠“吼”。这一步,我们称为DHCP Discover
  • 新来的机器使用 IP 地址 0.0.0.0 发送了一个广播包,目的 IP 地址为 255.255.255.255
  • 广播包封装了 UDP,UDP 封装了 BOOTP。其实 DHCP 是 BOOTP 的增强版
  • 但是如果你去抓包的话,很可能看到的名称还是 BOOTP 协议
  • 在这个广播包里面,新人大声喊:我是新来的(Boot request),我的 MAC 地址是这个,我还没有 IP,谁能给租给我个 IP 地址
  • 如果一个网络管理员在网络里面配置了DHCP Server的话,他就相当于这些 IP 的管理员
  • 他立刻能知道来了一个“新人”。这个时候,我们可以体会 MAC 地址唯一的重要性了
  • 当一台机器带着自己的 MAC 地址加入一个网络的时候,MAC 是它唯一的身份,如果连这个都重复了,就没办法配置了
  • 只有 MAC 唯一,IP 管理员才能知道这是一个新人,需要租给它一个 IP 地址,这个过程我们称为DHCP Offer
  • 同时,DHCP Server 为此客户保留为它提供的 IP 地址,从而不会为其他 DHCP 客户分配此 IP 地址
  • DHCP Server 仍然使用广播地址作为目的地址,因为,此时请求分配 IP 的新人还没有自己的 IP
  • DHCP Server 回复说,我分配了一个可用的 IP 给你,你看如何?
  • 除此之外,服务器还发送了子网掩码、网关和 IP 地址租用期等信息
  • 新来的机器很开心,它的“吼”得到了回复,并且有人愿意租给它一个 IP 地址了,这意味着它可以在网络上立足了
  • 当然更令人开心的是,如果有多个 DHCP Server,这台新机器会收到多个 IP 地址,简直受宠若惊
  • 它会选择其中一个 DHCP Offer,一般是最先到达的那个,并且会向网络发送一个 DHCP Request 广播数据包
  • 包中包含客户端的 MAC 地址、接受的租约中的 IP 地址、提供此租约的 DHCP 服务器地址等
  • 并告诉所有 DHCP Server 它将接受哪一台服务器提供的 IP 地址,告诉其他 DHCP 服务器,谢谢你们的接纳
  • 并请求撤销它们提供的 IP 地址,以便提供给下一个 IP 租用请求者
  • 此时,由于还没有得到 DHCP Server 的最后确认,客户端仍然使用 0.0.0.0 为源 IP 地址
  • 和255.255.255.255 为目标地址进行广播, 在 BOOTP 里面,接受某个 DHCP Server 的分配的 IP
  • 当 DHCP Server 接收到客户机的 DHCP request 之后,会广播返回给客户机一个 DHCP ACK 消息包
  • 表明已经接受客户机的选择,并将这一 IP 地址的合法租用信息和其他的配置信息都放入该广播包
  • 发给客户机,欢迎它加入网络大家庭,最终租约达成的时候,还是需要广播一下,让大家都知道
  • 既然是租房子,就是有租期的。租期到了,管理员就要将 IP 收回。
  • 如果不用的话,收回就收回了。就像你租房子一样,如果还要续租的话,不能到了时间再续租
  • 而是要提前一段时间给房东说。DHCP 也是这样
  • 客户机会在租期过去 50% 的时候,直接向为其提供 IP 地址的 DHCP Server 发送 DHCP request 消息包
  • 客户机接收到该服务器回应的 DHCP ACK 消息包,会根据包中所提供的新的租期以及其他已经更新的 TCP/IP 参数,更新自己的配置。
  • 这样,IP 租用更新就完成了

好了,一切看起来完美。DHCP 协议大部分人都知道,但是其实里面隐藏着一个细节,很多人可能不会去注意

接下来,我就讲一个有意思的事情:网络管理员不仅能自动分配 IP 地址,还能帮你自动安装操作系统!

  • 普通的笔记本电脑,一般不会有这种需求。因为你拿到电脑时,就已经有操作系统了
  • 即便你自己重装操作系统,也不是很麻烦的事情。
  • 但是,在数据中心里就不一样了。数据中心里面的管理员可能一下子就拿到几百台空的机器,
  • 一个个安装操作系统,会累死的
  • 所以管理员希望的不仅仅是自动分配 IP 地址,还要自动安装系统
  • 装好系统之后自动分配 IP 地址,直接启动就能用了,这样当然最好了!
  • 这事儿其实仔细一想,还是挺有难度的。安装操作系统,应该有个光盘吧。数据中心里不能用光盘吧
  • 想了一个办法就是,可以将光盘里面要安装的操作系统放在一个服务器上,让客户端去下载
  • 但是客户端放在哪里呢?它怎么知道去哪个服务器上下载呢?客户端总得安装在一个操作系统上呀
  • 可是这个客户端本来就是用来安装操作系统的呀?
  • 其实,这个过程和操作系统启动的过程有点儿像。首先,启动 BIOS。
  • 这是一个特别小的小系统,只能干特别小的一件事情
  • 其实就是读取硬盘的 MBR 启动扇区,将 GRUB 启动起来;然后将权力交给 GRUB
  • GRUB 加载内核、加载作为根文件系统的 initramfs 文件;然后将权力交给内核
  • 最后内核启动,初始化整个操作系统
  • 那我们安装操作系统的过程,只能插在 BIOS 启动之后了。因为没安装系统之前,连启动扇区都没有
  • 因而这个过程叫做预启动执行环境(Pre-boot Execution Environment),简称PXE
  • PXE 协议分为客户端和服务器端,由于还没有操作系统,只能先把客户端放在 BIOS 里面
  • 当计算机启动时,BIOS 把 PXE 客户端调入内存里面,就可以连接到服务端做一些操作了
  • 首先,PXE 客户端自己也需要有个 IP 地址。因为 PXE 的客户端启动起来,就可以发送一个 DHCP 的请求
  • 让 DHCP Server 给它分配一个地址。PXE 客户端有了自己的地址,那它怎么知道 PXE 服务器在哪里呢?
  • 对于其他的协议,都好办,要么人告诉他。例如,告诉浏览器要访问的 IP 地址,
  • 或者在配置中告诉它;例如,微服务之间的相互调用。
  • 但是 PXE 客户端启动的时候,啥都没有。
  • 不过PXE 客户端启动后发送 DHCP 请求,除了能得到一个 IP 地址,还可以知道 PXE 服务器在哪里
  • 也可以知道如何从 PXE 服务器上下载某个文件,去初始化操作系统
  • 接下来我们来详细看一下 PXE 的工作过程
  • 首先,启动 PXE 客户端。第一步是通过 DHCP 协议告诉 DHCP Server,我刚来,一穷二白,啥都没有
  • DHCP Server 便租给它一个 IP 地址,同时也给它 PXE 服务器的地址、启动文件 pxelinux.0
  • 其次,PXE 客户端知道要去 PXE 服务器下载这个文件后,就可以初始化机器
  • 于是便开始下载,下载的时候使用的是 TFTP 协议。所以 PXE 服务器上,往往还需要有一个 TFTP 服务器
  • PXE 客户端向 TFTP 服务器请求下载这个文件,TFTP 服务器说好啊,于是就将这个文件传给它
  • 然后,PXE 客户端收到这个文件后,就开始执行这个文件。这个文件会指示 PXE 客户端,向 TFTP 服务器请求计算机的配置信息 pxelinux.cfg
  • TFTP 服务器会给 PXE 客户端一个配置文件,里面会说内核在哪里、initramfs 在哪里。PXE 客户端会请求这些文件
  • 最后,启动 Linux 内核。一旦启动了操作系统,以后就啥都好办了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值