mami mami
Home
知识体系总览
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • MySQL
  • Java 基础
  • Java 集合
  • Java 并发
  • Java 虚拟机
  • Spring
  • Redis
  • 唠唠嗑儿
  • 读书笔记
归档
GitHub (opens new window)
Home
知识体系总览
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • MySQL
  • Java 基础
  • Java 集合
  • Java 并发
  • Java 虚拟机
  • Spring
  • Redis
  • 唠唠嗑儿
  • 读书笔记
归档
GitHub (opens new window)
  • 小牛肉的计网知识体系结构
  • 入门

  • 网络层

  • 传输层

  • 应用层

    • 超详细 DNS 协议解析
    • 为什么 DNS 协议使用 UDP?真的只使用了 UDP 吗?
    • HTTP 协议的前世今生
    • 从崩溃的选课系统,论为什么更安全的 HTTPS 协议没有被全面采用
    • 经典面试题:在地址栏输入一个 URL 后回车,背后发生了什么
    • DHCP:IP 并非与生俱来
      • 初识 DHCP
      • DHCP 的工作原理
      • DHCP 的三种机制
      • DHCP 服务器如何保证分配的 IP 地址不冲突
  • 计算机网络
  • 应用层
itslae
2022-03-20
目录

DHCP:IP 并非与生俱来

# DHCP:IP 并非与生俱来


# 初识 DHCP

众所周知,因特网上的每台设备都规定了其全世界唯一的地址,也就是说 “IP 地址”,正是由于有了 IP 地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。

IP 地址就好像电话号码(地址码):有了某人的电话号码,你就能与他通话了。同样,有了某台主机的 IP 地址,你就能与这台主机通信了。

But,如果逐一为每一台主机设计 IP 地址那不得累死,不说全世界可能上百亿台计算机的存在,就说一台笔记本电脑,每移动到一个地方,就需要重新配置 IP 地址。

显然,手动分配 IP 地址不是我们人类中的那些顶级大脑能够做出来的事情,为了实现自动配置 IP 地址、统一管理 IP 地址分配,DHCP 协议(Dynamic Host Configuration Protocol,动态主机配置协议)就被创造了出来,这是一个应用层协议。

在没有 DHCP 服务的网络中,计算机接入到网络时必须先被设置 IP 地址、子网掩码、默认路由等等,并且,为了保证所有的主机 IP 地址都是唯一的,管理员必须清楚的知道该如何分配 IP 地址以避免冲突。

而在提供 DHCP 服务的网络中,管理员的负担大幅度减轻,只要在 DHCP 服务器上做一些必要的设置即可,计算机一旦接入到网络,就会自动获取 TCP/IP 通信所必须的设置(IP 地址等信息),并且 DHCP 服务器会保证其 IP 地址的唯一性。

可以看出,DHCP 实际上提供的是一种即插即用的网络,就是说只要某台计算机物理上一连通,无需专门的设置,就可以直接使用这台物理设备。

# DHCP 的工作原理

DHCP 不仅可以为接入互联网的计算机配置 IP 地址,还可以配置子网掩码、默认路由等信息,那这些信息当然是不会凭空变出来的,它们都需要被提前配置到 DHCP 服务器上。

从 DHCP 获取 IP 地址的流程和 ARP 有一点相似不过还是存在不同的,客户端主机和 DHCP 服务器之间基于 UDP 协议采用广播形式进行交互,主机发送请求消息到 DHCP 服务器的 67 号端口,DHCP 服务器回应应答消息给主机的 68 号端口。具体流程如下:

1)客户端主机广播 DHCP Discover 包:主机请求 DHCP 服务器为自己设置 IP 地址、子网掩码等信息

说的通俗一点,当一台设备新加入一个网络的时候,它只知道自己的 MAC 地址,那么为了获取一些必要的信息,它会先大吼一句(广播,目标地址 255.255.255.255):“我是新来的,我的 MAC 地址是这个,我还没有 IP 地址(或者说 IP 地址是 0.0.0.0,表示未知),有没有 DHCP 服务器能租给我一个 IP 地址呀?”,这个过程称为 “DHCP Discover”。

想必看到这里各位也就能知道 MAC 地址的重要性了,它是与生俱来的,而 IP 地址并不是。

2)DHCP 服务器广播 DHCP Offer 包:DHCP 服务器通知主机哪些网络设置是可以使用的

如果这个网络中存在多个 DHCP 服务器,它们都听到了新人的大吼,并且都愿意租给这位新人一个 IP 地址等信息,那么这个新人主机就会收到多个可用的 IP 地址等信息。这个过程称为 “DHCP Offer”。

3)客户端主机广播 DHCP Request 包:主机通知服务器自己想要使用在(2)中通知的设置

主机在它收到的多个 Offer 中,选择其中一个,一般是最先到达的那个。并且会向网络广播一个 DHCP Request 包,包中包含客户端主机的 MAC 地址、接受的 Offer 中的 IP 地址、提供此 Offer 的 DHCP 服务器地址等,并告诉所有 DHCP 服务器,它将要接受哪一台服务器提供的 IP 地址,告诉其他的 DHCP 服务器,撤销它们提供的 IP 地址,以便提供给下一个 IP 租用请求者。

4)DHCP 服务器广播 DHCP ACK 包:服务器通知主机允许(3)的设置,即正式将 IP 地址等信息分配给主机

在完成第(4)步之前,主机还没有得到 DHCP 服务器的最后确认,所以它还没有 IP 地址,DHCP 服务器想 要给这个主机发送消息,仍然只能采取广播的方式,广播包中包含分配给这台主机的 IP 地址等信息。

至此,DHCP 的网络设置结束,可以进行正常的 TCP/IP 通信了。


DHCP 设置中通常会有一个时间的限制,租期到了,分配的这个 IP 就会被收回。当然,就这好比租房子,你要续约也是可以的,只要你提前说就行,客户端主机可以在这个时间限之前,发送 DHCP Request 包通知想要延长租用时间。

另外,当客户端主机不再需要这个 IP 地址的时候,随时可以通过发送 DHCP Release 报文释放自己的 IP 地址,DHCP 服务器收到 DHCP Release 报文后,会回收相应的 IP 地址并重新分配。

# DHCP 的三种机制

我们上述所说的工作机制是一种动态分配 IP 地址的方式,事实上,DHCP 有三种机制分配 IP 地址:

1)自动分配方式(Automatic Allocation),DHCP 服务器为主机指定一个永久性的 IP 地址,一旦 DHCP 客户端第一次成功从 DHCP 服务器端租用到 IP 地址后,就可以永久性的使用该地址。

2)动态分配方式(Dynamic Allocation),DHCP 服务器给主机指定一个具有时间限制的 IP 地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。

3)手工分配方式(Manual Allocation),客户端的 IP 地址是由网络管理员指定的,DHCP 服务器只是将指定的 IP 地址告诉客户端主机。

很明显,三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。

# DHCP 服务器如何保证分配的 IP 地址不冲突

可以看出,DHCP 服务的正常运转极度依赖于 DCHP 服务器,如果 DHCP 服务器发生故障了,将导致无法自动分配 IP 地址,也就是说该网段内所有主机之间都无法进行正常的 TCP/IP 通信。

为此,人们通常会在一个网段内设置两台或以上的 DHCP 服务器,这不可避免的产生一个问题:每个 DHCP 服务器内记录的都是这个网段的 IP 地址分配情况的信息,各自分配的 IP 地址相互冲突在所难免。

为了避免冲突,DHCP 服务器具备这样的功能:

  • 在分配 IP 地址之前发送 ICMP 回送请求包(关于 ICMP 协议详见 所谓 ICMP,不过将军与士卒而已 (opens new window)),如果收到了返回应答报文,那不用说,这个 IP 地址已经被人用了。

同样的,客户端主机也得确认下 DCHP 服务器分配的 IP 地址是否正在被人使用:

  • 针对从 DHCP 那里获得的 IP 地址发送 ARP 请求报文(关于 ARP 协议详见 5 幅图拿下 ARP 协议 (opens new window)),如果收到了返回应答,那显然,根据这个 IP 地址都能找到 MAC 地址了,你说这个 IP 我还能不能用?
上次更新: 2022/06/13, 02:15:48
经典面试题:在地址栏输入一个 URL 后回车,背后发生了什么

← 经典面试题:在地址栏输入一个 URL 后回车,背后发生了什么

最近更新
01
器件课程
06-13
02
上传github
06-13
03
研究生
06-03
更多文章>
Theme by Vdoing | Copyright © 2019-2022 itslae| 心之所愿,素履以往
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式