计算机网络我也连载了很多篇了,大家可以在我的公众号「程序员cxuan」 或者我的 github 系统学习。 计算机网络第一篇,聊一聊网络基础 :计算机网络基础知识总结 计算机网络第二篇,聊一聊 TCP/IP 基础:TCP/IP 基础知识总结 计算机网络第三篇,这些应用层协议你也应该知道:拿下计网协议后,我就是公园里最靓的仔 计算机网络第四篇,这篇文章写的时间很长了,图文精美,非常值得花时间阅读:40 张图带你搞懂 TCP 和 UDP 计算机网络第五篇,网络层之路由器的基本概念:路由器你竟然是这样的... 计算机网络第六篇,了解一下 IP 基础知识的概念:IP 基础知识总结 计算机网络第七篇,全方位了解一下网络层的知识:我画了 40 张图就是为了让你搞懂计算机网络层 计算机网络第八篇,了解一下 ARP 协议是什么:ARP,这个隐匿在计网背后的男人 计算机网络第九篇,DNS 协议是面试经常会考到的点,这篇带你深入了解一下 DNS 协议:万字长文爆肝 DNS 协议! 计算机网络第十篇 Ping 的工作原理你懂了,那 ICMP 你懂不懂? 哈喽小伙伴们大家好啊,这里是 cxuan 计算机网络连载系列的文章第 11 篇,本篇文章我们来聊一聊 DHCP 协议。在聊之前,先想象一个场景。 你现在站在地铁上或者坐在办公室中,你的手机也好,电脑也好都有一个 电脑配置这些还好,直接咔咔咔的配置完了,如果你用的是手机,那么你需要点到 IP 地址,输入 IP 地址,点到子网掩码,输入子网掩码,点到默认路由,输入路由,点到 DNS 服务器,输入 DNS 服务器 ...... 这玩意这么麻烦啊,恰好你刚配置完,领导叫你开会,得嘞,刚配置好的地址白瞎了。换了一个环境,需要重新配置 IP 地址,于是你把上面的步骤再重复了一遍,这时候散会了,然后你炸了。。。。。。
上面这段描述最让人恼火的就是你需要手动配置 IP 地址,woc,为啥不能设置成自动配置 IP 地址呢?谁说不能的,能!那就是用 认识 DHCP
DHCP 与 IP 密切相关,它是 IP 网络上所使用的协议。如果你想要使用 DHCP 提供服务的话,那么在整条通信链路上就需要
DHCP 服务器现在,你不需要手动配置 IP 地址,也不再需要管理 IP 地址了,管理权已经移交给了 DHCP 服务器,DHCP 服务器会维护 IP 地址池,在网络上启动时会将地址租借给启用 DHCP 的客户端。 由于 IP 地址是动态的(临时分配)而不是静态的(永久分配),因此不再使用的 IP 地址会自动返回 IP 地址池中进行重新分配。
网络管理员负责建立 DHCP 服务器,并以租约的形式向启用 DHCP 的客户端提供地址配置,啊,既然不需要我管理,那就很舒服了~ 好了,现在你能舒舒服服的开发了,你用 postman 配了一条 192.168.1.4/x/x 的接口进行请求,请求能够顺利进行,但是过了一段时间后,你发现 192.168.1.4/x/x 这个接口请求不通了,这是为啥呢?然后你用 其实,这也是一个 DHCP 服务器的一个功能,DHCP 服务器通常为每个客户端分配一个唯一的动态 IP 地址,当该 IP 地址的客户端租约到期时,该地址就会更改。 唯一意思说的就是,如果你手动设置了一个静态 IP,同时 DHCP 服务器分配了一个动态 IP,这个动态 IP 和静态 IP 一样,那么必然会有一个客户端无法上网。
虽然 DHCP 服务器能提供 IP 地址,但是他怎么知道哪些 IP 地址空闲,哪些 IP 地址正在使用呢? 实际上,这些信息都配置在了
这些参数主要包括主机名(Host name)、DHCP 客户端(DHCP client)、域名(Domain name)、IP 地址IP address)、网关(Netmask)、广播地址(Broadcast address)、默认路由(default rooter)。
好了,现在你知道 DHCP 服务器都需要保存哪些信息了,并且看过上面的内容,你应该知道一个 DHCP 的组件有哪些了,下面我们就来聊一聊 DHCP 中都有哪些组件,这些组件缺一不可。 DHCP 的组件使用 DHCP 时,了解所有的组件很重要,下面我为你列出了一些 DHCP 的组件和它们的作用都是什么。
现在 DHCP 的组件你了解后,下面我就要和你聊聊 DHCP 的工作机制了。 DHCP 工作机制在聊 DHCP 工作机制前,先来看一下 DHCP 的报文消息 DHCP 报文DHCP 报文共有一下几种:
DHCP 的工作机制比较简单,无非就是客户端向服务器租借 IP ,服务器提供 IP 给客户端的这个过程呗。嗯,你很聪明,大致是这样的,不过有一些细节需要注意下,下面我通过两张图来和你聊一下。 关于从 DHCP 中获取 IP 地址的流程,主要分为两个阶段。 第一个阶段是 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 客户端做好选择后,它就会发送 DHCPREQUEST 消息并进入 在处于 Requesting 状态下的客户端很可能接受发送过来的 DHCPACK 消息,获取超时时间 在第一个计时器 T1 到期时,客户端会进入 如果没有收到 ACK 那么 T2 会最终过期进入 DHCP 冲突现在我们讨论一下 DHCP 冲突的问题,DHCP 冲突其实就是 IP
造成这种情况的原因有很多,这里我列举两个可能出现的情况:
当检测到 IP 冲突时,通常 Windows 系统和 Mac 系统会弹出 IP 冲突的弹窗。 DHCP 中继代理常规家庭网络(土豪除外)中大多数都只有一个 如上图所示,存在两个网段 A 和网段 B,DHCP 客户机和 DHCP 服务器不在一个网段内,所以我们在通信链路上架设了一个中继代理,DHCP 客户机通过访问中继代理以达到访问 DHCP 服务器的目的。 使用这种方式,我们不再需要在每个网段都设置一个 DHCP 服务器,只需要在每个网段架设一个中继代理即可。它可以设置 DHCP 服务器的 IP 地址,从而可以在 DHCP 服务器上为每个网段注册 IP 地址的分配范围。 DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,而 DHCP 中继代理在收到这个广播包之后再以单播的形式发送给 DHCP 服务器。服务器收到该包以后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包发送给 DHCP 客户端。 DHCP 认证我们总是假想所有情况都能够顺利进行,害怕出问题,这也许意味着我永远只是个初级程序员吧。我们上面探讨的 DHCP 服务器都是合理的、合法的,但是互联网是一把双刃剑,不是所有人都是合法公民。如果假设了一个未经授权的 DHCP 服务器怎么办?它很可能会对网络造成影响。 为了避免这些问题,在 [RFC3118] 中指定了一种认证 DHCP 消息的方法。 它定义了一个 DHCP 选项,即Authentication 选项,如下所示 认证选项的主要目的就是确定 DHCP 消息是否来自一个授权的发送方。 身份验证的代码(code)属性值是 90,而长度(Length)给出了选项中的字节数(不包括代码和长度字段的字节)。如果协议(Protocol)和算法(Algorithm)属性被设置为 0 ,则 我们上面聊到的只是其中的一种,还有一种更安全的方法是涉及所谓的 虽然 DHCP 认证能够确保安全性,但是它没有被广泛使用,原因有两点:
总结这篇文章我和你探讨了计算机网络中一个比较容易忽视的概念,为什么说他容易忽视呢?因为我们平常开发过程中基本上不会管 IP 地址的配置的,也就是环境搭建的时候会用到一些,但是要系统学习计算机网络的话,DHCP 的重要性不可忽视,DHCP 包括工作机制、DHCP 报文消息,DHCP 状态机、DHCP 认证这些都是需要你了解并掌握的。 另外,添加我的微信 becomecxuan,加入每日一题群,每天一道面试题分享,更多内容请参见我的 Github,成为最好的 bestJavaer,已经收录此篇文章,详情见原文链接。 我自己肝了六本 PDF,微信搜索「程序员cxuan」关注公众号后,在后台回复 cxuan ,领取全部 PDF,这些 PDF 如下 |
|