TCP/IP 学习笔记:DHCP 动态主机配置协议

学习资料:《TCP/IP详解卷1:协议》

1# 上网的基本要素

一台计算机连接到英特网,需要下面 四个基本要素IP 地址子网掩码DNS 服务器 IP路由器 IP(默认网关)
与同一子网通讯,有 IP 地址子网掩码 就可以了,系统会通过这两个要素自动算出 广播地址,在上一篇中有说明。
与本地之外的系统通讯需要一个路由或转发表,以确定到达不同目的地的路由器。这个路由或转发表就是由 默认网关 负责的。
DNS 用于将用户可理解的 域名 映射为底层协议所需的 IP 地址

在现代企业中,服务器和路由器通常通过手工配置,而客户端则是使用 DHCP 动态主机配置自动配置。

2# 什么是 DCHP

DHCP 是一种流行的客户机/服务器协议,用于为主机指定配置信息,在企业和家庭网络中广泛使用。现在几乎所有的路由器都配置了嵌入式 DHCP 服务器 ,而几乎所有常用的客户端操作系统和大量的嵌入式设备(例如网络打印机和 VoIP 电话等)都支持 DHCP 客户机

这些设备通过 DHCP 服务器获取 IP 地址、子网掩码、默认网关和 DNS。DHCP 也支持其他服务的相关信息(例如 SIP 服务器)也可以通过 DHCP 传输。

DHCP 协议的传输过程使用的是 UDP/IP。

3# DHCP 地址池和租用期

DHCP 有三种地址分配方法,自动分配、动态分配和手动分配。最常见的是动态分配。

动态分配中, DHCP 客户机请求分配一个 IP 地址,服务器从可用的 地址池 中选择一个地址作为响应。这个池是专门用来分配给客户机的一个连续的 IP 段。池内的某个 IP 分配给客户机后,这个 IP 只在一段特定的时间内有效,称之为 租用期 ,客户机可以使用这个 IP 直到租用期过期,如果还要继续使用,客户机可以提出延长租用期的要求,称为 续订租约 。客户机在租用期 过半 时开始尝试续租。

租用期可以设置,而且是一个重要的配置参数。租用期的范围可以从几分钟到几天(一般不设置“无限”)。找到租用期最佳的数值需要对客户机数量、地址池大小和地址稳定性因素做出权衡。

一般来说,租用期长可以提供更稳定的地址和减少续租请求(降低网络开销),但地址池可能会因为释放不及时导致很快用完。

租用期短则相反,可以提供更灵活的地址池,但稳定性减小,网络流量负荷增大。常见的默认值是 12 ~ 24 小时。

服务器分配给客户机的四要素和其他信息,以及租用期,都会储存在持久性储存器(非易失性内存或硬盘)中,如果 DHCP 服务器重启后运行良好,租约将保持完好。

4# DHCP 过程

一个并没有配置过的客户机通过 DHCP 服务器获取“四要素”的过程如下:

  1. 客户机发出一个 DHCP 请求广播(DHCPDISCOVER),从 0.0.0.0:68 发送到 255.255.255.255:67
  2. 收到这个广播的每个 DHCP 服务器都将响应一个 DHCPOFFER 消息,这个消息包含:
    1. 提供给该客户机的 IP 地址
    2. DNS 服务器的 IP 地址
    3. 子网掩码
    4. 租用时间和重新绑定时间,上面已经过,重新绑定时间一般等于租用时间除以 2。
    5. 一些其他的选项或服务
  3. 当接收到多台 DHCP 服务器的 DHCPOFFER 之后,客户机选择一个其中的一个,广播一个 DHCPREQUEST 消息通知所有 DHCP 服务器。这个 DHCPREQUEST 包含以下内容:
    1. 选定的 IP,并将这个 IP 作为 DHCPREQUEST 消息的发送方 IP。
    2. 提供这个 IP 的 DHCP 服务器的标识符
  4. 与这个标识符相同的 DHCP 服务器将确定这个 IP 是否依旧可以使用,然后绑定 DHCPREQUEST 中的 IP 地址,绑定后该 DHCP 服务器将响应一个 DHCPACK 消息,通知客户机现在可使用该 IP 了。如果发现这个 IP 不能使用(例如已经分配出去了),那么会服务器会发送 DHCPNAK 消息,客户机收到消息后 重试 。其他的 DHCP 服务器发现这个标识符与自己的标识符不同,则清除该请求相关的状态(释放)。
  5. 客户机收到 DHCPACK 之后,也会探测网络以确保获得的这个地址未被使用(例如向该 IP 发送一个 ARP)。如果发现已经被使用了,客户机就不能使用这个地址,会发送一个 DHCPDECLINE 消息告知服务器这个地址我不能使用。然后经过默认的 10 秒 延迟后,客户机将 重试

如果客户机已经有了一个 IP 地址,仅仅希望通过 DHCP 实现续租,该客户机可能跳过 DHCPDISOCVER/DHCPOFFER 阶段,直接发起 DHCPREQUEST 消息请求当前正在使用的 IP 地址。

5# DHCP Snooping

可以用来作为 DHCP 服务器的设备有很多,Windows Server、Linux、IP分享器、虚拟机等都可以作为 DHCP 服务器。另外私接路由器也是普遍会出现的问题。简单的说,DHCP Snooping 的重要作用就是防止局域网内私接路由器(非法 DHCP 服务器)导致的 IP 地址冲突和 ARP 污染。

DHCP Snooping 技术是 DHCP 安全特性,当交换机开启了 DHCP-Snooping后,会对DHCP报文进行侦听,并可以从接收到的 DHCPREQUEST 或 DHCPACK 报文中提取并记录 IP 地址和 MAC 地址信息。另外,DHCP-Snooping 允许将某个物理端口设置为信任端口或不信任端口。信任端口可以正常接收并转发 DHCPOFFER 报文,而不信任端口会将接收到的 DHCPOFFER 报文丢弃。这样,可以完成交换机对假冒 DHCP 服务器的屏蔽作用,确保客户端从合法的 DHCP 服务器获取 IP 地址。

在 Cisco 交换机上,可以通过如下命令配置 DHCP Snooping:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch(config)# ip dhcp snooping

/*在Vlan10启用dhcp snooping
switch(config)# ip dhcp snooping vlan 10

/*dhcp包的转发速率,超过后接口就shutdown,默认不限制;
switch(config-if)# ip dhcp snooping limit rate 10

/*这样这个端口就变成了信任端口,信任端口可以正常接收并转发DHCP Offer报文,不记录ip和mac地址的绑定,默认是非信任端口
switch(config-if)# ip dhcp snooping trust

/*这样可以静态ip和mac一个绑定;
switch# ip dhcp snooping binding 0009.3452.3ea4 vlan 7 192.168.10.5 interface gi1/0/10

/*显示DHCP探测状态*/
switch# show ip dhcp snooping
0%