亲爱的用户,打开微信,搜索公众号:“风云说通信”,即可免费阅读该文章~~
目录
1. dhcp协议
1.1 dhcp协议理解
dhcp定义:
dhcp(dynamic host configuration protocol,动态主机配置协议),前身是bootp协议,是一个局域网的网络协议,位于osi模型的应用层,使用udp协议工作,dhcp通常被用于局域网环境,主要作用是集中的管理、分配ip地址,使client动态的获得ip地址、gateway地址、dns服务器地址等信息,并能够提升地址的使用率。简单来说,dhcp就是一个不需要账号密码登录的、自动给内网机器分配ip地址等信息的协议。
dhcp端口号:
-
dhcp主要有两个端口号,分别是udp 67和udp 68
-
dhcp客户端向dhcp服务器发送报文时采用67端口号,dhcp服务器向dhcp客户端发送报文时采用68端口号(服务端监听的端口为67,客户端监听的端口为68)
dhcp作用:
-
动态分配ip地址,过程自动化,终端无需一一手工配置,配置信息统一管理(dns,网关),ip地址有限、需要大量配置ip地址、经常移动终端。主要有两个用途:
1. 用于内部网或网络服务供应商自动分配ip地址给用户
2. 用于内部网管理员对所有电脑作中央管理
-
使用dhcp分配地址的优势:
1.减少ip地址的配置
2.防止ip地址冲突
3.简化运维(所有的终端ip都由dhcp服务器分配,集中管理监控)
dhcp适用性:
-
dhcp用一台或一组dhcp服务器来管理网络参数的分配,这种方案具有容错性。甚至对于那些很少改变地址的服务器来说,dhcp仍然被建议用来设置它们的地址。如果服务器需要被重新分配地址(rfc 2071)的时候,就尽可能不去做更改。对于一些设备,如路由器和防火墙,则不应使用dhcp。
-
把tftp或ssh服务器放在同一台运行dhcp的机器上也是有用的,目的是为了集中管理。dhcp也可用于直接为服务器和桌面计算机分配地址,并且透过一个ppp代理,也可为拨接及宽带的主机,以及住宅nat网关和路由器分配地址。dhcp一般不适用于使用在无边际路由器和dns服务器上。
dhcp历史:
dhcp于1993年10月成为标准协议,其前身是bootp协议。当前的dhcp定义可以在rfc 2131中找到,而基于ipv6的建议标准(dhcpv6)可以在rfc 3315中找到。
dhcp原理:
-
动态主机设置协议(dhcp)是一种使网络管理员能够集中管理和自动分配ip网络地址的通信协议。
-
在ip网络中,每个连接internet的设备都需要分配唯一的ip地址。dhcp使网络管理员能从中心节点监控和分配ip地址。当某台计算机移到网络中的其它位置时,能自动收到新的ip地址。
-
dhcp使用了租约的概念,或称为计算机ip地址的有效期。租用时间是不定的,主要取决于用户在某地连接internet需要多久,这对于教育行业和其它用户频繁改变的环境是很实用的。透过较短的租期,dhcp能够在一个计算机比可用ip地址多的环境中动态地重新配置网络。dhcp支持为计算机分配静态地址,如需要永久性ip地址的web服务器。
-
dhcp和另一个网络ip管理协议bootp类似。当前两种配置管理协议都得到了普遍使用,其中dhcp更为先进。某些操作系统,如windows nt/2000,都带有dhcp服务器。dhcp或bootp客户端是装在计算机中的一个程序,这样就可以对其进行配置操作。
dhcp分配ip地址方式:
(1)手工配置方式:通过网络管理员手工配置某台客户端特定的ip地址,当客户端请求分配时,dhcp服务器就将手动配置的ip地址分配给客户端。
(2)自动配置方式:当dhcp客户端第一次向服务端租用到第一个ip地址后,就将这个ip地址永久分配给客户端使用。
(3)动态配置方式:服务器暂时分配一个ip地址给客户端,根据租约到期或者续约租期的方式来管理分配的ip地址。
1.2 dhcp报文种类
dhcp一共有8种报文,各种类型报文的基本功能如下:
报文类型 | 说明 |
---|---|
discover(0x01) | dhcp客户端在请求ip地址时并不知道dhcp服务器的位置,因此dhcp客户端会在本地网络内以广播方式发送discover请求报文,以发现网络中的dhcp服务器。所有收到discover报文的dhcp服务器都会发送应答报文,dhcp客户端据此可以知道网络中存在的dhcp服务器的位置。 |
offer(0x02) | dhcp服务器收到discover报文后,就会在所配置的地址池中查找一个合适的ip地址,加上相应的租约期限和其他配置信息(如网关、dns服务器等),构造一个offer报文,发送给dhcp客户端,告知用户本服务器可以为其提供ip地址。但这个报文只是告诉dhcp客户端可以提供ip地址,最终还需要客户端通过arp来检测该ip地址是否重复。 |
request(0x03) | dhcp客户端可能会收到很多offer请求报文,所以必须在这些应答中选择一个。通常是选择第一个offer应答报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的request请求报文,通告选择的服务器,希望获得所分配的ip地址。另外,dhcp客户端在成功获取ip地址后,在地址使用租期达到50%时,会向dhcp服务器发送单播request请求报文请求续延租约,如果没有收到ack报文,在租期达到87.5%时,会再次发送广播的request请求报文以请求续延租约。 |
ack(0x05) | dhcp服务器收到request请求报文后,根据request报文中携带的用户mac来查找有没有相应的租约记录,如果有则发送ack应答报文,通知用户可以使用分配的ip地址。 |
nak(0x06) | 如果dhcp服务器收到request请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配ip地址,则向dhcp客户端发送nak应答报文,通知用户无法分配合适的ip地址。 |
release(0x07) | 当dhcp客户端不再需要使用分配ip地址时(一般出现在客户端关机、下线等状况)就会主动向dhcp服务器发送release请求报文,告知服务器用户不再需要分配ip地址,请求dhcp服务器释放对应的ip地址。 |
decline(0x04) | dhcp客户端收到dhcp服务器ack应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向dhcp服务器发送decline请求报文,通知服务器所分配的ip地址不可用,以期获得新的ip地址。 |
inform(0x08) | dhcp客户端如果需要从dhcp服务器端获取更为详细的配置信息,则向dhcp服务器发送inform请求报文;dhcp服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向dhcp客户端发送ack应答报文。目前基本上不用了。 |
1.3 dhcp报文各字段的含义
-
op:报文的操作类型。分为请求报文和响应报文。1:请求报文,2:应答报文。即client送给server的封包,设为1,反之为2。
请求报文:dhcp discover、dhcp request、dhcp release、dhcp inform和dhcp decline。
应答报文:dhcp offer、dhcp ack和dhcp nak。
-
htype:dhcp客户端的mac地址类型。mac地址类型其实是指明网络类型。htype值为1时表示为最常见的以太网mac地址类型。
-
hlen:dhcp客户端的mac地址长度。以太网mac地址长度为6个字节,即以太网时hlen值为6。
-
hops:dhcp报文经过的dhcp中继的数目,默认为0。dhcp请求报文每经过一个dhcp中继,该字段就会增加1。没有经过dhcp中继时值为0。(若数据包需经过router传送,每站加1,若在同一网内,为0。)
-
xid:客户端通过dhcp discover报文发起一次ip地址请求时选择的随机数,相当于请求标识。用来标识一次ip地址请求过程。在一次请求中所有报文的xid都是一样的。
-
secs:dhcp客户端从获取到ip地址或者续约过程开始到现在所消耗的时间,以秒为单位。在没有获得ip地址前该字段始终为0。(dhcp客户端开始dhcp请求后所经过的时间。目前尚未使用,固定为0。)
-
flags:标志位,只使用第0比特位,是广播应答标识位,用来标识dhcp服务器应答报文是采用单播还是广播发送,0表示采用单播发送方式,1表示采用广播发送方式。其余位尚未使用。(即从0-15bits,最左1bit为1时表示server将以广播方式传送封包给client。)
注意:在客户端正式分配了ip地址之前的第一次ip地址请求过程中,所有dhcp报文都是以广播方式发送的,包括客户端发送的dhcp discover和dhcp request报文,以及dhcp服务器发送的dhcp offer、dhcp ack和dhcp nak报文。当然,如果是由dhcp中继器转的报文,则都是以单播方式发送的。另外,ip地址续约、ip地址释放的相关报文都是采用单播方式进行发送的。
-
ciaddr:dhcp客户端的ip地址。仅在dhcp服务器发送的ack报文中显示,因为在得到dhcp服务器确认前,dhcp客户端是还没有分配到ip地址的。在其他报文中均显示,只有客户端是bound、renew、rebinding状态,并且能响应arp请求时,才能被填充。
-
yiaddr:dhcp服务器分配给客户端的ip地址。仅在dhcp服务器发送的offer和ack报文中显示,其他报文中显示为0。
-
siaddr:下一个为dhcp客户端分配ip地址等信息的dhcp服务器ip地址。仅在dhcp offer、dhcp ack报文中显示,其他报文中显示为0。(用于bootstrap过程中的ip地址)
一般来说是服务器的ip地址.但是注意!根据openwrt源码给出的注释,当报文的源地址、siaddr、option>server_id字段不一致(有经过跨子网转发)时,通常认为option>srever_id字段为真正的服务器ip,siaddr有可能是多次路由跳转中的某一个路由的ip
-
giaddr:dhcp客户端发出请求报文后经过的第一个dhcp中继的ip地址。如果没有经过dhcp中继,则显示为0。(转发代理(网关)ip地址)
-
chaddr:dhcp客户端的mac地址。在每个报文中都会显示对应dhcp客户端的mac地址。
-
sname:为dhcp客户端分配ip地址的dhcp服务器名称(dns域名格式)。在offer和ack报文中显示发送报文的dhcp服务器名称,其他报文显示为0。
-
file:dhcp服务器为dhcp客户端指定的启动配置文件名称及路径信息。仅在dhcp offer报文中显示,其他报文中显示为空。
-
options:可选项字段,长度可变,格式为”代码+长度+数据”,细节如下:
代码 | 长度(字节) | 说明 |
---|---|---|
1 | 4 | 子网掩码 |
3 | 长度可变,必须是4字节的倍数 | 默认网关(可以是一个路由器ip地址列表) |
6 | 长度可变,必须是4字节的倍数 | dns服务器(可以是一个dns服务器ip地址列表) |
15 | 长度可变 | 域名称(主dns服务器名称) |
42 | 长度可变,必须是4字节的倍数 | ntp服务器(可以是一个ntp服务器ip地址列表) |
44 | 长度可变,必须是4字节的倍数 | wins服务器(可以是一个wins服务器ip地址列表) |
51 | 4 | 有效租约期(以秒为单位) |
53 | 1 | 报文类型(1 ~ 8)分别表示:discover,offer,request,decline,ack,nak,release,inform |
58 | 4 | 续约时间 |
60 | 长度可变 | authentication for dhcp message,用来完成基于标准dhcp协议,以在客户端输入用户名和密码的方式进行地址鉴权主要用在按用户认证收费场合,与之对应的是pppoe认证计费 |
255 | 0 | 标记options结束 |
options在报文中展现如下:
有同学喜欢表格形式展示dhcp各字段含义,在此也提供给大家了哦~
字段 | 长度 | 含义 |
---|---|---|
op | 1字节 | 表示报文的类型:
|
htype | 1字节 | 表示硬件地址的类型。对于以太网,该类型的值为“1”。 |
hlen | 1字节 | 表示硬件地址的长度,单位是字节。对于以太网,该值为6。 |
hops | 1字节 | 跳数。客户端设置为0,也能被一个代理服务器设置。 |
xid | 4字节 | 事务id,由客户端选择的一个随机数,被服务器和客户端用来在它们之间交流请求和响应,客户端用它对请求和应答进行匹配。该id由客户端设置并由服务器返回,为32位整数。 |
secs | 2字节 | 由客户端填充,表示从客户端开始获得ip地址或ip地址续借后所使用了的秒数。 |
flags | 2字节 | 此字段在bootp中保留未用,在dhcp中表示标志字段。 flags字段格式 0 15 +---------------------------------+ | b | flags(2) | +---------------------------------+ 只有标志字段的最高位才有意义,其余的位均被置为0。 最左边的字段被解释为广播响应标志位,内容如下所示:
|
ciaddr | 4字节 | 客户端的ip地址。只有客户端是bound、renew、rebinding状态,并且能响应arp请求时,才能被填充。 |
yiaddr | 4字节 | "你自己的"或客户端的ip地址。 |
siaddr | 4字节 | 表明dhcp协议流程的下一个阶段要使用的服务器的ip地址。 |
giaddr | 4字节 | 该字段表示第一个dhcp中继的ip地址(注意:不是地址池中定义的网关)。当客户端发出dhcp请求时,如果服务器和客户端不在同一个网络中,那么第一个dhcp中继在转发这个dhcp请求报文时会把自己的ip地址填入此字段。服务器会根据此字段来判断出网段地址,从而选择为用户分配地址的地址池。服务器还会根据此地址将响应报文发送给此dhcp中继,再由dhcp中继将此报文转发给客户端。 若在到达dhcp服务器前经过了不止一个dhcp中继,那么第一个dhcp中继后的中继不会改变此字段,只是把hops的数目加1。 |
chaddr | 16字节 | 该字段表示客户端的mac地址,此字段与前面的“hardware type”和“hardware length”保持一致。当客户端发出dhcp请求时,将自己的硬件地址填入此字段。对于以太网,当“hardware type”和“hardware length”分别为“1”和“6”时,此字段必须填入6字节的以太网mac地址。 |
sname | 64字节 | 该字段表示客户端获取配置信息的服务器名字。此字段由dhcp server填写,是可选的。如果填写,必须是一个以0结尾的字符串。 |
file | 128字节 | 该字段表示客户端的启动配置文件名。此字段由dhcp server填写,是可选的,如果填写,必须是一个以0结尾的字符串。 |
options | 可变 | 该字段表示dhcp的选项字段,至少为312字节,格式为"代码+长度+数据"。dhcp通过此字段包含了服务器分配给终端的配置信息,如网关ip地址,dns服务器的ip地址,客户端可以使用ip地址的有效租期等信息。 |
下一期,将细致讲解dhcp工作原理!敬请关注!
发表评论