详解DHCP工作方法,并用wireshark对DHCP四个数据包抓包分析

原文地址:http://www.ctowhy.com/395.html

DHCP的作用:

局域网中,用户电脑都需要IP地址才使用网络服务,但是客户并不都会配置IP地址,这时,可以在网络中部署一个DHCP服务器,用来给这些客户主机动态的分配IP。

所有DHCP的客户端,在向DHCP服务器租用到地址后,会在DHCP服务器端留下租用信息,网络管理员可以根据这些分配信息统一管理这些客户。

DHCP的一些概念:

DHCP是一个典型的Client/Server模型的协议,使用UDP传输

  • DHCP Server端,使用UDP端口:67
    DHCP Server可以在很多设备上部署,如Cisco、H3C、Juniper、Windows、Linux……都可以
  • DHCP Client端,使用UDP端口:68
    客户端(主机、路由器、交换机、网络打印机、网络摄像头……都可以作为DHCP客户端)

DHCP的基本工作流程

DHCP的客户端如果把网卡的IP地址配置为动态获取IP的方式,就会发送DHCP请求,来寻找DHCP服务器申请地址;b

DHCP的在客户端申请、服务器下发地址的过程中,一共会产生四个数据包,如下:

根据这四个数据包来看,DHCP的工作流程如下图:

DHCP详细工作流程解析

第一步:
DHCP客户端主动发起DHCP Discover包,用来寻找DHCP服务器,其中:

  • 源MAC是自己的MAC地址,目的MAC是FFFF.FFFF.FFFF的广播
  • 源IP是0.0.0.0(现在还没有IP,就用全0地址),目的IP是255.255.255.255的三层广播

因为DHCP服务器在哪里还不知道,所以使用广播来寻找,广播会泛洪到整个网段中;

第二步:
DHCP服务器收到客户端发的DHCP Discover之后,会在自己的地址池中拿出一个没有分配的地址以及配套的参数(如:掩码、DNS、网关、域名、租期……),然后以一个DHCP Offer包发送出去。
这个DHCP Offer数据包的地址如下:

  • 源MAC是DHCP服务器的MAC,目的MAC是FFFF.FFFF.FFFF的广播
  • 源IP是DHCP服务器的IP,目的IP是255.255.255.255的广播

这时客户端还没有获得IP,DHCP服务器端现在还无法定位客户端,所以用广播来回应。

第三步:
客户端收到这个DHCP Offer后,会再发出一个DHCP Request给服务器来申请这个Offer中包含的地址。
这个时候,客户端还没有正式拿到地址,所以还需要向DHCP服务器申请。

  • 这时客户端的源IP还是0.0.0.0,目的IP还是255.255.255.255
  • 源MAC是客户端的MAC,目的MAC是FFFF.FFFF.FFFF广播包

第四步:
服务器收到客户端的请求后,会发出一个DHCP ACK用来确认这个IP地址可以分配给这个客户端。
客户端收到第四个DHCP ACK数据包才算正式拿到了这个IP。

【更多“ICMP协议”相关的内容,点击返回:TCP IP协议文章列表】

时间: 2024-08-23 12:15:59

详解DHCP工作方法,并用wireshark对DHCP四个数据包抓包分析的相关文章

【android】 微信分享详解(分享到朋友和朋友圈)+ PopupWindow的使用和分析

一. 微信分享的实现: 1.到微信开放平台https://open.weixin.qq.com创创建应用申请AppID 2.下载签名生成工具,对签名不了解的自行百度,这里不做说明. 下面是简单的微信分享代码: 首先看一下包结构图 MainActivity: public class MainActivity extends Activity { private static final String appid = "wx86b3d972e5ddd153"; private IWXAP

Wireshark网络分析实战笔记(一)抓包过滤器

抓包过滤器和显示过滤器的差别: 1.抓包过滤器配置在抓包之前,wireshark仅仅抓取抓包过滤器过滤的数据 2.显示过滤器配置在抓包后,wireshark已经抓取全部的数据包,显示过滤器让wireshark仅仅显示想看的数据包 抓包过滤器的配置方法: 1.在主页面的...using this filter中输入表达式(点击文本框前面的黄色button会显示经常使用的表达式): 2.打开capture interfaces选项,在capture filter for selected inter

python web框架企业实战详解(第六期)\第四课时-webpy&django

查找收集python的IDE,并分析各自优缺点:选择自己喜欢的IDE搭建各自的webpy和django环境,最后截屏就作业. PyCharm PyCharm是由JetBrains打造的一款Python IDE. PyCharm具备一般 Python IDE 的功能,比如:调试.语法高亮.项目管理.代码跳转.智能提示.自动完成.单元测试.版本控制等. 另外,PyCharm还提供了一些很好的功能用于Django开发,同时支持Google App Engine,更酷的是,PyCharm支持IronPy

详解:如何恢复MySQL数据库下误删的数据

2017-03-27 09:25 阅读 178 评论 0 作者:马哥Linux运维-Robin 血的教训,事发经过就不详述了.直接上操作步骤及恢复思路(友情提示:数据库的任何操作都要提前做好备份),以下是Mysql数据后的恢复过程: 1. 找到binlog 恢复数据的前提是必须开启Mysql的binlog日志,如果binlog日志没开启,请忽略此篇文档.binlog日志是否开启可以查看Mysql配置文件.日志位置一般在/var/lib/mysql目录或者编译安装的date目录下.也可登录Mysq

mencoder和ffmpeg参数详解 (Java处理视频) <第四篇>

Mencoder 转 flv mencoder -ffourcc FLV1 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -of lavf -oac mp3lame -lameopts aq=9:cbr:br=64:vol=2 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:acodec=mp3:abitrate=56 -vf scale=320:270,expand=320:

RAID磁盘阵列详解之RAID 0(无冗错的数据条带卷)

RAID 0磁盘阵列介绍: RAID 0连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,因此并不能算真正的RAID结构. RAID 0至少需要两块以上大小相同的硬盘,它将两块以上的硬盘合并成一块,数据连续地分割在每块盘上.容量为所有硬盘的总和. RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据,因此不能应用于数据安全性要求高的场合. RAID 0磁盘阵列的配置: 1.给虚拟机添加两块硬盘,然后重

ajax入门详解

l 一个实例 在开始正式讲解 Ajax之前,首先让我们先来看看Google Map使用Ajax改善其产品设计的效果. 1. 在浏览器地址栏中输入http://maps.google.com打开Google Map的界面. 2. 在页面顶端的搜索框中输入“China”,单击“Search”按钮. 3. 单击地图右上角的“Satellite”按钮,切换到卫星界面. 4. 调整地图左上角的尺寸,方法或者缩小当前区域.可以看到,地图区域的图象根据标尺的位置快速的变换. 5. 按住鼠标左键,拖拽地图,地图

[转]Linux操作系统tcpdump抓包分析详解

PS:tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具. tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具.tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息.因此系统中存在网络分析工具主要不是对本

ARP协议(2)ARP协议格式详解

一.协议格式 ARP协议的格式如下: 分两大块来讲解: 1.红色框起来的是:以太网的首部,共14字节. 这部分是你不管发送什么以太网协议的数据包,它都是需要的,而且是必须的.各字段的说明: 字段 所占字节数 说明 以太网目的地址 6 要向哪台主机发送信息,主机的MAC地址 以太网源地址 6 信息是从哪台机器发送出来的,主机的MAC地址 帧类型 2 表示这是什么类型的数据包.如果是RAP的话,该值为:0x0806 2.蓝色框起来的部分,这就是ARP协议的格式(请求/应答) 字段 所占字节数 说明