当前位置: 首页 > news >正文

计算机网络之DHCP工作过程的六个主要步骤

对于学习DHCP来说,很重要的一部分就是对于DHCP工作过程的理解。

DHCP分为两个部分:一个是服务器端,另一个是客户端。

所有客户机的IP地址设定资料都由DHCP服务器集中管理,并负责处理客户端的DHCP请求;而客户端则会使用从服务器分配下来的IP地址。

1. DHCP服务器IP分配方式

DHCP服务器提供三种IP分配方式:

  • 自动分配(Automatic Allocation)
    自动分配是当DHCP客户端第一次成功地从DHCP服务器端分配到一个IP地址之后,就永远使用这个地址。
  • 动态分配(Dynamic Allocation)
    动态分配是当DHCP客户端第一次从DHCP服务器分配到IP地址后,并非永久地使用该地址,每次使用完后,DHCP客户端就得释放这个IP地址,以给其他客户端使用。
  • 手动分配
    手动分配是由DHCP服务器管理员专门为客户端指定IP地址。

2. DHCP服务工作流程

DHCP客户机在启动时,会搜寻网络中是否存在DHCP服务器。如果找到,则给DHCP服务器发送一个请求。DHCP服务器接到请求后,为DHCP客户机选择TCP/IP配置的参数,并把这些参数发送给客户端。 如果已配置冲突检测设置,则DHCP服务器在将租约中的地址提供给客户机之前会使用Ping测试作用域中每个可用地址的连通性。这可确保提供给客户的每个IP地址都没有被使用手动TCP/IP配置的另一台非DHCP计算机使用。

根据客户端是否第一次登录网络,DHCP的工作形式会有所不同。客户端从DHCP服务器上获得IP地址的所有过程可以分为以下六个步骤:

其中新客户端的租约过程的4个步骤。

img

2.1 工作过程1:寻找DHCP服务器

当DHCP客户端第一次登录网络的时候,计算机发现本机上没有任何IP地址设定,将以广播方式发送DHCP discover发现信息来寻找DHCP服务器,即向255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收这个广播信息,但只有DHCP服务器才会做出响应。

img

2.2 工作过程2:分配IP地址

在网络中接收到DHCP discover发现信息的DHCP服务器就会做出响应,它从尚未分配的IP地址池中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含分配的IP地址和其他设置的DHCP offer提供信息。

img

2.3 工作过程3:接受IP地址

DHCP客户端接受到DHCP offer提供信息之后,选择第一个接收到的提供信息,然后以广播的方式回答一个DHCP request请求信息,该信息包含向它所选定的DHCP服务器请求IP地址的内容。

img

2.4 工作过程4:IP地址分配确认

当DHCP服务器收到DHCP客户端回答的DHCP request请求信息之后,便向DHCP客户端发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户端可以使用它提供的IP地址。然后,DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除了DHCP客户机选中的DHCP服务器外,其他的DHCP服务器将收回曾经提供的IP地址。

img

2.5 工作过程5:重新登录

以后DHCP客户端每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时,则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。

客户端重新登录

img

如果客户端DHCP request 内的IP地址在服务器端没有被使用,DHCP服务器回复DHCP ACK继续使用IP。

img

如果客户端DHCP request 内的IP地址在服务器端已被使用,DHCP服务器回复DHCP NACK告诉客户端IP已被使用。

img

客户端重新开始DHCP流程。

img

2.6 工作过程6:更新租约

DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限到达租约的50%时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。

img

相关文章:

  • 计算机网络之洪水攻击
  • TCP协议的三次握手和四次挥手详解
  • 春招进大厂面试Linux,就这6个问题!
  • 你准备好了吗?开始Python之旅吧!
  • Python期末总结
  • struct 模块
  • 基于socketserver实现并发socket套接字编程
  • python来源介绍
  • 进程与线程的一个解释,小白也能看的懂
  • 进程基础
  • 进程调度的来龙去脉
  • 线程基础
  • 进程的并发并行串行
  • 同步异步阻塞非阻塞
  • 进程的并发并行及同步异步
  • php的引用
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • emacs初体验
  • ES6核心特性
  • input实现文字超出省略号功能
  • JavaScript的使用你知道几种?(上)
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • maven工程打包jar以及java jar命令的classpath使用
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • php面试题 汇集2
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Sass 快速入门教程
  • SpringBoot几种定时任务的实现方式
  • Vim Clutch | 面向脚踏板编程……
  • yii2权限控制rbac之rule详细讲解
  • 马上搞懂 GeoJSON
  • 如何在GitHub上创建个人博客
  • 我的面试准备过程--容器(更新中)
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​力扣解法汇总946-验证栈序列
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #ifdef 的技巧用法
  • #include<初见C语言之指针(5)>
  • #QT项目实战(天气预报)
  • #stm32整理(一)flash读写
  • #传输# #传输数据判断#
  • (BFS)hdoj2377-Bus Pass
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)http-server应用
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .net 获取url的方法
  • [ C++ ] STL---string类的模拟实现
  • [ 数据结构 - C++]红黑树RBTree
  • [100天算法】-实现 strStr()(day 52)
  • [145] 二叉树的后序遍历 js
  • [20161214]如何确定dbid.txt
  • [C++参考]拷贝构造函数的参数必须是引用类型