DHCP报文格式和类型

DHCP 协议提供了多种类型的报文,但是基本格式是相同的,不同类型的报文只是报文中的某些字段值不同。

DHCP 报文的基本格式如图所示。

上图中每个字段含义如下:
  • op:报文的操作类型。分为请求报文和响应报文。客户端发送给服务器的包为请求报文,值为 1;服务器发送给客户端的包为响应报文,值为 2。
  • htype:DHCP 客户端的 MAC 地址类型。MAC 地址类型其实是指明网络类型,htype 值为 1 时表示为最常见的以太网 MAC 地址类型。
  • hlen:硬件地址长度。以太网 MAC 地址长度为 6 个字节,即 hlen 值为 6。
  • hops:跳数,DHCP 报文经过的中继数量。每经过一个路由器,该字段就会增加 1。如果没有经过路由器,则值为 0(同一网内)。
  • xid:事务 ID。客户端发起一次请求时选择的随机数,用来标识一次地址请求过程。在一次请求中所有报文的 xid 都是一样的。
  • secs:DHCP 客户端从获取到 IP 地址或者续约过程开始到现在所过去的时间,以秒为单位。在没有获得 IP 地址前,该字段始终为 0。
  • flags:BOOTP 标志位。只使用第 0 比特位,是广播应答标识位,用来标识 DHCP 服务器应答报文是采用单播还是广播发送。其中,0 表示采用单播发送方式,1 表示采用广播发送方式。其余位尚未使用。
  • ciaddr:DHCP 客户端的 IP 地址。仅在 DHCP 服务器发送的 ACK 报文中显示,在其他报文中均显示为 0。这是因为在得到 DHCP 服务器确认前,DHCP 客户端还没有分配到 IP 地址。
  • yiaddr:DHCP 服务器分配给客户端的 IP 地址。仅在 DHCP 服务器发送的 Offer 和 ACK 报文中显示,其他报文中显示为 0。
  • siaddr:为 DHCP 客户端分配 IP 地址等信息的其他 DHCP 服务器 IP 地址。仅在 DHCP Offer、DHCP ACK 报文中显示,其他报文中显示为 0。
  • giaddr:转发代理(网关)IP 地址,DHCP 客户端发出请求报文后经过的第一个 DHCP 中继的 IP 地址。如果没有经过 DHCP 中继,则显示为 0。
  • chaddr:DHCP 客户端的 MAC 地址。在每个报文中都会显示对应 DHCP 客户端的 MAC 地址。
  • sname:为客户端分配 IP 地址的服务器名称(DNS 域名格式)。只在 DHCP Offer 和 DHCP ACK 报文中显示发送报文的 DHCP 服务器名称,其他报文显示为 0。
  • file:DHCP 服务器为 DHCP 客户端指定的启动配置文件名称及路径信息。仅在 DHCP Offer 报文中显示,其他报文中显示为空。
  • options:可选选项,格式为“代码+长度+数据”。

了解了 DHCP 报文格式以后,下面根据 Wireshar 抓取的数据包详细讲解 DHCP 请求 IP 地址时的每种报文。

DHCP Discover 报文

DHCP Discover 报文数据包如图所示。

该数据包是客户端向服务器发送的 DHCP Discover 数据包。在上图中,由于当前客户端还没有 IP 地址,所以源 IP 地址为 0.0.0.0;客户端是向网络中所有服务器进行发送,使用的是广播包,所以目标 IP 地址为 255.255.255.255。

在 Bootstrap Protocol(Discover) 部分中显示了该数据包报文的每个字段。为了方便讲解,下面将报文字段列出并标注如下:

Bootstrap Protocol (Discover)
    Message type: Boot Request (1)    #报文的操作类型,这是一个请求包,所以该选项的值为1
    Hardware type: Ethernet (0x01)    #硬件类型为Ethernet
    Hardware address length: 6    #硬件地址长度为6
    Hops: 0    #经过DHCP中继数为0
    Transaction ID: 0x597c6b82    #事务ID
    Seconds elapsed: 0    #客户端启动时间
    Bootp flags: 0x0000 (Unicast)    #BOOTP标识字段
    Client IP address: 0.0.0.0    #客户端IP地址
    Your (client) IP address: 0.0.0.0    #服务器分配给自己的IP地址
    Next server IP address: 0.0.0.0    #下一个服务器的IP地址
    Relay agent IP address: 0.0.0.0    #DHCP中继器的IP地址
    Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)    #客户端的MAC地址
    Client hardware address padding: 00000000000000000000    #客户端硬件地址填充
    Server host name not given    #服务器主机名
    Boot file name not given    #启动文件名
    Magic cookie: DHCP    #与BOOTP兼容
    Option: (53) DHCP Message Type (Discover)    #DHCP消息类型为53
    Length: 1
    DHCP: Discover (1)                                      #发现包
    Option: (61) Client identifier    #客户端标识符
    Length: 7
    Hardware type: Ethernet (0x01)    #硬件类型为Ethernet
    Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)    #客户端MAC地址
    Option: (50) Requested IP Address    #请求IP地址
        Length: 4
    Requested IP Address: 192.168.0.108    #请求的IP地址
    Option: (12) Host Name    #客户端主机名
        Length: 15
    Host Name: WIN-RKPKQFBLG6C    #主机名
    Option: (60) Vendor class identifier    #供应商类标识符
        Length: 8
    Vendor class identifier: MSFT 5.0    #供应商标识符为MSFT 5.0
    Option: (55) Parameter Request List    #参数请求列表
        Length: 12
        Parameter Request List Item: (1) Subnet Mask    #子网掩码
        Parameter Request List Item: (15) Domain Name    #域名
        Parameter Request List Item: (3) Router    #路由
        Parameter Request List Item: (6) Domain Name Server    #域名服务
        Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server    #NetBIOS名称服务
        Parameter Request List Item: (46) NetBIOS over TCP/IP Node Type    #NetBIOS节点类型
        Parameter Request List Item: (47) NetBIOS over TCP/IP Scope    #NetBIOS作用范围
        Parameter Request List Item: (31) Perform Router Discover    #完成路由发现
        Parameter Request List Item: (33) Static Route    #静态路由
        Parameter Request List Item: (121) Classless Static Route    #无类静态路由
        Parameter Request List Item: (249) Private/Classless Static Route
        (Microsoft)    #私有静态路由
        Parameter Request List Item: (43) Vendor-Specific Information    #供应商特定信息
    Option: (255) End
        Option End: 255
    Padding: 000000000000000000000000

上述输出信息显示了 DHCP Discover 报文中相关字段的信息。可以看到客户端的 IP 地址为 0.0.0.0,MAC 地址为 00:0c:29:db:3f:0a,主机名为 WIN-RKPKQFBLG6C,事务 ID 为 0x597c6b82 等信息。

DHCP Offer 报文

DHCP Offer 报文数据包如图所示。

该数据包是 DHCP 服务器收到客户端 DHCP Discover 广播包后返回的 DHCP Offer 包。

报文字段信息如下:

Bootstrap Protocol (Offer)
    Message type: Boot Reply (2)    #报文的操作类型,这是一个响应包,所以该选项的值为2
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x597c6b82    #事务ID
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
    Client IP address: 0.0.0.0
    Your (client) IP address: 192.168.0.108    #服务器分配给客户端的IP地址
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (Offer)
        Length: 1
        DHCP: Offer (2)
    Option: (54) DHCP Server Identifier
        Length: 4
        DHCP Server Identifier: 192.168.0.1    #DNS服务器标识地址为192.168.0.1
    Option: (51) IP Address Lease Time
        Length: 4
        IP Address Lease Time: (7200s) 2 hours
    Option: (1) Subnet Mask    #服务器分配给客户端的子网掩码
        Length: 4
        Subnet Mask: 255.255.255.0    #子网掩码为255.255.255.0
    Option: (3) Router
        Length: 4
        Router: 192.168.0.1
    Option: (6) Domain Name Server
        Length: 4
        Domain Name Server: 192.168.0.1
    Option: (255) End
        Option End: 255
    Padding: 000000000000000000000000000000000000000000000000...

其中只标注了几个重要字段的信息。由于是 DHCP 服务器给 DHCP 客户端发送提供的地址信息。因此,报文中应该包含 DHCP 服务器提供给客户端的 IP 地址信息,这里为 192.168.0.108;提供给客户端的子网掩码信息这里为 255.255.255.0。

事务 ID 为 0x597c6b82,与 DHCP Discover 报文中的事务 ID 相同,因此属于同一请求地址过程。

另外,可以看到服务器标识地址为 192.168.0.1,所以捕获的数据包的源 IP 地址为 192.168.0.1。目标地址为提供的 IP 地址 192.168.0.108。

DHCP Request 报文

DHCP Request 报文数据包如图所示。

DHCP Request 报文数据包是 DHCP 客户端向网络中所有 DHCP 服务器主机发出的 DHCP Request 消息。

由于此时客户端还没有真正拥有IP地址,因此源 IP 地址仍然为 0.0.0.0,该数据包是用来通知所有服务器的,以广播形式发出,因此目标 IP 地址为 255.255.255.255。

报文字段信息如下:

Bootstrap Protocol (Request)
    Message type: Boot Request (1)    #报文的操作类型,所以该选项的值为1
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x597c6b82    #事务ID
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
    Client IP address: 0.0.0.0    #客户端IP地址
    Your (client) IP address: 0.0.0.0
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (Request)
        Length: 1
        DHCP: Request (3)
    Option: (61) Client identifier
    Length: 7
    Hardware type: Ethernet (0x01)
    Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
    Option: (50) Requested IP Address
    Length: 4
    Requested IP Address: 192.168.0.108    #客户端选择租用的IP地址为192.168.0.108
    …    #省略部分信息

其中,事务 ID 与 DHCP Discover、DHCP Offer 阶段的事务 ID 相同,从输出信息还可以看到客户端请求的 IP 地址为 192.168.0.108,表示要向该 DHCP 服务器租用地址。

DHCP ACK 报文

DHCP ACK 报文数据包如图所示。

DHCP ACK 数据包是 DHCP 服务器给客户端发送的确认数据包。

报文字段信息如下:

Bootstrap Protocol (ACK)
    Message type: Boot Reply (2)    #报文的操作类型,所以该选项的值为2
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x597c6b82    #事务ID
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
    Client IP address: 0.0.0.0
    Your (client) IP address: 192.168.0.108    #客户端可以使用的IP地址为192.168.0.108
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (ACK)
        Length: 1
        DHCP: ACK (5)
    Option: (54) DHCP Server Identifier
        Length: 4
        DHCP Server Identifier: 192.168.0.1
    Option: (51) IP Address Lease Time
        Length: 4
        IP Address Lease Time: (7200s) 2 hours
    Option: (1) Subnet Mask    #客户端可以使用的子网掩码
        Length: 4
        Subnet Mask: 255.255.255.0    #子网掩码为255.255.255.0
    Option: (3) Router
        Length: 4
        Router: 192.168.0.1
    Option: (6) Domain Name Server
        Length: 4
        Domain Name Server: 192.168.0.1
    Option: (255) End
        Option End: 255
    Padding: 000000000000000000000000000000000000000000000000...

以上输出信息是服务器给客户端提供租约地址的确认包。其中,客户端可以使用的租约 IP 地址为 192.168.0.108;可以使用的子网掩码为 255.255.255.0。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


随着云计算和网络技术的发展,越来越多的数据需要在服务器之间进行传输和共享。云挂机宝作为一种常见的服务器设备,具有高效、稳定的特性,使得它成为了许多企业和个人用户传输数据的首选。本文将讨论云挂机宝服务器
阿里云服务器Tomcat无法从外部访问一、环境阿里云Ubuntu 12.04.5 LTStomcat和java都是阿里云默认的7的版本,如下图二、问题部署后./startup.sh启动tomcat 之后外部访问http://ip:8080/无法访问,之后去查看防火墙关闭了Ubuntu下面的防火墙123
购买一系列的东西其实就是花钱买块区域,服务器,域名,云解析,花了好多money。。。一、租服务器百度搜索阿里云进入官网首页,点击登录进入登录页面,可以使用邮箱登录或者注册进入注册页面,填写注册信息登录成功,进入主页,点击云服务ECS,点击购买推荐或者选购配置根据实际情况选择产品,可能没有货,那么就需要更改购买条件如果是新用户,购买
前言昨天买了域名,服务器,然后搭建了环境,然后想他通过默认的端口,不用端口就访问。设置WEB项目的欢迎页在WEB-INF文件夹下有个web.xml文件(最近新建的项目不包含此文件,可以手动新建),在welcome-file-list节点中设置,代码如下 <welcome-file-list> <welcome-file>test.html</welcome-file>
前言由于服务器centos6.8安装mysql一直出现不能连接问题,然后看到一个方法,一不小心就把yum给删除了,都还原不了,很是绝望,很难受。然后没有yum这个centos就感觉废了,然后找方法装上去。 python --version查看python 版本 whereis python 查看python文件 python: /usr/bin/python2.6 /usr/bin/python
前言用 SSH客户端登录上以后,自己想要在本地连接服务器上的mysql服务器。解决方法1、首先启动数据库[root@iZm5ec880z2rorZ ~]# service mysqld start可以输入一下加粗命令:[root@iZm5ec880z2rorZ ~]# mysql -u root -p Enter password: (输入你的数据库密码)Welcome to the My
前言乱码问题是很让人抓狂的问题,下面我将记录一下Linux下MySQL乱码问题的解决方法。 mysql在linux下乱码问题一、操作mysql默认字符集是latin1,但是我们大部分程序使用的字符集是utf8,我们就需要修改mysql的字符集了。1)查看默认编码show variables like 'character%';+--------------------------+--------
问题描述今天阿里云服务器安装mysql的收,遇到了一个很熟悉的问题 输入#mysql -u root -p ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 解决方案一、方案1 1.#ps -A|grep mysql 显示类似:
今天在使用filezilla连接虚拟机中的ubuntu的时候出现上次出错,错误详情为:open for write: permission denied看完错误大概知道和权限有问题,再次查看虚拟机,我们使用以下命令给我们需要放入的目标文件权限:sudo chmod 777 /home再次尝试上传,上传成功! ...
直接上步骤,做一个简单的记录!配置阿里云oss找到对应的oss如果没有bucket,则新建一个新建之后,进入到对应的bucket,然后进行相关设置以上就是oss的基本设置,接下来是域名相关设置,这也是最重要的一些步骤。oss域名解析和cdn设置oss域名解析设置oss的域名设置是在传输管理下进行设置。如果没有域名,需要添加域名,没有注册域名自行注册。添加之后就会在上面列表上显示。以上就是域名的解析配置,期间还需要设置域名解析cname等。oss的cdn设置加速设置cdn
这个需要开放centos的端口和腾讯云服务器的端口。防火墙开放8080端口因为Centos7以上用firewalld代替了iptables,也就是说firewalld开通了8080端口应该就行了1.输入netstat -tunlp 查看8080是否放开。2.如果没有开放,输入firewall-cmd --state #查看防火墙状态。3.在running 状态下,向firewall 添加需要开放的端口firewall-cmd --permanent --zone=public --add-po
前言:博主资历尚浅,很多东西都还在刚起步学习的阶段,这几天开发任务比较轻,就在自己window系统下,模拟部署远程服务器,利用Jenkins + Ant + Tomcat 搭建了一个自动发布部署的环境
为了做集群测试,在每台机器上装了3个tomcat,每次发布项目的时候都要反复敲一些命令,重启 tomcat 之前先检查 tomcat 进程有没有停掉,没有还要手动 kill 该进程。 发布次数多了,操
Jenkins修改管理员密码,我看了网上所有的教程,竟然全都是拿着一串已经加密好的 111111 的密文去替代 config.xml 文件里面的密码,然后大家的密码都是 111111!我觉得这种做法实
一、四层与七层负载均衡在原理上的区别 1.图示 2.概述 四层负载均衡工作在 OSI 模型中的四层,即传输层。四层负载均衡只能根据报文中目标地址和源地址对请求进行转发,而无法修改或判断所请求资源的具体
和 window不同,在Linux压缩文件需要注意的是,压缩后的文件会把源文件给替代,无论是gzip、bzip2、xz 均不支持压缩目录,要达到压缩目录的目的,需要用到tar指令。 gzip 压缩 g
一、前言 随着每天业务的增长,Tomcat 的catalina.out日志 变得越来越大,占用磁盘空间不说。要查看某个时候的日志的时候,庞大的日志让你顿时无从下手,所以日志的切割的变得刻不容缓。而且,
一、安装 和 准备工作 我们选择了用 Tomcat 服务器下 war 包的安装方式。Jenkins 的下载地址:http://mirrors.jenkins-ci.org/,打开链接后,表格有war列
一、gcc gcc是Linux上面最标准的C语言的编译程序,用来源代码的编译链接。 gcc -c hello.c 编译产生目标文件hello.o gcc -O hello.c 编译产生目标文件,并进行
随着智能化互联时代的来临,家中的智能设备越来越多:电视机、平板、游戏主机、电脑、手机等遍及家中各个角落,同时设备之间共享数据的需求变的越来越强烈。比如同步、备份手机上的照片和视频,在电视机上观看电脑中