我们以前曾经讲解过ICMP协议的有关内容。了解了ICMP的基础知识,那么对已ICMP协议的应用,我们今天来讲解一下ICMP回显的内容。这里面我们,我们主要是根据对监控系统的分析来学习这部分知识。
一、概述
在电信级设备功能日益完善,组网日趋复杂的今天,对设备的管理监控已经成为保障设备稳定、正常运转的必要手段.其中,对底层通信网络的监控是整个监控管理系统的核心和基础.
以前众多企业级的通信核心网设备因为没有完善的监控管理,缺乏告警及系统运行状态的相关日志信息,致使维护人员无法准确掌握设备运行状态,设备运转达不到用户所必须的稳定性及安全性要求.尤其当网络物理硬件出现故障造成网络中断时,如果不能及时发现并定位,不仅会造成用户长时间通信中断,而且会让我们厂商的研发和工程人员无谓浪费时间去逐步查找软件问题.针对这种现象,我们提出一种网络状态监测的解决方案.
这种监测方法主要是基于ICMP协议开发的,基本原理类似Windows自带的Ping功能.Ping的目的是为了测试网络中的另一台主机是否可达.该程序给主机发送一份ICMP回显请求报文,并等待返回ICMP回显应答.通常Ping是对两个TCP/IP系统连通性进行测试的基本工具.它只利用ICMP回显请求和回显应答报文,无须经过传输层(TCP/UDP),从而将问题定位到IP层以下,避免了传输层和应用层的问题干扰.Ping服务一般在内核中实现ICMP的功能.
由于Ping具有上述特点,其统计结果信息可以被利用显示底层传输网络的状态.关键的统计数据有:
报文抵达序列,由ICMP序列号(ICMP-seq)显示;
每个报文往返所用时间,单位为ms(毫秒);
报文丢失百分比,它在ping命令输出的总结行显示.
其中,序列号用于标识每一个响应包的先后顺序,用于检验网络传输是否会重复或失序;往返时间RTT可以显示出网络传输状态的好坏;而报文丢失百分比则是对网络传输质量的统计评估.
基于上述特性,我们提出一种多方向网络状态监测的方法,并简要说明其实现原理.
二、网络状态监测实现原理
TCP/IP三层网络作为应用层传输数据的基础,尤其是电信级交换数据的传输基础,无论从安全性还是可靠性上都有非常高的要求,因此,网络状态监控已经成为目前众多设备提供商的研究重点之一.
如果仅仅使用Windows或者Linux系统自带的Ping功能作为状态监控手段,我们只能实现单一的一台服务器到另一台服务器的通信监测.如果该服务器与多个其它服务器同时建立TCP/IP连接,就必须通过多次重复使用ping命令才能达到同时监控每条链路方向的目的.对于复杂的电信核心网来说,单一的点对点监控已经无法满足其发展需求,我们必须找出一种单台服务器可同时监控多台(几十甚至几百台)服务器的跨平台网络状态监测方法,以满足集中监控整个核心网络的目的.
基于上述原因,利用ping的原理开发出一种用于多点通信状态监测的系统,具体实现机制如下:
监控系统模块通过指定接口函数接收待监测的客户端服务器IP地址,将该客户端的地址记录到内部统计结构列表中,并在记录时判定该地址与已保存地址的重复性(重复的地址将不会被二次记录),然后,通过定时器周期向所有客户端地址方向发送ICMP探测包,对其链路状态进行监控.
监测过程中,分别对每一被控链路方向的收发ICMP探测消息进行统计:当收到响应的时延小于用户指定阀值的时候,记录该消息的接收时间、序列号,以及接收ICMP响应的RTT往返时间,否则做丢包处理.通常情况下,由于电信级设备的高要求性,我们认为响应时间大于1s的网络是不可用网络,属于严重堵塞或中断状态,必须告警并尽快查明恢复.正常通信时,网内响应时间应小于10ms,网间小于100ms才是具有高可靠性的传输网络.发送ICMP探测包的周期应该由用户根据安全需要自行设定.
每发送10包ICMP探测消息后,应该对各被控方向的整体网络状况进行一次统计,内容包括收到响应的数量、时延及丢包率等.将所有的统计数据全部记录在指定目录下的log日志文件中,日志文件的大小在大于一个阀值时应该保存为备份文件,然后重新记录.通过日志在本机中查看服务器在一个周期时间(例如一周)内的网络通信状况,便于维护人员及时发现并提前避免传输层的问题.
这里需要设置一个周期上报线程,每隔一个用户指定的时间周期,通过计算,将网络状态统计数据主动上报到操作维护台.上报内容包括被监控端的IP地址,RTT往返时间和丢包率等.此外,该线程还对每个被监测客户端的收发消息进行差值统计,一旦发现丢包立即通过接口函数上报告警至维护台.告警内容包含监控客户端的IP地址和告警级别.
需要注意的是,由于采用多方向连续ICMP监,所以,对于ICMP响应消息一定要进行合理的区分,以避免各个监控方向的统计混乱.由于传输网络具有不确定性,并不能保证每一包到达的先后顺序,此时通过IP地址、序列号和消息pid号区分响应消息就显得尤为重要.另外,为了使用发送接收超时设置,必须设定socket为SO_RCVTIMEO和SO_SNDTIMEO方式,否则一旦某一监测方向出现网络超时中断问题,程序将面临被悬挂死锁的危险.
当返回ICMP回显应答时,要保存消息序列号和TTL生存时间,并计算探测消息往返时间.ICMP消息序列号计数从0开始,每发送一次新的回显请求,序列号加1.程序记录返回的每个分组的消息序列号,供查看是否有分组丢失、失序或重复,并通过在ICMP报文数据中存放发送请求的时间值来计算往返时间.当应答返回时,用当前时间减去存放在ICMP报文中的消息发起时间,即往返时间.
基于ICMP的网络监测方法,优点是具有平台无关性.无论服务器、普通计算机或者电信交换机,只要是支持TCP/IP协议的操作系统,都可以被列为监控对象.即此监控方式不受被控端所使用的操作系统和操作平台限制.这样不仅提供了极强的平台通用性,还大大减少了开发和维护所需成本.#p#
三、试验数据分析
选择在一个相对稳定的局域网(192.168.1.网段)内搭建实验环境,这样可以在测定监控系统运行稳定性的同时,通过断开、连接网线的操作,实时模拟测试各种异常情况的发生.这里只给出基本的测试数据.
其中,以1.171作为监控的服务器,160、208、211三台主机作为被监控的客户端.当服务器分别收到三个被控端的IP地址,就会以60秒为周期分别对三台服务器进行实时监控;每间隔10分钟做一次统计写日志操作(该时间周期用户可调).
正常情况下,日志会每隔10分钟记录一次收发总包数和丢包率.为了测试超时中断情况,拔掉192.168.1.160的网线模拟网络中断,再查看日志.
此时,日志文件会记录下每次响应超时的状况,并在该次探测失败时上报告警消息至维护台,然后,统计数据时算出当前1.160服务器的丢包率.监控系统运行时,其它方向的统计信息并未因该方向丢包而受到影响,各个客户端的统计信息是相互独立的.另外,也应该对网内响应时间超过100ms的数据包记录统计(100ms指代网络延时过长的阀值),以供查看整个网络是否处于超负荷工作状态.
在记录当前时间、IP地址和序列号的同时,具体响应时间也被详细列出,以供维护人员定位故障时间和故障的严重程度.
该监控系统已经在Windows、Linux、Unix、Vxworks等系统平台上进行过稳定性测试,可正常使用.笔者针对测试过程中遇到的一些问题做如下总结,以供参考.
在发送端上,往返时间的计算结果有时可能为0 ms.这是因为程序所在的某些服务器CPU时间精度***只能到10ms级,低于10ms的时间精度无法取得,只能以数字0代替.
测试发现,通常第1个响应消息的往返时间值要比其他的大.这是由于目的端的硬件地址不在ARP高速缓存中的缘故.在发送***个回显请求之前要发送一个ARP请求并接收ARP应答,这需要花费几毫秒甚至几十毫秒的时间.
在网络运行中,正常工作状态是:响应时间趋近于0,报文丢失很少或没有,并且报文按序抵达.如果报文丢失较多而响应时间低或报文乱序抵达,说明网络硬件可能出错.在以太网中,可能是线缆终端故障,线缆分段故障或中继器故障.首先检查线缆终端,它很容易出故障,尤其是终端器放在用户可碰到的工作区中;然后看中继器的工作状态,长时间使用的中继器出问题的几率也比较高.
如果在广域网上进行测试,则上述报文丢失较多而响应时间低的现象可能属于正常范围.由于TCP/IP适用于不可靠网络,某些广域网的报文丢失率可能较高.但是若对于安全级别要求较高的电信级网络而言,上述现象一定表明出现网络故障,需要马上进行问题排查.
四、应用情况及其缺陷
现阶段,该监控方法已经应用于大唐电信SCDMA多组组网中,为核心交换网络的底层传输系统提供监控,在工程应用中获得了良好的效果.在给已开发的网络管理系统项目中也使用了该监控方法,对整个网络的底层通信状态进行监控.应用前景及可扩展性都较好.
但是,该方法也存在一定的弊端.如果不能Ping到某台主机,那么,就不能Telnet或FTP到那台主机,即网络可能存在问题.随着Internet安全意识的增强,出现了提供访问控制清单的路由器和防火墙.一台主机的可达性可能不只取决于IP层是否可达,还取决于使用何种协议及端口号.监测程序的运行结果可能显示某台主机不可达,但可以用Telnet远程登录到该台主机的25号端口(邮件服务器).即此方法不适用于有防火墙和限制IP功能的网络.要使用该模块,必须关闭服务器上相应的防火墙功能.
五、结束语
网络传输层是整个现在通信系统的基础和核心,其好坏直接影响到上层应用程序实现的质量.利用ICMP协议开发的这种监测方法提供了对底层传输物理设备(包括网卡、hub、路由器或者网线等物理设备)的实时监测.并能满足多服务器跨平台的复杂组网监控需求.
通过使用该监测系统,在网络出现问题时,能迅速定位故障,以检修或更换相应的硬件设备,并通过配合其他诊断方法的使用查找详细故障原因,从而大大减少了网络故障排查时间,为设备维护减少了人力和物力的投入.
今后,可以通过给该系统扩展类似Windows系统下的tracert功能,使该监控系统应用于不同网段的高等级分级监测,这样将有助于更详细地监控整个商业运行网络的状态,精确定位网络故障.这种扩展有待于研究和开发.