说到我们的日常上网,就不得不提一个协议:DHCP协议。
DHCP全称Dynamic Host Configuration Protocol,动态主机配置协议。
DHCP与ARP一样是局域网的网络协议。在分层模型里面,其属于应用层协议,底层使用的是UDP协议。
虽然DHCP是应用层协议,但是为了更好的阐述网络结构,更全面的描述我们的上网过程,我这里把DHCP放在网络层来讲。
前面我们说过,全世界IPv4的IP地址是有限的,并且每一台的电子设备在互联网上都有一个独一无二的身份证(IP地址);我们肯定不能自己随便设置我们电脑的上网IP地址,因为这样可能导致两台电脑IP地址重复。
1. 那怎么保证IP主机的IP地址唯一性呢?
答案当然是在我们上网的时候,由权威机构进行统一管理和分配了。
所有的IP地址都由国际组织NIC(Network Information Center)负责统一分配的,目前全世界共有三个这样的网络信息中心。
而我国申请IP地址要通过APNIC网络信息中心,APNIC的总部设在日本东京大学。比如中国申请的IP段有:61.129.*.*开始到61.191.*.*等;其中中国互联网络信息中心(China Internet Network Information Center,简称CNNIC)则管理中国国内IP的分配和规划。
2. DHCP的工作机制
当我们连接Wi-Fi的时候,电脑将使用DHCP协议寻找“IP分配”流程。
DHCP 协议报文采用 UDP方式封装,DHCP Server 侦听的端口号是 67 ,DHCP Client 的端口号是 68 。DHCP 设备通过发送和接收 UDP 67 和 UPD 68 端口的报文进行协议交互。DHCP 的基本工作流程分为 4 个阶段,即发现阶段、提供阶段、选择阶段、确认阶段。
1)发现阶段
即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCP discover发现信息来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。
2)提供阶段
即DHCP服务器提供IP地址的阶段。在网络中接收到DHCP discover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCP offer提供信息,并在本地记录下客户机的MAC地址和分配IP的记录。
3)选择阶段
即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP offer提供信息,则DHCP客户机只接受第一个收到的DHCP offer提供信息,然后它就以广播方式回答一个DHCP request请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址,未被选中的DHCP服务器将会把本地分配的IP记录删除。
注意:在给客户端分配IP地址前需要发送ICMP回送请求包,确认没有返回应答即IP没有分配出去。
4)确认阶段
即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP request请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址,并回复客户机DHCP nack消息。
- 客户机ARP确认IP地址是否可用
使用DHCP时,如果DHCP服务器发生故障,将导致无法自动分配IP地址,从而也导致网段内所有的主机之间无法进行TCP/IP通信。为了避免此类问题的发生,通常人们会架设两台或以上的DHCP服务器。不过启动了多个DHCP服务器,由于每个服务器都记录着IP地址分配情况的信息,因此可能导致几处分配的IP地址相互冲突。所以,在客户机使用DHCP服务器分配的IP之前,需要先发送ARP请求报文,确认没有返回应答才能使用。
5)重新登录
以后DHCP客户机每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。
6)更新租约
DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。
3. DHCP 分配机制
DHCP 提供了两种地址分配机制,可以根据网络需求为不同的 Client 选择不同的分配策略。
- 动态分配机制:通过 DHCP 为 Client 分配一个有使用期限的 IP 地址。如果 Client 没有及时续约,到达使用期限后,这个地址可能会被其它 Client 使用。绝大多数 Client 使用的都是这种动态分配的地址。
- 静态分配机制:通过 DHCP 为特定的 Client 分配固定的 IP 地址。固定 IP 地址可以永久使用, Client 通常是打印机、服务器等设备。因为像服务器这类设备,IP不能变更,否则前端将无法访问。
- 分配逻辑:在实际情况中,我们发现 DHCP Client 重启后,也能获得相同的 IP 地址。DHCP Server 为 DHCP Client 分配 IP 地址时,采用如下的顺序:
DHCP Server 中与 DHCP Client 的 MAC 地址静态绑定的 IP 地址;DHCP Client 曾经使用过的 IP 地址;最先找到的可用 IP 地址。如果没找到可用的 IP 地址,就依次查询超过租期、发生冲突的 IP 地址,如果找到就进行分配,否则报错处理。
4. DHCP中继代理
家庭网络中大多只有一个以太网网段,与其连接的主机数也不多。因此一台DHCP服务器就足以应对IP地址分配的需求,而大多数情况下都由带宽路由器充当DHCP服务器的角色。
然而,一个企业或者学校等较大型的组织机构的网络环境当中,一般会有多个以太网网段;在这种情况下,如果每个网段都设置一台DHCP服务器,每台DHCP服务器都进行配置和管理,将给我们的工作带来庞大的工程。如此,我们有没有办法解决这个问题呢?
答案是肯定的,DHCP只能在局域网里面广播,那么,我们能不能,在中间加一个代理DHCP服务器,其不做过多工作,针对DHCP的广播,接收客户机发来的报文,然后将其单播到真正的DHCP服务器就可以了;如此就有了下面的结构:
1)中继代理工作原理
- 客户机发送 DHCP Discover 或 DHCP Request 广播报文,具有 DHCP 中继功能的网络设备收到后,根据配置将报文单播给指定的DHCP服务器;
- DHCP服务器进行 IP 地址的分配,单播发送给 DHCP 中继代理 ,DHCP 中继代理再将配置信息广播给客户机 ,完成对 客户机 的动态配置。
因此,DHCP 服务器即使不在同⼀个链路上也可以实现统⼀分配和管理IP地址。