间隔1.5s发送一次DHCP DISCOVER报文

本文分析了路由器在未获取IP时每隔1.5秒发送DHCP DISCOVER报文的情况,认为这可能是个错误。作者通过源代码追踪,发现了设置发送间隔的函数,并提出了是否为bug还是优化策略的疑问。
摘要由CSDN通过智能技术生成

抓包发现我的路由器,如果没获取IP,会间隔1.5s发送一次DHCP DISCOVER报文,这个肯定是个BUG

正常的DHCP服务的工作过程如下:

如果在局域网中部署了DHCP服务器,并且客户端设置为自动获得IP地址。这样当DHCP客户端第一次登录网络的时候,也 就是客户端发现本机上没有任何IP数据设定,它会向网络发出一个DHCP discover封包。因为客户端还不知道自己属于哪一个网络,所以封包的来源地址会为 0.0.0.0,而目的地址则为255.255.255.255,然后再附上DHCP discover的信息,向网络进行广播。在windows的预设默认情况下,DHCP discover的等待时间预设为1秒,也就是当客户端将第一个DHCP discover封包送出去之后,在1秒之内没有得到响应的话,就会进行第二次DHCP discover广播。若一直得不到响应的情况下,客户端一共会有四次DHCP discover广播(包括第一次在内)。除了第一次会等待1秒之外,其余三次的等待时间分别是9、13、16秒。如果都没有得到DHCP服务器的响应, 客户端则会显示错误信息,宣告DHCP discover的失败。之后,基于使用者的选择,系统会继续在5分钟之后再重复一次DHCP discover的过程;当DHCP服务器收到DHCP客户机广播的DHCP discover信息后,它会向DHCP客户机发送DHCP offer信息,其中包括一个可租用的IP地址。一旦客户机收到DHCP offer信息,就将使用服务器所提供的IP地址。(http://blog.chinaunix.net/uid-14239467-id-93140.html)


那么如何解决呢?

刚开始以为控制DHCP就是在dhcp.c文件里面,但是printf打印却没有相关信息,后来找到了相关文件,是dhcp_port.c文件

刚开始运行的是这个函数,当然可以找到在set_wan.c里面有:

        if (wan_type == DHCP_CLIENT)   //当为DHCP客户端时候         
   wandhcpc_startup(wan_interface, dns_mode);

函数注释如下:

__externC int wandhcpc_startup(char *if_name, int dns_mode)
{
diag_printf("enter dhcpc_startup\n");//在串口打印信息里面可以找到这条打印信息
if (wandhcpc_started==1)
{
diag_printf("DHCPC has already been startup\n");//串口里面没有找到这条打印信息
return(-1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值