DHCP 初步研究

今天研究华为题库的时候第一道题就把我难倒了,于是决定一边研究一边写博客。

一直以来使用 DHCP 是感觉理所当然,却从来没研究过是什么原理,今天就研究一下吧。

DHCP

动态主机设置协议,是 DHCP 的中文名,由 IETF 制定。使用 UDP 协议作为传输层协议,工作于 OSI 模型的应用层,是局域网中非常常用的协议或者说服务。

一般来说,面对一般用户的网络中都会配置 DHCP,本人见过的网络绝大部分都是使用 DHCP,似乎只用学校的机房是例外(本人现在没见过什么世面),小到家用的路由器所建立的小型家庭网络,大到能容纳上万人的会展中心无线网络,都是以 DHCP 为基础向终端机分发 IP 地址。试问,你能指望让你的姥姥去网络设置里去修改 IP 地址和网关吗?就算身为网络专业的学生,可以帮姥姥设置,可是能帮可能上万的同事设置吗?所以身为未来的网络管理员的本人是十分感谢发明 DHCP 的组织。

流程

DHCP 发现

这个过程的流程英语称之为 DHCP Discover,这个过程由客户端(Client)来发起,不发声的话没人知道这里有一台中断,要主动的发出请求 DHCP 服务器才会知道这有一台终端。因为自己没有 IP 地址,也不知道服务器的 IP 地址,所以在这时候要进行广播,在传输层用的是 UDP,我想这时候应该买没有办法使用 TCP 协议吧?这个应该等研究 TCP/IP 协议的时候在确定。

源 IP 为 0.0.0.0,目的 IP 为 255.255.255.255(这里是根据老师写的书,暂时还没有亲自抓包验证)。开始在这个网络中寻找 DHCP 服务器(DHCP server),如果找到,进入下一个流程,否则这个封包(PDU)被丢弃。

某种情况下 DHCP 服务器发出的消息可能会是广播的形式,但通常都是单播。

DHCP 提供

英文为 DHCP Offer,服务器收到客户端的请求,当然是要回应的了。

服务器首先会检查一下自己的配合文件,看看这台客户端是否在黑名单或者白名单中,决定给不给这个客户端分配 IP,然后再看是否有给这个客户端预留的 IP 地址(根据 MAC 地址),有的话直接按照配置文件进行返回参数,否则随机或者按照一定规则分配 IP ,然后再附上网关和 DNS 之类的参数发送回去。当然后面这种并非由管理员指定的 IP,是有时间限制的,这个时间限制称之为租约期限。

这个消息的作用有两个,一个是租用的发起,一个是租用的更新和检验。租用的发起就是赋予客户端 IP 地址。

DHCP 请求

英语称之为 DHCP Request,这一过程用于客户端确认地址是否有效,这个消息以广播的形式发出,除了告诉分配 IP 的 DHCP 服务器,还要告诉其他可能存在的 DHCP 服务器,避免把这个 IP 地址分配给其他客户端。客户端的 MAC 地址和这个 IP 地址绑定,然后写入 ARP 表中,这一过程就算完成了。

DHCP 确认

英语称之为 DHCP Acknowledge 或者 DHCP ACK,这一过程依旧是单播,消息内包含 IP 地址、网关、子网掩码、DNS 还有租期,客户端收到这个消息就代表着这 DHCP 的过程结束,客户端收到了 有关网络的配置,就可以上网了。

释放

在我所看到的教材和文档中,并没有关于释放的详细信息,只有 维基百科 上简单的一句话,那就说一说我的想法吧。

释放,顾名思义,就是把 IP 地址取消与客户端的绑定, 然后放回地址池中,然后等待下一次有客户端申请 IP 地址,等待着被从地址池中命中,然后再分配给某个客户端。我的想法是这样的,如果您对此有异议的话欢迎讨论。

DHCP 消息格式

这里只写一下重要的内容,毕竟还有不少内容是我现在不了解也不需要了解的,我想了解下面的内容应该是够用了。

最后

跨越网络的 DHCP 暂时还没有研究,时间有限,暂时还用不到,所以以后有时间在研究。

参考

Linux 操作系统教程 主编:刘百峰 宋翠

动态主机设置协议

CCNA Exploration 4.0 接入 WAN


发布于 2017-04-23 | 吉ICP备17001717号-1 | © Copyright 2016-2019, Luya Tsai