导航: 天下网吧 >> 网吧天地 >> 网吧技术 >> 故障解决 >> 正文

TCP/IP网络故障诊断的结构化方法集锦

2008-4-18广东网吧联盟佚名

址匹配起来的位模式。
  网关(Gateway):下一跳的IP地址,数据包必须被转发到此,才能到达特定的目的网络。
  接口(Interface):下一跳的接口,这个接口必须用于将数据包进行转发,以达到特定的目的网络。
  跳数(metric):表示到达目的的过程中经过了多少跳数(路由器数),即路由的成本。示例一:目标主机在本地子网上

  对于我们例子而言,假设这个特定的服务器(172.16.11.30)要将数据包发往同一子网内的另一台主机(IP地址为172.16.11.80)。那么这个数据包的源地址为172.16.11.30,目标地址为172.16.11.80。下面我们将展示Windows是如何用其路由表来决定选择使用哪条路由的:   1. Windows首先依次从路由表中取出每一个路由,并将数据包的目标地址(172.16.11.80)与选中路由的掩码执行逻辑“与”运算。下面展示结果,这里,路由表中的每一个路由是通过其网络目的地址确定的:    Route Netmask 172.16.11.80 AND Netmask 0.0.0.0 0.0.0.0 0.0.0.0 127.0.0.0 255.0.0.0 172.0.0.0 172.16.11.0 255.255.255.0 172.16.11.0 172.16.11.30 255.255.255.255 172.16.11.80 172.16.255.255 255.255.255.255 172.16.11.80 224.0.0.0 224.0.0.0 160.0.0.0 255.255.255.255 255.255.255.255 172.16.11.80        2. 对每一个路由来说,这个“与”运算的结果要与路由的网络目标地址比比较,而二者的一次匹配意思着这条路由可被用于将数据包转发到其目标地址。如果发现不只有一个匹配,Windows就会选用拥有最长匹配的路由(即1的位数最高的路由)。如果这并不有产生唯一的路由,Windows就任意地选用一个作为路由。从上面的列表中,这个“与”运算的结果导致了两个匹配(路由1和3),因此Windows选择了拥有最长匹配的路由,即第三行的那个。其结果是Windows知道了使用哪个路由将数据包传送到目的地。下面是这条路由在服务器的路由表中看起来的样子:   Network Destination     Netmask         Gateway           Interface Metric   172.16.11.0                 255.255.255.0   172.16.11.30    172.16.11.30 20   3. Windows现在要使用下面的算法来决定下一步做什么:   a) 如果路由的网关字段与服务器上的一个网络接口的地址相匹配(或者如果网关是空的话),那么Windows就会用在路由中指定的接口将数据包直接发送到目标地址。   b) 如果路由的网关字段并不与服务器上网络接口的任意地址相匹配,Windows将会把数据包转发给路由中的网关字段的地址。   很明显,这里符合条件a,路由的网关字段(172.16.11.30)即为分配给服务器单个网卡的地址。Windows因此会作出决定认为目标地址位于本地子网上,这也就是说Windows不需要将数据包发送到任何路由器,而是直接发送给其目的地址。在此例中,Windows使用服务器的172.16.11.30的网络接口,简单地将数据包发送给172.16.11.80,接收主机得到了数据包。示例二:目标主机在远程子网上   现在,让我们继续同样的过程,不过这次我们假定服务器想把数据包发往一个不同子网上的一台主机(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 0.0.0.0 0.0.0.0 0.0.0.0 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查找祥细资料。不过,需要注意,这种重置操作并不会清除你手动添加到路由表中的路由。

  结论

  我们讨论了路由表是如何工作的,并且阐述了如何诊断路由表的故障,下一篇文章我们将讨论几个更为复杂的例子,例如看看拥有多个地址和多个网卡的服务器的情况。这是网络故障诊断结构化方法的第三篇,本文谈的是如何利用Windows平台的网络连接修复特性。

  成功的故障诊断依赖于三个重要支柱:缜密的逻辑思维、对技术与技巧的理解、诊断工具的使用经验。我们的文章主要以这三个支柱为基础。例如,在笔者的首篇文章中,我们概要地描述了一种结构化的方法,展示如何从逻辑上诊断Windows系统网络的TCP/IP网络故障。在第二篇文章中,我们重点从技术上讨论了路由表是如何工作的,并讨论了路由表问题的故障诊断技巧。今天的这篇文章中,我们将理解Windows的网络修复特性如何修复常见的网络连接问题。后面我们还有文章讨论上述的三大支柱,以帮助读者成为更为专业的故障诊断高手。

  修复特性是一个强有力的工具,虽然大家很少用它(你用得很多吗?),因为许多人没有真正地理解它。使用这个特性是相当简单的,只需要在网络连接上右击,从弹出的快捷菜单中选择“修复”即可。如图:  

在我们这样操作时,就会弹出一个对话框,连续地显示一系列的消息,这些消息表现了修复活动的工作过程。如图:
 

在上面的图中,我们看到的正在进行的修复操作是“清除DNS缓存”,这仅是一个修复操作而已。背后,Windows执行的是一些命令行操作,图中的每一个过程的消息(如“清除DNS缓存”)都指明了其中的一个命令被执行了。那么,在我们使用“修复”功能时,到底系统运行了哪些命令,执行了哪些操作呢?这些命令做了什么?它们对系统产生了怎样的影响?为什么要执行这些操作或命令?下面我们一一道来:

  第一步:DHCP更新(DHCP Renew)

  如果你配置了网络连接使其可以通过DHCP自动地接收IP地址,就会需要这一步。如果你手动配置了连接,使用的是静态的IP地址和其它的TCP/IP配置,就不需要这一步了。此处执行的这个命令行操作类似于但不同于下面的命令:

      以下是引用片段:
  ipconfig /renew
    
    这个命令会试图与DHCP服务器(计算机先前的IP地址就是从此租用的)联系。如果可以联系到DHCP服务器,计算机就会确认其目前的TCP/IP配置是合法的。不过,在这个命令通过“修复”功能执行时,与通过命令行方式启动它的行为是不一样的。此时,并不是向获取其IP地址和相关DHCP配置的服务器发送一个单播的DHCP更新消息,而是向网络中的任何可用的DHCP服务器发送一个DHCP更新消息的广播包。如此做的原因在于,如果计算机目前的TCP/IP配置是非法的,计算机就可以通过要求一个新的地址租用,从任何可用的DHCP服务器那儿获取新的TCP/IP配置。执行“修复”网络连接这个操作有两个方面的影响:一是解决客户端上的DHCP配置问题,二是在无需与一个特定的DHCP服务器联系的情况下解决问题。

  小提示:通过实施网络上的DHCP服务器的冗余机制,来防止由于DHCP服务器不可用所造成的网络问题。现在网上有不少这样的文章,读者可自己用google等搜寻。第二步:清空ARP缓存

  这一步执行的命令行操作如下所示:

    以下是引用片段:
  arp –d *

    这个命令清空本地计算机上地址解析协议(ARP)缓存中的内容。ARP是一个用于将IP地址解析为MAC地址(固化到局域网网卡内)的协议。ARP缓存包含着最近一段时间以来解析的网络节点的MAC地址。这些MAC地址被保存到计算机的缓存中,目的是与这些节点(IP地址)的通信无需重复解析就可以实现。如果ARP缓存中的一个或多个项目不正确,那么与某些IP地址的网络通信就会失败。如果某个不正确的缓存项目属于本地子网的一个点,那么与那个节点的通信就会失败。如果默认网关的缓存项目不正确,那么与远程子网节点的通信就会失败。这种类型的网络通信失败(不管是位于本地子网还是远程子网)都可以指明哪一个ARP缓存项目是不正确的(假设不正确的ARP缓存项目是问题所在)。

  第三步:清空NetBIOS缓存

  这一步执行的命令行操作如下所示:

     以下是引用片段:
  nbtstat –R
    
    这个命令会清空本地计算机上的NetBIOS缓存内容。运行这个命令还会将LMHOSTS文件中的任何项目预先装载到缓存中。在多数基于Windows的网络中,包括那些部署了活动目录和DNS域名解析的网络,老的NetBIOS名字解析仍可用于某些功能。由于可通过查询一个WINS服务器或通过运用NetBIOS广播将远程主机的NetBIOS名字解析为其相关的IP地址,这些主机到IP地址的映射就被添加到本地计算机的NetBIOS缓存中,从而与远程主机的通信在无需反复多次解析的情况下就可以实现。如果NetBIOS缓存中的一个或多个项目不正确,与网络中的某些IP主机的通信就会失败。如果本地子网主机的缓存项目不正确,那么与此主机的通信就失败。如果默认网关的缓存项目不正确,那么远程子网上的主机通信就会失败。这种网络通信失败(不管主机是在本地子网或远程子网上)可以指明NetBIOS缓存中的哪个项目不正确(假设不正确的NetBIOS缓存项目是问题所在)。

  不正确的NetBIOS缓存项目有时是由WINS服务器上WINS数据库中的过时项目引起的。这是因为在实施WINS后,WINS要优先于NetBIOS广播的名字解析,因此损坏的或过时的WINS项目就会用不正确的项目重新注入NetBIOS缓存,即使在缓存被清空以后也是如此。这种情况的解决方案是要在WINS数据库中永久性地标记不正确的记录,再次清空NetBIOS缓存内容,然后用nbtstat –c命令监视缓存,用以确保这些不正确的项目不会再被加裁到缓存中。

  第四步:清空DNS解析程序缓存

  这一步执行的命令行操作如下所示:

    以下是引用片段:
  ipconfig /flushdns

    这个命令清空本地计算机DNS解析程序缓存中的内容。运行这个命令还会将HOSTS文件中的任何项目预先装载到缓存中。通过查询名字服务器(DNS服务器),远程主机完全合格的DNS名字就会被解析为相关IP地址,这些FQDN来到IP地址的映射就会被添加到本地计算机DNS解析程序的缓存中,这样一来与远程主机的通信就无需重复地进行解析。如果DNS解析程序缓存中的一个或多个项目不正确,某些IP地址的网络通信就会失败。要查看DNS解析程序缓存中当前的内容,请在命令行提示符下,键入执行ipconfig /displaydns命令。

  如果你试图解析的远程主机的IP地址最近发生了改变,那么你可能就无法用其FQDN与那台主机通信,除非你清空DNS解析程序的缓存。当然,利用指定的TTL,缓存项目会自己就会超时,这些TTLS是在名字解析期间,从名字服务器获得的,不过,如果你注意到突然不能连接到某台远程主机,你就可以试着修复你的网络连接,清空DNS解析程序缓存。第五步:再次在WINS中注册

  这一步执行的命令行操作如下所示:

     以下是引用片段:
  nbtstat –RR
    
    这个命令试图在WINS服务器上的WINS数据库中重新注册本地计算机。这也就是说本地计算机的所有NetBIOS名字都是首次发布,然后在数据库中重新更新。如果你的网络拥有WINS服务器,这当然就很有用了,不过部署活动目录和Exchange Server的多数企业环境仍在使用WINS,请参考如下网址获取更为详细的信息。http://support.microsoft.com/default.aspx/kb/837391

  在一台Windows计算机正常关闭时,它应该从WINS数据库释放其记录。如果一台计算机并没有正常关闭,那么这台计算机的WINS记录就不会从数据库中正常清除。WINS数据库中的过时记录将会导致网络通信问题,特别是对于象笔记本电脑等可移动计算机来说,因为它们有可能从一个网络离开,然后又挂到另外一个网络上。通过强迫计算机重新在WINS注册,使用修复功能通常能够解决这些问题。

  第六步:在DNS中再次注册

  在用户使用注册特性时,这一步执行的命令行操作如下所示:

    以下是引用片段:
  ipconfig /registerdns

    这个命令会试图在名字服务器上的DNS数据库中再次注册本地计算机。这意味着本地计算机所有的DNS名字都是首次发布,并在DNS数据库中更新(假设你拥有活动目录网络,可以使用动态DNS(或DDNS)在数据库中注册DNS名字)。

  结论

  网络连接的修复特性对于诊断网络连接问题是一个有用的工具。不幸的是,多数管理人员并没有意识到这个特性是如何工作的,本文通过探索执行此动作幕后的操作试图纠正这一点。由于排除了可能的原因,如不正确的或缺失DHCP配置、非法的ARP缓存项目、非法的NetBIOS或 DNS解析程序缓存项目,或者非法的或过时的WINS或DNS数据库的过时项目,我们就可以知道这个工具是如何工作的,从而有助于缩小故障诊断努力的范围。如果你的网络存在着连接故障,而你已经确认了网络的媒体连接是正常状态(也就是没有电缆松动情况,也没有关闭集线器或拨掉交换机的电缆),那么修复特性就应该成为你努力解决问题、恢复连接的首选措施之一。

上一页  [1] [2] [3] 

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛 https://bbs.txwb.com

关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩

本文来源:广东网吧联盟 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系email:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行