Gih's Blog

只言片语

利用AIX工具排除网络故障

2011-06-27 by gihnius, tagged as aix

网络问题,包括网络连接和网络性能两大方面,各自又包括配置错误或物理故障等原因. 系统管理员可以利用AIX系统自带的工具,对网络的连接及网络性能问题进行检测和排除. 这些工具包括: ping, netstat, tcpdump, iptrace...

我们知道网络通信是由一种网络通信模型: OSI(开放系统互连)来指导的. OSI 把网络从逻辑上分为了7层。每一层都有相关,相对应的物理设备,比如路由器,交换机. OSI 七层模型是一种框架性的设计方法, 建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题, 其最主要的功能使就是帮助不同类型的主机实现数据传输. 

OSI七层模型与那些命令的关联:

  • 物理层
  • 物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础.物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境.相关命令: netstat -v, netstat -D, lsdev, iptrace, errpt, tcpdump
  • 数据链路层
  • 数据链路可以粗略地理解为数据通道. 物理层要为终端设备间的数据通信提供传输媒体及其连接,媒体是长期的,连接是有生存期的.在连接生存期内,收发两端可以进行不等的一次或多次数据通信,每次通信都要经过建立通信联络和拆除通信联络两过程.这种建立起来的数据收发关系就叫作数据链路.而在物理媒体上传输的数据难免受到各种不可靠因素的影响而产生差错,为了弥补物理层上的不足,为上层提供无差错的数据传输,就要能对数据进行检错和纠错.数据链路的建立,拆除,对数据的检错,纠错是数据链路层的基本任务.相关命令: netstat -v, netstat -D, iptrace, tcpdump
  • 网络层
  • 网络层为建立网络连接和为上层提供服务.相关命令: netstat -in, netstat -rn, netstat -s, netstat -D, topas, iptrace, tcpdump
  • 传输层
  • 传输层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用. 传输层也称为运输层.传输层只存在于端开放系统中,是介于低3层通信子网系统和高3层之间的一层,但是很重要的一层.因为它是源端到目的端对数据传送进行控制从低到高的最后一层.相关命令: netstat -s iptrace, tcpdump
  • 会话层
  • 会话层提供的服务可使应用建立和维持会话,并能使会话获得同步.
  • 表示层
  • 表示层的作用之一是为异种机通信提供一种公共语言,以便能进行互操作.
  • 应用层
  • 应用层向应用程序提供服务,这些服务按其向应用程序提供的特性分成组,并称为服务元素.使用这些命令:netstat是网络维护中用得比较多的命令, 使用netstat -v, 可以帮助管理员判断是网络的哪一部分出现了问题. 因为netstat -v命令要访问OSI网络模型的物理层及数据链路层, 因此这是处理问题应先执行的命令之一,以确认有没有物理上的故障(硬件问题结合errpt, lsdev ). 通过分析netstat -v的输出, 指出是否需要调整网络适配器的配置,或者调整适配器以获得更大的数据吞吐量.一个简单的案例:netstat -v判断机器为什么没有连接上它所在的网络.机器配置: An IBM 4-Port 10/100 Mbps Ethernet PCI Adapter (ent0 - ent3) An onboard IBM 10/100 Mbps Ethernet PCI Adapter (ent4) A single cable connected to one of the ports on the four-port adapters A single IP address configured, on en0, which also maps to one of the physical devices (ent0) on the 4-Port card问题: 在en0上配置好(TCP/IP)网络后,系统不能ping到网络上其他主机.解决: 

     1. 使用lsdev 和 errpt 确认适配器与网卡是可用的且没有相关报错. 

     2. 使用netstat -in 确认接口ip的配置, 用netstat -rn 确认路由配置. 

     3. 接着使用 netstat -v ent0查看ent0的状态.

    netstat -v ent0 | grep -p "Specific Statistics"
    IBM 4-Port 10/100 Base-TX Ethernet PCI Adapter Specific Statistics:
    ------------------------------------------------
    Chip Version: 26
    RJ45 Port Link Status : down
    Media Speed Selected: Auto negotiation
    Media Speed Running: 100 Mbps Full Duplex
    Receive Pool Buffer Size: 384
    Free Receive Pool Buffers: 128
    No Receive Pool Buffer Errors: 0
    Inter Packet Gap: 96
    Adapter Restarts due to IOCTL commands: 1 
    RJ45 Port Link Status : 这行表示该接口有没有接到一个网络上, ent0是显示 down 的. 继续用netstat -v依次检查其他接口,发现ent3是 up 的.这就是说明网线插错了端口, 在那4口适配器上,应该把网线插到ent0的端口上.例子2:解释netstat -v输出中说明适配器资源配置的那部分,可以帮助隔离出有问题的系统配置. 有时需要进行网络备份,(如 TSM, SysBack), 系统管理员通常事先做过测试并且通常都能获得良好的效果, 但实际应用时, 随着服务器的增多, 备份任务也多, 网络性能就会下降. 网络的吞吐量也时高时低. netstat -v可以帮助系统管理员揭开一些潜在的问题.当一台备份服务器需要大量的资源去处理数据的接收时, 通过netstat -v分析"Receive Statistics" 和 "Specific Statistics" 可以帮助隔离出来潜在的网络性能瓶颈, 在netstat -v的输出中经常会看到"No Receive Pool Buffer Errors", 本例中, 在服务器正在处理备份任务时分两次运行 netstat -v , 如果存在性能瓶颈, 就会看到"No Receive Pool Buffer Errors:"的值不断升高.
    netstat -v ent4 | grep -p "Specific Statistics"
    
    IBM 4-Port 10/100 Base-TX Ethernet PCI Adapter Specific Statistics:
    ------------------------------------------------
    Chip Version: 26
    RJ45 Port Link Status : up
    Media Speed Selected: Auto negotiation
    Media Speed Running: 100 Mbps Full Duplex
    Receive Pool Buffer Size: 384
    Free Receive Pool Buffers: 128
    No Receive Pool Buffer Errors: 999875
    Inter Packet Gap: 96
    Adapter Restarts due to IOCTL commands: 1 
    第二次:
    sleep 30 ; netstat -v ent4 | grep "Receive Pool Buffer Errors" 
    No Receive Pool Buffer Errors: 1005761 
    同时可以看到"Receive Pool Buffer Size: " 的值为 384, 因此可以将此值适当增大(chdev -l ent4 ...).例子3: 使用tcpdump命令假如你的服务器有4张网卡连接到不同的网段. 如果另外两个(接VLAN C and D)没有连接进来时, 其中两个(接VLAN A and B)工作正常, 而netstat -v显示数据从4张网卡进入, 而且没有相关错误日志. 这种情况下, 可以通过检查接收到的数据(tcpdump)来确定连接的问题.首先确认网卡的配置: 这个例子中,en2的ip是 9.3.6.225 接入VLAN C (9.3.6.224/255.255.255.240); en3的ip是 9.3.6.243 接 VLAN D (9.3.6.240/255.255.255.240).检查 en2上的流量:
    tcpdump -i en2 -I -n
    
    -TIME STAMP-    -SOURCE IP-    -DESTINATION IP-   -FLAG   -ADDITION INFO- 
    09:04:27.313527323 9.3.6.244.23 > 9.3.6.241.38160: P 7:9(2) ack 8 win 
    65535
    09:04:27.402377282 9.3.6.245.45017 > 9.53.168.52.23: . ack 24 win 
    17520 (DF) [tos 0x10]
    09:04:27.418818536 9.3.6.241.38160 > 9.3.6.244.23: . ack 9 win 65535 
    [tos 0x10
    09:04:27.419054751 9.3.6.244.23 > 9.3.6.241.38160: P 9:49(40) ack 8 
    win 65535
    09:04:27.524512144 9.3.6.245.45017 > 9.53.168.52.23: P 4:5(1) ack 24 
    win 17520 (DF) [tos 0x10]
    09:04:27.526159054 9.53.168.52.23 > 9.3.6.245.45017: P 24:25(1) ack 5 
    win 2482 (DF)
    09:04:27.602600775 9.3.6.245.45017 > 9.53.168.52.23: . ack 25 win 
    17520 (DF) [tos 0x10]
    09:04:27.628488745 9.3.6.241.38160 > 9.3.6.244.23: . ack 49 win 65535 
    [tos 0x1
    ... 
    从命令的输出可以看出, 源地址9.3.6.24X 显示 ent2接入了不是要求的网段, 原本ent2应该接入 9.3.6.22X. 需要交换插入的网线来纠正问题,或者重新配置交换机路由器.