计算机网络协议-dhcp
可以这么说,IP地址是终端在Internet中的唯一标识,所以终端需要使用Internet网就需要配置IP地址,IP地址的配置方法有静态和动态两种方式。

普通用户一般都是选择动态方式(静态方式可能也不知道怎么配),动态的意思就是通过协议方式自动完成,这个协议就是DHCP协议(Dynamic Host Configuration Protocol)。本篇通过Wireshark抓包简单分析一下DHCP协议的交互流程。
简单来讲DHCP协议配置地址的过程只有四步。
(DHCP是基于Bootp协议发展而来,所以也可以通过“bootp”来过滤DHCP报文)

- Client -> Server发DHCP Discovery
- Server -> Client回复DHCP Offer
- Client -> Server发送DHCP Request
- Server -> Client回复DHCP ACK
DHCP Discovery

这是一个广播报文,主要目的是为了搜索DHCP Server。
DHCP Offer

环境中DHCP Server会回复Offer报文给Client分配地址等信息,如上面的"Your (client) IP address"就是分配给Client的地址。
DHCP Request

Client选择其中一个Server,使用Request报文来宣告自己选择的Server及获取的地址等信息,地址信息在如下Option:

DHCP ACK

Server回复ACK做最后的确认,经过这样简单的四步就完成了IP地址的分配工作。
其实在DHCP获取地址的同时也会获取DNS和网关地址。
DNS是用来做域名解析的,即如果访问一个域名,例如www.baidu.com,这时候在访问前需要将域名解析成IP地址,为实现这个目的,就需要有一个DNS Server来负责解析。
网关地址是设置默认路由所必须的参数,当访问的目的地不在本网段,需要通过网关进行中转,访问Internet网络都是通过网关这个通道来完成的。
或者说,为了能正常使用Internet网络,IP地址(包括掩码)网关和DNS Server这三项是基本条件参数,网络的连接信息里面会显示这些关键信息。

使用DHCP获取地址时,这两个信息是通过DHCP的Option从Server分配的。

最后补充几个与DHCP相关的概念:
- DHCP地址池
Client使用DHCP获取地址时,Server其实是从一个地址池中选择一个未被使用的地址分配给这个Client,同时记录维护这个地址与这个Client的对应关系,其实维护的是IP地址与这个Client MAC的映射表,分配过的地址不能重复分配给新的设备,主要是为了保证IP地址不能冲突。
- DHCP地址的租约期
DHCP分配给Client的地址其实是使用期限的,主要是为了实现动态管理的目的,所以针对那些下线的终端地址定义了一个地址的超时回收机制,当然,如果终端在超时后还需要使用这个地址,那么需要在超时前进行续租。这个有点类似房东租房的模式,房子不会固定租给一位房客,比如按照一年一签,如果房客决定一年后还要租房,那么在到期前需要续租。

以上DHCP Option定义了租约期到期前续租的时间点,第一次续租时间是"Renewal Time Value"指定的时间点,如果在“Renewal Time Value”时间点续租失败,则会在“Rebinding Time Value”尝试第二次续租。
- DHCP Option
DHCP通过Option的方式扩展了很多功能,比如前面提到的DNS/网关/续租时间就是通过Option的方式获取的,DHCP Option有一些是标准定义的,也有一些是设备商或者运营商自定义的,通过这些Option可以实现很多客制化的功能。以DHCP Option60来举例,这个Option可以用来描述设备类型,这样就可以根据不同的设备(如手机/PAD/PC等)分配不同范围的地址段,做一些更精细化的业务管理。
- 其他DHCP报文
除了前面提到的4种关键报文,其实也有一些其他的报文,简单说明如下:
- DHCP Release: Client用来主动释放地址
- DHCP Decline: Client检测到server分配的地址有错误,比如有冲突,从而拒绝server的地址
- DHCP Request: 也可以作为续租报文使用
- DHCP NACK: Server回复的拒绝报文,比如不同意续租
- DHCP Inform: Client向Server请求获取完整的配置信息
DHCP协议是基于UDP的一种应用层协议,相对是比较简单的,已经成为网关和路由器的标配功能,解决了给终端自动进行地址分配的问题,大大简化了网络运维人员配置网络工作。
