现在,让我们继续同样的过程,不过这次我们假定服务器想把数据包发往一个不同子网上的一台主机(IP地址为172.16.10.200)。换句话说,数据包的源地址为172.16.11.30,目标地址为172.16.10.200。下面我们看一下Windows是如何利用路由表决定选择哪条路由的:
1. Windows从路由表中取出每一条路由,将数据包的目标地址(172.16.10.200)与路由中的掩码进行“与” 运算。运算结果如下:
|
Route |
Netmask |
172.16.10.200 AND Netmask |
|
|
|
|
|
127.0.0.0 |
255.0.0.0 |
172.0.0.0 |
|
172.16.11.0 |
255.255.255.0 |
172.16.10.0 |
|
172.16.11.30 |
255.255.255.255 |
172.16.10.200 |
|
172.16.255.255 |
255.255.255.255 |
172.16.10.200 |
|
224.0.0.0 |
224.0.0.0 |
160.0.0.0 |
|
255.255.255.255 |
255.255.255.255 |
172.16.10.200 |
2. 对于每一条路由来说,“与”运算的结果要与路由中网络目标地址相比较,二者匹配意味着这条路由可被用于将数据包转发到其目标地址。从我们上面的第二张路由表,你可以看出这次只有一个匹配,也就是说是第一行,这个路由的网络目地字段(0.0.0.0)与“与”运算的结果匹配。因此Windows用来将数据包转发到其目标地址的路由即为下面的路由:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 172.16.11.1 172.16.11.30 20
3. 然后Windows就会使用前述的算法来决定下一步做什么,这次符合条件b,因为路由的网关字段(172.16.11.1)与分配给服务器的单独网卡的地址(172.16.11.30)并不匹配。Windows因此会决定目标地址位于一个远程子网上,将数据包转发给路由器,路由器通过继续转发数据包将其传送到目的地。在此例中,Windows使用服务器的172.16.11.30网络接口,将数据包发送到在网关字段中所显示的地址。一旦位于172.16.11.1的路由器收到了数据包,它会决定下一步需要采取什么步骤,才能将数据包转发到其最后的目标地址172.16.10.200,而这又依赖于172.16.11.10/24网络是172.16.11.11/24(由单个路由器连接)或一个远程网络的邻近子网(由几个中间网络之间的路由器连接)。
故障诊断小技巧
在上述的过程中哪里会出问题呢?首先,Windows有可能无法选择一条网络目的地址字段与“与”运算的结果(即路由的掩码字段与数据包的目标字段“与”运算的结果)相匹配的路由。如果发生这种情况,你就会收到一个路由选择错误,这一般会通过一些运行在服务器上的网络应用程序指示给你。通常情况下,Windows会使用TCP来通知网络堆栈的上层,说明数据包不能送达,就会导致某种错误消息。
在这种情况下,你的路由表可能已经损坏,或者说,你的路由表中有一个非法的持久性路由。持久性路由指的是你通过使用route -p add手动命令添加到路由表中的路由,这种路由需要重启才可以使用,因为其值是存储在注册表中的。如果你添加了非法的路由,就会产生奇怪的结果。(虽然这种非法路由多数情况下会导致数据通信被莫名其妙地丢弃。)
另外一方面,如果目标主机位于一个远程子网上,Windows会将数据包转发给一个路由器(默认的网关地址),而这个路由器又不能选择一个路由,那么这种情况就会发生:路由会将把一个ICMP(网际控制报文协议)消息:“目标不可达到(Destination Unreachable)-主机不可到达(Host Unreachable)”返回给发送此数据包的主机。此例中,TCP会通知上层协议,然后就会显示某种错误消息。
无论何种情况,一个处理问题的实用方法是在发送方主机上检查路由表,还要检查数据包在到达目的地的过程中沿途经过的路径所连接的路由器,查看这些路由表是否一致或已经损坏。一个损坏的路由表可以通过重置TCP/IP堆栈进行恢复(至少在Windows计算机上是这样),具体方法是使用netsh int ip reset命令,大家可以参考微软的KB299357查找祥细资料。不过,需要注意,这种重置操作并不会清除你手动添加到路由表中的路由。
结论
我们讨论了路由表是如何工作的,并且阐述了如何诊断路由表的故障,下一篇文章我们将讨论几个更为复杂的例子,例如看看拥有多个地址和多个网卡的服务器的情况。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页
您现在的位置: 
