• 推荐这篇文章,原理及抓包都分析的很好: **推荐这篇文章,原理及抓包都分析的很好:**

https://blog.csdn.net/andy_93/article/details/78238931

  • 简要步骤分析如下: **简要步骤分析如下:**

1、DHCP_Client 发给 DHCP_Server:DHCP DISCOVER(寻找服务器)(广播包)

  当DHCP客户端开机的时候,就会广播寻找DHCP服务器。 由于客户端此时还不知道自己属于哪一个网路,所以封包的来源地址会为0.0.0.0, 目的地址则为255.255.255.255,然后再附上DHCP discover的包信息。

2、DHCP_Server 发给 DHCP_Client:DHCP OFFER(分配IP信息)

  当DHCP服务器监听到客户端发出的DHCP Discover广播后, 会从自己的IP池里分配一个IP地址,再加上客户端的硬件地址 (MAC)、XID编号(用于识别)等信息,封装为一个DHCP OFFER包,发送给客户端。

3、DHCP_Client 发给 DHCP_Server:DHCP REQUEST(请求使用具体的IP)(广播包)

  假如客户端接收到多个服务器发来的DHCP OFFER包,会选择最先接收到的包信息,然后以广播的方式发送一个DHCP REQUEST,相当于广播给所有服务器:我接受了这个服务器的包。其他被拒绝的服务器就不会继续建立连接啦。

4、DHCP_Server 发给 DHCP_Client:DHCP ACK(分配确认)

  当DHCP服务器收到DHCP客户端回答的DHCP Request请求信息之后, 它便向DHCP客户端发送一个包含它所提供的IP地址和其他设置的DHCP Ack确认信息。以确认IP地址的正式生效。然后DHCP客户端便将其TCP/IP协议与自己的网卡绑定。

PS:如果第3步request包DHCP server判断不合法,会恢复回复DHCP NAK包,这样可以马上重新进行1~4步骤。

最新文章

  1. Cheatsheet: 2016 05.01 ~ 05.31
  2. Chrome浏览器官方下载地址
  3. ASP.NEt MVC5--创建下拉列表
  4. 【读书笔记】读《JavaScript设计模式》之装饰者模式
  5. Brief introduction to Scala and Breeze for statistical computing
  6. 编写一函数用来实现左右循环移位。函数原型为move(value,n);n>0时右移n位,n<0时左移|n|位。
  7. threaded模式下,比prefork模式要省资源
  8. SpringMVC与Struts2配置区别
  9. 01 Hello, Python!
  10. Linux下产生随机密码10方法
  11. shell常见脚本30例
  12. centos7安装nginx-1.13.6 新手入门,图文解析
  13. 【转】为什么分布式一定要有Redis?
  14. Android开发 ---基本UI组件6 :只定义一个listView组件,然后通过BaseAdapter适配器根据数据的多少自行添加多个ListView显示数据
  15. .Net Discovery系列之十一-深入理解平台机制与性能影响 (中)
  16. Nginx 与Tomcat 实现动静态分离、负载均衡
  17. BZOJ 3166: [Heoi2013]Alo
  18. 二叉搜索树的后序遍历序列 (java)
  19. React的this.props.children
  20. C++(二十三) — 内存泄漏及指针悬挂

热门文章

  1. Oracle - Trunc() 函数截取日期&截取数值
  2. Note/Solution -「洛谷 P6466」分散层叠算法
  3. Dubbo服务注册到Zookeeper,对外提供服务的实际类 ref(如:SleepServiceImpl)保存在哪里
  4. vue实例中的watch属性
  5. Python实现JSON序列化和反序列化
  6. oj教程--坑
  7. mysql索引技术名词1-5
  8. Python:matplotlib.cm 色表
  9. IntelliJ:自动生成JavaBean的读写方法
  10. Python:List