DHCP原理及报文格式

DHCP(Dynamic Host Configuration
Protocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,它可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等TCP/IP参数。了解DHCP工作过程可以帮助我们排除有关DHCP服务遇到的问题。DHCP

协议是基于UDP层(这也就是说在snort检测过程中,只能看UDP的包)之上的应用,dhcp使用udp携带报文,udp封装在ip数据包中发送。我们先来看下dhcp报文格式

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

Htype:硬件类别,ethernet为1;

Hlen:硬件长度,ethernet为6;

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

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

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

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

Ciaddr:用户IP地址;

Yiaddr:客户IP地址;

Siaddr:用于bootstrap过程中的IP地址;

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

Chaddr:client的硬件地址;

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

File:启动文件名;

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

下面我们主要说下客户机从dhcpserver获取ip的过程,它处于6中状态分别是初始状态,选择状态,请求状态,绑定状态,重新获取状态,重新绑定状态。我们就结合我下面画的这张图好好说下

1.主机启动,dhcp处于INI状态为了获取ip地址,DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCPDISCOVER广播包,请求租用IP地址。该广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户机的MAC地址和计算机名,本地所有的dhcpserver会收到这个报文,数据包中的目标端口设为BOOTP67端口。这时dhcp会处于select状态。

2.处于select状态的主机会接受dhcpserver发来的dhcpoffer报文,每个报文中会包含为客户机配置的信息以及server为客户机提供的租用ip,一般主机会受到零个或者多个offer报文(一般主机会响应第一个offer报文),并与server协商相关事宜,为此主机会发送一个dhcpquest报文,并进入request状态。

3.dhcpserver会给客户机一个ack的确认信息,这时一个dhcp获取过程结束。主机进入BIND稳定状态。

4.假如主机不需要ip地址或者需要换个ip,这时主机会发送一个dhcprelease报文向dhcpserver,这时主机重新处于初始状态。

5.一般服务器给客户机的ip地址都有租期,时间长短不等,而dhcp主机会有3个计时器,当择期过半50%,这时主机会发送一个
dhcprequest报文要求续租进入renew状态,serverdhcp会响应这个报文发送ack确认信息,这时dhcp会重新进入BOND状态。

6.假如dhcpserver没有响应主机的请求,等租期到了87.5%这时主机会重新发送dhcprequest报文要求续租,主机进入
rebind状态,假如这时候dhcpserver不高兴(ip地址不够用)发送来一个否确认信息,这时主机会重新进入初始状态再次按照1——4步骤重新申请ip。假如收到ack老大的确认续租成功,说明这个ip我们还可以继续使用。没有响应,我们的主机只有等到我们ip租期耗尽,重新进入初始状态重新获取。

报文类型:

1)DHCPDISCOVER(0x01),此为Client开始DHCP过程的第一个报文

2)DHCPOFFER(0x02),此为Server对DHCPDISCOVER报文的响应

3)DHCPREQUEST(0x03),此报文是Client开始DHCP过程中对server的DHCPOFFER报文的回应,或者是Client续延IP地址租期时发出的报文

4)DHCPDECLINE(0x04),当Client发现Server分配给它的IP地址无法使用,如IP地址冲突时,将发出此报文,通知Server禁止使用IP地址

5)DHCPACK(0x05),Server对Client的DHCPREQUEST报文的确认响应报文,Client收到此报文后,才真正获得了IP地址和相关的配置信息。

6)DHCPNAK(0x06),Server对Client的DHCPREQUEST报文的拒绝响应报文,Client收到此报文后,一般会重新开始新的DHCP过程。

7)DHCPRELEASE(0x07),Client主动释放server分配给它的IP地址的报文,当Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。

8)DHCPINFORM(0x08),Client已经获得了IP地址,发送此报文,只是为了从DHCP SERVER处获取其他的一些网络配置信息,如route ip,DNS Ip等,这种报文的应用非常少见。

如:运行IPCONFIG/RELEASE后,PC会发出释放IP的报文,DHCP Message Type是7,他的作用是主动释放server分配给它的IP地址的报文,Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。

如果一台客户机未从该DHCP服务器获取过地址,或者它获得的地址已过期,那么它将需要经过全部四个步骤才能得到一个IP地址。

原文地址:https://www.2cto.com/net/201303/197467.html

原文地址:https://www.cnblogs.com/MomentsLee/p/9283622.html

时间: 2024-11-08 23:41:19

DHCP原理及报文格式的相关文章

DHCP报文格式

DHCP报文格式 报文格式 DHCP报文是承载于UDP上的高层协议报文,采用67(DHCP服务器)和68(DHCP客户端)两个端口号. DHCP的报文格式如下图所示. 图1 DHCP报文格式 DHCP报文中各字段的含义: 字段 长度 含义 OP 1字节 表示报文的类型: 1:客户端请求报文 2:服务器响应报文 htype 1字节 表示硬件地址的类型.对于以太网,该类型的值为“1”. hlen 1字节 表示硬件地址的长度,单位是字节.对于以太网,该值为6. Hops 1字节 跳数.客户端设置为0,

21.HCNA-HNTD——DHCP原理与配置

在大型企业网络中,会有大量的主机或设备需要获取IP地址等网络参数.如果采用手工配置,工作量大且不好管理,如果有用户擅自修改网络参数,还有可能会造成IP地址冲突等问题.使用动态主机配置协议DHCP来分配IP地址等网络参数,可以减少管理员的工作量,避免用户手工配置网络参数时造成的地址冲突. 学习目标: 1. 掌握DHCP的应用场景 2. 掌握DHCP的基本原理 3. 掌握DHCP的基本配置 DHCP的应用场景 在大型企业网络中,一般会有大量的主机等终端设备.每个终端都需要配置IP地址等网络参数才能接

OSPF报头及各种报文格式

要理解OSPF路由协议的工作原理,特别是路由更新机制,首先就要对它的各种报文格式有一个全面的了解.OSPF报文主要有5种:Hello报文.DD (Database Description,数据库描述)报文.LSR (LinkState Request,链路状态请求)报文.LSU(LinkState Update,链路状态更新)报文和LSAck(LinkState Acknowledgment,链路状态应答)报文.它们各自在OSPF路由更新中所担当的用途不一样,报文格式也存在比较大的差别. 9.2

DHCP原理及配置

DHCP原理及配置 ? 目录 ????DHCP原理??配置基于接口地址池的DHCP??配置基于全局地址池的DHCP??配置中继DHCP??? ?? 1.DHCP原理 1.1.什么是DHCP? ????1.DHCP(Dynamic Host Configuration Protocol)IETF制定的一种Server/Client模式的动态主机配置协议,提供动态分配网络配置参数的机制,并且可以向后兼容BOOTP协议.??2.其中Server/Client都是指一种应用程序.??? ? 1.2.什么

DHCP原理与配置(含DHCP中继实验)

什么是DHCP协议?一.DHCP协议的基本概念DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种高效的IP地址分配方法,由主机自主控制网络地址的动态分配,使用UDP协议工作. 1.DHCP协议内容DHCP主要分为两部分:地址管理和配置信息的传递 地址管理:地址管理处理IP地址的动态分配,向客户端提供地址租约 配置信息的传递,包含DHCP报文格式,状态机2.使用DHCP的好处 减少管理员的工作量 避免IP地址冲突 当网络更改IP地址时,不需要

HTTP报文格式

 HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. 请求报文 一个HTTP请求报文由请求行(request line).请求头部(header).空行和请求数据4个部分组成,下图给出了请求报文的一般格式. (1)请求行 请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.例如,GET /index.html HTTP/1.1. HTTP协议的请求方法有GET.POST.HEA

TCP报文格式,TCP的三次握手和四次挥手&hosts文件

1.TCP报文格式 TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接 序号(4字节=32位): 37 59 56 75 用来标识TCP发端向TCP收端发送的数据字节流 确认序号(4字节=32位): 由于该报文为SYN报文,ACK标志为0,故没有确认序号(ACK标志为1时确认序号才有效)TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 一旦连接建立,该值将始终发送(同ACK标志) 头部长度:该字段占用4位,用来表示报文首部

SOAP学习,构建实际的报文格式

因为需要做一个SOAP的接口对接,对方环境没有弄好不能抓包,也只会调用不懂格式构成,我们只想做个轻量级的接口,不需要支持SOAP的具体格式,只需要针对接口指定的具体参数名,解析字符串就可以了. 所以需要通过抓包确定一下soap的报文格式,方便做字符串解析和报文拼装. 因此准备构建一个php的soap环境,进行抓包. 当前环境 centos6.3系统,默认php不支持soap,下载了php5.6版本 编译 ./configure  '--with-libxml-dir=/usr/lib' '--w

报文格式【定长报文】

定长报文简介 定长报文,是目前使用最广泛的报文,同时比较简单的报文格式.理解起来也较为简单,但定长报文也有自身的局限性.其中最大的问题在于,如果定义域的长度需要加长,这时候相关的配置与程序代码都需要进行相应的改变,所以维护很不方便. 定长报文,就是使用固定的长度来表示一个信息.本报文格式常见于金融银行业,所以以银行开户场景为例说明,例如银行柜面开户时,需要记录开户人的姓名,假定用户名用30个字节来表示,这样应该就可以满足国人的需要,15个汉字长度.当然我们这里也有开户时间的需要,那我们假定为8位