计算机网络散记 -- 关于局域网内两台设备互ping不了

发布时间 2023-09-15 19:30:36作者: Bingo39

背景

由于个人项目练习,所以固定两台设备的静态ip地址,window的ip地址为192.168.33.107,linux的ip地址为192.168.33.106。家里的wifi也有两个(其中一个为拓展器分发)【wifi名分别为 “家用wifi” 和 “家用wifi-加强版” 】。
本来两台设备之间的通信是没问题的,就算切换了wifi,只要是同个网段下,还是可以互ping。但是前几天,因为linux设备的老化,发出了“硬件报警声"(也就是嘟嘟嘟....,不知道怎么描述),关机重开后,问题随之而来。
问题描述:
"家用wifi"的环境下,两台设备无法互相通信,神奇的是,两台设备改连接“家用wifi-加强版”(也就是拓展器重新分发的网络),就可以互相ping成功了。

  • 补充背景信息

    • linux自定义的静态ip地址
    network:
      ethernets:
    	wlp2s0:
    	  addresses: [192.168.33.106/24]    #配置的静态ip地址和掩码
    	  dhcp4: false
    	  optional: true
    	  routes:
    		- to: default
    		  via: 192.168.31.1 #默认网关地址
    	  nameservers:
    		 addresses: [114.114.114.114,180.76.76.76,192.168.31.1]
      version: 2
    
    • window自定义的静态ip地址

个人操作方案

试着分析原因:
在“家用wifi-加强版”的环境下可以互ping,可以锁定是网络层的问题。首先想到的就是查看arp协议、mac地址、路由表这些是否能正确找到对方。

  • linux下

    • route -n / netstat -r指令查看所有路由状态
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.33.0    0.0.0.0         255.255.255.0   U     0      0        0 wlp2s0
    

    正常情况有以上类似的显示:目标地址能辐射ip的前三段(即网段);直连网络不需要配置网关,所以gateway为0.0.0.0;子网掩码;flags为U为直连网络(默认网络为UG,局域网ping的设备为直连);ifce网卡接口
    排除路由问题

    • arp -v 查看mac地址
      发现windowIP行的mac地址显示为(incomplete),无法识别到
      有很多原因导致,推测是在汇聚交换机和核心交换机分别设置了不同的ip地址,但映射的mac地址都是相同的。导致“家用wifi-加强版”能ping通而“家用wifi”ping不通。简单解决办法就是关闭NetworkManager或者给ip地址指定mac地址
  • window下
    linux问题找到了,但查看window的arp -v发现也找不到192.168.33.106的mac地址,之前明明一直有用,应该有缓存。目前方案也是直接添加arp

具体操作:

关于如何获知本机的mac地址有很多办法,我使用的主要两个。
① wifi的路由页面有显示机器的物理地址
② window可以在WIFI属性中查看;
linux可以使用ifconfig指令查看。【其中,网卡名对应的那一部分,ether 或 HWaddr字段后面一串即是】

  • window下

    • 通过管理员身份,在终端(cmd)通过指令arp -s ip地址 mac地址进行添加;
    • 如果显示“ARP 项添加失败: 拒绝访问” ,有两种方案解决:
      • 方案① 切换到“Administrator”账户重复上述操作
      • 方案② 通过Netsh脚本修改
        • netsh i i show in 查看网卡的idx值,

        备注:如果不确定网卡名称,去“控制面板\所有控制面板项\网络连接”处可以查看当前的网络适配器,名称即为网卡名称

        • netsh -c "i i" add neighbors 网卡idx "目标ip地址" "目标mac地址"指令完成添加操作
  • linux下
    切换到root用户,同样指令arp -s ip地址 mac地址进行添加

补充

  • 防火墙问题
    • 无论是window还是linux都会因为防火墙阻碍互ping。linux还好,无脑关闭也没事(家用不在乎,云上也有服务商自带的防火墙保护)。可是window是主力机,总不能因为练习一次项目就关闭一次防火墙吧
      首先,win10之后的防火墙已经很人性化了,局域网的ping基本不会做太多阻碍。如果还有,
      • 修改“防火墙-高级设置-出入站规则”中的“文件和打印机共享(回显请求-icmpv4-out)”为启用
      • 修改wifi的属性为专用
        其次,ping成功有时候防火墙还是会阻碍应用的请求重定向,例如linux上的nginx重定向请求给window应用就常常给防火墙阻碍到
      • 不成熟的方法:将防火墙还原设置,然后再次打开服务应用,无论是intellij idea应用还是jdk环境启动,都会弹出防火墙弹窗,选择应用通过防火墙。
  • //TODO
    由于我计网知识存在很多盲区,通过添加的方式指定mac地址肯定会存在隐患,正确做法还是去交换机上修改配置。后续补充