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 设置中通常会有一个时间的限制,租期到了,分配的这个 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,不过将军与士卒而已),如果收到了返回应答报文,那不用说,这个 IP 地址已经被人用了。

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

  • 针对从 DHCP 那里获得的 IP 地址发送 ARP 请求报文(关于 ARP 协议详见5 幅图拿下 ARP 协议),如果收到了返回应答,那显然,根据这个 IP 地址都能找到 MAC 地址了,你说这个 IP 我还能不能用?

🎉 关注公众号 | 飞天小牛肉,即时获取更新

  • 博主东南大学硕士在读,携程 Java 后台开发暑期实习生,利用课余时间运营一个公众号『 飞天小牛肉 』;,2020/12/29 日开通,专注分享计算机基础(数据结构 + 算法 + 计算机网络 + 数据库 + 操作系统 + Linux)、Java 技术栈等相关原创技术好文。本公众号的目的就是 让大家可以快速掌握重点知识,有的放矢。关注公众号第一时间获取文章更新,成长的路上我们一起进步
  • 并推荐个人维护的开源教程类项目:CS-Wiki(Gitee 推荐项目,现已累计 1.7k+ star), 致力打造完善的后端知识体系,在技术的路上少走弯路,欢迎各位小伙伴前来交流学习 ~ 😊
  • 如果各位小伙伴春招秋招没有拿得出手的项目的话,可以参考我写的一个项目「开源社区系统 Echo」Gitee 官方推荐项目,目前已累计 800+ star,基于 SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security + … 并提供详细的开发文档和配套教程。公众号后台回复 Echo 可以获取配套教程,目前尚在更新中。

Original: https://www.cnblogs.com/cswiki/p/14899864.html
Author: 飞天小牛肉
Title: DHCP:IP 并非与生俱来

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713494/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 常见题目

    这几天有朋友反映给小编说让多发点关于面试的文章,小编深知从事IT行业的难处,跳槽多,加班多,薪资不乐观,大多数朋友都想找新的工作,进入一个好的公司,今天小编就给大家带来了C语言面试…

    技术杂谈 2023年6月21日
    097
  • Java复习,Java知识点以及Java面试题(二)

    面向对象:封装,继承,多态 类:相关属性和行为的集合。 对象:该类的具体体现 成员变量和局部变量的区别: 位置:成员变量在类中方法外;局部变量在方法定义中或者方法声明上。 内存中的…

    技术杂谈 2023年6月21日
    078
  • 分析自动打卡脚本——大一入学遗作

    HTTP协议 1.何为HTTP协议 HTTP协议又名超文本传输协议,是一种基于TCP/IP的传输协议,顾名思义,其传输的内容为超文本内容,在互联网早期,我们只能传输非二进制的文本,…

    技术杂谈 2023年7月11日
    071
  • java多线程

    多线程: 多线程是指程序中包含多个执行流,即在-个程序中可以同时运行多个不同的线程来执行不同的任务。 多线程的好处: 可以提高 CPU 的利用率。在多线程程序中,一个线程必须等待的…

    技术杂谈 2023年7月24日
    065
  • enum class 、enum struct 和 enum

    至从C语言开始enum类型就被作为用户自定义分类有限集合常量的方法被引入到了语言当中,而且一度成为C++中定义编译期常量的唯一方法(后来在类中引入了静态整型常量)。根据上面对enu…

    技术杂谈 2023年5月31日
    082
  • windows和虚拟机上的Ubuntu互传文件

    1.简介 本文讲述的是通过ssh登录虚拟机上的Ubuntu系统,实现互传文件 2.Ubuntu端 2.1.安装ssh sudo apt-get update sudo apt-ge…

    技术杂谈 2023年6月21日
    0115
  • Property Trees & DispalyItem

    版权声明:本文为CSDN博主「tornmy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/…

    技术杂谈 2023年5月31日
    088
  • 上海市税务局服务 All In One

    上海市税务局服务 All In One https://shanghai.chinatax.gov.cn/bsfw/ https://shanghai.chinatax.gov.c…

    技术杂谈 2023年6月1日
    0102
  • 深入C++03:面向对象

    📕面向对象 类和对象、this指针 不用做太多笔记,都可以看初识C++的笔记; 记住👀:声明后面都要加” ;“,比如声明方法和变量还有…

    技术杂谈 2023年7月25日
    078
  • 前端矩阵知识

    概述 矩阵,是线性代数中涉及的内容,线性代数在科学领域有很多应用的场景,如下: 大部分同学在大学时期应该都学过一本叫做线性代数的书,如果没猜错的话,你们的老师在教学的时候大多都是概…

    技术杂谈 2023年5月31日
    074
  • TortoiseGit使用

    ​ 一:TortoiseGit安装以及配置 1.1、安装包 TortoiseGit以及配套安装包见链接: git下载链接 Download PuTTY TortoiseGit下载 …

    技术杂谈 2023年6月21日
    0111
  • PYTORCH: 60分钟 | TORCH.AUTOGRAD

    torch.autograd 是PyTorch的自动微分引擎,用以推动神经网络训练。在本节,你将会对autograd如何帮助神经网络训练的概念有所理解。 背景 神经网络(NNs)是…

    技术杂谈 2023年7月25日
    0101
  • 图像搜索、以图搜图测试更新版

    图像搜索、以图搜图测试更新版; Original: https://www.cnblogs.com/chenying99/p/13164491.htmlAuthor: 刺猬的温驯T…

    技术杂谈 2023年5月31日
    092
  • 19 Transformer 解码器的两个为什么(为什么做掩码、为什么用编码器-解码器注意力)

    机器翻译:源语句(我爱中国),目标语句(I love China) 为了解决训练阶段和测试阶段的 gap(不匹配) 训练阶段:解码器会有输入,这个输入是目标语句,就是 I love…

    技术杂谈 2023年5月31日
    084
  • 关于 jar包和 打jar包

    1.什么是 jar包? 2.为什么 要打jar包? 3.jar包 的内部结构? 4.关于 MANIFEST.MF 5.怎样用 jar 进行打jar 包? 6.怎样是用 idea打 …

    技术杂谈 2023年7月11日
    087
  • docker学习:docker安装

    Centos7 安装docker 下载安装yum install docker-ce 启动dockersystemctl start docker 创建并编写镜像加速文件vim /…

    技术杂谈 2023年7月10日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球