假如我们的网络中有N台设备,它们都要设置IP地址,如果人工去一个个配置不仅不方便管理还很麻烦。因此我们用DHCP来自动分配地址。
不仅是计算机、很多网络设备的启动流程如下:
设备上电后,硬件开启并将初始化的硬件程序(也叫自举程序)装入内存运行后并进行读取,随后装入操作系统中,加载系统和应用软件 。
在这个时刻,我们的主机和路由器等网络设备的功能启动会在硬件开启后进行。不过在它启动前我们要配置好它的一些协议和细节。那这些协议的配置我们可以通过系统自动装配或者人工的方式实现。
比如说,我们运行TCP协议,那么与TCP协议相关的软件就会加载运行,像是其中的IP地址、子网掩码等都要具备。
为此,我们可以通过磁盘来接收协议配置信息,这样虽然快,但是太不灵活,你要一个个设置IP地址?所以说设备自动获取到协议的配置信息更好。因此,自动协议配置是一种可以对客户机分配IP地址的服务。
我们要为设备分配IP地址和掩码等信息。因此我们要一台可以管理地址分配的服务器。这样,每个设备就可以向服务器索要IP地址等信息了。不过这些设备要支持自动向服务器索取IP地址的功能,因为服务器不会自发访问设备。
对此,出现了一个协议叫做RARP(反向地址转换协议)
RARP(Reverse Address Resolution Protocol)介绍这个玩意儿前,要先说说ARP协议,我们之前提到过ARP协议(地址转换协议)是设备进行广播通过IP地址来获取对端的MAC地址。而RARP就是应对设备不知道自己的IP地址,但是知道自己的物理地址的情况。
RARP与ARP相反。RARP发出解析过的物理地址并希望对端返回其对应的IP地址,仍是以广播形式发出,RARP有RARP服务器,它规定只有RARP服务器能产生应答。我们可以设置N多个RARP服务器。
反向地址转换协议(RARP) 允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。
当我们采用了RARP,并且在网关路由器上部署了MAC地址与IP的映射表时,其过程为:
(1)主机发送一个本地的RARP广播,在此广播包中含有自己的MAC地址并且请求收到该请求的RARP服务器给我分配一个IP地址;
(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
(3)如果存在这个MAC地址与IP的映射,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
(4)如果不存在,RARP服务器不响应;
(5)源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,超时后表示获取失败。
但这个东西太鸡肋了,我们看下图:
这是一个网络层次的概况。你可以发现ARP和RARP是共同在数据链路层工作的,因此广播发送的数据网关不会进行转发,也就是说每个网段都需要RARP服务器,还是太麻烦了。而且,ARP和RARP一样,都只为IP地址和MAC地址进行互相解析,其它协议配置不提供。
至此我们又有了新的方案——BOOTP(引导程序协议)
这个玩意儿我们就简单说说吧!它是基于UDP的C/S模式,是一个应用层协议。设备仍然是向服务器发送请求报文,服务器进行响应。由于设备一开始没有IP地址且通信不再处于数据链路层,因此需要IP报文设置。这个请求的报文将IP报文的首部中的源地址设置为了“0.0.0.0”(默认的源IP地址)目的地址为“255.255.255.255”(默认的目的IP地址)。
我不太想多写这个协议的工作流程,概括来讲,它是通过广播来获取IP,通过MAC获取IP映射。
优点是:可以穿越路由器(因为应用层协议);
缺点是:IP需要静态配置与MAC的映射,网络不具备移动性。
还是有点five,后来这个玩意儿就升级,变成了DHCP
DHCP(动态主机配置协议)堪称一流的东西,DHCP客户机启动时,它会自动与DHCP服务器通信,由DHCP服务器给它分配IP地址等信息,我们还可以设置租约,规定这个IP使用多久,到期或者设备关机后,IP会被回收。
DHCP一共有三个组件:DHCP服务器(提供分配地址的中心)、DHCP客户机(需获取IP地址的设备)、DHCP中继系统(在客户机和服务器间转发消息)。
DHCP工作流程
发现阶段:客户机通过发送DHCP Discovery广播报文进行请求。如果客户机需要有一个永久性的租用地址,则可以直接请求该地址。这个阶段,源主机发送的IP报文首部的源目IP地址为全0(源)和全1(目)。
提供阶段:收到了IP的广播请求报文,会先分配地址,如果没有要分配的地址则从DHCP的地址池中取出一个可用的IP地址,并且返回一个单播DHCP Offer的报文回应。
选择阶段:客户机收到多个DHCP Offer报文时,往往会选择第一个或者自己所需的那一个IP地址后,广播发送给标识服务器的DHCP Request报文。
确认阶段:被标识的服务器收到后,会单播发回一个DHCP ACK报文表示你可以使用该地址。但是如果发送DHCP Nak。则表示客户机需要重新开始整个过程。也有可能发送DHCP Decline告诉客户机你的IP地址不能用耶!
如果客户机下线并重新登录后,这时就不需要进行发现和提供阶段了,直接将DHCP Request报文发出,服务器收到以后会尝试让客户机继续使用曾经的IP地址。如果我们要更新客户机的IP地址租赁期限,通过DHCP Request进行更新。在上述所有过程中,如果服务器没有返回DHCP ACK则证明服务器没有收到(大概0.875s),需要重发。
客户端获得IP地址后,也可以发送DHCP INFORM这个报文请求获取服务器的其它一些网络配置信息,如DNS等。
DHCP也可以穿越路由器工作,我们可设置DHCP中继代理,这样DHCP就会以单播方式在网络之间传递DHCP的相应报文。
因此,我们可以发现,DHCP几乎涵盖了RARP和BOOTP的功能,并在此基础上拓展了许多新的概念,下面我们用实验来看一下这个DHCP。
首先,如下连接拓扑,将两台PC机均设置为DHCP模式后并开启抓包软件:
我们开启抓包后,会发现开启DHCP的PC机会源源不断的发送DHCP Discovery报文:
接下来我们配置DHCP服务器,我们在路由器接口上进行配置:
sys
Enter system view, return user view with Ctrl+Z.
[Huawei]int g0/0/0
[Huawei-GigabitEthernet0/0/0]ip add 192.168.1.254 24 //设置网关IP地址
[Huawei-GigabitEthernet0/0/0]quit
[Huawei]dhcp enable //开启DHCP服务
[Huawei]int g0/0/0
[Huawei-GigabitEthernet0/0/0]dhcp select interface //选择此接口作为地址池让客户端获取
[Huawei-GigabitEthernet0/0/0]dhcp server dns-list 114.114.114.114 8.8.8.8 //配置DNS
[Huawei-GigabitEthernet0/0/0]dhcp server lease day 0 hour 23 minute 0//设置地址池租赁时间为23小时
[Huawei-GigabitEthernet0/0/0]dhcp server excluded-ip-address 192.168.1.10//配置不被分配的地址段,这些地址段可以保留后用来做其他配置
[Huawei-GigabitEthernet0/0/0]dhcp server excluded-ip-address 192.168.1.200
好了,我们配置完后观察抓包的流量:
上图中的黄条就是配置接口IP后出现的,通过ARP协议检测到了它的IP地址与MAC地址的映射
上图可以看到,DHCP服务器与DHCP客户机迅速完成了建立。其报文传递也是很快。发现报文到达后,DHCP主机立刻回复了一个Offer报文 ,可以看到DHCP服务器为PC暂时分配的IP地址是192.168.1.252。但是我们看到主机并不确认自己是否可以使用这个报文,因此广播发送Request报文,经过服务器的ACK报文确定,并发向目的IP地址为192.168.1.252的设备,告诉其可以使用。
我们也能发现在1和3阶段均是以广播形式发送源目为全0和全1的字段,而2和4阶段则是单播方式发送报文。
我们最后在用主机Ping一下路由器的接口,发现可以Ping通的:
这些就是DHCP的内容,它只是个很简单的利用工具。在我们实际进行网络配置的时候使用它会非常方便,节省我们很多的时间。而且DHCP 服务器的网络规划做的也很好,让我们方便了后续的路由聚合与汇总。