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