作为网络小白的我,就着五一放假在家里给自己充一下电。首先先是看了一下《B智能路由器开发指南》,然后就动手openwrt运行在vmware上试一下。折腾了半天总算是把下载的openwrt img(不是自己编译的)运行在了vmware上,并且ssh登录成功了。挺高兴的,在操作(瞎搞)VMware Network Adapter VMnet* 的时候,突然我的pc上不了网了。我开始方了,ping qq.com报错如下:
[D:\~]$ ping qq.com
正在 Ping qq.com [183.3.226.35] 具有 32 字节的数据:
来自 192.168.101.2 的回复: TTL 传输中过期。
来自 192.168.101.2 的回复: TTL 传输中过期。
来自 192.168.101.2 的回复: TTL 传输中过期。
来自 192.168.101.2 的回复: TTL 传输中过期。
[D:\~]$ ipconfig
Windows IP 配置
以太网适配器 本地连接:
媒体状态 . . . . . . . . . . . . : 媒体已断开
连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 无线网络连接:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::792b:55eb:46c4:dc5%11
IPv4 地址 . . . . . . . . . . . . : 192.168.0.101
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.0.1
以太网适配器 VMware Network Adapter VMnet1:
连接特定的 DNS 后缀 . . . . . . . : localdomain
IPv6 地址 . . . . . . . . . . . . : fd42:5754:213e::253
IPv6 地址 . . . . . . . . . . . . : fd42:5754:213e:0:bc83:af95:f4f4:7376
临时 IPv6 地址. . . . . . . . . . : fd42:5754:213e:0:80bb:9074:892:bbe
本地链接 IPv6 地址. . . . . . . . : fe80::bc83:af95:f4f4:7376%13
IPv4 地址 . . . . . . . . . . . . : 192.168.28.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
以太网适配器 VMware Network Adapter VMnet8:
连接特定的 DNS 后缀 . . . . . . . : localdomain
本地链接 IPv6 地址. . . . . . . . : fe80::84da:88c5:67b0:f68c%14
IPv4 地址 . . . . . . . . . . . . : 192.168.101.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
以太网适配器 VMware Network Adapter VMnet2:
连接特定的 DNS 后缀 . . . . . . . :
IPv6 地址 . . . . . . . . . . . . : fd42:5754:213e::604
IPv6 地址 . . . . . . . . . . . . : fd42:5754:213e:0:9ce6:e8b5:6170:91d4
临时 IPv6 地址. . . . . . . . . . : fd42:5754:213e:0:bc75:7e76:5316:6fbc
本地链接 IPv6 地址. . . . . . . . : fe80::9ce6:e8b5:6170:91d4%24
IPv4 地址 . . . . . . . . . . . . : 192.168.33.194
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.33.1
没看出什么问题。问题是有的,只是我看不出来。
既然是在操作VMware Network Adapter导致该错误的,那么我就将VMware Network Adapter 全部禁用。这么操作后pc能够访问网络了。我逐个启用VMware Network Adapter,看看是哪个Adapter导致的逐个问题。后来发现是VMware Network Adapter VMnet2的问题,启用它时pc无法访问外网;禁止它时,pc可以访问外网。
使用route print查看路由信息,信息如下:
[D:\~]$ route print -4
===========================================================================
接口列表
12...aa dd 33 cc 11 11 ......Realtek PCIe FE Family Controller
11...22 ff 55 ee 77 33 ......Atheros AR9485 802.11b/g/n WiFi Adapter
13...00 55 55 cc 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
14...00 55 55 cc 00 08 ......VMware Virtual Ethernet Adapter for VMnet8
24...00 55 55 cc 00 02 ......VMware Virtual Ethernet Adapter for VMnet2
1...........................Software Loopback Interface 1
===========================================================================
IPv4 路由表
===========================================================================
活动路由:
网络目标 网络掩码 网关 接口 跃点数
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.101 25
0.0.0.0 0.0.0.0 192.168.33.1 192.168.33.194 20
127.0.0.0 255.0.0.0 在链路上 127.0.0.1 306
127.0.0.1 255.255.255.255 在链路上 127.0.0.1 306
127.255.255.255 255.255.255.255 在链路上 127.0.0.1 306
192.168.0.0 255.255.255.0 在链路上 192.168.0.101 281
192.168.0.101 255.255.255.255 在链路上 192.168.0.101 281
192.168.0.255 255.255.255.255 在链路上 192.168.0.101 281
192.168.28.0 255.255.255.0 在链路上 192.168.28.1 276
192.168.28.1 255.255.255.255 在链路上 192.168.28.1 276
192.168.28.255 255.255.255.255 在链路上 192.168.28.1 276
192.168.33.0 255.255.255.0 在链路上 192.168.33.194 276
192.168.33.194 255.255.255.255 在链路上 192.168.33.194 276
192.168.33.255 255.255.255.255 在链路上 192.168.33.194 276
192.168.101.0 255.255.255.0 在链路上 192.168.101.1 276
192.168.101.1 255.255.255.255 在链路上 192.168.101.1 276
192.168.101.255 255.255.255.255 在链路上 192.168.101.1 276
224.0.0.0 240.0.0.0 在链路上 127.0.0.1 306
224.0.0.0 240.0.0.0 在链路上 192.168.28.1 276
224.0.0.0 240.0.0.0 在链路上 192.168.0.101 281
224.0.0.0 240.0.0.0 在链路上 192.168.101.1 276
224.0.0.0 240.0.0.0 在链路上 192.168.33.194 276
255.255.255.255 255.255.255.255 在链路上 127.0.0.1 306
255.255.255.255 255.255.255.255 在链路上 192.168.28.1 276
255.255.255.255 255.255.255.255 在链路上 192.168.0.101 281
255.255.255.255 255.255.255.255 在链路上 192.168.101.1 276
255.255.255.255 255.255.255.255 在链路上 192.168.33.194 276
===========================================================================
永久路由:
无
突然我发现居然有2个默认路由,而且192.168.33.1 默认路(虚拟网卡)由 还比192.168.0.1默认路由(无线网卡)的跳跃数小。这样ping qq.com 就会走192.168.33.1这条默认路由,然后就会报错。其实在前面ipconfig的时候,就能看到VMware Network Adapter VMnet2里设置了默认路由。
当有2条默认路由时,数据选择跃点数小的默认路由。我们需要科普一下路由的几个关键名称。
跃点:即路由。一个路由为一个跃点。传输过程中需要经过多个网络,每个被经过的网络设备点(有能力路由的)叫做一个跃点,地址就是它的ip。
跃点数:能够反映跃点的数量、路径的速度、路径可靠性、路径吞吐量以及管理属性,跃点数的知默认值1(范围是1~9999)。
路由选择:所选的路由具有最少的跃点数。
注意:跃点数不是TTL
跃点数默认是自动跃点,我可以将192.168.0.1跃点数调到2来复现最初的错误。正如上面【路由选择】选择最少跃点数路由那样,当192.168.0.1路由跃点数小于192.168.33.1的跃点数,所以ping qq.com是正常的。
windows操作
route change 0.0.0.0 mask 0.0.0.0 192.168.0.1 METRIC 1
IPv4 路由表
===========================================================================
活动路由:
网络目标 网络掩码 网关 接口 跃点数
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.101 2
0.0.0.0 0.0.0.0 192.168.33.1 192.168.33.194 20
127.0.0.0 255.0.0.0 在链路上 127.0.0.1 306
127.0.0.1 255.255.255.255 在链路上 127.0.0.1 306
===========================================================================
永久路由:
无
[D:\~]$ ping qq.com
正在 Ping qq.com [183.3.226.35] 具有 32 字节的数据:
来自 183.3.226.35 的回复: 字节=32 时间=17ms TTL=55
来自 183.3.226.35 的回复: 字节=32 时间=18ms TTL=55
183.3.226.35 的 Ping 统计信息:
数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 17ms,最长 = 18ms,平均 = 17ms
继续测试,将192.168.0.1路由的跃点数变大,大于192.168.33.1路由的跃点数,预期是出现TTL传输中过期。果然是这样的。但是我发现通过手动调整某条默认路由的跃点数,那么某条就会成为真正的默认路由,在route print -4中只显示被修改的默认路由。但是在DHCP获取的配置,就可能出现2默认网关的情况。当流量走了错误的网关就会出现问题。
我在vmware上运行了一个openwrt的虚拟机。br-lan ip 192.168.33.1,采用的是内部网络模式VMnet2。wan口ip为192.168.101.129,采用的是NET模式VMnet8。
VMnet2 采用dhcp的方式获取ip等配置信息,ip为182.168.33.194;VMnet8采用DHCP的方式获取配置信息,ip为192.168.101.1
2.2 分析
我们使用tracert来追踪一下qq.com,一睹为快。从下面可以看出到发生TTL传输中过期的时候,包一直在192.168.33.1和192.168.101.2之间打转。直到TTL减小到0,然后就报错了。
tracert qq.com
通过最多 30 个跃点跟踪
到 qq.com [183.3.226.35] 的路由:
1 <1 毫秒 <1 毫秒 <1 毫秒 OpenWrt.lan [192.168.33.1]
2 <1 毫秒 <1 毫秒 <1 毫秒 192.168.101.2
3 <1 毫秒 <1 毫秒 <1 毫秒 OpenWrt.lan [192.168.33.1]
4 1 ms <1 毫秒 <1 毫秒 192.168.101.2
5 2 ms <1 毫秒 <1 毫秒 OpenWrt.lan [192.168.33.1]
6 1 ms <1 毫秒 <1 毫秒 192.168.101.2
7 1 ms <1 毫秒 <1 毫秒 OpenWrt.lan [192.168.33.1]
8 1 ms 1 ms 1 ms 192.168.101.2
9 1 ms 1 ms 1 ms OpenWrt.lan [192.168.33.1]
10 1 ms 1 ms 1 ms 192.168.101.2
11 1 ms 1 ms 1 ms OpenWrt.lan [192.168.33.1]
12 1 ms 1 ms 1 ms 192.168.101.2
13 1 ms 1 ms 1 ms OpenWrt.lan [192.168.33.1]
14 1 ms 1 ms 1 ms 192.168.101.2
15 1 ms 1 ms 2 ms OpenWrt.lan [192.168.33.1]
16 2 ms 1 ms 1 ms 192.168.101.2
17 2 ms 1 ms 1 ms OpenWrt.lan [192.168.33.1]
18 2 ms 2 ms 2 ms 192.168.101.2
19 2 ms 1 ms 2 ms OpenWrt.lan [192.168.33.1]
20 2 ms 2 ms 2 ms 192.168.101.2
21 2 ms 3 ms 2 ms OpenWrt.lan [192.168.33.1]
22 2 ms 2 ms 2 ms 192.168.101.2
23 2 ms 2 ms 2 ms OpenWrt.lan [192.168.33.1]
24 2 ms 2 ms 2 ms 192.168.101.2
25 3 ms 2 ms 2 ms OpenWrt.lan [192.168.33.1]
26 2 ms 4 ms 4 ms 192.168.101.2
27 2 ms 2 ms 2 ms OpenWrt.lan [192.168.33.1]
28 4 ms 2 ms 2 ms 192.168.101.2
29 2 ms 3 ms 2 ms OpenWrt.lan [192.168.33.1]
30 2 ms 3 ms 3 ms 192.168.101.2
跟踪完成。