写在前面:
笔者是一名互联网从业者,平时需要使用笔记本(公司配的全新本,大品牌21年产)做许多局域网测试的工作,不可避免的要利用笔记本设置网关,与其他设备进行跨子网之间的通信,但在这个过程中我发现,win11的操作系统在手动设置网关上并不方便,在系统设置中设置网关会出现红色报错。期间与笔记本的品牌商进行了沟通,按照他们提出的方案进行设置了以后也无济于事,没有办法利用这台电脑进行跨子网之间的正常通信。在后来的多次尝试中我发现——不仅需要从控制面版进入网络中心修改IP信息,还需要关闭WiFi才能使以太网网关处于最高优先级。
具体情况请见下文,如果你遇到了和我一样的情况或者有相同的业务需求,那么请往下继续看。
问题描述:
截止到现在(2022年8月17日),win11通过常规的设置界面去手动设置网关依然是如下的红色报错字样----
我首先先跟品牌商进行了沟通,他们给的建议也是从控制面板对其进行修改,接下来我将按照他们的建议进行演示。
win11控制面板进入网络中心的步骤:
1、首先先打开系统设置界面的网络和Internet
2、划到底,选择高级网络设置
3、选择更多适配器选项
这下就进入网络适配中心了
4、点击以太网
5、在弹出的对话框中选择属性
6、又会弹出对话框,找到ipv4,选中ipv4,点击下面的属性选项
7、根据你的需求配置你的以太网IP地址、子网掩码以及IP地址
我这里配置我的电脑IP地址为192.168.2.11,我局域网中具有路由功能的交换机给我的电脑分配的网关为192.168.2.24,网关作为具有三层功能的一个概念,只能在具有三层功能的机器上进行配置,我们的电脑本身是没有网关的。所谓的给pc机设置网关意思就是指向局域网中的这个IP地址,这个IP地址必须得在网络中被设定出来,并且将其赋予路由功能。pc机成功设置网关的话,这个动作就告诉了你的pc机(192.168.2.11),192.168.2.24是你的网关,如果你要跨子网通信,数据包先往192.168.2.24送。
以上就是品牌商给的建议,按照如上设置好之后可以去命令行输入ipconfig查询我们的IP配置信息如下(我手动隐去了ipv6的物理地址)
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : ****************
IPv4 地址 . . . . . . . . . . . . : 192.168.2.11
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.2.24
好,到这里好像一切都很顺利,显示成功配置好了一切,我当时也是这么以为的,但既然命令行都说你配置好了,那咱们就以此为准,接下来去进行跨子网通信的测试。
我当前的网络简单来说就是同一台交换机上挂着两个子网,一台win11的机子和一台win7的机子分别接在这两个子网里,并且都已经设好了网关,网关已开启路由功能,由于我的交换机是三层的交换机,本身可以作为路由器进行使用,如果是二层的交换机就需要外接路由器。由于win7没有系统设置界面,所以配置以太网ip地址就只能通过控制面板进行设置,设置结果如下
很明显,两台笔记本不属于同一子网,要通信的话必须借助路由,而我们已经将网关给设好了,路由功能已打开,通过路由可以实现两子网互相通信,我们现在测试一下会是什么结果
原因分析:
上文已经说过,我已经将两台电脑的防火墙全部关闭,网卡的驱动也已经更新,已经排除了一些可能的原因。后来我利用抓包软件分析,发现数据包跑飞了,并没有去我指定的地方,正当我好奇那些destination ip是哪儿的时候,我发现了一个问题
那就是我上网连的WiF自动分配到的IP地址和我做测试接的以太网我手动设置的地址在同一个网段里,我怀疑计算机为了防止ip地址冲突,所以系统会自动检测不让我手动设置的ip地址以及网关生效,我尝试性的将WiFi关掉,发现此时通信便的畅通无阻。
一些感悟:
我一直强调不同子网的原因是只有在不同子网之间的通信才能检验网关设置的有效性,因为如果是同一子网里面的通信,计算机最开始打包的帧中包含了目的地址的ip地址,而这是一个(local)本地的地址,计算机通过arp协议识别出destination ip为本地地址之后,就会在自己的地址表里面寻找这个IP地址对应的mac地址,如果找不到,就会发一个广播帧,等到目标ip回应其对应的mac地址之后,本机就会将该对应关系记录进自己的地址表里,以便下次使用;其次本机再将数据帧进行打包,在帧头再加上本次通信的源mac地址以及目的mac地址,随后将数据帧发送出去,便完成了一次通信。此过程不需要经过网关,就好比说咱两都在一个房间里,我找你说话,不需要经过一扇门这个道理一样,所以同子网之中的通信没有办法检验网关设置的有效性。而如果是remote(远端)的地址的话,帧的destination ip地址是一个外地地址,帧要去这个地址必须得先去自己的网关,通过网关把自己“摆渡出去”。计算机此时也要把数据帧打包,在帧头加上自己的mac地址和自己同子网网关的mac地址,那他这个时候总得找到自己的网关在哪儿,同样的也是先查询地址表,如果地址表里面没有自己网关的IP地址信息,那么就会发一个广播帧,去等待回应。这样的话就能够测试电脑能不能成功找到我们为其设置的网关。
我之所以提这个点是因为我之前一直陷入一个误区里面,那就是在未找到上述的解决方案之前,我的电脑能够ping到网关,我始终觉得电脑就相当于已经设成功了。区别在于同网段通信和不同网段通信的数据帧的destination IP网段的不同,对应的是不同的解决方案。同网段之间的通信,计算机自己知道要去哪儿;不同网段的通信,计算机得将数据帧发送到网关,而他能不能看到我们给他指明的网关,这就是本篇文章的问题所在。当我们开启wifi时,我推测计算机的网关已经被上网用的路由器给分配好了,所以他看到的是错误的网关,不是我们手动给他设置的网关,所以才会导致通信失败。
解决方案总结:
- 通过控制面板修改以太网的IP地址、子网掩码以及网关
- 进入命令行用ipconfig查看是否设置成功
- 为了避免冲突,在做局域网实验时最好关闭WiFi以及其他无线链接