DHCP协议和dhcpcd源码分析

上传人:jiups****uk12 文档编号:40123045 上传时间:2018-05-23 格式:DOCX 页数:10 大小:209.73KB
返回 下载 相关 举报
DHCP协议和dhcpcd源码分析_第1页
第1页 / 共10页
DHCP协议和dhcpcd源码分析_第2页
第2页 / 共10页
DHCP协议和dhcpcd源码分析_第3页
第3页 / 共10页
DHCP协议和dhcpcd源码分析_第4页
第4页 / 共10页
DHCP协议和dhcpcd源码分析_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《DHCP协议和dhcpcd源码分析》由会员分享,可在线阅读,更多相关《DHCP协议和dhcpcd源码分析(10页珍藏版)》请在金锄头文库上搜索。

1、DHCP 协议和 dhcpcd 源码分析 dhcpcd 是一个 dhcp 客户端程序。下载地址:http:/ 协议的几种报文:协议的几种报文:1 dhcpdiscover: 此为 client 开始 DHCP 过程中的第一个请求报文2 dhcpoffer : 此为 server 对 dhcpdiscover 报文的响应3 dhcprequst : 此为 client 对 dihcpoffer 报文的响应4 dhcpdeclient: 当 client 发现 server 分配给它的 IP 地址无法使用,如 IP 地址发生冲突时,将发出此报文让 server 禁止使用这次分配的 IP 地址。5

2、dhcpack : server 对 dhcprequst 报文的响应,client 收到此报文后才真正获得了 IP地址和相关配置信息。6 dhcpnak : 此报文是 server 对 client 的 dhcprequst 报文的拒绝响应,client 收到此报文后,一般会重新开始 DHCP 过程。7 dhcprelease :此报文是 client 主动释放 IP 地址,当 server 收到此报文后就可以收回 IP 地址分配给其他的 client.DHCP 的工作过程:的工作过程:DHCP 的工作过程主要分为以下六个阶段: 发现阶段,即 DHCP 客户端寻找 DHCP 服务器的阶段。D

3、HCP 客户端首先以广播方式发送 DHCP DISCOVER 发现信息来寻找 DHCP 服务器(因为 DHCP 服务器的 IP 地址对于客户端来说是未知的),即客户端向地址255.255.255.255 发送特定的广播信息。请求信息主要包含客户端的网卡 MAC 地址还有客户端的计算机名称。网络上每一台安装了 TCP/IP 协议的主机都会接收到这种广播信息,但只有 DHCP 服务器才会做出响应。 提供阶段,即 DHCP 服务器提供 IP 地址的阶段。在网络中接收到 DHCP DISCOVER发现信息的 DHCP 服务器都会做出响应,它从尚未出租的 IP 地址中挑选一个分配给 DHCP 客户端,向

4、 DHCP 客户端发送一个包含出租的IP 地址和其他设置的 DHCP OFFER 提供信息。 选择阶段,即 DHCP 客户端选择某台 DHCP 服务器提供的 IP 地址的阶段。如果网络中有多台 DHCP 服务器向DHCP 客户端发来的 DHCP OFFER 提供信息,则 DHCP 客户端只接受第一个收到的DHCP OFFER 提供信息。在客户端收到 DHCP OFFER 提供信息后,会以广播方式回答一个 DHCP REQUEST 请求信息,所有的 DHCP 服务器都会收到这个信息,该信息中包含它所选定的 DHCP 服务器和服务器提供的 IP 地址。之所以要以广播方式回答,是为了通知所有的 DH

5、CP 服务器,他将选择某台 DHCP 服务器所提供的 IP 地址,其他没有被选择的 DHCP 服务器则会收回发出的 IP 地址。 确认阶段,即 DHCP 服务器确认所提供的 IP 地址的阶段。当 DHCP 服务器收到 DHCP客户端回答的 DHCP REQUEST 请求信息之后,它便向 DHCP 客户端发送一个包含它所提供的 IP 地址和其他设置的 DHCP ACK 确认信息,告诉 DHCP 客户端可以使用它所提供的 IP 地址。至此 DHCP 客户端可以使用 DHCP服务器所提供的 IP 地址与网卡绑定。 重新登录阶段。以后 DHCP 客户端每次重新登录网络时,就不需要再发送 DHCP DI

6、SCOVER 发现信息了,而是直接发送包含前一次所分配的 IP 地址的 DHCP REQUEST 请求信息。当 DHCP 服务器收到这一信息后,它会尝试让 DHCP 客户端继续使用原来的 IP 地址,并回答一个 DHCP ACK 确认信息。如果此 IP地址已无法再分配给原来的 DHCP 客户端使用时(比如此 IP 地址已分配给其它 DHCP 客户端使用),则 DHCP 服务器给 DHCP 客户端回答一个 DHCP NACK 否认信息。当原来的 DHCP 客户端收到此 DHCP NACK 否认信息后,它就必须重新发送 DHCP DISCOVER 发现信息来请求新的 IP 地址。 更新租约阶段。D

7、HCP 服务器所提供的 IP 地址一般都是有期限的,我们把这个期限称为租期,租期的长短通过 DHCP 服务器来设置。设置这个期限是为了让那些过了租期又不活动的 IP 能空出来,由 DHCP 服务器重新分配给 DHCP 客户端,这样就会有效减少 IP 地址的浪费现象。期满后DHCP 服务器便会收回出租的 IP 地址。如果 DHCP 客户端要延长其 IP 租约,则必须更新其 IP 租约。DHCP 客户端启动时和 IP 租约期限过一半时,DHCP 客户端都会自动向 DHCP 服务器发送更新其 IP 租约的信息。 如果 DHCP 客户端一直开启,客户端会在租约过去 50%的时候向原 DHCP 服务器提

8、出DHCP REQUEST 请求信息,信息中包含一个客户端正使用的 IP 地址,并请求服务机延长对此地址的租用。如果原服务器同意会发出 DHCP ACK 确认信息。这样,续租成功,客户端获得新的租约。如果这个请求信息没有得到回复,因为租约尚未结束,DHCP 客户端会继续使用原来的 IP,并且每隔大约 2 分钟向原 DHCP 服务器再次发送 DHCP REQUEST 请求信息申请续租。如果到了租约期限的 87.5%,DHCP 客户端依然没有收到原 DHCP 服务器的 DHCP ACK 确认信息,则客户端转为重新绑定状态。在重新绑定状态下,DHCP 客户端会以广播的方式向网络中的所有服务器发送 D

9、HCP REQUEST 请求信息,如果有 DHCP 服务器响应,并发回 DHCP ACK 确认信息则 DHCP 客户端从新的 DHCP服务器获得新的 IP 地址还有新的租约。如果直到租约结束也没有收到任何 DHCP 服务器的 DHCP ACK 确认信息,则 DHCP 客户端会停用租来的 IP 地址,然后返回初始化状态。主函数流程就是:主函数流程就是:do currState=(void *(*)()currState(); while ( currState );执行完一个函数后,返回下一个要执行的函数的地址,继续执行。dhcpcd 一共有一共有 7 种状态种状态:REBOOTING , IN

10、IT , SELECTING , REQUESTING , BOUND , REBINDING , RENEWINGvoid *dhcpReboot()重新启动 DHCPCD 时的动作,这时直接发生 request 申请上次获取到的 IP。void *dhcpInit()用户初始化动作,发送 discover,转换到 SELECTING 状态。void *dhcpRequest(xid,buildDhcpMsg)unsigned xid;void (*buildDhcpMsg)(unsigned);接收服务器的 ACK 报文,对下发的 IP 进行验证,然后转换到 BOUND 状态。void *dhcpBound()将获取到的 IP 设置成网卡的地址,进入绑定状态,等待超时。void *dhcpRenew()当租约定时器超时的时候,发送 request,进行续约。void *dhcpRebind()当 80%租期的时候,服务器还没有回应 ACK,则进行广播 request,若在原租期到期时收到了 ACK 则进入 BOUND 状态,否则转换到 INIT 状态。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号