当您出现路由问题时,往往会出现 ’重新安装新的网络设备,以及出现故障时。通常,路由问题是由某种配置或设计错误引起的。对路由问题进行故障排除非常棘手,因为像ping和traceroute这样的常用工具不会’始终告诉您您需要了解的内容。

让’从数据包如何通过网络路由的基础开始,它阐明了在进行故障排除时非常有用的关键细节。

原始设备将三个重要参数放入IP数据包头中:

  • 源IP地址,这是设备本身的地址
  • 目的IP地址,这是数据包要去的地方
  • IP协议,例如UDP或TCP或ICMP

在UDP和TCP的情况下,还有两个额外的数字,这两个都很重要:源端口号和目标端口号。目的IP地址是我们通常在路由中所考虑的,但是实际上,网络可以使用这些值的任意组合来路由数据包。

另一个称为生存时间(TTL)的参数控制着目的地可以达到的距离。这个名称具有欺骗性,因为它实际上与时间无关。 TTL是一个跳数计数器,用于跟踪数据包已转发多少次,并用于防止循环。

原始设备的首要任务是在其自己的内部路由表中查找目标地址。在Windows上,使用“路由打印”命令。

C:\Users\Kevin>route print
[…]
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0       10.10.80.1       10.10.80.2     25
       10.10.80.0    255.255.255.0         On-link        10.10.80.2    281
       10.10.80.2  255.255.255.255         On-link        10.10.80.2    281
     10.10.80.255  255.255.255.255         On-link        10.10.80.2    281
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link        10.10.80.2    281
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link        10.10.80.2    281
=========================================================================== 

此示例显示了许多目标网络,但实际上只有两个重要。第一行是默认路由。掩码为0.0.0.0的网络0.0.0.0匹配任何目标。此默认路由指向下一跳设备,即我的路由器10.10.80.1。

此路由表中另一个重要的条目是第二个条目,即10.10.80.0,掩码为255.255.255.0。这匹配10.10.80.0和10.10.80.255之间的任何目的地,即我的本地网段,其中包括我的路由器。

根据此表,我的PC知道将此数据包转发到路由器。为此,它将IP数据包与路由器的 乙太网路 目标字段中的MAC地址和源字段中的自身以太网MAC地址,以便路由器知道如何转发返回数据包。

路由器会剥离以太网帧,并在自己的路由表中查找以了解如何到达目标IP地址。

Router>show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default
U - per-user static route, o - ODR

10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.10.80.0/24 is directly connected, 乙太网路0
C 10.10.1.0/24 is directly connected, 乙太网路1
C 10.25.8.1/32 is directly connected, Loopback0
S 0.0.0.0/0 [1/0] via 10.10.1.4
[…]

该路由表使用 CIDR“斜线”表示法 而不是单独的网络和掩码,但是它传达的信息与PC的“路线打印”命令类似。查找与目标IP地址匹配的条目。假设这是默认路由0.0.0.0/0。路由器看到它指向另一个路由器“下一跳” 10.10.1.4。

然后,路由器使用此下一跳路由器的MAC地址作为目标地址来创建新的以太网帧,并将其包装在原始IP数据包周围。它对原始数据包所做的唯一重要更改是将TTL值减小一个。

重复整个过程,直到 数据包传递到目的地.

工具

解决路由问题的标准工具是 ping跟踪路由.

Ping是一个非常简单的工具。它发送一个 Internet控制消息协议(ICMP) “回声请求”数据包发送到目标设备,目标设备发送回“回声响应”数据包。 ICMP是一种特殊的IP协议,不同于TCP或UDP。 ICMP数据包不包含源端口或目标端口,仅包含“类型””例如“回声请求”或“回声响应”。”而已。如果请求可以一直到达目的地,而响应可以一直回到目的地,那么您就知道您具有第3层连接性。

从ping的描述中应该可以清楚地看到ping的问题:如果您无法到达目的地,它不会告诉您任何信息。这是traceroute进入的地方。Traceroute还将数据包(取决于实现的UDP或ICMP)发送到目标IP地址并寻找响应,但是在处理我前面提到的TTL字段时,它实际上尝试了几次。

首次尝试时,traceroute发送TTL值为零的数据包。没有路由器应该转发TTL值为零的数据包。因此,路由器会丢弃该数据包,并将特殊的“ TTL超出”类型的ICMP数据包发送回源。 Traceroute报告该ICMP数据包中显示的IP地址。现在您知道了第一跳。通常,它将执行三遍,以确保路由稳定。

然后traceroute增加初始TTL值并发送另一个数据包。这次,第一个路由器的TTL值为1,将其递减为0,然后将其转发给下一个跃点路由器,后者将其丢弃并发送回ICMP消息。 Traceroute显示该路由器的IP地址。以初始TTL值2、3、4等重复此过程,直到到达目标为止。

Traceroute通常会向您显示几跳,然后逐行显示“ * * *”,这表示它没有收到“ TTL超出”消息。这通常意味着您看到明确列出的最后一个设备是具有到目的地的良好路由的最后一个设备。它将数据包转发给谁的人都不知道该如何处理。

但是也有可能转发了数据包,但是您没有收到“ TTL超出”消息。有时,尤其是防火墙会拒绝发送此消息。有时,防火墙会主动阻止来自所有下游设备的这些数据包。因此,这不是决定性的,但可以让您了解从哪里开始寻找麻烦。

您有时在traceroute会话中看到的另一件有趣的事情是,对于同一TTL值,有多个下一跳IP地址。这告诉您实际上有多个到达目的地的路径,所有路径的成本相同。仅当路径中有防火墙时,这才是问题。如果防火墙没有看到原始数据包以其他方式发送,则通常会拒绝将响应数据包转发回源。对于防火墙,这看起来像是违反协议的协议,因此通常会丢弃意外的数据包。

路由循环

跟踪路由有时还会向您显示的另一件事是 循环。在路径的某个地方,您会看到一个IP地址’d已经见过。也就是说,您会看到一条从路由器A到B,C,D,C,D,C等的路径。这告诉您路由器C正在将数据包转发到路由器D,后者又将其转发回C。

这实际上是TTL字段存在的原因。源设备通常将使用TTL字段的最大值:255。在循环中,TTL值最终将减小为0,并且数据包将被丢弃。 IP中没有无限循环,但这仍然是一件坏事,因为您的数据包无法通过,并且可能导致拥塞问题。

如果看到环路,则需要弄清楚路径应该是什么,并调整环路设备的路由表。通常,在其中一个或两个路由器上的动态路由表与静态路由冲突的情况下,您会看到环路。例如,如果在其中一台设备上有指向另一台设备的静态默认路由,则可能会发生这种情况。然后,如果由于某种原因到目的地的更具体的路由消失了,路由器将使用默认路由并将数据包发回。

协议过滤器和策略路由

假设ping和traceroute表示一切正常,但是您的应用程序包仍然没有’无法通过。这通常是由于某种类型的过滤器或策略路由所致。

协议过滤器也称为访问控制列表(ACL)。您可以通过在配置文件中搜索“ access-group”命令来在Cisco路由器,交换机和防火墙上找到这些过滤器,这些命令将ACL应用于接口。

ACL可以允许一种流量,并阻止另一种流量。例如,您可能会发现允许ICMP ping数据包,但不允许您的应用程序流量。在这种情况下,路由表将正确显示,并且可以执行ping和traceroute测试,但是您将无法运行该应用程序。

策略路由(也称为基于策略的路由或PBR)如果出现问题,甚至可能导致更奇怪的问题。策略路由意味着路由器在做出转发决定时将覆盖路由表。相反,它可能根据源IP地址,协议或端口号做出决定。因此,路由器可以通过一条路径转发ping数据包,而应用程序流量则采用完全不同的方式。

如果您怀疑策略路由会引起问题,那么第一件事就是查看路由器配置文件中包含“ ip policy”命令的接口配置块。此命令将引用路由映射,路由映射又将定义如何路由数据包。

interface 乙太网路0
 ip address 10.10.5.1 255.255.255.0
 ip policy route-map FUNKYROUTING
!
route-map FUNKYROUTING
 match ip address 100 
 set ip next-hop 10.10.6.1
!

在此示例中,该策略将覆盖那些匹配ACL号100的数据包的路由表中的所有内容,并始终将其转发到指定的下一跳路由器。 ACL可以根据源或目标地址或端口或任何组合来标识这些数据包。

只要在网络中配置了策略路由,就需要对路由问题进行故障排除时要格外小心。

虚拟专用网

解决路由问题时,另一个重要的地方是虚拟专用网(VPN)配置。许多公司 通过Internet使用VPN互连其远程办公室。有时,如果主专用电路或MPLS服务中断,则VPN是备用链路,有时,VPN是唯一的链路。 IPsec VPN 通常用于互连网络。

在VPN配置中需要注意的关键是“有趣的流量列表”。”这是一个ACL,它定义了哪些数据包可以使用VPN链路,通常标识源网络和目标网络。注意VPN两端设备上的ACL之间的不匹配,以及可能丢失的网络。