IP地址分配的“死循环”:一次跨设备开发的故事
1 引言
今天,在局域网内开发一个跨设备的项目时,遇到了一个令人费解的问题。我的电脑A上搭建了MySQL数据库,手动分配了一个IP地址:192.168.1.8;我的电脑B上运行着前端和Java后端服务,手机C上也同时测着网页。
▼text复制代码电脑A == MySQL数据库 (ip=192.168.1.8) 电脑B == 前端和Java后端服务 手机C == 测试网页
我发现手机查看某个列表页的时候,数据查询失败了。
2 修改跨域配置的尝试
起初,我以为是手机和后端服务的跨域问题导致了数据无法正常传输,于是我在Java后端服务中添加了跨域配置:
▼java复制代码@CrossOrigin( origins = "*", allowedHeaders = "*" )
然而,即使放开了跨域限制,问题依旧存在。
3 网络配置的深入排查
我开始怀疑是不是电脑A的网络配置问题。于是检查了防火墙设置,确保MySQL端口在入站规则中开放,并在my.ini文件中调整了MySQL的配置,以允许来自任何IP的连接。重启MySQL服务后,问题似乎并未得到解决。
我猜测可能配置没有生效,干脆重启了电脑A,奇迹出现了,电脑B恢复了正常,数据库能正常连接了。但当我再次用手机C查看列表页时,问题再次出现,而且连电脑B也无法连接到电脑A上的数据库了。
4 意外的发现与恍然大悟
就在我几乎要放弃的时候,我无意中查看了手机C的Wi-Fi IP配置,给我惊掉下巴:手机的IP地址自动分配成了192.168.1.8,与电脑A上的IP地址完全相同!
▼text复制代码电脑A == MySQL数据库 (手动分配ip=192.168.1.8) 电脑B == 前端和Java后端服务 (自动分配ip=192.168.1.3) 手机C == 测试网页 (自动分配ip=192.168.1.8)
后面经过一番请教AI老师,得到如下信息
4.1 IP地址冲突的影响
在局域网中,如果两台设备具有相同的 IP 地址,通常不会有明确的规定哪台设备有权使用该 IP 。这种情况会导致网络冲突和通信问题。 以下几个因素可能会在某种程度上影响通信的结果,但并不能确定哪台设备具有“使用权限”:
- 设备的启动顺序:先启动并成功在网络中注册该 IP 地址的设备可能会暂时占据通信,但这并不是一种稳定可靠的规则。比如,如果设备 A 先启动并使用了该 IP 地址进行通信,设备 B 后启动可能会发现冲突而无法正常通信。
- 网络设备的处理方式:路由器或交换机等网络设备的处理策略可能会产生影响。然而,不同品牌和型号的网络设备处理这种冲突的方式可能不同,有些可能会随机选择一台设备进行通信,有些可能会阻止所有冲突设备的通信。
- 设备的网络活动强度:如果一台设备正在进行大量的网络活动,可能会在冲突期间占据更多的网络资源,从而在一定时间内实现通信。但这会导致另一台设备的通信受阻。(==这应该是我遇到的情况==)
4.2 路由器IP地址分配的逻辑
在局域网中,路由器通常使用DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)来自动分配IP地址。DHCP协议使得设备能够在连接到网络时自动获取IP地址,而无需手动配置。这个过程包括以下几个步骤:
- 发现阶段:设备发送广播消息,请求IP地址。
- 提供阶段:DHCP服务器收到请求后,提供可用的IP地址。
- 请求阶段:设备选择一个提供的IP地址,并向DHCP服务器发送请求。
- 确认阶段:DHCP服务器确认分配的IP地址,设备完成配置。
路由器在分配IP地址时会考虑多个因素,包括地址池中的可用地址、设备的MAC地址、以及之前分配的IP地址记录等。优先级通常是基于这些因素来决定的,以确保地址分配的合理性和效率。
4.3 为了避免IP地址冲突,可以采取以下措施:
- 使用IP地址管理工具:利用网络监控工具来跟踪和管理IP地址分配情况。
- 明确规划IP地址:在网络设计阶段就规划好IP地址的使用,避免手动和自动地址范围重叠。
- 使用DHCP保留:在DHCP服务器上为关键设备保留特定的IP地址。
- 监控网络状态:定期检查网络中的IP地址分配情况,及时发现并解决冲突。
5 总结
这次经历让我深刻认识到了网络配置的重要性,以及在多设备环境中管理IP地址的复杂性。在网络开发中,了解和正确配置IP地址分配机制是至关重要的。无论是选择自动还是手动分配IP地址,都需要考虑到潜在的冲突和网络的稳定性。通过这次“死循环”的解决过程,我学到了很多关于网络通信和配置的知识,也希望能够帮助大家在网络配置上做出更明智的决策。
