点击蓝色“程序员cxuan”关注我
添加“星星”以便及时接收最新文章
大家好,这是cxuan计算机网络系列文章的第11篇,在这篇文章中,我们来聊聊DHCP协议,在聊之前,先想象一个场景。
你现在站在地铁上或者坐在办公室里,你的手机或者电脑都有一个IP地址,如果你手动输入这个IP地址,你需要写下面这些东西……
在电脑上配置这些还好,一眨眼就能搞定。如果用手机,就需要点IP地址,输入IP地址,点子网掩码,输入子网掩码,点默认路由,输入路由,点DNS服务器,输入DNS服务器……这样好麻烦啊。刚配置完留学之路,老板就叫你去开会,刚刚配置的地址就浪费了。你换环境,又需要重新配置IP地址,于是又重复上述步骤。此时,会议结束了,你手忙脚乱……
我们还为您节省了配置错误的可能性。
上面的描述最让人恼火的就是需要手动配置IP地址。哇塞,为啥不能设置自动配置IP地址呢?谁说不能设置的?没错!那就是使用DHCP,也就是我们下面要讲的。
了解 DHCP
DHCP 是动态主机配置协议 ( Host ) 的缩写,DHCP 可以自动设置 IP 地址,并统一管理 IP 地址分配。这意味着,无论你是在开会还是在办公桌前工作,都可以省去手动配置 IP 地址的繁琐步骤。同时,DHCP 也大大降低了手动分配 IP 地址导致出错的几率。
DHCP与IP关系密切,是IP网络上使用的协议。如果要使用DHCP提供服务,整个通信链路上都需要有DHCP服务器。连接到网络上的设备使用DHCP协议向DHCP服务器申请IP地址,DHCP服务器会为设备分配一个唯一的IP地址。
除了 IP 地址,DHCP 服务器还会告诉您子网掩码、默认路由和 DNS 服务器。
DHCP 服务器
现在,您不需要手动配置 IP 地址,也不再需要管理 IP 地址,管理工作已转移到 DHCP 服务器,该服务器负责维护 IP 地址池并在启用 DHCP 的客户端在网络启动时将地址出租给它们。
由于 IP 地址是动态的(临时分配)而不是静态的(永久分配),因此不再使用的 IP 地址会自动返回到 IP 地址池以供重新分配。
那么谁维护 DHCP 服务器?
网络管理员负责架设DHCP服务器,并以租约的形式向启用DHCP的客户端提供地址配置。啊,既然不用我管理了,那就舒服多了~
OK,现在你可以舒舒服服地开发了。你用 192.168.1.4/x/x 这个接口发出请求,请求可以顺利进行。但是过了一段时间,你发现 192.168.1.4/x/x 这个接口的请求不起作用了。为什么?然后你查看自己的 IP 地址,发现 IP 地址已经变成了 192.168.1.7。怎么我正在使用的时候 IP 地址就变了?DHCP 就是个垃圾,一个破玩意儿!!@#¥%¥%……¥%
其实这也是DHCP服务器的一个功能,它通常会给每一个客户端分配一个唯一的动态IP地址,当客户端对该IP地址的租约到期后,该地址就会改变。
它唯一的意义在于如果你手动设置了一个静态IP,而DHCP服务器却分配了一个动态IP,并且这个动态IP和静态IP相同的话,那么必然会出现其中一个客户端无法上网的情况。
我也遇到过这种情况,我虚拟机配置的静态IP是192.168.1.8,手机也是用DHCP配置的192.168.1.8的IP地址,这时候我的虚拟机连不上网络,连上网络后就连不上虚拟机了,检查了一下,发现是IP地址冲突了...
DHCP服务器虽然可以提供IP地址,但是它如何知道哪些IP地址是空闲的,哪些IP地址正在使用呢?
其实这些信息都是在数据库中配置的,我们来看看DHCP服务器维护了哪些信息。
这些参数主要包括主机名(Host name)、DHCP客户端(DHCP)、域名(name)、IP地址(IP)、网关()、广播地址()、默认路由()。
OK,现在你知道了DHCP服务器需要保存哪些信息,看完上面的内容,你应该也知道DHCP有哪些组件了。现在我们来说说DHCP中都有哪些组件,这些组件一个都不能少。
DHCP 的组件
使用 DHCP 时,了解所有组件非常重要。下面我列出了一些 DHCP 组件及其功能。
现在您了解了 DHCP 的组件,我将向您介绍 DHCP 的工作原理。
DHCP 的工作原理
在讲DHCP工作机制之前我们先来了解一下DHCP报文。
DHCP 消息
DHCP 消息有以下几种类型:
DHCP的工作机制比较简单,无非就是客户端向服务器租用一个IP,服务器把这个IP提供给客户端的过程。嗯,你很聪明,大致就是这样,不过还是有些细节需要注意,我通过两张图跟大家说一下。
DHCP获取IP地址的过程主要分为两个阶段。
第一阶段是DHCP查找包阶段
搜索包阶段主要分为两个步骤:第一步是DHCP 包,第二步是DHCP offer包。
DHCP客户端在通讯链路上发起广播,查看链路上是否有可以提供DHCP数据包的服务器。然后通讯链路上的每个节点都会检查自己是否可以提供DHCP数据包。此时DHCP服务器表示自己可以提供DHCP数据包,然后DHCP就会沿着通讯链路将DHCP数据包发回给DHCP客户端。
第二阶段是DHCP请求阶段。
DHCP请求数据包也分为两步:第一步是DHCP请求数据包,第二步是DHCP确认数据包。
DHCP客户端在通讯链路上发起DHCP请求包,请求包主要告诉DHCP服务器自己想使用上一步提供的网络设置,DHCP服务器随后向DHCP客户端发送确认包,表示允许DHCP客户端使用第二步发送的网络设置。
至此,DHCP网络设置完成,接下来就可以在通信链路上与主机之间进行TCP/IP通信了。
当不再需要该 IP 地址时,可以发送 DHCP 释放数据包(DHCP )来释放它。另外,DHCP 设置中通常有一个租约时间设置。DHCP 客户端可以在这个时间限制内发送 DHCP 请求数据包,通知自己想要延长这个期限。
DHCP 状态机
上面我们知道DHCP会发送几个请求包,我们知道动作总是伴随着状态的变化,DHCP也是一样,当DHCP发送/接收各种包的时候,它的状态也在随之变化,DHCP协议可以在客户端和服务器上运行状态机,状态决定了协议接下来要处理的消息类型。
状态之间的转换(箭头)是由于接收和发送消息或计时器到期而发生的。以下是 DHCP 的状态轮换图。
客户端一开始没有任何消息,处于INIT状态。然后客户端在通信链路上发起广播DHCP。
在选择状态下,客户端收集消息,直到确定要使用的地址和服务器。
一旦 DHCP 客户端做出选择,它就会发送一条消息并进入 DHCP 状态,在该状态下,它很可能会收到不需要的 ACK 响应。如果在此状态下未找到合适的地址,客户端将发送并恢复到 INIT 状态,但这种情况不太可能发生。
处于该状态的客户端有可能接受发送的消息,获得超时时间T1和T2,然后进入Bound状态,在该状态下该地址可以使用,直到过期。
当第一个定时器T1到期后,客户端进入续约状态,再次尝试建立租约时间,如果收到新的ACK消息,则表示续约成功,然后返回到Bound状态。
如果没有收到 ACK,T2 最终会过期并进入该状态。进入此状态的客户端会重新尝试获取地址。如果最终租约过期,客户端必须放弃租用的地址,并且如果没有其他地址或网络连接可用,客户端会断开连接。
DHCP 冲突
现在我们来讨论一下DHCP冲突的问题。DHCP冲突其实就是IP重复,当一个子网内有两台或多台主机配置了相同的IP地址时,就会发生IP冲突,这种情况的后果可能是两台冲突的主机混在一起,一台主机可能会收到另一台主机的数据包。
那么造成这种情况的原因是什么呢?
造成这种情况的原因有很多。以下是两个可能的原因:
当检测到IP冲突时,系统通常会和Mac系统一样弹出IP冲突弹窗。
DHCP 中继代理
大部分常规家庭网络(富人家庭除外)都只有一个以太网,也就是一个局域网段,一台 DHCP 服务器完全可以满足局域网内客户端的需求。但在更复杂的网络中,比如企业或者学校,一台 DHCP 服务器显然是不够的。因此这种情况下往往需要对 DHCP 进行统一管理,具体实现方式可以是通过 DHCP 中继代理来转发 DHCP 流量,如下图所示。
如上图所示,有A、B两个网段,DHCP客户端与DHCP服务器不在同一网段,因此我们在通讯链路上设置中继代理,DHCP客户端通过访问中继代理来访问DHCP服务器。
采用这种方法,我们不再需要在每个网段上都架设一台DHCP服务器,而只需要在每个网段上架设一个中继代理,它可以设置DHCP服务器的IP地址,这样就可以将每个网段的IP地址分配范围都注册到DHCP服务器上。
DHCP客户端向DHCP中继代理发送DHCP请求报文,DHCP中继代理收到广播报文后,以单播形式发送给DHCP服务器,DHCP服务器收到报文后,返回应答给DHCP中继代理,DHCP中继代理再将报文发送给DHCP客户端。
DHCP 身份验证
我们总是假设一切都会顺利,害怕出现问题。这可能意味着我永远只是一名初级程序员。上面我们讨论的 DHCP 服务器都是合理合法的,但互联网是一把双刃剑,并不是每个人都是合法公民。如果假设了一个未经授权的 DHCP 服务器怎么办?很可能会影响网络。
为了避免这些问题,在[]中指定了一种对DHCP消息进行身份验证的方法。它定义了一个DHCP选项,,如下所示
认证选项的主要目的是确定 DHCP 消息是否来自授权发送者。
身份验证代码属性值为 90,() 给出选项中的字节数(不包括代码和长度字段的字节数)。如果 () 和 () 属性设置为 0,则身份验证信息字段将保存一个简单的共享配置令牌。只要客户端和服务器上的配置令牌匹配,就会接受该消息。
上面我们讲的只是其中一种,还有一种更安全的方法,就是所谓的延迟认证。如果协议和算法都设置为1,就表示使用延迟认证。在这种情况下,客户端的消息或消息中包含认证选项,服务器用其中或消息中包含的认证信息进行响应。这个认证信息包括消息认证码,它提供发送者的认证和消息的完整性验证。RDM 代表中继检测。中继检测包括单项增量值,只要经过代理中继,这个中继检测的值就会+1。
虽然 DHCP 身份验证可以确保安全性,但由于以下两个原因,它尚未得到广泛应用:
总结
这篇文章我跟大家讨论一个计算机网络中很容易被忽略的概念。为什么容易被忽略呢?因为我们在开发的时候通常不会关心IP地址的配置,也就是在搭建环境的时候才会用到。但是如果你想系统地学习计算机网络default是什么意思default是什么意思,DHCP的重要性是不能忽视的。DHCP包括工作机制、DHCP消息信息、DHCP状态机、DHCP认证等,这些都是你需要了解和掌握的。
超过
先前的建议
另外,cxuan整理了6个PDF,在公众号回复cxuan即可收到作者全部PDF。