37 张图详解 DHCP :给你 IP 地址的隐形人~

沙海 2021年5月29日06:28:56Java评论121字数 7736阅读25分47秒阅读模式
摘要

37 张图详解 DHCP :给你 IP 地址的隐形人~ Java面试那些事儿

37 张图详解 DHCP :给你 IP 地址的隐形人~

Java面试那些事儿 文章源自JAVA秀-https://www.javaxiu.com/27180.html

以下文章来源于网络技术平台,作者网工Fox文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

网络技术平台文章源自JAVA秀-https://www.javaxiu.com/27180.html

混迹网络行业10余年,现为世界50强金融科技公司网络专家。分享计算机网络知识,让学习变得更有趣,让网络变得更简单。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

大家好,我是D哥文章源自JAVA秀-https://www.javaxiu.com/27180.html

点击关注下方公众号,Java面试资料 都在这里

文章源自JAVA秀-https://www.javaxiu.com/27180.html

来源公众号:网络技术平台文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

上帝视角文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP 出现

文章源自JAVA秀-https://www.javaxiu.com/27180.html

电脑或手机需要 IP 地址才能上网。大刘有两台电脑和两台手机,小美有一台笔记本电脑、一台平板电脑和两台手机,老王、阿丽、敏敏也有几台终端设备。如果为每台设备手动配置 IP 地址,那会非常繁琐,一点儿也不方便。特别是手机、笔记本电脑、平板电脑等设备,每移动到一个新的地方,接入不同的网络,都要重新设置 IP 地址,实在是太麻烦了。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

手动配置文章源自JAVA秀-https://www.javaxiu.com/27180.html

于是就有了 DHCP 协议,会自动配置设备的网络参数,包括 IP 地址、子网掩码、网关地址、DNS 服务器等,替代手动配置。还能统一 IP 地址分配,方便网络管理。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP动态获取文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP 简介

文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP 协议是从 BOOTP 协议发展而来。但 BOOTP 运行在相对静态的环境中,每台设备配置专门的 BOOTP 参数文件,该文件会在相当长的时间内保持不变。DHCP 从以下两方面对 BOOTP 进行了扩展:文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP 允许设备动态地获取 IP 地址,而不是静态指定每台主机地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP 能够分配其它的配置参数,客户端仅用一个消息就获取它所需要的所有配置信息。文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

动态分配文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

大刘他们的设备使用 DHCP 功能后,只要连接到网络,就可以进行 TCP/IP 通信。对于路由器和交换机,通常是手动配置 IP 地址等参数。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP 是一种 Client/Server 模式的网络协议,由 DHCP Client 向 DHCP Server 提出配置申请,DHCP Server 返回为 DHCP Client 分配的配置信息。这里的 Client 和 Server 是应用程序,可以运行在电脑、服务器、路由器等设备上。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP应用程序文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

举个栗子:文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

大刘的电脑开机后,自动运行 DHCP Client ,DHCP Client 主动向其它设备上的 DHCP Server 提出请求,DHCP Server 根据预先配置的策略,返回相应 IP 配置信息,DHCP Client 使用获得的 IP 配置信息与其它设备进行通信。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

举个栗子文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP 分配机制

文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP 提供了两种地址分配机制,可以根据网络需求为不同的 Client 选择不同的分配策略。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • 动态分配机制:通过 DHCP 为 Client 分配一个有使用期限的 IP 地址。如果 Client 没有及时续约,到达使用期限后,这个地址可能会被其它 Client 使用。绝大多数 Client 使用的都是这种动态分配的地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • 静态分配机制:通过 DHCP 为特定的 Client 分配固定的 IP 地址。固定 IP 地址可以永久使用, Client 通常是打印机、服务器等设备。文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

动态和静态分配文章源自JAVA秀-https://www.javaxiu.com/27180.html

在实际情况中,我们发现 DHCP Client 重启后,也能获得相同的 IP 地址。DHCP Server 为 DHCP Client 分配 IP 地址时,采用如下的顺序:文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

  1. DHCP Server 中与 DHCP Client 的 MAC 地址静态绑定的 IP 地址;文章源自JAVA秀-https://www.javaxiu.com/27180.html

  2. DHCP Client 曾经使用过的 IP 地址;文章源自JAVA秀-https://www.javaxiu.com/27180.html

  3. 最先找到的可用 IP 地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

如果没找到可用的 IP 地址,就依次查询超过租期、发生冲突的 IP 地址,如果找到就进行分配,否则报错处理。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

IP地址分配顺序文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP 系统组成

文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP 系统由 DHCP Server( DHCP 服务器)、DHCP Client( DHCP 客户端)、DHCP Relay( DHCP 中继)等组成。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP系统组成文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Server文章源自JAVA秀-https://www.javaxiu.com/27180.html

    DHCP Server 提供网络参数给 DHCP Client ,通常是一台提供 DHCP 服务功能的服务器或网络设备(路由器或三层交换机)。比如:家里用的无线路由器。文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP Server文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Client文章源自JAVA秀-https://www.javaxiu.com/27180.html

    DHCP Client 通过 DHCP Server获取网络参数,通常是一台主机或网络设备。比如:大刘的电脑、小美的手机。文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP Client文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Relay文章源自JAVA秀-https://www.javaxiu.com/27180.html

    通常情况下,DHCP 采用广播方式实现报文交互,DHCP 服务仅限在本地网段使用。如果需要跨网段实现 DHCP ,那么使用 DHCP Relay 技术实现。文章源自JAVA秀-https://www.javaxiu.com/27180.html

    在 DHCP Server 和 DHCP Client 之间转发跨网段 DHCP 报文的设备,通常是三层网络设备。文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP Relay文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP 基本流程

文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP 协议报文采用 UDP 方式封装,DHCP Server 侦听的端口号是 67 ,DHCP Client 的端口号是 68 。DHCP 设备通过发送和接收 UDP 67 和 UPD 68 端口的报文进行协议交互。DHCP 的基本工作流程分为 4 个阶段,即发现阶段、提供阶段、请求阶段、确认阶段。我们假设大刘的 PC 是一台新电脑,下面将描述 PC 第一次是如何通过 DHCP 获取 IP 地址的。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

PC首次获取地址的流程文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

为方便描述,DHCP Server 简称 小 S ,DHCP Client 简称 小 C 。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

1、发现阶段

文章源自JAVA秀-https://www.javaxiu.com/27180.html

小 C 在本地网段中广播一个 DHCP Discover 报文,目的寻找能够分配 IP 地址的 小 S 。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

Discover报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

2、提供阶段

文章源自JAVA秀-https://www.javaxiu.com/27180.html

本地网段的 小 S 收到 DHCP Discover 报文后,回应 DHCP Offer 报文。DHCP Offer 报文包含了可用 IP 地址和其它网络参数。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

Offer报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

小 C 通过对比 Discover 报文和 Offer 报文中的 xid 字段是否相同,来判断 Offer 报文是不是发给自己的。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

3、请求阶段

文章源自JAVA秀-https://www.javaxiu.com/27180.html

小 C 会收到 小 S 发送的 DHCP Offer 报文。如果有多个 小 S ,那么每个 小 S 都会回应 DHCP Offer 报文。通常 小 C 会选择最先收到的 Offer 报文,并广播 DHCP Request 报文来表明哪个 小 S 被选择,其余 小 S 就凉凉了。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

Request报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

如果 小 C 在一定时间后一直没收到 DHCP Offer 报文,那么它就会重新发送 DHCP Discover 报文。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

4、确认阶段

文章源自JAVA秀-https://www.javaxiu.com/27180.html

小 S 收到 DHCP Request 广播报文后,发送 DHCP Ack 报文作为回应,其中包含 小 C 的网络参数。DHCP Ack 报文和之前 DHCP Offer 报文的参数不能有冲突,否则 小 S 会回应一个 DHCP Nak 报文。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

Ack报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

当 小 C 收到 DHCP Ack 报文后,会发送免费 ARP 报文进行探测,目的地址为获得的 IP 地址,如果探测此地址没有被使用,那么 小 C 就会使用这个地址,并完成配置。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP 租期

文章源自JAVA秀-https://www.javaxiu.com/27180.html

从 DHCP 协议上看,小 S 才有 IP 地址的所有权,而 小 C 只有 IP 地址的使用权。小 S 每次给 小 C 分配一个 IP 地址时,会约定一个 IP 地址的租期,通常是 24 小时。在租期内,小 C 才能使用相应的 IP 地址。当租期到期后,小 C 将不能继续使用这个 IP 地址。当然了,在租期还没到期的时候,小 C 是可以申请续租这个 IP 地址的。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

T1 时刻是租期到一半的时候,T2 时刻是租期到 87.5% 的时候。在 T1 时刻 小 C 会单播一个 DHCP Request 报文给 小 S ,请求续租 IP 地址。如果 小 C 收到了 DHCP Ack 回应报文,则说明续租成功。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

如果直到 T2 时刻,小 C 都未收到 DHCP Ack 回应报文,那么会广播发送一个 DHCP Request 报文,继续请求续租 IP 地址。如果 小 C 收到了 DHCP Ack 回应报文,则说明续租成功。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

如果直到租期到期, 小 C 都未收到 DHCP Ack 回应报文,那么必须停止使用原来的 IP 地址。小 C 将从发现阶段开始,重新来申请一个 IP 地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

续租流程文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP Relay

文章源自JAVA秀-https://www.javaxiu.com/27180.html

动态获取 IP 地址的过程中,使用广播方式发生报文,因此 DHCP 只适用于 小 C 和 小 S 在同一个子网内的情况。如果为每个网段配置一个 小 S ,这显然太浪费了。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

实际上还有 DHCP Relay 这种角色。小 C 通过 DHCP Relay 实现跨网段与 小 S 通信,获取 IP 地址。这样,多个子网上的 小 C 可以使用同一个 小 S ,既节省成本,又方便集中管理。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP Relay文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP Relay 的工作原理如下:文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

  1. 小 C 发送 DHCP Discover 或 DHCP Request 广播报文,具有 DHCP Relay 功能的网络设备收到后,根据配置将报文单播给指定的 小 S ;文章源自JAVA秀-https://www.javaxiu.com/27180.html

  2. 小 S 进行 IP 地址的分配,单播发送给 DHCP Relay ,DHCP Relay 再将配置信息广播给 小 C ,完成对 小 C 的动态配置。文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

Relay工作原理文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP 协议报文

文章源自JAVA秀-https://www.javaxiu.com/27180.html

前面的内容有提到 DHCP 的一些报文类型,现在讲讲 DHCP 主要的 8 种报文类型。常见的 5 种报文类型有:DHCP Discover 、DHCP Offer 、DHCP Request 、DHCP Ack 和 DHCP Release ,用得少的 3 种报文类型有:DHCP Nak 、DHCP Decline 和 DHCP Inform 。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Discover 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

    它是 DHCP Client 首次接入网络,DHCP 交互过程的第一个报文,用来寻找 DHCP Server的请求报文。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Offer 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

    它是 DHCP Server 用来回应  DHCP Discover 报文的,并携带网络参数,包括:IP 地址、子网掩码、默认网关、DNS 服务器等。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Request 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

    它是 DHCP Client 发送的报文,有三种使用场景:文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • 根据策略选择相应的 DHCP Server,并回应 DHCP Offer 报文;文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Client 非首次接入网络,直接发送 DHCP Request 报文来申请之前使用过的 IP 地址等参数;文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • 当 IP 地址的租约到期后,发送 DHCP Request 进行租期更新。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Ack 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

    它是 DHCP Server 对 DHCP Request 报文的回应报文,进行最终确认。DHCP Client 收到这个报文后,才能获得 IP 地址和相应网络参数。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Nak 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

    它也是 DHCP Server 对 DHCP Request 报文的回应报文,当 DHCP Request 报文中的各个参数都正确时,回应 DHCP Ack 报文,否则回应 DHCP Nak 报文,告诉 DHCP Client 禁止使用获得的 IP 地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Decline 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

    当 DHCP Client 收到 DHCP Ack 报文后,还会发送免费 ARP 报文,确认申请的 IP 地址是否已经在网络上使用了。如果 IP 地址已经被其它 Client 使用,那么 DHCP Client 发送 DHCP Decline 报文,拒绝分配的 IP 地址,并重新向 DHCP Server 申请地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Release 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

    当 DHCP Client 想要释放获得的 IP 地址时,向 DHCP Server 发送 DHCP Release 报文,DHCP Server 收到报文后,可将这个 IP 地址分配给其它的 Client 。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Inform 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

    DHCP Client 通过手动方式获得 IP 地址后,还想向 DHCP Server 获取更多网络参数时,比如:默认网关地址、DNS 服务器地址,DHCP Client 就向 DHCP Server 发送 DHCP Inform 报文进行申请。文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP 状态机

文章源自JAVA秀-https://www.javaxiu.com/27180.html

如果把功能各异的 8 种报文串起来,就是整个 DHCP 协议交互流程。前面讲的 4 种阶段(发现、提供、请求、确认)不能完全展现出来,这就需要使用 DHCP 协议的状态机。状态指出下一步使用的报文类型,状态转换是通过报文的接收、发送或超时。下面是 Client 的状态机。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

Client状态机文章源自JAVA秀-https://www.javaxiu.com/27180.html

Client 从 INIT 状态开始,广播 DHCP Discover 报文。在选择状态时,它收到 DHCP Offer 报文,并决定使用哪个地址和 Server 。做出选择后,通过 DHCP Request 报文进入请求状态。如果分配的地址和曾使用过的地址不一致,那么回应 DHCP Nak 报文进行拒绝,并返回 INIT 状态;如果分配的地址已经被占用,那么回应 DHCP Decline 报文进行拒绝,也返回到 INIT 状态。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

通常是收到一个需要的地址,回应 DHCP Ack 报文,获得租期超时值 T1 和 T2 ,并进入绑定状态,这个时候就可以使用这个地址直到租期到期。当 T1 到期时,进入更新状态并进行续租申请。如果续租成功,那么可以收到 DHCP Ack 报文,并返回到绑定状态;如果续租不成功,那么在 T2 到期时,再次进行续租申请。如果租期最终到期,那么 Client 将禁止使用所租用的地址,并返回到 INIT 状态。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP 网络实战

文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP 协议是为解决网络问题而生,现在我们就来模拟实际环境,动手操作,验证下 DHCP 的功能。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP Server 示例

文章源自JAVA秀-https://www.javaxiu.com/27180.html

网络拓扑

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

网络拓扑图文章源自JAVA秀-https://www.javaxiu.com/27180.html

实验要求

文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • RT(路由器)配置 DHCP Server ,PC 动态获取 IP 地址等网络参数文章源自JAVA秀-https://www.javaxiu.com/27180.html

操作步骤

文章源自JAVA秀-https://www.javaxiu.com/27180.html

配置思路:文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

  1. 在 RT 上开启 DHCP 功能,文章源自JAVA秀-https://www.javaxiu.com/27180.html

  2. 创建一个地址池,文章源自JAVA秀-https://www.javaxiu.com/27180.html

  3. 配置地址池的相关参数,文章源自JAVA秀-https://www.javaxiu.com/27180.html

  4. 在 RT 的接口下引用地址池,实现 DHCP Server 功能。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

配置命令:文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

使用 DHCP 功能之前,先要开启 DHCP 功能。系统视图下,使用命令 dhcp enable 启动 DHCP 功能。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

动态分配 IP 地址,就需要有多个可分配的 IP 地址,使用 ip pool ip-pool-name 命令来创建全局地址池,ip-pool-name 表示地址池的名称。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

在全局地址池视图下,通过命令 network ip-address [ mask { mask | mask-length } ] 配置可分配的 IP 地址段。mask { mask | mask-length } 表示子网掩码,通常根据设备数量来确定掩码长度。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

有了 IP 地址和子网掩码,再加上默认网关,终端设备就能网络互通了。在全局地址池视图下,使用命令 gateway-list ip-address 配置网关 IP 地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

网络互通,还不能正常访问网站,需要配置 DNS 服务器,用于域名解析。在全局地址池视图下,使用 dns-list ip-address 配置 DNS 服务器的 IP 地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

地址池配置中,常用的可选命令如下,可根据需求进行选择性设置。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

lease { day day [ hour hour [ minute minute ] ]  | unlimited } :配置 IP 地址的租期,默认租期是 1 天。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

excluded-ip-address start-ip-address [ end-ip-address ] :在可分配的地址池中,设置不分配的 IP 地址。比如:地址池是 192.168.100.0/24 ,可设置 192.168.100.1 - 192.168.100.10 不参与地址分配。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

static-bind ip-address ip-address mac-address mac-address :为 Client 固定分配一个 IP 地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

配置完地址池,还需要进行引用,DHCP Server 功能就能正常使用了。在 RT 的接口下配置引用,命令为 dhcp select global 。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

配置文章源自JAVA秀-https://www.javaxiu.com/27180.html

功能验证

文章源自JAVA秀-https://www.javaxiu.com/27180.html

配置完成后,理论上是 DHCP 功能正常工作了,实际情况的话,可通过命令 display ip pool name pool-name used,查看地址池的配置情况,和地址分配情况。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

在 RT 上查看 DHCP Server 地址分配状态。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

查看RT的DHCP Server状态文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

同时也在 PC 上查看动态获取地址情况,进行双向验证。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

查看PC的IP配置文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

抓包还可以看到 DHCP 报文交互的详细过程,同时也是检验理论知识是否正确。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

抓包验证文章源自JAVA秀-https://www.javaxiu.com/27180.html

这里我们发现抓包看到的是 DHCP Offer 单播报文,而前面介绍的时候,DHCP Offer 是广播报文。其实 DHCP Offer 报文有可能是单播,也有可能是广播。文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP 在报文的标志字段有一个广播位,如果 Client 支持接收 Offer 单播报文,那么 Client 就会将发送报文中的广播位设为 0 ,否则为 1 。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP Relay 示例

文章源自JAVA秀-https://www.javaxiu.com/27180.html

网络拓扑

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

网络拓扑图文章源自JAVA秀-https://www.javaxiu.com/27180.html

实验要求

文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • DHCP Client 和 DHCP Server 在不同网段,DHCP Client 通过 DHCP Relay 获取到 IP 地址等网络参数。文章源自JAVA秀-https://www.javaxiu.com/27180.html

操作步骤

文章源自JAVA秀-https://www.javaxiu.com/27180.html

  1. PC( DHCP Client )开启 DHCP 功能;文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

PC配置文章源自JAVA秀-https://www.javaxiu.com/27180.html

  1. RT1( DHCP Relay )使用 dhcp select relay 命令开启 DHCP Relay 功能,在 G0/0/1 口下使用 dhcp relay server-ip ip-address 命令,配置 DHCP Server 的 IP 地址;文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

RT1配置文章源自JAVA秀-https://www.javaxiu.com/27180.html

  1. RT2(DHCP Server)开启 DHCP 功能,创建地址池并配置相关参数,在接口下引用地址池,实现 DHCP Server 功能。文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

RT2配置文章源自JAVA秀-https://www.javaxiu.com/27180.html

功能验证

文章源自JAVA秀-https://www.javaxiu.com/27180.html

PC 端能获取到 IP 配置,并且获取的配置正确。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

PC端验证文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

在 RT1 的 G0/0/1 抓包,查看 DHCP Client 和 DHCP Relay 的报文交互过程。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

RT1的G0/0/1抓包文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

在 RT1 的 G0/0/0 抓包,查看 DHCP Server 和 DHCP Relay 的报文交互过程。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

RT1的G0/0/0抓包文章源自JAVA秀-https://www.javaxiu.com/27180.html

# DHCP 报文格式

文章源自JAVA秀-https://www.javaxiu.com/27180.html

如果想要更深入的了解 DHCP 协议,那就要看它的报文格式。DHCP 设备通过识别报文内容,实现协议功能。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP报文格式文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • op(操作类型):表示报文的格式。当值为 1 时,表示客户端的请求报文;当值为 2 时,表示服务器的响应报文。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • htype(硬件类型):不同的硬件类型取不同的值,最常见的以太网,值是 1 。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • hlen(硬件地址长度):表示硬件地址长度,以太网的值是 6 ,也就是 MAC 地址的长度。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • hops(跳数):DHCP 报文经过的 DHCP 中继的数量。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • xid(交互 ID ):DHCP 客户端取的随机值,收到 DHCP 服务器的响应报文时,查看 xid 值是否相同,来判断报文是否是发送给自己的。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • secs(客户端启动秒数):记录 IP 地址的使用时间。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • flags(标志):广播响应标志位,当值为 0 时,表示服务器以单播形式发送响应报文;当值为 1 时,服务器以广播形式发送响应报文。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • ciaddr(客户端 IP 地址):客户端的 IP 地址,可以是分配的地址,也可以是正在使用的地址,还可以是的 0.0.0.0 。0.0.0.0 是客户端初始状态没有地址的时候,仅用于临时通信,不是有效的地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • yiaddr(你的 IP 地址):当服务器发送响应报文时,将分配给客户端的 IP 地址填入这个字段。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • siaddr(服务器 IP 地址):用来标识服务器的 IP 地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • giaddr(中继设备 IP 地址):表示 DHCP 中继的 IP 地址,服务器通过识别这个字段来判断出客户端的网段地址,从而选择合适的地址池,为客户端分配该网段的 IP 地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • chaddr(客户端硬件地址):用来标识客户端的硬件地址,当客户端发送广播发现报文时,这个字段就是自己的硬件地址。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • sname(服务器名):可选项,DHCP 服务器填写这个字段。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • file(引导文件名):可选项,DHCP 服务器填写这个字段。文章源自JAVA秀-https://www.javaxiu.com/27180.html

  • options(可选项):可选项,DHCP 客户端获取网络参数,DHCP 服务器提供网络参数,都是使用的这个字段。内容有很多,例如:租期、子网掩码、默认网关地址、DNS 服务器地址等。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

拿着 DHCP 报文格式,就可以看懂抓包获取的报文内容。文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP Discover 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

Discover报文明细文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP Offer 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

Offer报文明细文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP Request 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

Request报文明细文章源自JAVA秀-https://www.javaxiu.com/27180.html

DHCP Ack 报文文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~文章源自JAVA秀-https://www.javaxiu.com/27180.html

Ack报文明细文章源自JAVA秀-https://www.javaxiu.com/27180.html

参考:文章源自JAVA秀-https://www.javaxiu.com/27180.html

HCNA网络技术学习指南 - 华为技术有限公司文章源自JAVA秀-https://www.javaxiu.com/27180.html

路由交换技术 - 杭州华三通信技术有限公司文章源自JAVA秀-https://www.javaxiu.com/27180.html

TCP/IP详解 卷1:协议 - Kevin R.Fall文章源自JAVA秀-https://www.javaxiu.com/27180.html

高级网络技术 - 田果文章源自JAVA秀-https://www.javaxiu.com/27180.html

图解TCP/IP - 竹下隆史文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

文章源自JAVA秀-https://www.javaxiu.com/27180.html

37 张图详解 DHCP :给你 IP 地址的隐形人~热门推荐:文章源自JAVA秀-https://www.javaxiu.com/27180.html

盘点 Github 上的高仿 app 项目,B站 微博 微信等等京东面试官:你是怎么理解 MySQL 的优化原理的?新来的实习生连InputSteam转String都不会,天天在学校混日子吧简历&面试题&视频资料获取 扫描下方二维码,回复关键字【 java】
文章源自JAVA秀-https://www.javaxiu.com/27180.html
继续阅读
速蛙云 - 极致体验,强烈推荐!!!购买套餐就免费送各大视频网站会员!快速稳定、独家福利社、流媒体稳定解锁!速度快,全球上网、视频、游戏加速、独立IP均支持!基础套餐性价比很高!这里不多说,我一直正在使用,推荐购买:https://www.javaxiu.com/59919.html
weinxin
资源分享QQ群
本站是JAVA秀团队的技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定