思科网络网管员指南 第二章 网络连通性
 
绍系统内置的一些测试工具比如Ping,Traceroute,whois,nslookup等.尽管很简单很基础,但是里面还是有些值得注意的问题,还将介绍一个小案例.
 
网络连通性基本测试工具

Ping可以说是再平常不过的测试工具了,主要用来测试两点间的连通性,Round-Trip的延迟和丢包率等.
Windows下Ping的使用
Ping /?可以显示ping的各种参数,不过我相信没几个人看完这些参数的.下面介绍几个有用的参数.
Ping缺省认为1000毫秒为超时,使用-w参数可以修改此超时时间,比如在有些无线环境中Roundtrip时间就很长,如果使用缺省值ping就可能会出现Request timed out情况.
-t参数可以保持持久ping,Ctrl-Break可以保持命令继续执行看当前的汇总,Ctrl-c则是停止命令.
-a解析主机名
-f用来设置DF位,-l用来设置数据载荷的大小.通常用来检测网络的MTU.
 
注意:MTU为最大传输单元,不同的网络情况此值都有不同,特别是在配置×××的时候很重要,因为数据头有很多额外的开销.如果用户数据包大于MTU就会在传输中被分段.Windows下缺省Ping数据包大小为56字节,一般不会出现MTU问题,但是用户应用数据一般就不会只有这么小,所以要使用-l来测试.
 
注意:MTU是数据载荷大小和IP头大小的和,而在windows下ping的IP头为28字节,所以最终的MTU大小应为-l的值和28之和.
Linux下Ping的使用
Linux下ping跟windows下略有不同,缺省就是持续ping,-c参数可以指定ping的次数.类似于windows的MTU问题,-M do是设置DF位,-c来设置数据载荷的大小.
 
注意:Linux下ping的IP头为28字节.
IOS下ping的使用
IOS下的Ping在用户模式和特权模式下都有,相应的权限不同,除了可以针对IP协议以外,也支持IPX,AppleTalk等协议.缺省是5个包,每个包的大小为100字节,超时为2秒,使用流出端口的地址作为包的源地址.没有持续ping的参数,可以变相的通过将ping的次数设为最大值9999999来实现.可以通过组合键Ctrl-Shift-6加x来实现ping的中断.由于特权模式下的ping参数是通过对话的形式实现,所以不需要过多介绍.

注意:在平常的网络中可能由于安全的限制只能使用特定的源地址进行ping(比如设备的loopback地址),而缺省这里使用的流出端口地址可能是被禁止的,所以需要通过特权模式的ping来设定源地址来避免这种情况.
Ping的变种

Fping:一般ping只能一次测试一个主机,fping可以同时测试多个主机.基于linux的,可以在这里下载.
Hping:ping是基于ICMP Echo Request的.而有些网络的防火墙禁止了ICMP,Hping可以提供基于TCP,UDP等协议来测试远端主机的连通性.也是基于linux的,在此下载.

SmokePing:此软件可以给你图形化的显示网络性能比如延时,丢包率等等.在此下载.
Ping的测试步骤(这个好像CCNA爱考)
1.     Ping 127.0.0.1 确认本地的TCP/IP堆栈工作正常
2.     Ping 本机IP地址 确认网卡和链路工作正常
3.     Ping 网络网关 确认网关之间路由正常
4.     Ping 远端主机 确认和远端主机连通
TraceRoute使用TTL的特性来检查网络的连通性,提供了网络路径等Ping所不能提供的更详细排错信息.

Windows下tracert的使用

Windows下是基于ICMP Echo Request协议的,可以使用-d参数来禁止地址翻译,-h指定最大跳数,-w指定超时时间.

Linux下traceroute的使用

Linux下是基于UDP协议(当然也可以使用-I参数来恢复使用ICMP协议),一般第一个包使用端口33434,后面的包的端口依次增加来减少被禁止的可能,当然此端口可以使用-p参数来修改,-n禁止地址解析增加输出速度.

IOS下traceroute的使用
IOS下的traceroute跟ping比较类似也是分不同模式,也通过对话选择形式进行参数调整.缺省3个包使用UDP端口33434,超时时间为3秒,使用流出端口的地址作为包的源地址.
 
网络连通性高级测试工具
尽管有很多网络工具可以供网管使用,这里仅仅介绍一些系统内置的工具.
Whois:提供域名信息的工具,linux内置,尽管现在也有win下的版本
Nslookup:针对DNS服务器的查询域的MX,A,CNAME记录.win和linux下都可以使用,set query=all,或者mx等可以查询全部或者部分的信息.在Linux下还有一个类似的dig命令,提供的输出更多,更易懂,并且所有的参数可以通过一个命令行完成,方便制作脚本.常用命令格式为dig @dns-server targetdomain query-type.
Netstat是一个可以在win和linux下使用的获得端口,连接,路由等网络信息的工具.
Win下的netstat:不加参数显示当前活动的TCP连接,后面可以加数字(秒)得到不停刷新的信息.-n显示地址而不是域名,-a显示所有的连接,在xp和2003还有一个新的-o的参数可以显示相应连接的PID(process identification).-e显示接口的摘要信息,-o显示协议的摘要信息.-r显示系统路由信息,相同于route print命令.
Linux下的netstat:不加参数会显示当前活动的所有连接包括Unix Sockets信息-atuwp参数可以去掉socket信息,-t参数显示当前活动的TCP连接,-c可以周期性的自动刷新.-n等同于win下的.-i显示接口的摘要信息,-s显示协议的摘要信息,-r显示路由表,相同于route命令.
Nbstat:win下的
Arp:Win和Linux下查询MAC地址和IP地址映射信息的工具.-a显示arp表,-s指定一个静态的映射,-d删除一个映射.
 
案例
一般情况下我们认为只要能Ping通就代表网络没有问题了,对于有少量的丢包也认为是正常现象,其实有时候问题就隐藏在这些小量丢包的后面.有一个企业网络,客户老是抱怨使用改企业的内部应用老是有问题,而内部人员则没有发现什么问题.从内部ping也很正常,后来尝试持续ping边缘路由器,发现虽然能通但是隔30秒就会time out一两次.开始被认为是正常现象,后来研究发现ping使用的ICMP的包,而对ICMP包的处理在路由器上的优先级是很低的,如果路由器出现CPU负荷过高就会不相应ICMP,进而导致time out.去边缘路由器show cpu一看果然CPU利用率90%,检查配置发现没有开启ip route-cache,并且路由器每隔30秒会收到上游发送的BGP路由,从而导致路由器停止处理数据包,出现服务无法相应的状况.开启路由器快速交换后解决问题.小小的Ping发现了网络大问题.