DHCP:IP 并非与生俱来
# DHCP:IP 并非与生俱来
# 初识 DHCP
众所周知,因特网上的每台设备都规定了其全世界唯一的地址,也就是说 “IP 地址”,正是由于有了 IP 地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。
IP 地址就好像电话号码(地址码):有了某人的电话号码,你就能与他通话了。同样,有了某台主机的 IP 地址,你就能与这台主机通信了。
But,如果逐一为每一台主机设计 IP 地址那不得累死,不说全世界可能上百亿台计算机的存在,就说一台笔记本电脑,每移动到一个地方,就需要重新配置 IP 地址。
显然,手动分配 IP 地址不是我们人类中的那些顶级大脑能够做出来的事情,为了实现自动配置 IP 地址、统一管理 IP 地址分配,DHCP 协议(Dynamic Host Configuration Protocol,动态主机配置协议)就被创造了出来,这是一个应用层协议。
在没有 DHCP 服务的网络中,计算机接入到网络时必须先被设置 IP 地址、子网掩码、默认路由等等,并且,为了保证所有的主机 IP 地址都是唯一的,管理员必须清楚的知道该如何分配 IP 地址以避免冲突。
而在提供 DHCP 服务的网络中,管理员的负担大幅度减轻,只要在 DHCP 服务器上做一些必要的设置即可,计算机一旦接入到网络,就会自动获取 TCP/IP 通信所必须的设置(IP 地址等信息),并且 DHCP 服务器会保证其 IP 地址的唯一性。
可以看出,DHCP 实际上提供的是一种即插即用的网络,就是说只要某台计算机物理上一连通,无需专门的设置,就可以直接使用这台物理设备。
# DHCP 的工作原理
DHCP 不仅可以为接入互联网的计算机配置 IP 地址,还可以配置子网掩码、默认路由等信息,那这些信息当然是不会凭空变出来的,它们都需要被提前配置到 DHCP 服务器上。
从 DHCP 获取 IP 地址的流程和 ARP 有一点相似不过还是存在不同的,客户端主机和 DHCP 服务器之间基于 UDP 协议采用广播形式进行交互,主机发送请求消息到 DHCP 服务器的 67 号端口,DHCP 服务器回应应答消息给主机的 68 号端口。具体流程如下:
1)客户端主机广播 DHCP Discover 包:主机请求 DHCP 服务器为自己设置 IP 地址、子网掩码等信息
说的通俗一点,当一台设备新加入一个网络的时候,它只知道自己的 MAC 地址,那么为了获取一些必要的信息,它会先大吼一句(广播,目标地址 255.255.255.255):“我是新来的,我的 MAC 地址是这个,我还没有 IP 地址(或者说 IP 地址是 0.0.0.0,表示未知),有没有 DHCP 服务器能租给我一个 IP 地址呀?”,这个过程称为 “DHCP Discover”。
想必看到这里各位也就能知道 MAC 地址的重要性了,它是与生俱来的,而 IP 地址并不是。
2)DHCP 服务器广播 DHCP Offer 包:DHCP 服务器通知主机哪些网络设置是可以使用的
如果这个网络中存在多个 DHCP 服务器,它们都听到了新人的大吼,并且都愿意租给这位新人一个 IP 地址等信息,那么这个新人主机就会收到多个可用的 IP 地址等信息。这个过程称为 “DHCP Offer”。
3)客户端主机广播 DHCP Request 包:主机通知服务器自己想要使用在(2)中通知的设置
主机在它收到的多个 Offer 中,选择其中一个,一般是最先到达的那个。并且会向网络广播一个 DHCP Request 包,包中包含客户端主机的 MAC 地址、接受的 Offer 中的 IP 地址、提供此 Offer 的 DHCP 服务器地址等,并告诉所有 DHCP 服务器,它将要接受哪一台服务器提供的 IP 地址,告诉其他的 DHCP 服务器,撤销它们提供的 IP 地址,以便提供给下一个 IP 租用请求者。
4)DHCP 服务器广播 DHCP ACK 包:服务器通知主机允许(3)的设置,即正式将 IP 地址等信息分配给主机
在完成第(4)步之前,主机还没有得到 DHCP 服务器的最后确认,所以它还没有 IP 地址,DHCP 服务器想 要给这个主机发送消息,仍然只能采取广播的方式,广播包中包含分配给这台主机的 IP 地址等信息。
至此,DHCP 的网络设置结束,可以进行正常的 TCP/IP 通信了。
DHCP 设置中通常会有一个时间的限制,租期到了,分配的这个 IP 就会被收回。当然,就这好比租房子,你要续约也是可以的,只要你提前说就行,客户端主机可以在这个时间限之前,发送 DHCP Request 包通知想要延长租用时间。
另外,当客户端主机不再需要这个 IP 地址的时候,随时可以通过发送 DHCP Release 报文释放自己的 IP 地址,DHCP 服务器收到 DHCP Release 报文后,会回收相应的 IP 地址并重新分配。
# DHCP 的三种机制
我们上述所说的工作机制是一种动态分配 IP 地址的方式,事实上,DHCP 有三种机制分配 IP 地址:
1)自动分配方式(Automatic Allocation),DHCP 服务器为主机指定一个永久性的 IP 地址,一旦 DHCP 客户端第一次成功从 DHCP 服务器端租用到 IP 地址后,就可以永久性的使用该地址。
2)动态分配方式(Dynamic Allocation),DHCP 服务器给主机指定一个具有时间限制的 IP 地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
3)手工分配方式(Manual Allocation),客户端的 IP 地址是由网络管理员指定的,DHCP 服务器只是将指定的 IP 地址告诉客户端主机。
很明显,三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。
# DHCP 服务器如何保证分配的 IP 地址不冲突
可以看出,DHCP 服务的正常运转极度依赖于 DCHP 服务器,如果 DHCP 服务器发生故障了,将导致无法自动分配 IP 地址,也就是说该网段内所有主机之间都无法进行正常的 TCP/IP 通信。
为此,人们通常会在一个网段内设置两台或以上的 DHCP 服务器,这不可避免的产生一个问题:每个 DHCP 服务器内记录的都是这个网段的 IP 地址分配情况的信息,各自分配的 IP 地址相互冲突在所难免。
为了避免冲突,DHCP 服务器具备这样的功能:
- 在分配 IP 地址之前发送 ICMP 回送请求包(关于 ICMP 协议详见 所谓 ICMP,不过将军与士卒而已 (opens new window)),如果收到了返回应答报文,那不用说,这个 IP 地址已经被人用了。
同样的,客户端主机也得确认下 DCHP 服务器分配的 IP 地址是否正在被人使用:
- 针对从 DHCP 那里获得的 IP 地址发送 ARP 请求报文(关于 ARP 协议详见 5 幅图拿下 ARP 协议 (opens new window)),如果收到了返回应答,那显然,根据这个 IP 地址都能找到 MAC 地址了,你说这个 IP 我还能不能用?