趣谈网络协议04IP地址

如何配置IP地址

使用 net-tools:

1
2
sudo ifconfig eth1 10.0.0.1/24
sudo ifconfig eth1 up

使用 iproute2:

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

配置文件配置:

不同系统的配置文件格式不同,但是无非就是CIDR、子网掩码、广播地址和网关地址。

包发送简述

linux系统首先会判断,要去的地址和我的网卡是一个网络吗?是一个网络,才会发送ARP请求,获取MAC地址。

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

如果没有网关,包根本发不出去。

192.168.23.6 不可能设置网关为 192.168.1.6。网关要和当前的网络至少一个网卡是同一个网段的。

动态主机配置协议(DHCP)

如果公司每个人都要需要IT人员配置,肯定忙不过来啊。所以出现了DHCP。

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

网络管理员只需要配置一段共享的IP地址。申请、用完了、还回去。

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

解析 DHCP 的工作方式

当一台机器新加入一个网络的时候,只知道自己的MAC地址,先发广播,说我来啦,称为DHCP discover。

DHCP discover报文:

MAC头 新机器的mac地址
广播mac地址:ff:ff:ff:ff:ff:ff
IP头 新机器的IP: 0.0.0.0
目标IP: 255.255.255.255
UDP头 源端口:68
目标端口:67
BOOTP头 boot request
我的mac是这个,我还没有IP!

新来的机器使用IP地址0.0.0.0发送了一个广播包,目的IP地址为255.255.255.255,广播包封装了UDP, UDP封装了BOOTP。其实DHCP是BOOTP的增强版,但是如果你去抓包的话,很可能看到的名称还是BOOTP协议。

DHCP server,网络管理员在网络里面配置了DHCP server的话,相当于这些IP的管理员。

只有MAC惟一,IP管理员才能知道这是一个新人,需要租给它一个IP地址,这个过程我们称为DHCP offer。DHCP server为此客户保留这个IP地址,租约内不在给其他DHCP客户分配此IP地址。

DHCP offer报文:

MAC头 DHCP的mac地址
广播mac地址:ff:ff:ff:ff:ff:ff
IP头 DHCP的IP: 192.168.1.2
广播IP: 255.255.255.255
UDP头 源端口:67
目标端口:68
BOOTP头 boot reply
这是你的MAC,我分配了这个IP,租给你,你看如何?

DHCP server仍然使用广播地址作为目的地址,因为,此时请求分配IP的新人还没有自己的IP。DHCP server回复说:这是你的MAC,我分配了这个IP,租给你,你看如何?除此之外,服务器还发送了子网掩码、网关和 IP 地址租用期等信息。

DHCP server可以有多台。新机器会选择其中一台,一般是最先到达的那个,并且会向网络发送一个 DHCP Request 广播数据包,包中包含客户端的 MAC 地址、接受的租约中的 IP 地址、提供此租约的 DHCP 服务器地址等,并告诉所有 DHCP Server 它将接受哪一台服务器提供的 IP 地址,告诉其他 DHCP 服务器,谢谢你们的接纳,并请求撤销它们提供的 IP 地址,以便提供给下一个 IP 租用请求者。

DHCP Request 广播数据包:

MAC头 新机器的mac地址
广播mac地址:ff:ff:ff:ff:ff:ff
IP头 新机器的IP: 0.0.0.0
目标IP: 255.255.255.255
UDP头 源端口:68
目标端口:67
BOOTP头 boot request
我的mac是这个,我准备租用这个DHCP server给分配的IP。

由于还没有得到DHCP server的最后确认,客户端仍然使用0.0.0.0为源IP地址、255.255.255.255为目标地址进行广播。 在BOOTP里面,接受某个DHCP server的分配IP。

当DHCP server接收到客户机的DHCP request之后,会广播返回客户机一个DHCP ack消息包,表明已经接受客户机的选择,并将这一 IP 地址的合法租用信息和其他的配置信息都放入该广播包,发给客户机,欢迎它加入网络大家庭。

DHCP ack消息包:

MAC头 DHCP的mac地址
广播mac地址:ff:ff:ff:ff:ff:ff
IP头 DHCP的IP: 192.168.1.2
广播IP: 255.255.255.255
UDP头 源端口:67
目标端口:68
BOOTP头 boot reply
DHCP ACK, 这个新人的IP是我这个DHCP server租的,租约在此!

IP 地址的收回和续租

DHCP的IP是有租约的。如果不续约就回收。提前一段时间说续约不续约。

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

预启动执行环境(PXE)

在数据中心,都是新设备,没有操作系统。

数据中心管理员需要自己安装系统,装好系统后自动分配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 客户端启动的时候,啥都没有。好在 DHCP Server 除了分配 IP 地址以外,还可以做一些其他的事情。这里有一个 DHCP Server 的一个样例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

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;
}

按照上面的原理,默认的 DHCP Server 是需要配置的,无非是我们配置 IP 的时候所需要的 IP 地址段、子网掩码、网关地址、租期等。如果想使用 PXE,则需要配置 next-server,指向 PXE 服务器的地址,另外要配置初始启动文件 filename。

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

解析 PXE 的工作过程

启动 PXE 客户端, 通过DHCP协议向DHCP server获取IP地址、PXE服务器的地址、启动文件pxelinux.0。

PXE客户端去PXE服务器下载这个文件,初始化机器。下载使用的TFTP协议。PXE服务器上要安装TFTP服务器。

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

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


趣谈网络协议04IP地址
http://hanqichuan.com/2023/06/28/网络协议/趣谈网络协议04IP地址/
作者
韩启川
发布于
2023年6月28日
许可协议