计算机网络畅通的条件就是数据包能去能回,道理很简单也很好理解,也是我们排除网络故障的理论依据。
如果A网络中的计算机到B网络中的计算机不能通信,就要检查途径的路由器的路由表是否有到B网络的路由,还要检查途径的路由器的路由表是否有到A网络的路由。
如图1所示,网络中的计算机A要想实现和计算机B的通信,途径的所有路由器R1、R2和R3必须有到目标网络192.168.1.0/24的路由。计算机B要给计算机A返回数据包,途经的路由器R3、R2和R1必须有到达192.168.0.0/24网段的路由。

图1 网络畅通的条件
在计算机A上ping 192.168.1.2,如果途径的路由器中有任何一个缺少到达目标网络192.168.1.0/24的路由,该路由器将为计算机A返回一个ICMP差错报告数据包,提示目标主机不可到达,如图2所示。

图2 目标主机不可到达
如果计算机A发送的数据包能够到达计算机B,计算机B将给计算机A返回响应数据包,途径的路由器中只要有任何一个缺少到达网络192.168.0.0/24的路由,计算机B返回的ICMP响应数据包就不能到达计算机A,将为计算机A显示请求超时,如图3所示。

图3 请求超时
基于以上原理,网络故障的排错思路就清晰了。如果网络不通,先检查两端的计算机是否配置了正确的IP地址、子网掩码以及网关;再逐一检查沿途路由器上的路由表,查看是否有到达目标网络的路由;然后逐一检查沿途路由器上的路由表,检查是否有数据包返回所需的路由。
路由器如何知道网络中有哪些网段,以及到这些网段的下一跳应该转发给哪个地址或由哪一个接口发送出去?路由器上有路由表,里面记录了到每个网段的下一跳该转发给哪个地址或由哪个接口发送出去。
路由器用两种方式构建路由表:一种方式是,管理员在路由器上通过命令添加到各个网络的路由,这就是静态路由,适合规模较小的网络或网络不怎么变化的情况;另一种方式就是,配置路由器使用路由协议(RIP或OSPF等)自动构建路由表,这就是动态路由,动态路由适合规模较大的网络,能够针对网络的变化自动选择最佳路径。