网络应用软件监控系统同步与容错的设计与实现
康松林, 费洪晓, 施荣华
(中南大学 信息科学与工程学院, 湖南 长沙, 410075)
摘要: 对SNMP中MIB信息和协议数据单元进行扩充, 采用面向对象的技术, 设计并实现了面向应用软件的网络监控系统。 该系统提供了对应用程序类中成员变量和成员函数的监控功能。 研究了管理站点和管理代理通信中存在的一些需要容错的问题以及管理代理和监控模块间通信引入同步机制的必要性, 论述了4种被动容错机制和1种主动容错机制以及信号灯机制的设计和实现过程。 被动容错机制包括重传机制和MIB树不一致恢复机制。 主动容错机制采用双socket连接, 以提高信息传输的可靠性。 信号灯机制用于实现管理代理和监控模块间同步通信, 从而可实现监控模块、 管理代理、 管理站点间实时、 准确的信息交换与传输。
关键词: 管理站点; 管理代理; 监控模块; 被动式容错机制; 主动式容错机制; 同步机制
中图分类号:TP393 文献标识码:A 文章编号: 1672-7207(2005)06-1048-06
Design and implementation of accommodating-err and
synchronism mechanism in net monitor system for application softwares
KANG Song-lin, FEI Hong-xiao, SHI Rong-hua
(School of Information Science and Engineering, Central South University, Changsha 410075, China)
Abstract: On the basis of expansion of management information base and protocol data unit, a net monitor system for application softwares based on object-oriented technology was designed and implemented. The monitoring system plays a monitoring role for the member variable and function of the class in the applying procedure. This paper studies some communicative problems necessary for accommodating-err mechanism between management station and management agent, as well as necessary for synchronism mechanism to lead into communication between management agent and monitor module. Moreover, it illustrates the process of design and implementation of four passive accommodating-errs, one active accommodating-err mechanism, and semaphore mechanism. The passive accommodating-err mechanism consists of re-transmission mechanism, and resuming mechanism for different MIB. The active accommodating-err mechanism improves reliability of information transmission by link of double-socket. Additionally, semaphore mechanism achieves synchronism communication between management agent and monitor module. Therefore, the exact and timely exchange and transmission are attained from monitor module to management agent, then to management station.
Key words: management station; management agent; monitor module; passive accommodating-err mechanism; active accommodating-err mechanism; synchronism mechanism
为了提高计算机网络信息安全, 人们开发了许多相关的网络安全产品, 但大多是基于网络硬件设备如路由器、 集线器、 交换机等, 而对网络应用软件的研究和开发相对较少[1-3]。 随着网络技术的发展和应用日益广泛, 越来越需要对运行于网络环境中的应用软件进行有效管理和监控, 以便及时发现运行中应用程序的状态以及存在的问题。 为此, 笔者针对应用软件的监控特点, 对SNMP中MIB(management information base)信息进行扩展, 对协议数据单元进行扩充定义[4], 设计了一个网络应用软件监控系统——ASNMS。 该系统对应用程序类中成员变量和成员函数提供监控功能。
1 网络应用软件监控系统
网络应用软件监控系统(ASNMS)的主要监控目标是网络中的应用软件, 通过及时获取软件中重要变量(如系统配置、 状态指示等)信息, 从而及时了解整个网络中应用程序的工作情况, 并且还可以通过管理站点对各受控站点中的应用程序进行控制操作, 提高整个网络和应用系统的安全性。
该网络应用软件监控系统主要包括3个模块[4]:
a. 管理站点主程序。 该程序在管理站点上运行。 通过该程序, 管理站点可以使用UDP/IP协议与管理范围内的所有受控站点进行通信, 收集网络应用程序的监控信息, 并下发各种控制命令。
b. 管理代理。 在每一个受控站点上运行1个管理代理程序(有且仅有1个), 管理代理负责管理站点(不一定惟一)和受控站点中监控模块之间的通信。
c. 监控模块。 监控模块是供软件开发人员使用的一个通用接口模块。 它负责从受控应用程序中获取监控信息, 发送到管理站点, 并且能接收从管理代理转发的管理站点命令, 对受控应用程序执行一定的控制操作。 从结构上看, 监控模块附属于受控应用程序, 但它以单独的线程形式存在。
2 ASNMS系统的同步与容错
2.1 管理站点和管理代理间通信及容错
ASNMS系统采用UDP协议来实现管理站点和管理代理之间的通信, 这是由本监控系统自身的特性和UDP协议的特点所决定的。 对于网络监控系统, 监控信息的实时传输显得很重要, 即报文实时快速传输的重要性超过了对其可靠传输的要求[5]。 若采用TCP协议, 则所需要的时间和资源较多, 检查错误和正确排列数据包的系统开销较大, 而且接收端无论接收到的数据报是否正确, 接收端都必须返回一个确认信息, 发送端只有收到了这个确认信息才会再发送下一个数据报。 而基于UDP协议, 接收端接收到的数据报若是正确的, 则接收端就直接接收, 并不用返回任何确认信息, 只有接收到的数据报有错误, 接收端才返回一个差错报文给发送端要求重发[5], 显然, UDP协议比TCP协议更适宜于监控信息的实时传输, 故监控系统采用UDP协议作为其下层传输协议。
管理站点向管理代理发送的请求报文都较小, 用一个数据包就可以完成。 而管理代理向管理站点发送的响应报文或通知报文可能很大, 必须将报文分解成几个小数据包进行传送, 在到达管理站点后再将这些小数据包重新组合成完整的报文。 与TCP协议不同, UDP协议并不完成这些数据报分解和重组工作, 不保证传输的顺序和完整性, 不提供差错控制[6, 7]。 报文在网络传输过程中随时都可能会遇到一些突发事件, 如停电、 设备出现故障、 网络流量过大等, 从而导致报文分组丢失。 UDP协议不会因为分组的丢失、 损坏或延迟而自动重传。 此外, 网络硬件设备存在的某些问题, 会导致管理站点与管理代理之间的MIB树映射数据不一致。 这就是管理站点和管理代理通信中存在的容错问题。
2.2 管理代理和监控模块间通信及同步
管理代理和监控模块间通过对内存映射文件进行读操作和写操作来交换数据。 由于在一个受控站点存在多个独立的应用程序实例进程, 它们可能同时由监控模块对管理代理进行写操作。 可能存在这样的情况: 当一个应用程序的实例由监控模块向管理代理的内存文件中写入数据, 并通知管理代理读取时, 另外一个应用程序的实例也在进行同样的写操作, 它写入的数据将前一次写入的数据覆盖。 当管理代理响应消息从内存文件中读取时, 得到的是第2个应用程序实例的数据, 第1个应用程序实例写入的数据被覆盖。 另外, 在应用程序实例的监控模块内存文件上也存在类似的情况: 当一个应用程序实例连续向内存文件中写入时, 管理代理可能还来不及对第1次写入的数据进行读取, 第2次写入的数据已经将第1次写入的内容覆盖。 因此, 在对内存文件的读写过程中引入同步机制是必要的。
3 ASNMS系统容错机制
3.1 被动式容错机制
3.1.1 管理站点命令报文丢失重传机制
管理站点发出的报文在送往管理代理的途中被丢失, 在这种情况下, 只要进行简单的重传即可, 因为传输是由管理站点发起的, 主动权在管理站点, 如果管理站点没有收到管理代理端回答的数据, 站点可以再次向代理发送数据请求, 除非确认网络连接失败。 如果管理站点在重传了n次报文后(n为重传次数的上限), 管理代理还没有响应, 管理站点就认为通往该管理代理的链路发生故障或该管理代理已非正常退出, 取消上一个请求, 并在本地的MIB映射中删除该管理代理所在的MIB分支。
3.1.2 管理代理响应报文丢失重传机制
如果管理站点发出的报文正确到达了目的地, 但由管理代理发出的响应报文在回送给管理站点的途中丢失, 在这种情况下进行重传, 可能导致管理代理收到多个相同的请求报文。 如果不管该请求报文是否为重传报文, 而只是简单地对每个请求报文都作出相应的动作、 组织和发送信息, 势必导致这样的结果: 对于2个相同的请求, 可能产生不同的回答(MIB信息在重传的间隙中可能发生变化)。 更为严重的是, 一个在管理站点上的合法请求在管理代理上可能会成为一个非法请求(MIB结构在重传的间隙中发生改变)。 为了保证报文数据的一致性和合法性, 必须对管理站点发来的请求报文进行分析。 若是同一个请求的多个重传报文, 则对它们逐一进行响应, 但响应报文的内容是一致的。
3.1.3 管理代理响应报文延迟重传机制
管理站点发出的报文正确到达了目的地, 但有可能由管理代理发出的响应报文在回送给管理站点的途中被延误, 以至管理站点误以为被丢失。 由于管理代理每收到一个请求报文后, 都回送响应报文, 因此, 在这种情况下, 管理站点的一个请求可能会收到管理代理的多个响应报文。 管理站点只接收第1个响应报文, 其余的都作为冗余报文处理。
3.1.4 MIB树映射不一致恢复机制
MIB树映射不一致的情况有2种:
a. 管理站点向某个管理代理发送一个请求报文时, 由于物理链路存在某些问题, 导致管理代理长期没有响应, 管理站点就认为该代理已经非正常关闭或者连接到该代理的物理链路存在故障, 于是, 在管理站点的MIB树映射中将该管理代理的MIB分支删除。 但管理代理方面并不知道自己已不在注册站点之列, 仍然处于注册站点状态, 在网络传输恢复正常后, 当管理代理再向管理站点发送一些Trap报文或Inform报文时, 就会被管理代理认为是错误报文。
b. 当管理代理的MIB树结构发生变化时, 向管理站点发送Inform报文。 由于网络传输的问题, 该报文被丢失。 这样, 管理站点并不知道管理代理下MIB树发生的变化, 造成MIB树与其映射间不一致。 当管理站点以后发出变化了的那部分MIB子树的请求时, 将被管理代理认为是非法请求并反馈给管理站点。
对于以上2种情况, 容错机制要实现的都是重建该代理的MIB子树结构, 使管理站点和管理代理间数据恢复一致。 对于情况a., 管理站点收到错误报文时, 就向发送错误报文的管理代理发送一个强制注册的数据包, 要求该站点重新向其注册。 对于情况b., 管理站点收到反馈报文后, 向发送该反馈报文的管理代理发送强制注册数据包, 要求该代理重新向其注册。 这样便实现了对不一致数据的恢复。
3.2 主动式容错机制
在管理站点和管理代理的通信连接中建立双socket连接, 模拟冗余设备建立冗余线程。 每一次信息传输都建立2个相同的线程, 同时传输同一份报文或者响应报文。
采用主动容错机制后, 管理站点向管理代理发送命令指令并采用双套接字连接, 在管理代理上有2个不同的报文缓冲区即主、 附缓冲区用来存放指令报文。 管理代理按“主—附”的次序循环对2个缓冲区扫描, 当任意一个缓冲区中的报文到达时, 管理代理就可以将信息传送给监控模块。
管理代理通过内存文件映射从监控模块中获取监控信息后同样建立2个数据报套接字连接, 将监控信息分别发送并存储在不同的缓冲区。 若报文过大将被分解为几个报文分组, 则在分别传送时, 其中的某些报文分组可能丢失或者被延迟。 在使用主动容错机制后, 一个报文分组必须在2个独立线程中同时被丢失或延迟才会对报文的重组产生影响。
由此, 通过在管理站点和管理代理的通信连接中建立双socket连接, 并对各个报文缓冲区中的数据进行缺失补偿读取, 这将大大增强网络应用软件监控系统中信息传输的可靠性。
3.3 管理站点UDP报文重组与差错控制
3.3.1 管理站点数据结构设计
在管理站点上, 为了重组报文和进行差错控制, 定义以下3个数据结构:
a. 等待响应的请求报文链表。 管理站点上发出的等待管理代理回应的请求报文列表。
struct RequestList{
int SeriorNumber;//报文序列号
char *IP[16]; //请求报文的目标站点
int TryTimes; //已试验发送次数
char *RequestContent; //请求报文内容
int TimerID; //定时器标识
struct RequestList *Next; //后续指针
}
b. 当前接收报文链表。 表示当前正在等待接收后续数据包的报文列表。
struct PacketList{
int SeriorNumber; //报文序列号
int TotalNum; //分组总数
int ReceivedNum; //已收到的分组个数
int TimerID; //定时器标识
struct DataPieceList *Received;
//已收到的分组序列
struct PacketList *Next; //后续指针
}
c. 报文中已收到的分组列表。
struct DataPieceList{
int Num; //分组的序号
int DataLength; //数据长度
char *Data; //数据
struct DataPieceList *Next;
//后续指针
}
3.3.2 管理代理数据结构设计
在管理代理上, 为了分解报文和进行差错控制, 定义以下2个数据结构:
a. 相连管理站点链表。 存储与本管理代理相联系的管理站点的列表。
struct ServerList{
char IP[16];//管理站点的IP地址
char Name[16]; //管理站点的名字
int Time; //定时传送更新数据的时间间隔
int TimerID; //定时器标识
struct ResponseList *History;
//向该管理站点发送的报文列表
struct ServerList *Next; //后续指针
}
b. 近期发送报文列表。 存储管理代理向特定管理站点发送的报文列表。
struct ResponseList{
int SeriorNumber; //报文序列号
char *ResponseContent; //响应报文的内容
struct ResponseList *Next; //后续指针
}
3.3.3 管理站点接收数据包的工作流程
管理站点每向管理代理发送一个请求报文后, 就在RequestList链表中插入一项, 以请求报文的内容填充序列号、 目标地址和报文内容字段, 置已发送次数字段初值为1, 开启1个定时器, 将该定时器的标识写入定时器标识字段。 管理站点接收到1个数据包后所进行的工作流程如图1所示。
图 1 管理站点接收到一个数据包后所进行的工作流程图
Fig. 1 Flow diagram when management station receiving a data packet
4 ASNMS系统同步机制
管理代理和监控模块通过多个线程对内存映射文件进行读操作和写操作来完成数据交换。 其中必然涉及读写同步问题。 采用的同步机制是信号灯机制。 信号灯对象是维护0到指定最大值之间计数的同步对象。 信号灯的状态在其计数大于0时有信号, 而在其计数是0时无信号。
线程使用CreateSemaphore函数建立信号灯对象[8, 9]。 在别的进程中线程通过调用OpenSemaphore函数打开现有信号灯的句柄。
在管理代理上为内存文件创建信号灯:
//创建信号灯, 信号灯名为ProxyMapViewSemaphore , 初始计数为1, 最大计数也是1
// h_SemAccessMapView为该信号灯的句柄
h_SemAccessMapView=CreateSemaphore(NULL, 1, 1, "ProxyMapViewSemaphore");
在监控模块中, 打开以下信号灯:
//打开名为ProxyMapViewSemaphore 的信号灯, h_SemAccessMapView为信号灯句柄
h_SemAccessMapView=OpenSemaphore(SEMAPHORE_ALL_ACCESS, false, "ProxyMapViewSemaphore");
监控模块每次对管理代理内存文件的写操作前, 都要等待信号灯的信号:
: : WaitForSingleObject(h_SemAccessMapView, INFINITE);
管理代理在每次对内存文件进行读操作后, 都要增加信号灯的计数:
ReleaseSemaphore(h_SemAccessMapView, 1, NULL);
5 结 论
a. 讨论了4种被动容错机制和1种主动容错机制以及信号灯机制的设计和实现过程。 被动容错机制包括重传机制和MIB树不一致恢复机制。 主动容错机制采用双socket连接, 来提高信息传输的可靠性。 信号灯机制用于实现管理代理和监控模块间同步通信, 从而实现监控模块与管理代理以及管理代理与管理站点间实时、 准确的信息交换与传输。
b. 在没有引入容错机制和同步机制前, 系统的反应不够灵敏, MIB信息的更新速度不够快, 监控模块的容错性能较差, 管理站点上的操作不太方便等。 在系统中引入同步机制和容错机制后, 一个报文分组必须在2个独立线程中同时丢失或延迟才会对报文的重组产生影响, 管理站点命令报文丢失或延迟、 管理代理响应报文、 通知报文丢失或延迟等等问题大大减少, 这大大增强了网络应用软件监控系统的容错能力。
参考文献:
[1]唐亚哲, 张鹏, 李增智, 等. DIINMS分布智能网络管理系统的设计与实现[J]. 小型微型计算机系统, 2002(8), 23(8): 926-929.
TANG Ya-zhe, ZHANG Peng, LI Zeng-zhi, et al. Design and implementation of the DIINMS distributed intelligent network management system[J]. Mini-micro Systems, 2002, 23(8): 926-929.
[2]Frey J, Tannenbaum T, Livny M, et al. Condor-G: A computation management Agent for multi-institutional grids[A]. The Tenth International Symposium on High Performance Distributed Computing (HPDC-10)[C]. San Francisco: IEEE Press, 2001: 55-63.
[3]罗万民, 林闯, 阎保平. TCP/IP拥塞控制研究[J]. 计算机学报, 2001, 24(1): 1-18.
LOU Wan-min, LIN Chuang, YAN Bao-ping. A survey of congestion control in the internal[J]. Chinese Journal of Computers, 2001, 24(1): 1-18.
[4]康松林, 费洪晓, 施荣华. 网络应用软件监控系统监控模块的设计与实现[J]. 中南大学学报(自然科学版), 2004, 35(6) : 993-997.
KANG Song-lin, FEI Hong-xiao, SHI Rong-hua. Design and implementation of monitor module in net monitor system for application softwares[J]. Journal of Central South University(Science and Technology), 2004, 35(6): 993-997.
[5]康松林, 费洪晓. 一种实现MIB信息传输的方法[J]. 长沙铁道学院学报, 2002, 20(2): 43-46.
KANG Song-lin, FEI Hong-xiao. An approach to transmission of MIB information[J]. Journal of Changsha Railway University, 2002, 20(2): 43-46.
[6]张克平, 李增智. 以路由器为核心的IP网络预报避免控制拥塞的实现策略[J]. 小型微型计算机系统, 2003, 24(5) : 791-796.
ZHANG Ke-ping, LI Zeng-zhi. Methods of congestion control in IP network of regarding router as kernel[J]. Mini-micro Systems, 2003, 24(5): 791-796.
[7]Douglas E. Comer. Internetworking with TCP/IP. Vol I: Principles, Protocols, and Architecture[M]. Beijing: Tsinghua University, 1998.
[8]Douglas E C, David L S. Internetworking with TCP/IP. Vol II: Design, Implementation, and Interanls[M]. Beijing: Tsinghua University, 1998.
[9]Douglas E C, David L S. Internetworking with TCP/IP. Vol III: Client-server Programming and Applications, Windows Sockets Version[M]. Beijing: Tsinghua University, 1998.
收稿日期:2005-06-20
基金项目: 国家自然科学基金资助项目(60173041), 湖南省自然科学基金资助项目(02JJY2094)
作者简介:康松林(1968- ), 男, 湖南新化人, 讲师, 从事网络管理与网络安全的研究
论文联系人: 康松林, 男, 讲师; 电话: 0731-2655306(H); E-mail: sunkang@mail.csu.edu.cn