一.DHCP 服务器的用途
DHCP (Dynamic Host Configuration Protocol) 服务器,可以自动的将网络参数正确的分配给网域中的每部计算机, 让客户端的计算机可以在开机的时候就立即自动的设定好网络的参数值,这些参数值可以包括了 IP、netmask、network、gateway 与 DNS 的地址等等。
二.DHCP 协议的运作方式
DHCP 通常是用于局域网络内的一个通讯协议,他主要藉由客户端传送广播封包给整个物理网段内的所有主机, 若局域网络内有 DHCP 服务器时,才会响应客户端的 IP 参数要求。所以DHCP 服务器与客户端是应该要在同一个物理网段内的。 整个 DHCP 封包在服务器与客户端的来来回回情况:
说明:
1.客户端:利用广播封包发送搜索 DHCP 服务器的封包:
若客户端网络设定使用 DHCP 协议取得 IP (在 Windows 内为『自动取得 IP』),则当客户端开机或者是重新启动网络卡时, 客户端主机会发送出搜寻 DHCP 服务器的 UDP 封包给所有物理网段内的计算机。此封包的目标 IP 会是 255.255.255.255, 所以一般主机接收到这个封包后会直接予以丢弃,但若局域网络内有 DHCP 服务器时,则会开始进行后续行为。
2.服务器端:提供客户端网络相关的租约以供选择:
DHCP 服务器在接收到这个客户端的要求后,会针对这个客户端的硬件地址 (MAC) 与本身的设定数据来进行下列工作:
到服务器的登录文件中寻找该用户之前是否曾经用过某个 IP ,若有且该 IP 目前无人使用,则提供此 IP 给客户端;
若配置文件针对该 MAC 提供额外的固定 IP (static IP) 时,则提供该固定 IP 给客户端;
若不符合上述两个条件,则随机取用目前没有被使用的 IP 参数给客户端,并记录下来。
总之,服务器端会针对客户端的要求提供一组网络参数租约给客户端选择,由于此时客户端尚未有 IP ,因此服务器端响应的封包信息中, 主要是针对客户端的 MAC 来给予回应。此时服务器端会保留这个租约然后开始等待客户端的回应。
3.客户端:决定选择的 DHCP 服务器提供的网络参数租约并回报服务器:
由于局域网络内可能并非仅有一部 DHCP 服务器,但客户端仅能接受一组网络参数的租约。 因此客户端必需要选择是否要认可该服务器提供的相关网络参数的租约。当决定好使用此服务器的网络参数租约后, 客户端便开始使用这组网络参数来设定自己的网络环境。此外,客户端也会发送一个广播封包给所有物理网段内的主机, 告知已经接受该服务器的租约。此时若有第二台以上的 DHCP 服务器,则这些没有被接受的服务器会收回该 IP 租约。至于被接受的 DHCP 服务器会继续进行底下的动作。
4.服务器端:记录该次租约行为并回报客户端已确认的响应封包信息:
当服务器端收到客户端的确认选择后,服务器会回传确认的响应封包,并且告知客户端这个网络参数租约的期限, 并且开始租约计时。该次租约何时会到期而被解约:
客户端脱机:不论是关闭网络接口 (ifdown)、重新启动 (reboot)、关机 (shutdown) 等行为,皆算是脱机状态,这个时候 Server 端就会将该 IP 回收,并放到 Server 自己的备用区中,等待未来的使用;
客户端租约到期:前面提到 DHCP server 端发放的 IP 有使用的期限,客户端使用这个 IP 到达期限规定的时间,而且没有重新提出 DHCP 的申请时,就需要将 IP 缴回去!这个时候就会造成断线。但用户也可以再向 DHCP 服务器要求再次分配 IP 。
其他:
1.DHCP 服务器给予客户端的 IP 参数为固定或动态:
固定 (Static) IP:
只要客户端计算机的网络卡不换掉,那么 MAC 肯定就不会改变,由于 DHCP 可以根据 MAC 来给予固定的 IP 参数租约,所以该计算机每次都能以一个固定的 IP 连上 Internet动态 (dynamic) IP:
Client 端每次连上 DHCP 服务器所取得的 IP 都不是固定,都直接经由 DHCP 所随机由尚未被使用的 IP 中提供。
2.关于租约所造成的问题与租约期限:
既然有租约时间,那么是否代表我用 DHCP 取得的 IP 就得要手动的在某个时间点去重新取得新的 IP 呢?不需要!因为目前的 DHCP 客户端程序大多会主动的依据租约时间去重新申请 IP (renew) 的!
3.强制linux DHCP 客户端重新获取IP:
$ sudo dhclient -r //release ip 释放IP
$ sudo dhclient //获取IP