首页 > 其他分享 >网络接口dhcp失败时会获得一个169.254.x.x的IP地址

网络接口dhcp失败时会获得一个169.254.x.x的IP地址

时间:2023-08-05 14:11:53浏览次数:43  
标签:APIPA IP 地址 169.254 IP地址 DHCP 网络接口

最开始发现这个现象是在windows上面,之前以为是dhcp失败后,会有个随机值作为IP地址,以为是个垃圾数据,是windows特有的行为。最近一个项目,基于buildroot构建,用到4G上网功能,在开发其他功能,一直没插SIM卡,总发现4G接口会拿到一个奇怪的IP地址169.254.118.160。测试把这个问题当作一个bug提给了我。我发现这个IP地址每次都是一样,而且不同机器拿到的这个IP也是一样,如果按我以前的推测,这是垃圾数据,应该是个随机值才对,不可能全部一样。在windows上测试,也是一个169.254.x.x的地址,看来这个是故意为之的。果然,上网搜索这个叫APIPA(Automatic Private IP Addressing Allocation),自动专有IP地址分配。

The169.254.0.0/16network is used for Automatic Private IP Addressing, or APIPA. If a DHCP client attempts to get an address, but fails to find a DHCP server after the timeout and retries period it will randomly assume an address from this network.


169.254.0.0/16网络用于自动专用IP寻址或APIPA。如果DHCP客户机尝试获取地址,但在超时和重试后找不到DHCP服务器,它将随机假定来自此网络的地址。其实它还有个条件,就是你没设置网关。169.254.0.0/16这个地址段就是local link address,就是链路本地地址。想要看到这个地址,就需要你的设备支持链路本地地址。

LLA在RFC3927中有详细的描述,它分为三个阶段:

首先:在开始Local link时,需要将自已的IP和掩码网关都设为0,并随机生成一个IP,网段在169.254.1.0到169.254.254.255,RFC3927中建议使用MAC来生成IP地址,这样可以使每个设备生成的IP都不一样,将设备同时探测同一个IP的可能性降到了最低。

其次,发送ARP探测包,选择合适的IP地址:将目的IP地址指向要探测的IP,这里假设该IP为A;如果网络中,IP A被绑定,则占用该IP的主机会回应,设备在收到的ARP回应中,如果发现源IP是A,则表示冲突;当然,还有一种情况,可能有其它的设备也在探测这个IP,那么,在这种情况下,选择放弃该IP,重新开始配置。

最后,探测包发完了,并且在规定的时间内没有收到来自源IP为A的主机回应,则认为该IP没有被占用,于是设置本机IP为A,RFC3927 2.5节中描述,地址冲突的检测并不局限于地址选择阶段,在任何时候,如果设备收到一个ARP,其中源IP地址和本机IP一致,但MAC不一致,都将认为这是一个冲突。

那么如何禁用它呢?在linux下,dhcpcd.conf里面加上noipv4ll选项即可。

参考:

标签:APIPA,IP,地址,169.254,IP地址,DHCP,网络接口
From: https://www.cnblogs.com/thammer/p/17607897.html

相关文章

  • linux更换IP地址
    1、ifconfig查看网卡名 2、进入网络配置文件目录,找到我们需要修改的配置文件 cd/etc/sysconfig/network-scripts/ 我们需要修改的是ifcfg-ens192文件,修改前备份cp ifcfg-ens192 ifcfg-ens192.20230804.bakvi编辑文件,修改后保存TYPE=EthernetPROXY_METHOD=noneBRO......
  • asp.net中获得客户端的IP地址
    原文链接:https://blog.csdn.net/as2712101/article/details/9357777今天看到的一个方法,来查下: 通常我们都通过下面的代码获得IP:   string ip=System.Web.HttpContext.Current.Request.UserHostAddress;    或 string ip=System.Web.HttpContext.Current.Request.S......
  • C#获取内外网IP地址
    记录有效获取IP的方法外网IP:publicstaticstringGetIPAddress(){stringip="0.0.0.0";try{WebClientMyWebClient=newWebClient();MyWebClient.Credentials=CredentialCac......
  • linux环境中,如何知道访问某个IP地址,数据包是从哪个网卡出去的?
    使用如下的命令,确定访问某个IP的时候,数据包是从哪个网卡出去的iprouteget<destination_ip> destination_ip:表示的是,要访问的IP地址。 示例:[root@centos7~]#iprouteget110.242.68.3110.242.68.3via10.0.2.2devenp0s3src10.0.2.15cache[root@cen......
  • 域名解析成IP地址的网络工具
    网站:https://ipaddress.com   《访问》  ......
  • k8s中如何固定一个pod的IP地址?该集群网络插件是calico
    1、首先查看calico的CIDR地址范围[root@nccztsjb-node-17~]#calicoctlgetippoolNAMECIDRSELECTORdefault-pool172.23.0.0/16all() 2、然后呢,在这个地址范围内,给pod选择一个固定的IP地址比如:172.23.45.27 通过在pod中加入annotat......
  • 3.获取网络接口相关的信息
    GettinginformationabouttheNetworkinterfacesigconfig命令,是net-tools软件包的一部分。ipaddress|addr|ashow如果只想显示ipv4或者ipv6地址,可用:ip-4address1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000......
  • php获取用户真实ip地址的方法
    ​大家应该都有所体会,如果是做大型项目的话,比如做一个全国各地区的信息港网站,网站获取用户的本地信息就很关键了,比如58分类信息网,在用户访问的时候会自己判断用户所在地的信息,然后可以跳转到相应的分站上面,这样给用户的体验很好,而不是全国各地的用户全部都来访问北京站或者上海站......
  • HJ33 整数与IP地址间的转换
    1.题目读题HJ33 整数与IP地址间的转换  考查点 2.解法思路 二进制与十进制的互转可参照  Java中十进制二进制相互转换的方法代码逻辑 具体实现 publicclassIP2Num{publicstaticvoidmain(String[]args){Scannersc=newScanner(S......
  • 第5章 IP地址管理和DHCP故障转移
    第5章IP地址管理和DHCP故障转移5.1IPAMIP地址管理(IPAddressManagement,IPAM)并不仅仅是一个规定如何管理IP地址的新的时髦词汇;它实际上是Windows2012R2的一个非常酷的新功能,该功能与已有的企业DNS和DHCP部署集成之后,将简化网络的复杂度。5.1.2IPAM的组件IPAM由三......