也许你对网络数据流量穿过Internet的路径没多大兴趣--直到CFO遇上了连接上的麻烦,无法和合作伙伴的网站建立连接。而在一年前,他每天都能自如的使用这个网站。CFO今天需要访问这个网站,所以你充满热情的去做排错的工作。你试着自己登陆这个网站,但是失败了。你电话联系管理这个网站的公司(你很幸运,这不总是不可能的),然后公司给你的答复是在他们那一端没有出任何问题。现在,你会对数据如何从你的位置传送到这个网站、数据包如何选择路径以及问题会出在哪里更加感兴趣了吧?
当然,你可以联系你的网络服务提供商然后得到"我们会做进一步调查"的答复。但是如果你没法给CFO一个解释,你将会受到责备。你最后能做的事情就是简单的说:"我们似乎是唯一碰到这个问题的公司,我们的网络服务提供商正在调查中,可能要不少时间,我并不知道网络服务提供商什么时候才能给我们反馈。"
信息流量怎样从A节点到达B节点呢?可以从两种角度来看这个问题:一个是从IP的观点,另一个是从BGP的观点。如果你已经开始管理自己的BGP自治域系统,这篇文章可能不是为你所作。然而,如果你有初级的或者中级的TCP/IP知识,而且又对Internet路由机制感兴趣的话,请继续读下去。
IP的观点
IP的观点被直接的和BGP的观点进行对比。有层出不穷的工具可以进行IP通信的追踪。你可以使用内嵌在Windows和Linux/UNIX命令行里的标准traceroute命令;你还可以使用专门的工具,例如AnologX的免费工具--HyperTrace来进行更快速灵活的追踪;还有一种选择是Visualware的VisualRoute工具,它能图形化的显示你在Internet上的IP通信路径。你可以使用它的一个试用版来追踪世界各地的Internet路由。
此外,还有一种途径,你可以访问Traceroute.org 以从这个网站踪Internet上数以万计的IP路径。将这个服务和本地的标准Traceroute相结合在网络排错中是相当有用的。
BGP的观点
从BGP的观点,追踪通讯有一点点的复杂。首先,你应该明白BGP是一个基于Internet的路由选择协议。BGP是一种距离矢量型的路由协议。和我们所熟知的基于跳数来选择最佳路由路径的RIP协议类似,BGP依靠最短的自治域系统(AS)路径来选择最佳路由。BGP的路由区域是由自治域系统号(ASN)来标示的。美国Internet数字注册机构(ARIN)除了管理IP地址的分配以外,同样也管理自治域系统号的分配。
更多关于BGP
如果你对BGP不甚了了,我强烈建议你阅读Internet Routing Architectures这本书(这本书的第一版已经有了清华大学的影印版,第二版也由人民邮电出版社引进并翻译),它是BGP方面的权威参考书。
因此,你可以用IP工具来观察在哪个地方可能出现了通信失效。但是如果只是简单的IP地址失效该怎么处理呢?如果你想标示导致这个问题的网络服务提供商呢?如果你想了解这是Internet路由的问题还是由于路由表的错误而导致你的WEB请求返回被发送到其他地方(而不是返回给你)了呢?深入BGP可以回答这些问题。
要开始这些工作,你首先需要知道你在Internet上的公共IP地址。你应该能够从多种来源获得这个信息。如果你知道自己的自治域系统号,那将同样是非常有用的。如果没有的话,你必须很快的寻找出来。如果你位于一个更大型的站点,你会拥有自己的自治域系统号。或者你是和我一样用DSL 连接到网络服务提供商的。那样,你的IP地址会止于网络服务提供商的自治域系统号。利用你的公共IP地址,登陆Traceroute.org。你将能从两种类型的来源里找到很多的BGP信息。
首先,这里有窥镜服务器。这些是运行着可以为你在BGP路由器上实施命令的软件的网络服务器。尽管有一些只能让你运行ping和traceroute命令,但其他的能让你运行BGP命令。Traceroute.org上有成百上千可用的窥镜服务器。利用这些服务器可以简化工作,因为这些服务是基于WEB的而且限制在了一部分命令上。图A展示了一个由BBC提供的窥镜服务器。
图A
注意当我选择BGP并键入IP地址后,当我点击提交按钮,我得到了图B里的输出。
图B
如果你之前从来没有看到过BGP的输出信息,那么图B里的数据可能会令你非常头大,不过你只需要该知道寻找什么。看看第2行,它告诉我们从这个网络(BBC)到我的网络只有一条可用的路径。这是非常重要的,因为一般在我的网络和其他网络之间都会有多条路径。接着它显示了这个路由器会选择的通往你的自治域系统(引导至你的网络)的路径。第5行表示了"6461 23215"。
这些数字意味着什么?从源地址到目标地址,BGP路径被列出。所以,开头的(在这里是BBC网络,自治域系统号没有显示出来)首先通往6461号的自治域系统,然后是23215号自治域系统。我的IP地址(我最先输入的IP地址)位于这个自治域系统内。
谁是运营这些自治域系统的提供商?让我们去ARIN的网站看看。在ARIN的网站,在主页里的寻找表单里输入6461。你会发现BBC网络首先穿过纽约White Plains的Abovenet Communications 。在那里它进入23215的自治域系统。如果我们再次进入ARIN做一次数据库查询,我们会看到自治域系统号是23215的网络是Megapath Networks,来自我的DSL线路从属的网络服务提供商。因此,来自BBC的通信首先经过Abovenet,然后进入Megapath。这是一该简单的例子,但是你可以用同样的方法来检测任何的网络之间的通讯。
如果你有兴趣更深入的了解BGP,你可以检验的第二种类型的来源,即TELNET可达的BGP路由服务器。他们是真正的BGP路由器,有完整的路由表,你登陆后能通过它们来对BGP命令做一些限制。你要再一次去Traceroute.org 了,点击路由服务器,你会得到大约20个路由服务器的列表,每一个都可用TELNET连接。
被列出的最好的路由服务器是Oregon-ix.net Route Server,能够容易的登陆从而运行BGP命令。它包含了大约36个BGP对等体,超过80000条的BGP路径,和超过129000个网络的条目。利用路由服务器上的举例信息,我可以运行下面的命令
show ip bgp 64.32.205.237
然后得到列表A所示的输出结果。
就像你看到的那样,这个路由器有52条路径通往我的IP地址所在的自治域系统。其中26号路径是最佳路由(基于BGP的度量值)。你同样可以利用自治域系统号做一个BGP的正则表达式,如下:
show ip bgp regexp 23215$
这个正则表达式寻找23215号自治域系统中所有基于BGP的IP网络,我不能列出所有的输出因为有成百上千条那么长,不过列表B是这个列表的一个删节。 基本上,这个路由器有上百条所给自治域系统号的网络条目。这个命令可能在BGP路径排错中,特别是当你的自治域系统发布了更少的路由表的时候非常受用。想获取每条命令的具体作用描述,请求助于Cisco系统公司网站上的配置BGP和 BGP命令参考。更多关于BGP如何工作、BGP配置和运用BGP的显示命令的信息,请参考以下链接: