2008年12月23日星期二

解决TCP/IP协议中遇到的问题的常用方法

常用应用程序:主要为UNIX下的命令,WINDOWS下可能不同
ifconfig----提供网卡的基本配置信息。通常用来检查错误的IP地址、不正确的子网掩码或错误的广播地址。
arp----以太网地址/IP地址的转换工具。通常用来检测局域网IP地址配置错误。
netstat----提供多种信息。通常用于显示网络接口、网络SOCKET及网络路由表的统计信息。
ping----检测远程主机是否可达。该工具也可用来显示报文丢失的统计信息及报文传送时间。
nslookup----提供DNS名字服务的信息。
dig----提供名字服务的信息,与nslookup类似。
ripquery----提供系统接收或发送RIP更新报文的信息。它是gated软件包的一部分。但用户不需要运行gated守护进程,当系统运行RIP时,就可以使用此程序。
traceroute----提供从本地系统到远程节点的路由信息。每一跳的信息均被显示。
etherfind----分析主机与网络交换的报文信息。ehterfind实际上是TCP/IP协议分析工具,它可以检查报文的内容,包括报头。在SUNOS操作系统中,该程序称为tcpdump

解决网络访问故障
没有响应或不能连接等错误消息表明网络故障出现在协议的底层。如果测试指出此类网络故障则集中测试路由与网络接口。使用ifconfig、netstat及arp命令测试网络层访问。
网络不可达消息说明路由有问题。如果仅本地主机的路由表出错,则很容易发现并解决。
首先使用netstat -nr 及grep 命令检查路由表中是否有到达目的主机的有效路由。 如果netstat命令说明有正确的路由或有缺省路由,则说明问题不在路由表。 此时使用traceroute,跟踪到达目的地的整个路径。如果netstat没有返回路由信息,说明本地路由表出错,根据系统采用静态路由还是动态路由决定解决方法:
1、如果系统采用静态路由,使用route add命令添加所需路由,大多数系统的静态路由基本上都使用缺省路由。因此,丢失的可能是缺省路由。使系统每次启动时添加所需的路由是彻底解决问题的好方法。
2、如果使用动态路由,确定路由程序(gated)是否正确运行,如果没有运行正确的路由守护进程,重新启动它并指出正确的路径。路径可以使用户发现导致守护进程异常终止的原因。 如果路由守护进程正确运行,并且本地系统通过RIP路由信息协议接收路由更新数据,则使用ripquery检查由RIP提供者接收的路由更新报文。
如果本地路由表及RIP提供者都正确,则问题有可能出现在距本地机较远的主机上。远程路由问题可导致"无响应"及"网络不可达"错误。
但是"网络不可达"并不说明一定是路由问题,也有可能是本地主机与远程主机间的其他错误导致网络不可达。可以用traceroute命令帮助用户定位这些错误。(如果traceroute接收到端口不可达消息,则表明它到达目的主机,但是端口不可达)
注:ICMP在不同类型网关上具体实现时的BUG及通过网络的报文路径的随机性可能会导致一些奇怪的输出。因此用户不需要自己看traceroute的输出。
traceroute输出中重要的部分为:报文是否到达目的主机?如果没有,在哪儿停止? 当用户应用返回"unknown host"消息,说明存在名字服务器问题。名字服务器故障通常使用nslookup或dig等工具诊断。(nslookup有三个重要的特性可以帮助我们解决远程域名服务器故障:使用NS查询定位远程域的主服务器;使用ANY查询获取远程主机的所有记录;使用nslookup的ls及view命令浏览远程域的所有项。)
当解决远程服务器故障时,直接使用NS查询主服务服务器,不要查询非主服务器。如果问题有间歇性,查询所有的主域名服务器并比较所得结果。对于同一查询返回不同的结果会引起间歇性名字服务器问题。ANY查询返回主机的所有记录。仅知道简单信息就可以解决许多问题。
例如:如果查询返回MX记录但没有A记录,则很容易理解用户为什么不能Telent到远程主机。大多数主机可用mail访问,但不支持其他服务。许多用户不了解这一点,而使用不恰当的方式访问远程主机。
如果管理员不能获得用户提供的主机名的任何信息,很有可能主机名出错。使用nslookup的ls命令显示远程域的问题件,并将它重定向到某个文件中。然后使用nslookup的view命令浏览该文件,寻找与用户提供的主机名类似的域名。许多问题都是由错误的主机名引起的。 dig是与nslookup类似的工具。dig通常为单行命令,而nslookup为交互会话应用。

一、解决网络接口层问题
这一层的问题可分为以下四类:
1、物理连接问题
2、DHCP客户端没有分配IP地址。因为可能返回给用户大量的消息所以比较明显。在UNIX中可以使用ifconfig确信获得了IP地址。
3、ARP问题。如果地址解析协议工作不正常,用户就不能将IP地址解析为MAC地址。ARP应用,可以帮助用户检查地址解析是否正确。 4、网络中IP地址冲突

二、解决网络层问题
网络层负责报文的路由。因此,在网络层,仔细检查IP地址、子网掩码及缺省网关是否正确。除了配置外,问题还可能出在路由表或本地主机远程节点间的路由器上。
IP地址配置问题 :

1、IP地址错误:使用不正确的地址,客户端不能与其他任何TCP/IP主机通信,因为网络地址不正确,客户方发送的任何报文都将路由到错误的地址。
2、子网掩码错误:子网掩码只决定出去的报文是否需要路由,因此子网掩码配置错误的主机仍可以接收消息,然而当它发送返回消息时,消息将只在本子网内,而不会通过路由器到达其他子网。(因为它错误的认为一些报文的目的地址仍然在同一子网内,因此不会通过路由器)
3、默认网关错误:如果默认网关配置错误,则它只可与本地主机通信,而不能连接远程节点;主机可以接收来自子网以外的报文,因为默认网关只影响报文的发送。然而,当主机试图响应远程节点的报文时,由于网关配置错误,将不能正确发送响应报文,导致网络连接错误。

三、解决TCP和UDP问题
传输层很少出现问题。如果用户可以使用PING命令,说明传输层工作正确。在这一层唯一可能发现的问题与TCP窗口尺寸有关,该问题将导致通信速度缓慢(打开注册表查找WindowsSize项,记住其值,并将该项删除,系统将自动重设窗口尺寸。)。
1、socket问题 如果用户正确配置了IP地址及协议,并且到远程节点的路由正确,仍需要在正确的端口运行需要的服务。如果用户确认端口正确,可以使用netstat命令检查端口接收的数据。
2、Service文件 在%systemroot%\system32\drivers\etc目录下的service文件中列出了大部分服务使用的端口号,以供系统初始时使用。如果某个服务有问题,用户应首先检查此文件中服务是否使用正确的端口,如果服务未列出,用户必须手工加入,使系统知道使用那个端口提供此项服务。

四、解决应用层问题
在应用层中,用户可能会碰到两类问题:NETBIOS问题和名字解析问题。其中最常见的是名字解析问题,它影响Socket应用及NETBIOS应用。
名字解析问题 若用户正确配置TCP/IP并且协议安装正确且可正常工作,但连接中仍有问题则很可能是名字解析问题。当用于想要连接网络资源----如映射某服务器的网络驱动器----它们通常使用域名而不是IP地址。当使用域名建立连接时,必须首先将域名解析为IP地址。 检查名字解析的IP地址是否正确,如果名字不能解析为IP地址或解析不正确,用户就不能使用名字建立连接,除非使用IP地址。
用于连接的主机名有两类:分配给NETBIOS主机的NETBIOS名字,如WINDOWS系统;分配给非NETBIOS主机的名字,如UNIX服务器。 总的来说,当使用MICROSOFT网络连接网络共享、文件打印或应用服务器时,使用NETBIOS名;当执行TCP/IP应用,如使用FTP或WEB浏览器时,使用主机名。
注:NETBIOS network basic input/output system :主要用于数十台计算机的小型局域网。NETBIOS协议是一种在局域网上的程序可以使用的应用程序编程接口API。为程序提供了请求低级服务的同一的命令集,作用是为了给局域网提供网络以及其他特殊功能,几乎所有的局域网都是在NETBIOS协议的基础上工作的。 系统可以利用WINS服务、广播LMHOST文件等多种模式将NETBIOS名解析为相应的IP地址,实现信息通讯,所以在据网内部使用NETBIOS协议可以方便的地实现消息通信及资源的共享。微软的客户机/服务器网络系统都是基于NETBIOS的。

没有评论:

发表评论