协议分析 - DHCP协议解码详解

  1. DHCP协议简介

DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 BOOTP,它工作在OSI的应用层,是一种帮助计算机从指定的DHCP服务器获取它们的配置信息的自举协议。

DHCP使用客户端/服务器模式,请求配置信息的计算机叫做DHCP客户端,而提供信息的叫做DHCP的服务器。DHCP为客户端分配地址的方法有三种:手工配置、自动配置、动态配置。

DHCP最重要的功能就是动态分配。除了IP地址,DHCP分组还为客户端提供其他的配置信息,比如子网掩码。这使得客户端无需用户动手就能自动配置连接网络。

  1. DHCP

    的工作流程

发现阶段,即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCP discover发现信息来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

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

选择阶段,即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP offer提供信息,则DHCP客户机只接受第一个收到的DHCP offer提供信息,然后它就以广播方式回答一个DHCP request请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。

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

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

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

  1. DHCP的报文格式

我们来介绍一下DHCP的报文格式,如图1,

OP(1)

Htype(1)

Hlen(1)

Hops(1)

Transaction ID(4)

Seconds(2)

Flags(2)

Ciaddr(4)

Yiaddr(4)

Siaddr(4)

Giaddr(4)

Chaddr(16)

Sname(64)

File(128)

Options(variable)

(图1 DHCP的 报文格式)

  • OP:若是client送给server的封包,设为1,反向为2;

  • Htype:硬件类别,ethernet为1;

  • Hlen:硬件长度,ethernet为6;

  • Hops:若数据包需经过router传送,每站加1,若在同一网内,为0;

  • Transaction ID:事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;

  • Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间;

  • Flags:从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用;

  • Ciaddr:用户IP地址;

  • Yiaddr:客户IP地址;

  • Siaddr:

    用于bootstrap过程中的IP地址

  • Giaddr:转发代理(网关)IP地址;

  • Chaddr:client的硬件地址;

  • Sname:可选server的名称,以0x00结尾;

  • File:启动文件名;

  • Options:,厂商标识,可选的参数字段

  1. 解码

    信息

通过DHCP的 工作流程,我们知道从DHCP服务器获取配置信息的4个阶段中,DHCP客户端会出现有4种报文(DHCPDISCOVERY,DHCPOFFER,DHCPREQUEST,DHCPACK)。我们分别来看看4报文的解码内容:

  1. 发现阶段

使用科来网络分析系统捕获DHCP DISCOVERY 数据包,如图2,

(图2 DHCP DISCOVERY数据包解码)

由图2可以看到DHCP DISCOVERY包的解码信息,由于DHCP是BOOTP的以个扩展,,DHCP兼容BOOTP,我们可以看到BOOTP和DHCP的解码。

  1. 提供阶段

使用科来网络分析系统捕获DHCP OFFER数据包,如图3,

(图3 DHCP OFFER数据包解码)

  1. 选择阶段

使用科来网络分析系统捕获DHCP REQUEST数据包,如图4,

(图4 DHCP REQUEST数据包解码)

  1. 确认阶段

使用科来网络分析系统捕获DHCP ACK数据包,如图5,

(图5 DHCP ACK数据包解码)

以上为DHCP工作的4种数据包,每种数据包都是有区别的。

dhcp协议简介的更多相关文章

  1. 协议分析 - DHCP协议解码详解

    协议分析 - DHCP协议解码详解 [DHCP协议简介]         DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 ...

  2. 【转】DHCP协议详解

    协议分析 - DHCP协议解码详解 DHCP协议简介 DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 BOOTP,它工作 ...

  3. DHCP协议格式、DHCP服务搭建、DHCP协商交互过程入门学习

    相关学习资料 http://www.rfc-editor.org/rfc/rfc2131.txt http://baike.baidu.com/view/7992.htm?fromtitle=DHCP ...

  4. DHCP 协议及其交互过程

    1. DHCP用途简介: DHCP服务应用于大型局域网络中,使网络中的主机自动获取IP地址,网关,DNS服务器等信息,能够提升IP地址的利用率.一般情况下,我们的家用.公司.公共场合使用的路由器都具有 ...

  5. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  6. Fiddler--一、HTTP协议简介

    在学习Fiddler之前,最好先学习一下HTTP协议. HTTP协议简介 什么是HTTP协议 超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端 ...

  7. MODBUS-RTU通讯协议简介

    MODBUS-RTU通讯协议简介   什么是MODBUS? MODBUS 是MODICON公司最先倡导的一种软的通讯规约,经过大多数公司 的实际应用,逐渐被认可,成为一种标准的通讯规约,只要按照这种规 ...

  8. JavaWeb:Web与HTTP协议简介

    JavaWeb:Web与HTTP协议简介 Web的概念 什么是Web: Web是网络上使用最广泛的分布式应用架构. 旨在共享分布在网络上的各个Web服务器中的所有互相连接的信息. 三个特征: 用HTM ...

  9. CC2540开发板学习笔记(九)—— BLE协议简介

    一.BLE协议简介 1.协议是什么? 协议是一系列的通信标准,双方需要共同按照这进行正常数据 协议是一系列的通信标准,双方需要共同按照这进行正常数据发射和 接收.协议栈是的具体实现形式,通俗点来理解就 ...

随机推荐

  1. Linux 简单打印日志(二)

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> //# ...

  2. [BZOJ5249][九省联考2018]IIIDX:线段树+贪心

    分析 GXZlegend orz 构造出一组合法的解并不是难事,但是我们需要输出的是字典序最大的解. 字典序最大有另一种理解方式,就是让越小的数尽量越靠后. 我们从树的根结点出发,从1开始填数,构造出 ...

  3. 谷歌浏览器安装 socketLog

    第一步(本地浏览器安装调试扩展) 下载扩展包并解压 链接:https://pan.baidu.com/s/14df0ewl_3wjRHc8H1jsrWQ提取码:yyu1 打开谷歌浏览器,地址栏输入 c ...

  4. 使用jQuery创建可删除添加行的动态表格,超级简单实用的方法

    使用jQuery动态的添加和删除表格里面的行,不多说了直接上代码. <!DOCTYPE html> <html> <head> <meta charset=& ...

  5. oracle判断一个字段为空

    比如 insert into table a (a1,b1)values("a1",''); 对于这种情况,因为表里存的是'',其实是没有内容的,要查询这个字段,不能直接使用 se ...

  6. koa2,koa-jwt中token验证实战详解

    用户身份验证通常有两种方式,一种是基于cookie的认证方式,另一种是基于token的认证方式.当前常见的无疑是基于token的认证方式.以下所提到的koa均为koa2版本. token认证的优点是无 ...

  7. C++入门经典-例4.10-使用static变量实现累加

    1:静态变量static可以分为静态局部变量和静态全局变量,静态局部变量的值在函数调用结束后不消失,静态全局变量只能在本源文件中使用. 静态变量属于静态存储方式,它具有以下特点: (1)静态变量在函数 ...

  8. 【转】Diamond -- 分布式配置中心

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  9. what we regret most 国外的调查结果: 一生中最后悔的事情

    http://v.163.com/movie/2013/4/U/9/M93FDHRBE_M93FFFNU9.html 来自为知笔记(Wiz)

  10. jdbcTemplate的queryForList的使用方法

    jdbcTemplate的queryForList的使用方法如下,它不一样的地方是,它获得的结果,会再放到一个map里去: List rows = jdbcTemplate.queryForList( ...