某组织一旦获得了一个地址块,它就可以为本组织内的主机与路由器接口逐个分配 IP 地址。系统管理员通常手动配置路由器接口的 IP 地址(远程通过网络管理工具配置),主机地址也能手动配置,但是这项任务通常更多地是使用动态主机配置协议(DynamicHost Configuration Protocol, DHCP)来完成。
DHCP 协议
主机可以动态地从 DHCP 服务器获取 IP 地址、子网掩码、默认网关地址(第一条路由器地址)、本地 DNS 服务器的地址(可能不在该子网内)。DHCP 网络管理员能够配置 DHCP,以使某主机每次与网络连接时能得到一个相同的 IP 地址,或者被分配一个临时的 IP 地址。
DHCP 是一个 即插即用协议(plug-and-play protocol),能将主机连接进一个网络的网络相关方面的自动能力。DHCP 服务器一般是运行在路由器中的。
DHCP 是一个 应用层协议,采用 客户-服务器(CS)结构。客户通常是新加入的主机,它要获得包括自身使用的 IP 地址在内的网络配置信息。最简单的场合下,每个子网将具有一台 DHCP 服务器;如果在某子网中没有 DHCP 服务器,则需要一个 DHCP 中继代理(通常是一台路由器),该代理知道用于该网络的 DHCP 服务器的地址。
DHCP 是一个 4 个步骤的过程(都采用本网内广播的方式),其中 yiaddr
(表示“你的因特网地址”之意)指示被分配给该新到达客户的地址:
- DHCP 服务器发现。一台新到的主机的首要任务是发现一个与其交互的 DHCP 服务器,通过 DHCP 发现报文来完成。客户在 UDP 分组中向端口 67 发送该发现报文,由于主机不知道 DHCP 服务器地址,DHCP 客户生成包含 DHCP 发现报文的 IP 数据报,其中使用本网广播地址
255.255.255.255
作为目的地址,并使用0.0.0.0
作为源地址(在本网内表示本主机),并包含一个事务ID(transaction ID)。DHCP 客户将该 IP 数据报传递给链路层,封装链路层数据帧,源 MAC 地址为该主机网卡的 MAC 地址,目的 MAC 地址为FF-FF-FF-FF-FF-FF
,进行链路层广播。 - DHCP 服务器提供。DHCP 服务器收到一个 DHCP 发现报文时,用一个 DHCP 提供报文向客户作出响应。DHCP 服务器生成包含 DHCP 提供报文的 IP 数据报,仍使用本网广播地址
255.255.255.255
作为目的 IP 地址。由于 DHCP 服务器已经知道客户机网卡的 MAC 地址,所以不需要进行链路层广播,所构造的数据帧中源 MAC 地址为路由器连接到该网络时接口的 MAC 地址,目的 MAC 地址为发送 DHCP 请求主机网卡的 MAC 地址。每台服务器提供的报文包含有收到的发现报文的事务ID(transaction ID)、向客户推荐的 IP 地址(yiaddr)、网络掩码以及 IP 地址租用期(lifetime)等。因为在子网中可能有多个 DHCP 服务器,该客户也许会发现它能在几个提供者中进行选择。 - DHCP 请求。客户从服务器中选择一个,并向选中的服务器提供一个 DHCP 请求报文进行响应,回显配置参数。至此,客户才真正的向某个 DHCP 服务器发起获取 IP 地址的请求,所以还没有进行配置,所发送数据报的源地址仍是
0.0.0.0
,注意目的 IP 地址仍然是本网广播地址255.255.255.255
(这是为了通知其他的 DHCP 服务器已确定从某个 DHCP 服务器申请 IP,其他服务器可以收回它们预分配给该客户的 IP,按这种说法,还是需要链路层广播)。 - DHCP ACK。服务器用 DHCP ACK 报文对 DHCP 请求报文进行响应,证实所要求的参数。客户一旦收到 DHCP ACK 后,交互便完成了,并且该客户能够在租用期内使用 DHCP 分配的 IP 地址。
因为客户可能在该租用期超时后还希望使用这个地址,所以 DHCP 还提供了一种机制以允许客户更新它对一个 IP 地址的租用。