趣谈网络协议04IP地址
如何配置IP地址
使用 net-tools:
1 |
|
使用 iproute2:
1 |
|
配置文件配置:
不同系统的配置文件格式不同,但是无非就是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 |
|
按照上面的原理,默认的 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 内核。一旦启动了操作系统,以后就啥都好办了。