计算机要和其他计算机通信,首先得有一个IP地址,我们需要把它配置到网卡上。
如何配置IP地址?
你可以使用命令行自己配置一个地址。可以用ifconfig,也可以使用ip addr。
使用net-tools(ifconfig):
$ sudo ifconfig eth1 10.0.0.1/24
$ sudo ifconfig eth1 up
使用iproute2 (ip addr):
$ sudo ip addr add 10.0.0.1/24 dev eth1
$ sudo ip link set up eth1
可以看到配置IP很简单。但不是配置任何IP都可以的。例如,旁边的机器都是192.168.1.x,我非得配一个10.10.0.10,包是发不出去的。
为什么发不出去?下面举例说明。
旁边的机器是192.168.1.6,跟你的机器在同一个交换机上,而你把机器设置为10.10.0.10。你企图去和192.168.1.6的机器通信,你的包源IP地址是10.10.0.10,目标IP是192.168.1.6,但包发不出去,因为不知道对方的MAC地址。
Linux会首先判断,要去的这个IP地址是和我是同一个网段吗,如果是一个网段的才会发送ARP请求,获取目标MAC地址。如果不是,它会讲包发送到网关。如果配置了网关,Linux会获取网关的MAC地址,将包发给网关。对于192.168.1.6这台机器,虽然这个包路过它家门口,但是目标MAC地址不是它,所以它的网卡不会接收这个包。
如果没有配网关,那包根本发不出去。
如果将网关配置为192.168.1.6呢?Linux不会然你配置成功的,网关要和当前的网络至少一个网卡同一个网段。
所以,要收到配置一台机器的IP时,一定要问网络管理员。一般真正配置IP的时候不是用配置命令,而是放在配置文件里。
不同的配置文件格式不同,但都有CIDR、子网掩码、广播地址和网关地址。
动态主机配置协议(DHCP)
配置IP对技术人员来讲可能不难,但是对于不懂技术的人来讲,要了解什么子网掩码,CIDR等概念才能配置IP太不易用了。
所以,我们需要有一个自动配置IP的协议,就是动态主机配置协议(Dynamic Host Configuration Protocol),简称DHCP。
这个协议只需要网络管理员配置一个共享的IP地址范围。每一台新来的机器通过DHCP协议,申请一个共享IP地址范围里的IP,然后自动配置。等不用了,再还回来,其他机器还可以重复使用。
数据中心里的机器,IP一旦配置好,基本不变,相当于自己买房自己装修。DHCP的方式相当于租房,你不用装修,都帮你配置好了。你暂时可以用一下,用完退租就可以了。
解析DHCP的工作方式
当一台机器新加入一个网络,它只知道自己的MAC地址,别的什么都不知道。怎么办?它会先吼一句,我来了,有人吗?这一步称为DHCP Discover。
新来的机器使用IP地址0.0.0.0发送一个广播包,目的IP是255.255.255.255。广播包封装了UDP,UDP封装了BOOTP,DHCP就是BOOTP的增强版。在广播包里,新人大喊:我是新来的,我的MAC是这个,我没有IP,谁能租个IP给我?
格式像这样:
如果一个网络里面有DHCP服务器的话(相当于IP管理员),他就知道来新人了,这个时候我们就可以看到MAC的重要性了,它是一台机器的唯一身份。
只有MAC是唯一的,IP管理员才知道这是个新人,然后租一个IP给它,这成为DHCP Offer。同时DHCP服务器保留这个IP,从而不会给其他DHCP客户端分配此IP地址。
DHCP Offer的格式像这样:
DHCP Server使用广播地址作为目的地址,因为新来的机器还没有IP。DHCP回复说,我分配了一个可用的IP,你看怎么样?除了IP,服务器还发送了子网掩码、网关和IP地址租期等信息。
如果一个网络里面有多个DHCP Server,新来的机器会收到多个IP地址,然后它会选择一个,并向网络发送一个DHCP Request广播数据包,包中包含客户端的MAC地址、接受的IP地址、提供租约的DHCP 服务器等,并告诉所有的DHCP服务器它接受哪一台服务器提供的IP地址。
由于还没有得到DHCP服务器的最后确认,客户端仍然使用0.0.0.0作为源IP地址、255.255.255.255为目标地址进行广播。
当DHCP服务器收到客户机的DHCP request之后,会返回一个DHCP ACK消息包,表明接受客户机的选择,并将这一IP地址的合法租用信息和其他的配置信息都放入该广播包,发给客户机,欢迎加入网络大家庭。
IP地址的收回和续租
既然是租房子,就是有租期的。租期到了,管理员就要将IP收回。
如果要续租,就要在租期过去50%的时候,直接向提供租约的DHCP服务器发送DHCP request包,然后服务器发回DHCP ACK包,客户端根据返回包中的新的租期更新自己的配置。
网络管理员不仅能自动分配IP地址,还能帮你安装操作系统!
预启动执行环境(PXE)
普通的个人电脑是没这个需求的,但是数据中心的管理员可能一下拿到几百台空机器,要是一台一台安装,肯定是不可能的。
所以,管理员希望不仅能自动分配IP地址,还能自动安装操作系统。装好系统自动分配IP地址,直接启动就好了。
操作系统的启动过程是这样的。首先启动BIOS,这是个特别小的系统,它读取硬盘的MBR的启动扇区,将GRUB启动起来;然后由GRUB接管,GRUB加载内核、加载作为根文件系统的initramfs文件;然后将权力交给内核;最后内核启动,初始化整个操作系统。
安装操作系统的过程,只能插在BIOS启动之后。这个过程叫做预启动执行环境(Pre-boot Execution Environment),简称PXE。
PXE分为客户端和服务器,由于没有操作系统,只能把客户端放在BIOS里,计算机启动时,BIOS把PXE客户端调入内存里,就可以连接到服务端了。
首先,PXE客户端自己要有一个IP地址,所以它可以通过DHCP服务器获得自己的IP地址。但它怎么知道PXE服务器在哪里呢?
答案是可以配置在DHCP服务器上,如果想使用PXE,则配置next-server,指向PXE服务器的地址,另外要配置初始启动文件filename。
解析PXE的启动过程
首先,启动PXE客户端。第一步是通过DHCP协议告诉DHCP服务器,我是新来的。DHCP服务器会租给它一个IP地址,通过也给它PXE服务器的地址、启动文件pxelinux.0。
其次,PXE客户端去PXE服务器下载这个文件,就可以初始化机器。于是开始下载,下载使用TFTP协议。
然后PXE客户端收到这个文件,开始执行这个文件。这个文件会指示PXE客户端,向TFTP服务器请求计算机的配置信息pxelinux.cfg。TFTP服务器会给PXE客户端一个配置文件,里面会说内核在哪里、initramfs在哪里。PXE客户端会请求这些文件。
最后,启动Linux内核。一旦启动了操作系统,以后就都好办了。
小结
- DHCP协议主要是用来给客户租用IP地址的。
- DHCP协议能给客户推荐PXE,能够安装操作系统。
两个思考题:
1. PXE协议可以用来装操作系统,但是每次装操作系统都很麻烦。你知道如何使得第一次安装操作系统,后面就正常启动吗?
2. 现在上网很简单,买个路由器,连上WIFI,给DHCP分配一个IP地址,就可以上网了。你是否用过更原始的方法自己组简单的网?