DHCP称为什么协议.docx
《DHCP称为什么协议.docx》由会员分享,可在线阅读,更多相关《DHCP称为什么协议.docx(9页珍藏版)》请在冰点文库上搜索。
DHCP称为什么协议
竭诚为您提供优质文档/双击可除
DHCP称为什么协议
篇一:
dhcp协议简介
dhcp,全称是dynamichostconfigurationprotocol﹐中文名为动态主机配置协议,它的前身是bootp,它工作在osi的应用层,是一种帮助计算机从指定的dhcp服务器获取它们的配置信息的自举协议。
dhcp使用客户端/服务器模式,请求配置信息的计算机叫做dhcp客户端,而提供信息的叫做dhcp的服务器。
dhcp为客户端分配地址的方法有三种:
手工配置、自动配置、动态配置。
dhcp最重要的功能就是动态分配。
除了ip地址,dhcp分组还为客户端提供其他的配置信息,比如子网掩码。
这使得客户端无需用户动手就能自动配置连接网络。
dhcp的工作流程
发现阶段,即dhcp客户机寻找dhcp服务器的阶段。
dhcp客户机以广播方式(因为dhcp服务器的ip地址对于客户机来说是未知的)发送dhcpdiscover发现信息来寻找dhcp服务器,即向地址255.255.255.255发送特定的广播信息。
网络上每一台安装了tcp/ip协议的主机都会接收到这种广播信息,但只有dhcp服务器才会做出响应。
提供阶段,即dhcp服务器提供ip地址的阶段。
在网络中接收到dhcpdiscover发现信息的dhcp服务器都会做出响应,它从尚未出租的ip地址中挑选一个分配给dhcp客户机,向dhcp客户机发送一个包含出租的ip地址和其他设置的dhcpoffer提供信息。
选择阶段,即dhcp客户机选择某台dhcp服务器提供的ip地址的阶段。
如果有多台dhcp服务器向dhcp客户机发来的dhcpoffer提供信息,则dhcp客户机只接受第一个收到的dhcpoffer提供信息,然后它就以广播方式回答一个dhcprequest请求信息,该信息中包含向它所选定的dhcp服务器请求ip地址的内容。
之所以要以广播方式回答,是为了通知所有的dhcp服务器,他将选择某台dhcp服务器所提供的ip地址。
确认阶段,即dhcp服务器确认所提供的ip地址的阶段。
当dhcp服务器收到dhcp客户机回答的dhcprequest请求信息之后,它便向dhcp客户机发送一个包含它所提供的ip地址和其他设置的dhcpack确认信息,告诉dhcp客户机可以使用它所提供的ip地址。
然后dhcp客户机便将其tcp/ip协议与网卡绑定,另外,除dhcp客户机选中的服务器外,其他的dhcp服务器都将收回曾提供的ip地址。
重新登录,以后dhcp客户机每次重新登录网络时,就不需要再发送dhcpdiscover发现信息了,而是直接发送包含前一次所分配的ip地址的dhcprequest请求信息。
当dhcp服务器收到这一信息后,它会尝试让dhcp客户机继续使用原来的ip地址,并回答一个dhcpack确认信息。
如果此ip地址已无法再分配给原来的dhcp客户机使用时(比如此ip地址已分配给其它dhcp客户机使用),则dhcp服务器给dhcp客户机回答一个dhcpnack否认信息。
当原来的dhcp客户机收到此dhcpnack否认信息后,它就必须重新发送dhcpdiscover发现信息来请求新的ip地址。
更新租约,dhcp服务器向dhcp客户机出租的ip地址一般都有一个租借期限,期满后
dhcp服务器便会收回出租的ip地址。
如果dhcp客户机要延长其ip租约,则必须更新其ip租约。
dhcp客户机启动时和ip租约期限过一半时,dhcp客户机都会自动向dhcp服务器发送更新其ip租约的信息。
dhcp的报文格式
我们来介绍一下dhcp的报文格式,如图1,
(图1dhcp的报文格式)
1.op:
若是client送给server的封包,设为1,反向为2;
2.htype:
硬件类别,ethernet为1;
3.hlen:
硬件长度,ethernet为6;
4.hops:
若数据包需经过router传送,每站加1,若在同一网内,为0;
5.transactionid:
事务id,是个随机数,用于客户和服务器之间匹配请求和相应
消息;
6.seconds:
由用户指定的时间,指开始地址获取和更新进行后的时间;
7.Flags:
从0-15bits,最左一bit为1时表示server将以广播方式传送封包给client,
其余尚未使用;
8.ciaddr:
用户ip地址;
9.yiaddr:
客户ip地址;
10.siaddr:
用于bootstrap过程中的ip地址;
11.giaddr:
转发代理(网关)ip地址;
12.chaddr:
client的硬件地址;
13.sname:
可选server的名称,以0x00结尾;
14.File:
启动文件名;
15.options:
,厂商标识,可选的参数字段解码信息
通过dhcp的工作流程,我们知道从dhcp服务器获取配置信息的4个阶段中,dhcp客户端会出现有4种报文(dhcpdiscoVeRy,dhcpoFFeR,dhcpRequest,dhcpack)。
我们分别来看看4报文的解码内容:
发现阶段
使用网络分析系统捕获dhcpdiscoVeRy数据包,如图2,
(图2dhcpdiscoVeRy
数据包解码)
由图2可以看到dhcpdiscoVeRy包的解码信息,由于dhcp是bootp的以个扩展,,dhcp兼容bootp,我们可以看到bootp和dhcp的解码。
提供阶段
使用网络分析系统捕获dhcpoFFeR数据包,如图3,
(图3dhcpoFFeR
数据包解码)
选择阶段
使用网络分析系统捕获dhcpRequest数据包,如图4,
篇二:
dhcp协议分析
dhcp协议分析
一、dhcp协议简介
dhcp,全称是dynamichostconfigurationprotocol﹐中文名为动态主机配置协议,是一种局域网的网络协议,基于udp协议工作。
dhcp有客户端和服务器模式,请求配置信息的计算机叫做dhcp客户端,而提供信息的叫做dhcp的服务器。
dhcp有3个端口,其中67和68为正常的dhcp服务端口,分别作为dhcpserver和dhcpclient的服务端口;546号端口用于dhcpv6client,而不用于dhcpv4。
dhcp为客户端分配地址的方法有三种:
手工配置、自动配置、动态配置。
dhcp最重要的功能就是动态分配。
除了ip地址,dhcp分组还为客户端提供其他的配置信息,比如子网掩码。
这使得客户端无需用户动手就能自动配置连接网络。
1.dhcp的工作流程
discover发现阶段:
即dhcp客户机寻找dhcp服务器的阶段。
此时客户端没有ip地址,也不知道服务器的ip地址,dhcp客户机以广播方式(即向地址255.255.255.255)发送dhcpdiscover报文来寻找dhcp服务器。
网络上每一台安装了tcp/ip协议的主机都会接收到这种广播信息,但只有dhcp服务器才会做出响应。
offer提供阶段:
即dhcp服务器提供ip地址的阶段。
接收到dhcpdiscover报文的dhcp服务器都会做出响应,即向dhcp客户机发送一个包含还未出租的ip地址和其他设置的dhcpoffer报文信息。
Request选择阶段:
即dhcp客户机选择某台dhcp服务器提供的ip地址的阶段。
如果有多台dhcp服务器发来dhcpoffer,则客户机只接受第一个,然后就以广播方式回答一个dhcprequest请求信息,该信息中包含了它所选定的dhcp服务器的ip地址和服务器提供给客户端的ip地址等内容。
之所以要以广播方式回答,是为了通知所有的dhcp服务器,他将选择某台dhcp服务器所提供的ip地址。
ack确认阶段:
即dhcp服务器对客户机的应答,确认提供ip地址。
当服务器收到dhcprequest之后,便向dhcp客户机发送一个包含它所提供的ip地址和其他设置的dhcpack报文,告诉dhcp客户机可以使用该ip地址。
然后dhcp客户机便将其tcp/ip协议与网卡绑定,另外,除dhcp客户机选中的服务器外,
其他的dhcp服务器将收回曾提供的ip地址。
重新登录,以后dhcp客户机每次重新登录网络时,不需要再发送dhcpdiscover了,而是直接发送包含前一次所分配的ip地址的dhcprequest请求信息。
当dhcp服务器收到这一信息后,它会尝试让dhcp客户机继续使用原来的ip地址,并回答一个dhcpack确认信息。
如果此ip地址已无法再分配给原来的dhcp客户机使用时(比如此ip地址已分配给其它dhcp客户机使用),则dhcp服务器给dhcp客户机回答一个dhcpnack否认信息。
当原来的dhcp客户机收到此dhcpnack否认信息后,它就必须重新发送dhcpdiscover发现信息来请求新的ip地址。
更新租约,dhcp服务器向dhcp客户机出租的ip地址一般都有一个租借期限,期满后dhcp服务器便会收回出租的ip地址。
如果dhcp客户机要延长其ip租约,则必须更新其ip租约。
dhcp客户机启动时和ip租约期限过一半时,dhcp客户机都会自动向dhcp服务器发送更新其ip租约的信息。
2、dhcp协议报文
dhcp协议报文的格式如图1所示,括号内为长度。
图一dhcp协议报文格式报文解析:
1)op
(1):
dhcp报文的操作类型,“1”为客户端向服务器发送请求的报文,“2”为服务器响应客户端的报文;
2)htype
(1):
客户端网络硬件地址类型,“1”表示客户端的网络硬件是10mb的以太网类型(ethernet);
3)hlen
(1):
客户端的网络硬件地址长度。
“6”表示client的网络硬件地址长度是6bytes(即以太网类型的6bytes的mac地址);
注:
mac地址,也叫硬件地址,是由48比特/bit长(6字节/byte,1byte=8bits),16进制的数字组成.0-23位叫做组织唯一标志符(organizationallyunique,是识别lan(局域网)节点的标识。
24-47位是由厂家自己分配.其中第40位是组播地址标志位。
4)hops
(1):
跳数,即dhcp报文经过的dhcpRelay(中继)数,每经过一个dhcpRelay该字段就加一,此字段的作用是限制dhcp报文不要经过太多的dhcpRelay,协议规定,当“hops”大于4(现在也有规定为16)时,这个dhcp报文就不能再进行处理,而是丢弃;
5)xid(4):
客户端发起依稀请求时选择的随机数,用来标识一次地址请求过程;
6)secs
(2):
dhcp客户端开始dhcp请求后经过的时间;
7)Flags
(2):
标识dhcp服务器响应报文是单播还是广播发送,只用第一个比特;
8)cliaddr(4):
dhcp客户端ip地址;
9)yiaddr(4):
dhcp服务器分配给客户端的ip地址;
10)siaddr(4):
dhcp客户端获取ip地址等信息的服务器ip地址;
11)giaddr(4):
dhcp客户端发出请求报文后经过的第一个dhcp中继ip;
12)chaddr(4):
dhcp客户端的硬件地址,即mac地址;
13)sname(64):
dhcp客户端获取ip地址等信息的服务器名称;
14)file(128):
服务器客户端指定的启动配置的名称;
15)option(variable):
可选变长选项字段,包含报文的类型、有效租期、dns(domainnamesystem,域名系统)、服务器的ip地址等配置信息。
二、wireshark抓包分析:
1、在windows下面进行抓包的步骤:
1)首先打开wireshark,开始抓包;
2)在cmd中执行ipconfig/release,该命令的作用是用来释放ip,如果出现如下提示信息,表明本地连接没有设置成自动获取;
在网络连接中将本地连接设成自动获取,再次执行ipconfig/release,释放ip成功。
wireshark抓包如图:
3)执行命令ipconfig/renew,发起一个dhcp过程,分析从这里开始。
从wireshark抓包可以看到dhcp过程中的4种报文,即dhcpdiscover、dhcpoffer、dhcpRequest、dhcpack。
篇三:
dhcp协议分析
dhcp协议分析
dhcp协议封装
dhcp协议是基于udp层之上的应用,dhcpclient将采用端口号68,dhcpseRVeR采用端口号67,其报文内容的封装如下所示:
链路层头
其中:
链路层头:
承载报文的链路层信息头。
ip头:
标准ip协议头,ipV4中长度为20bytes,包括srcip,dstip等信息。
udp头:
8个bytes,包括srcport,dstport,报文长度及udp校验和等信息。
dhcp报文:
具体的dhcp报文内容。
ip头udp头dhcp报文由于dhcp协议是让终端获取ip地址的协议,所以终端是没有ip地址的。
为了能够正常的收发dhcp报文,采取了如下措施:
a)、链路层的封装必须是广播形式,即让在同一物理子网中的所有主机都能够收到这个报文,在ethernet_ii格式的网络中,是dstmac为全1。
b)、由于终端没有ip地址,ip头中的srcip规定填为全0。
c)、当终端发出dhcp请求报文,并不知道dhcpseRVeR的ip地址,因此ip头中的dstip填为有限的子网广播ip——全1,保证dhcpseRVeR的ip协议栈不丢弃这个报文。
d)、上面的措施保证了dhcpseRVeR能够收到终端的请求报文,但仅凭链路层和ip层信息,dhcpseRVeR无法区分出dhcp报文,因此终端发出的dhcp请求报文的udp层中的srcport为68,dstport为67,即dhcpseRVeR通过端口号67来判断一个报文是否是dhcp报文。
dhcp报文格式
op:
报文的操作类型,分为请求报文和响应报文,1为请求报文;2为响应报文。
具体的报文类型在option字段中标识。
htype:
硬件地址类型。
hlen:
硬件地址长度。
系统目前只对以太网支持,硬件地址长度固定为6。
hops:
dhcp报文经过的dhcp中继的数目。
dhcp请求报文每经过一个dhcp中继,该字段就会增加1。
xid:
由客户端软件产生的随机数,用于匹配请求和应答报文。
secs:
客户端进入ip地址申请进程的时间或者更新ip地址进程的时间;由客户端软件根据情况设定。
目前没有使用,固定为0。
flags:
标志字段。
第一个比特为广播响应标识位,用来标识dhcp服务器响应报文是采用单播还是广播方式发送,0表示采用单播方式,1表示采用广播方式。
其余比特保留不用。
ciaddr:
dhcp客户端的ip地址。
yiaddr:
dhcp服务器分配给客户端的ip地址。
siaddr:
dhcp客户端获取ip地址等信息的服务器ip地址。
giaddr:
dhcp客户端发出请求报文后经过的第一个dhcp中继的ip地址。
chaddr:
dhcp客户端的硬件地址。
sname:
dhcp客户端获取ip地址等信息的服务器名称。
file:
dhcp服务器为dhcp客户端指定的启动配置文件名称及路径信息。
options:
可选变长选项字段,包含报文的类型、有效租期、dns服务器的ip地址、wins服务器的ip地址等配置信息。
分析流程图:
dhcp协议包含以下八种类型:
1:
dhcpdiscoVeR(0x01),此为client开始dhcp过程的第一个报文
2:
dhcpoFFeR(0x02),此为server对dhcpdiscoVeR报文的响应
3:
dhcpRequest(0x03),此报文是slient(dhcp称为什么协议)开始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地址,发送此报文,只是为了从dhcpseRVeR处获取其他的一些网络配置信息,如routeip,dnsip等,这种报文的应用非常少见。
以上八种dhcp类型均包含以下特征值(在opendpi中,只需要确认当前检测的协议符合以下五个特征值,就认为当前协议是dhcp协议,并不需要确认具体是哪种dhcp协议类型。
):
一、packet->payload_packet_len>=244
//确认当前检测的数据包的payload区长度大于244
二、(packet->udp->source==htons(67)||packet->udp->source==htons(68))
三、(packet->udp->dest==htons(67)||packet->udp->dest==htons(68))
/*
1)确认当前检测的报文的数据包的udp包的目的端口为67或68。
2)sever的端口位67,client的端口位68。
*/
四、get_u32(packet->payload,236)==htonl(0x63825363)
/*
1)#defineget_u32(x,o)(*(u32*)(((u8*)x)+o))的目的是,从u8型x指针指向的地址区域中,第o个地址开始取四个字节的内容。
2)htonl(u_longhostlong)将主机的无符号长整形数转换成网络字节顺序。
3)从任一dhcp协议类型的
packet->payload区中第236位开始取四个字节,确认magiccookie位的值为dhcp。
*/
五、get_u16(packet->payload,240)==htons(0x3501))
/*
1)#defineget_u16(x,o)(*(u16*)(((u8*)x)+o))的目的是,从u8型x指针指向的地址区域中,第o个地址开始取两个字节的内容。
2)htons(u_shorthostshort)将主机的无符号短整形数转换成网络字节顺序。
3)从任一dhcp协议类型的packet->payload区中第240位开始取两个字节,确认dhcpmessage类型为53且长度为1。
4)0x3501是确认当前payload区位置的option项中t=53且length=1。
5)(检测不需要用到第三个值,Value是用于确认dhcp协议是八种类型中的哪一种,此case中value的值02表示此dhcp协议类型为第二种,dhcpoFFeR
*/
若以上五个特征值完全符合:
则下一步为调用ipoque_int_dhcp_add_connection(ipoque_struct),将当前流和数据包的detected_protocol值标识为ipoque_pRotocol_dhcp。
否则:
将当前流的excluded_protocol_bitmask的ipoque_pRotocol_dhcp位置为1。
排除当前流的是dhcp协议的可能。
至此,dhcp的检测结束。