TTL 传输中过期

作为网络小白的我,就着五一放假在家里给自己充一下电。首先先是看了一下《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 传输中过期。

一、开始排查问题

1.1  查看pc(宿主机)的网络配置

[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

没看出什么问题。问题是有的,只是我看不出来。
 

1.2  回退操作

既然是在操作VMware Network Adapter导致该错误的,那么我就将VMware Network Adapter 全部禁用。这么操作后pc能够访问网络了。我逐个启用VMware Network Adapter,看看是哪个Adapter导致的逐个问题。后来发现是VMware Network Adapter VMnet2的问题,启用它时pc无法访问外网;禁止它时,pc可以访问外网。

1.3  分析具体原因

使用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默认网关的情况。当流量走了错误的网关就会出现问题。

二、分析问题

2.1  背景

我在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 
跟踪完成。 

 

你可能感兴趣的:(通讯)