C基于局域网Linux环境下的心跳检测系统实现_第1页
C基于局域网Linux环境下的心跳检测系统实现_第2页
C基于局域网Linux环境下的心跳检测系统实现_第3页
C基于局域网Linux环境下的心跳检测系统实现_第4页
C基于局域网Linux环境下的心跳检测系统实现_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.......C++基于局域网Linux环境下的心跳检测系统实现摘要当今世界的网络飞速发展,但也因此也产生了许多网络故障,心跳检测技术作为一种故障检测技术,在当今服务器市场有很大需求。心跳检测技术是一种检测网络连接故障的技术,它通过在服务器端和客户端装上各自的心跳检测软件,就可以根据发送的心跳报文来监测故障,判断各个网络节点的连接是否正常[1]。本文研究了心跳检测技术在Linux平台下的实现,设计了一款能在局域网上运行的心跳检测系统。该系统采用TCP/UDP协议,以C/S模式进行开发。服务器充当主控节点,客户端充当外围节点,通过客户端发送心跳报文的方法来实现心跳检测。系统在节点的局域网中使用,能达到很高的成功率。【关键词】心跳检测主控节点外围节点报文Linux

ABSTRACTNetworktechnologyoftoday'sworldhastherapiddevelopment,butalsoproducessomanynetworkfailure,heartbeatdetectiontechnologyisadetectiontechnologyasanetworkfailuredetection,andhasmuchdemandintoday'sservermarket..Heartbeatdetectiontechnologyisanetworkconnectionfailuredetectiontechnology,serverandclientneedonlyinstalloneachheartbeatdetectionsoftware,youcansendpacketstomonitorheartfailure,determinewhetherthevariousnetworknodesisinthenormal.Inthispaper,theheartbeatdetectiontechnologyimplementationintheLinuxplatform,designedaruninLANheartbeatdetectionsystem.ThesystemusesTCP/UDPprotocol,toC/Smodelfordevelopment.Serveractsasthemasternode,theclientactsastheexternalnodes,throughtheheartbeatmessagessentbytheclienttoachievetheheartbeatdetectionmethods.Systemusedinlocalareanetworknodecanachieveahighsuccessrate.【Keywords】HeartbeatdetectionMasternodePeripheralnodeMessageLinux目录ABSTRACT 2前言 4第一章系统简介 6第一节心跳检测机制 6第二节本文设计的心跳检测系统 6第三节本章小结 7第二章 开发环境、工具和技术 8第一节 Linux的介绍 8第二节 GCC简介 9一、什么是GCC 9二、GCC的基本规则 10三、GCC的基本用法 10四、执行过程 11第三节linux下的网络编程技术 11一、socket编程介绍 11二、TCP/UDP开发简介 16第四节本章小结 17第三章系统的分析与设计 18第一节需求分析 18一、问题定义 18二、可行性研究 18三、用户需求 18四、系统整体用例图 19第二节概要设计 19一、设计指导思想 20二、心跳检测系统的整体结构图 20三、总体设计 21第三节 详细设计 22一、心跳表注册表的设计 22二、报文格式的设计 24三、外围节点的设计 26四、主控节点的设计 27第四节本章小结 31第四章心跳检测系统的实现 32第一节linux下开发环境 32一、编译环境 32二、运行环境 33第二节程序的实现 35一、外围节点的实现 35二、主控节点的设计 37第三节本章小节 40第五章系统测试 41第一节测试环境 41第二节测试方法 41一、黑盒测试 42二、测试步骤 42第三节本章小结 48结论 49参考文献 51附录 52一、英文原文 52二、中文翻译 56前言网络是一个庞大复杂的系统,有成千上万台设备节点,经常会出现连接故障,我们不可能用人力去监测,这时负责监测网络故障的心跳检测软件由此产生。心跳检测系统是基于C/S架构开发的网络检测系统,随着网络技术的发展而发展,在当今服务器市场上有很大需求,也日趋成熟化。比如Linux平台下的HeartBeat集群软件包就是成功的典型。我相信,在当今IT技术的推动下,心跳检测在未来几年会有更广阔的发展空间。在了解了心跳检测的基本原理和Linux网络编程的基本方法之后,我设计了一个可以在局域网上进行网络连接检测的心跳检测系统。并对里面涉及的技术原理,设计思想进行了相关讨论。

第一章系统简介第一节心跳检测机制在分布式系统中,有成千上万个设备节点通过有线或者无线网络连接。这些节点和网络随时可能发生故障,从而导致部分节点或者网络瘫痪。为了确保整个系统正常工作,主控节点应该能随时知道其他节点当前是否在正常工作。如果用人力去监控,则会造成很大的开销,且节点是否瘫痪有时无法从外表判断。心跳检测系统可以节省人力,根据外围节点定期发送的报文来判断设备和网络是否发生故障。心跳检测技术是分布式嵌入式系统中一种常见的故障检测方法。在心跳检测中,外围节点将周期性向主控节点发送心跳报文。如果过一段时间之后,主控节点没有收到外围节点的心跳报文,则认为此节点或相关网络出现故障,并向管理员报告。它有如下特点:eq\o\ac(○,1)基于C/S模式,主控节点(服务器端)判断外围节点(客户端)是否正常运行,一般采用定时发送简单的心跳报文,如果在指定时间段未收到对方响应,则判断连接出现故障。用于检测网络的异常断开。eq\o\ac(○,2)发包方可以是客户端也可以是服务器端,看哪边实现方便合理。一般是客户端,服务器也可以定时轮询发心跳下去(我的系统是采用客户端发报文)。eq\o\ac(○,3)检测方法就是外围节点每隔几分钟发送一个心跳报文给主控节点,服务端收到后回复一个响应报文。如果服务端在规定时间没有收到客户端信息则视连接断开。第二节本文设计的心跳检测系统在介绍了心跳检测系统的概念、特点、作用之后,下面介绍了我所设计的系统的一些情况。由于该设计主要是针对10台左右的小围的局域网设计的心跳检测系统,没有涉及到数据库存储的相关知识,因此该系统的优点是所需要的硬件代价小,实现起来的网络连接相对简单,能针对自己组建的局域网来测试。当然,该设计的功能差了很多,比如在数据库中记录节点出错时间,监控节点数量的多少,网络阻塞引起的延时等方面并没有涉及到。我相信,我今后在学习更多网络故障检测技术和网络编程技术后,会将上述功能一一实现。我的设计在Linux平台下,采用了C/S模式,服务器端充当主控节点,客户端充当外围节点,外围节点先发送TCP报文进行和主控节点建立连接,在建立连接成功后,发送心跳报文,心跳报文则采用UDP格式设计。而后每隔一秒发送一次心跳报文,主控节点根据心跳报文来检测网络连接是否正常。第三节本章小结本章先从心跳检测的用途出发,介绍了心跳检测的概念,以及它使用的原理,使大家对心跳检测有了大致的了解。最后大致介绍了我自己设计的心跳检测系统的一些情况,包括优缺点和大致的实现情况。开发环境、工具和技术Linux的介绍Linux是一类Unix计算机操作系统的统称。Linux操作系统的核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。严格来讲,Linux这个词本身只表示Linux核,但在实际上人们已经习惯了用Linux来形容整个基于Linux核,并且使用GNU工程各种工具和数据库的操作系统。Linux得名于计算机业余爱好者LinusTorvalds。当时他是芬兰赫尔辛基大学的学生。他的目的是想设计一个代替Minix(是由一位名叫AndrewTannebaum的计算机教授编写的一个操作系统示教程序)的操作系统,这个操作系统可用于386、486或奔腾处理器的个人计算机上,并且具有Unix操作系统的全部功能,因而开始了Linux雏形的设计。出于爱好,他根据可在低档机上使用的MINIX设计了一个系统核心Linux0.01,但没有使用任何MINIX或UNIX的源代码。他通过USENET(就是新闻组)宣布这是一个免费的系统,主要在x86电脑上使用,希望大家一起来将它完善,并将源代码放到了芬兰的FTP站点上任人免费下载。Linux以它的灵活性和高效性著称。能够在个人计算机上面实现全部的unix的特性。具有多任务、多用户的能力。Linux在GNU的GPL公共许可权下免费获得。Linux不仅仅包括完整的操作系统,还包括文本编辑器、高级语言编译器等应用软件。它还包括带有多个窗口管理器的X-windows图形用户界面。目前,linux能够运用于各种版本的cpu的计算机上,还能运用于一些手持设备,比如说,PDA,游戏机,手机,嵌入式产品等等。由于linux的开源性以及免费性,很多厂家都选择应用linux开发,以降低成本,在增强竞争力的同时也推进了linux系统的发展。绝大多数基于Linux核的操作系统使用了大量的GNU软件,包括了shell程序、工具、程序库、编译器及工具,还有许多其他程序,例如Emacs。Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。Linux的优点集中体现在以下几点:eq\o\ac(○,1)低廉性:基于其低廉成本与高度可设定性,Linux常常被应用于嵌入式系统,例如机顶盒、移动及行动装置等。在移动上,Linux已经成为与SymbianOS、WindowsMobile系统并列的三大智能手机操作系统之一;而在移动装置上,则成为WindowsCE与PalmOS外之另一个选择。eq\o\ac(○,2)广泛性:基于Linux的开源性给人们带来的巨大诱惑,Linux的的应用越来越广,Linux社区的人员的增多,致使基于Linux的开发越来越方便容易。根据2005年11月号的TOP500超级电脑列表,显示世上最快速的两组超级电脑都是使用Linux作为其操作系统。而在表列的500套系统里,采用Linux为操作系统的,占了371组(即74.2%),其中的前十位者,有7组是使用Linux的。eq\o\ac(○,3)目前,除了一部分专家之外,大多数人都不自己选择每一样组件或自行设置,而是直接使用Linux套件。eq\o\ac(○,4)灵活性:Linux以它的高效性和灵活性著称。它能够在PC计算机上实现全部的Unix特性,具有多任务、多用户的能力。Linux是在GNU公共许可权限下免费获得的,是一个符合POSIX标准的操作系统。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件。它还包括带有多个窗口管理器的X-Window图形用户界面,如同我们使用WindowsNT一样,允许我们使用窗口、图标和菜单对系统进行操作。总的来说,Linux由于有着诸多windows操作系统所缺乏的优点,能够让我们在嵌入式应用中如鱼得水[2]。GCC简介什么是GCCGCC是GNU公社的一个项目。是一个用于编程开发的自由编译器。最初,GCC只是一个C语言编译器,它是GNUCCompiler的英文缩写。随着众多自由开发者的加入和GCC自身的发展,如今的GCC已经是一个包含众多语言的编译器了。其中包括C,C++,Ada,ObjectC和Java等。所以,GCC也由原来的GNUCCompiler变为GNUCompilerCollection。也就是GNU编译器家族的意思。当然,如今的GCC借助于它的特性,可以交叉编译,即在一个平台下编译另一个平台的代码。直到现在,GCC的历史仍然在继续,它的传奇仍然被人所传颂。而且更重要的是GCC完全是一款免费的自由软件,加之其强大的功能所以深受广大用户的喜爱。二、GCC的基本规则gcc所遵循的部分约定规则:.c为后缀的文件,C语言源代码文件;.a为后缀的文件,是由目标文件构成的档案库文件;.C,.cc或.cxx为后缀的文件,是C++源代码文件;.h为后缀的文件,是程序所包含的头文件;.i为后缀的文件,是已经预处理过的C源代码文件;.ii为后缀的文件,是已经预处理过的C++源代码文件;.m为后缀的文件,是Objective-C源代码文件;.o为后缀的文件,是编译后的目标文件;.s为后缀的文件,是汇编语言源代码文件;.S为后缀的文件,是经过预编译的汇编语言源代码文件。三、GCC的基本用法在使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。GCC最基本的用法是∶gcc[options][filenames]其中options就是编译器所需要的参数,filenames给出相关的文件名称。-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-ooutput_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶A)#include<myinc.h>B)#include“myinc.h”其中,A类使用尖括号(<>),B类使用双引号(“”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹搜索相应文件。四、执行过程虽然我们称GCC是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤:预编译,编译,汇编和命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方[3]。第三节linux下的网络编程技术一、socket编程介绍在介绍心跳检测的详细设计之前,首先介绍linux下的网络程序设计方法。在linux系统中,最常用的网络应用编程结构是UNIXBSD的套接字接口。socket编程有字节流和数据报两种主要类型,分别对应TCP协议和UDP协议。其中字节流socket定义了一种可靠的面向连接的服务,实现了无差错无重复的顺序数据传输。数据报socket定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且无法保证可靠无差错。无连接服务器一般都是面向事务处理的,一个请求一个应答就完成了客户和服务器之间的交互。下面就是本系统所用到的socket编程函数:eq\o\ac(○,1)创建套接字:intsocket(intdomain,inttype,intprotocol);应用程序调用socket函数来创建一个能够进行网络通信的套接字。domain:指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET;type:指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM;protocol:指定应用程序所使用的通信协议,一般设置为0。该函数如果调用成功就返回新创建的套接字的描述符,套接字描述符是一个整数类型的值;如果失败就返回-1。eq\o\ac(○,2)绑定套接字#include<sys/socket.h>intbind(intsocket,conststructsockaddr*address,size_taddress_len);socket:由socket()调用返回的套接字描述符;addreess:结构指针指向了与协议名称和协议相关的信息;address_len:指明了address数据结构的大小。如果调用成功,bind()函数返回0;否则返回-1,并设置错误代码到errno。eq\o\ac(○,3)等待客户端连接服务器端应用软件通过调用accept()函数将自身阻塞,直至有新的客户端连接。#include<sys/socket.h>intaccept(intsocket,structsockaddr*address,socketlen_taddress_len);socket:创建并绑定的套接字;address:返回连接服务器的客户端地址信息;address_len:指明了address数据结构的大小。如果调用成功,则返回非负的连接套接字;否则返回-1,并设置错误代码到errno。eq\o\ac(○,4)连接服务器客户端通过connect()函数和服务器进行TCP连接。#include<sys/socket.h>intconnect(intsocket,conststructsockaddr*address,size_taddress_len);socket:创建并绑定套接字;address:指明要连接服务器的ip地址和端口号;address_len:指明了address数据结构的大小。如果调用成功,返回0;否则返回-1,并设置错误代码到errno。eq\o\ac(○,5)UDP协议的发送数据UDP协议需要通过sendto()函数实现一个数据包的发送,这是因为UDP协议提供的是以数据包为单位的传输,而TCP协议提供的是以字节流为单位的传输。#include<sys/socket.h>ssize_tsendto(intsocket,constvoid*message,size_tlength,intflags,conststructsockaddr*dest_addr,socklen_tdest_len);socket:已经创建的套接字;message:指明要发送的数据包的地址;length:数据包大小;flags:设置发送的属性,一般可设置为0;dest_addr:指明目的端的IP地址和端口号;dest_len:指明dest_addr数据结构的大小。如果调用成功,返回实际发送的数据数目;否则返回-1,并设置错误代码到errno。eq\o\ac(○,6)UDP协议的接收数据UDP协议需要通过recvfrom()函数接收一个数据包。#include<sys/socket.h>ssize_trecvfrom(intsocket,void*buffer,size_tlength,intflags,structsockaddr*address,socklen_taddress_len);socket:已经创建的套接字;message:指明要接收的数据包的地址;length:数据包大小;flags:设置发送的属性,一般可设置为0;dest_addr:指明目的端的IP地址和端口号;dest_len:指明dest_addr数据结构的大小。如果调用成功,返回实际发送的数据数目;否则返回-1,并设置错误代码到errno。eq\o\ac(○,7)向一个已连接的套接口发送数据。#include<sys/sock.h>ssize_tsend(intsocket,constcharvoid*buffer,intlength,intflags);socket:一个用于标识已连接套接口的描述字;buffer:包含待发送数据的缓冲区;length:缓冲区中数据的长度;flags:调用执行方式;若无错误发生,send()返回所发送数据的总数;否则的话,返回-1并把错误保存到errno。eq\o\ac(○,8)从一个已连接的套接口接收数据。#include<winsock.h>ssize_trecv(intsocket,char*buffer,intlength,intflags);socket:一个标识已连接套接口的描述字;buffer:用于接收数据的缓冲区;length:缓冲区长度;flags:指定调用方式;若无错误发生,recv()返回读入的字节数。如果连接已中止,返回0;否则的话,返回-1并把错误保存到errno。eq\o\ac(○,9)IP地址的转换和获取在上述套接字程序设计中,服务器和客户端的IPV4地址采用了32为无符号整数表示。在用户方面,广泛使用的是十进制字符串表示(例如2)或者主机名称(例如)。Linux操作系统提供了一系列函数实现这几种格式之间的转换。#include<arpa/inet.h>in_addr_tinet_addr(char*cp);cp:指向十进制字符串表示的IPV4地址。如果调用成功,返回IPV4地址的32位无符号整数表示;否则返回in_addr_t-l。eq\o\ac(○,10)gethostbyname()函数可以实现从主机名称到32位无符号整数表示的转换。#include<netdb.h>structhostent{char*h_name;char**h_aliases;inth_addrtype;inth_length;char**h_addr_list;}structhostent*gethostbyname(constchar*name);name:指明了主机名称的字符串。如果调用成功,返回指向hostent的指针;否则返回NULL,并设置错误代码到h_erno。其中hostent中的h_length指明了主机地址的长度,在Ipv4协议下始终为1。H_addr_list指明了主机的所有网络地址。一般情况下,h_addr_list[0]就表明了此主机Ipv4地址的32位无符号整数表示。eq\o\ac(○,11)gethostbyaddr()函数可以实现从32为无符号整数到主机名称的转换。#include<netdb.h>structhostent*gethostbyaddr(constvoid*addr,socklen_tlen,inttype);addr:指明了32位无符号整数表示的IPv4地址;len:指明了地址长度;type:在Ipv4协议下,可以设置为AF_INET。如果调用成功,返回指向hostent的指针;否则返回NULL,并设置错误代码到h_errno。eq\o\ac(○,12)线程创建函数#include<pthread.h>intpthread_create(pthread_t*thread,pthread_ayyr_t*attr,void*(*start_routine)(void*),void*arg)thread:这是一个指向pthread_t类型数据的指针。线程被创建时,这个指针指向的变量中将被写入一个标识符,我们用该标识符来引用线程。attr:这个参数一般用于设置线程的属性,我们一般不需要设置特殊的属性,所以可以简单的设置该参数为NULL。start_routine:这个参数告诉线程将要启动的函数。arg:这个参数将传递启动函数的参数。二、TCP/UDP开发简介1、TCP开发介绍在基于TCP协议的程序设计中一般采用客户端/服务器的程序设计模式。在服务器端首先使用socket()函数创建套接字,然后使用bind()函数将本机IP地址和服务端口绑定至套接字,并通过listen()函数建立等待队列,随后就可以使用accept()函数等待客户端的连接。accept()函数将一直阻塞,直至有一个客户端连接到本地服务器端口为止。该函数将返回一个新的套接字值,随后服务器就可以通过新的套接字接口与连接上的客户端利用rend()或write()函数进行交互。客户端在访问服务器时首先要通过socket()函数调用,然后通过connect()函数连接服务器的IP地址和相应的服务器端口号。连接成功后,就可以通过read()或者write()函数与服务器进行数据交互了。客户端/服务器结构下的TCP应用程序框架如图所示[5]:ssocket():创建套接字bind():绑定本机地址和端口号listen():设置等待队列accept():等待客户端连接sendto()和recv()与客户端交换数据close()关闭特定客户端套接字socket:创建套接字connect()连接服务器sendto()和recv()与服务器端交换数据close()关闭套接字建立请求图2.1客户端/服务器结构下的TCP协议程序结构图2、UDP开发介绍基于UDP协议的应用程序设计比较简单。首先通信双方都要利用socket()函数创建套接字,然后将本机IP地址和端口通过bind()函数与套接字绑定。绑定后,可以直接使用sendto()函数向对方发送消息。使用recvfrom()函数可以接收指定端口的UDP包,并通过返回的address结构获知发送方的IP地址和端口号。第四节本章小结本章主要介绍了该系统开发的环境和平台,Linux是一款流行的网络操作系统,由Unix演化了来,具有丰富和网络功能,开发的函数库较多,功能强大。GCC是一款开源的编译器,有强大的编译调试的能力,使本系统的开发、测试,轻松了很多。最后介绍了本章的网络编程的一些知识,包括TCP/UDP技术检测和一些系统开发用到的socket函数。第三章系统的分析与设计第一节需求分析一、问题定义本系统的问题概述如下:基本问题是linux以及网络编程的研究,基本目标是设计一个基于linux环境的心跳检测的系统来判断局域网的网络连接是否正常。二、可行性研究可行性分析的任务不是研究如何解决问题,而是要用最小的代价在最短的时间,确定问题定义阶段所定义的问题是否值得解决。一般情况下,主要从技术可行性、经济可行性和操作可行性三个方面论证系统开发的可行性。该系统可在小围的局域网上进行使用,因此从可操作性来讲是可行的。其次,设计开发这样的一款心跳检测系统只需要几台电脑构成局域网就可以使用。下面主要从技术可行性进行分析:eq\o\ac(○,1)开发工具和环境Linux是一款比较成熟的操作系统,它有Unix演化发展而来,和Unix有多相似之处。所用的函数包基本一致,再加上gcc的强大编译、调试的功能,对完成这个系统由很大帮助。②算法该系统不需要什么复杂的算法,只需掌握linux环境下的TCP/IP网络方面的知识,能够熟练运用linux下的网络编程和线程函数,就可以写出。幸运的是,通过查阅大量丰富的技术资料,我有信心解决这一问题。③自身素质因素通过大学四年的学习,我打下了坚实的专业基础,最重要的是学会了自主学习和查阅资料的能力,这都将为我今后的设计开发过程提供强有力的保障。通过以上分析,可以很确定这一系统的可行性,可以放心地开始下一阶段的任务了。三、用户需求本系统分为外围节点和主控节点的设计,它们有各自的功能:1、外围节点功能外围节点所需要完成的功能相对简单,它只需要先发送登录报文进行注册,收到主控节点的反馈报文之后,定期(每隔一秒)发送心跳报文即可,不涉及太多功能。2、主控节点功能主控节点是系统的关键部分,它负责接收登录报文和心跳报文,然后根据报文的容来判断网络连接情况,可以说本系统的主要功能基本上由主控节点完成:eq\o\ac(○,1)完成接收心跳报文功能主控节点收到外围节点的登录报文后,就完成对外围节点信息的注册,包括外围节点的设备号和分配的槽口号等,并将槽口号返回给外围节点。eq\o\ac(○,2)完成接收心跳报文功能主控节点接收到心跳报文后,由于心跳报文中带有槽口号,主控节点根据槽口号查找外围节点注册表,修改响应信息。eq\o\ac(○,3)完成定期检查外围节点功能主控节点要定期检查外围节点注册表,从而发现节点是否正常工作,如果不正常就报告响应的故障消息。四、系统整体用例图图3.1系统用例图第二节概要设计概括地说,概要设计进行数据设计/数据库设计和系统体系结构设计。其目的只是描绘出软件的总体框架,根据功能、性能需求和数据需求导出软件的数据结构和系统结构。一、设计指导思想①模块化模块是构成程序的基本构件,模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来就构成了一个整体,可以完成指定的功能,以满助于用户需求。采用模块化原理可以使软件结构清晰,降低了系统的复杂性,使系统容易设计、容易修改,而且其推动了系统各部分的并行开发,提高了软件的生产效率。本心跳检测系统设计正是采用了模块化原理,在主控节点上有三个线程,每个线程看做一个模块,方便了主控节点功能的实现。②抽象化在对软件系统进行模块设计时,可以有不同的抽象层次,系统设计过程中的每一步都是对软件问题解法的又一次更高级抽象。可行性研究是对整个系统的抽象,需求分析则是对此心跳检测系统所要实现功能的抽象。二、心跳检测系统的整体结构图使用上节所提到的模块化等设计思想,先是对外围节点的发送报文的流程进行了设计,然后说对主控节点的完成外围节点注册,完成接收心跳报文,完成定期检查外围节点三个功能进行了一一的设计,下面是整个程序的结构图,如图3.2示。图3.2程序结构图三、总体设计心跳检测的基本原理是每个结点周期性地向主控节点发送消息,主控节点根据外围节点发送来的消息判断这些节点的状态。整个心跳检测系统包括外围节点和主控节点两个部分,其结构如图3.3所示。心跳检测过程包括以下几个步骤:eq\o\ac(○,1)连接的建立外围节点启动,将首先与事先约定的主控节点IP地址建立TCP连接,并向主控节点注册该外围节点的设备号信息。主控节点在接收到外围节点的注册报文后,将回送许可报文。外围节点在接收到许可报文后,将进入心跳检测状态。如果外围节点在5秒没有连接到主控节点,或者发出注册报文后5秒没有收到主控节点的许可报文,则睡眠10秒钟后重新与主控节点进行连接。eq\o\ac(○,2)心跳检测外围节点每隔1秒向主控节点发送一次心跳报文。主控节点每隔1秒查询各个节点的心跳报文,如果在1秒没有收到外围节点的心跳报文,则显示相应外围节点的网络连接出现问题。图3.3心跳检测的结构图外围节点与主控节点建立连接时采用了TCP协议,而心跳检测过程中使用了UDP协议。这是由于TCP协议可以保证传输的可靠性和顺序性,但是运行开销比较高,而UDP协议虽然是一中不可靠的协议,但是传输开销比较小。因此,在嵌入式系统中,为了降低系统运行开销,可以将一些不重要的报文采用代缴比较低但是服务质量比较查的协议来实现。详细设计详细设计是该系统的重点部分,介绍了系统具体是如何实现的,包括了心跳注册表的设计,报文格式的设计,主控节点和外围节点功能的设计。一、心跳表注册表的设计心跳注册表被设置成一个静态全局的结构体数组,当主控节点接收到外围节点的注册报文之后就为其在心跳注册表中找到一个空闲位置分配。而此后,主控节点在接收到外围节点的心跳报文后,也要相应的修改心跳注册表,判断节点是否出现故障也是通过扫描心跳注册表得知,所以这是个很关键的设计。结构体如下:structHeart_Beat{ charstate; charflag; unsignedintdevice_ID; structsockaddr_inaddr;};#defineHEART_BEAT_TABLE_SIZE64staticstructHeart_Beathb_table[HEART_BEAT_TABLE_SIZE];表3.1statestate有IDLE和BUSY两种状态,各自的定义如下:#defineIDLE0#defineBUSY1只有设备正常工作时state才为BUSY,否则为IDLE。flagflag在主控节点接收到外围节点的心跳报文后设置为1,在检测心跳表判断设备是否工作时重新设置为0,用于标记外围节点是否坏掉。device_IDdevice_ID是外围节点注册时向主控节点提供的,用于标识每个设备。sockaddr_inaddrsockaddr_inaddr是外围节点的IP地址。主控节点对心跳注册表的具体操作如下:图3.4主控节点对心跳注册表的操作二、报文格式的设计主控节点和外围节点之间有三种报文:从外围节点到主控节点的登录报文(login),从主控节点到外围节点的响应报文(respond),以及从外围节点到主控节点的心跳报文(heart_beat)。其中前两者通过TCP协议发送,后者通过UDP协议发送。在每种类型的报文前均有一个惟一的字节标识type,用于标识不同类型的报文。例如,在登录报文中,其type值为1;在响应报文中,其type值为2等。之所以采用这样的方法,是考虑到未来报文类型扩展的需要。由于各种报文均通过一个TCP端口接收,而接收端应用程序事先无法知道已经被操作系统接收的报文种类,因此也无法判断应该从recv()函数接口中读取多少字节。为了解决这一问题,接收端一般应该首先接收第一个字节,以判断当前报文的类型,然后根据此类型的大小决定从操作系统存读取多少个字节到应用程序的数据结构中,以得到一个完整的报文。这三种报文格式为:#defineLOGIN_TYPE0x01#defineRESPOND_TYPE0x02#defineHEART_BEAT_TYPE0x03eq\o\ac(○,1)登录报文:structlogin{ chartype; unsignedintdevice_ID;};表3.2type登录报文的type为0x01device_ID外围节点注册时提供的设备号登录报文是外围节点向主控节点进行注册信息时,通过TCP连接发送的,外围节点需要提供自己的设备号即可,主控节点修改心跳注册表完成对外围节点的注册。eq\o\ac(○,2)响应报文:structrespond{ chartype; intindex;};表3.3type登录报文的type为0x02index主控节点接收到外围节点注册成功时2提供给外围节点的槽口号主控节点收到外围节点的登录报文之后,必须要对外围节点进行响应,这时就需要发送具有反馈信息的respond报文,该报文包含了外围节点注册信息表给该外围节点提供槽口号index(第一个注册的为0,第二个注册的为1,一次类推),外围节点必须收到respond报文后才可以开始发送心跳报文。eq\o\ac(○,3)心跳报文:structheart_beat{ chartype; intindex; unsignedintdevice_ID;};表3.4type登录报文的type为0x03index主控节点接收到外围节点注册成功时2提供给外围节点的槽口号,发送心跳报文时需提供槽口号以便主控节点修改hb_table表device_ID外围节点注册时提供的设备号心跳报文是外围节点定期向主控节点发送的UDP报文,包含了外围节点的设备号和槽口号,主控节点根据槽口号来修改外围节点注册信息表,从而为定期扫描心跳注册表做准备。三、外围节点的设计心跳检测是外围节点软件系统中的一个模块。它被设计成一个独立的线程,执行如下算法:eq\o\ac(○,1)向主控节点发送登录(login)报文eq\o\ac(○,2)等待主控节点的反馈(respond)报文的响应eq\o\ac(○,3)接收到respond报文转向4,否则休眠10秒后转向1eq\o\ac(○,4)根据respond报文的槽口号建立UDP连接eq\o\ac(○,5)向主控节点发送UDP心跳报文eq\o\ac(○,6)休眠1秒后转向5创建心跳检测线程创建心跳检测线程其他处理建立与主的TCP连接向主机发送登录信息接受主机分配的槽口号通过UDP协议发送心跳报文休眠10秒休眠100毫秒连接成功是否图3.5外围节点程序结构图2、外围节点的时序图3.6外围节点的时序图四、主控节点的设计主控节点完成的功能比较复杂,包括接收外围节点的登录报文,接收外围节点的心跳报文,定期进行检查心跳注册表等。可以考虑采用三个线程分别实现这些功能,并通过一个共享的外围节点心跳表进行交互。外围节点心跳表的数据结构如下所示。#defineIDLE0#defineBUSY1#defineHEART_BEAT_TABLE_SIZE64#defineNO_DEVICE0structHeart_Beat{ charstate; charflag; unsignedintdevice_ID; structsockaddr_inaddr;};staticstructHeart_Beathb_table[HEART_BEAT_TABLE_SIZE];主控节点程序启动后,将首先初始化互斥量hb_table_lock,初始化hb_table数组中各个元素的state状态IDLE,然后创建三个线程。执行函数分别是accept_connect(),chenk_hb(),accept_hb()三个线程的结构图如下:图3.7主控节点线程调用关系图1、接收登录线程接收登录信息的线程执行如下算法:eq\o\ac(○,1)创建套接字,绑定登录端口,并建立等待队列。eq\o\ac(○,2)使用accept()函数等待外围节点的登录信息。eq\o\ac(○,3)从套接字端口读取登录报文,获取外围节点的设备号device_ID和IP地址。eq\o\ac(○,4)检查hb_table中的各个表项。eq\o\ac(○,5)如果当前设备号device_ID已经存在于此表,且相关的状态为BUSY,则取此表项号index;否则分配一个state为IDLE的表项index。eq\o\ac(○,6)设置hb_table[index]表项中的state为BUSY,设置此表项中的device_ID何addr为外围设备的device_ID和IP地址,设置此表项中的flag为1。eq\o\ac(○,7)向外围节点发送登录成功报文,参数为index。eq\o\ac(○,8)转至2程序结构图如下:图3.8登录线程程序结构图2、接收外围节点心跳检测报文线程接收的线程执行如下算法:eq\o\ac(○,1)使用recvfrom()函数等待读取外围节点的心跳报文。eq\o\ac(○,2)从心跳报文中获取槽口号index,外围设备号和IP地址。eq\o\ac(○,3)检查hb_table[index]中state是否为IDLE,外围节点的设备号device_ID和IP地址是否匹配。eq\o\ac(○,4)如果不匹配,则转至2,否则设置hb_table[index]中的flag为1,设置state为BUSY。eq\o\ac(○,5)转至2图3.9接收外围节点心跳检测报文线程程序结构图3、定期检查节点注册表线程执行如下算法:eq\o\ac(○,1)睡眠1秒。eq\o\ac(○,2)检查hb_table中的各个表项。eq\o\ac(○,3)如果发现有表项的state为BUSY,而且flag为1,则设置flag为0eq\o\ac(○,4)如果发现有表项的state为BUSY,而且flag为0,则设置此表项的state为IDLE,并向用户显示,此外围节点连接中断。eq\o\ac(○,5)转至1。图3.10定期检查心跳注册表线程程序结构图第四节本章小结本章是重点章节,先是介绍了系统的需求分析,里面着重介绍了主控节点和外围节点所需要实现的功能,又描述了本系统的用例图。在详细设计里面则是介绍了报文格式的设计和主控节点、外围节点的设计思路和执行算法。

第四章心跳检测系统的实现第一节linux下开发环境一、编译环境前面的章节已经介绍了gcc的相关容,该设计中有两个.c文件,main.c和out.c,分别是主控节点和外围节点的运行的文件。首先我们为这两个文件进行编译。首先通过cd/hukai进入这两个文件所在的文件夹,就可以看到main.c和out.c两个文件。图4.1显示两个需要编译的文件接下来便是编译,分别输入gccmain.c–pthread–omain和gccout.c–oout。-o表示生成的目标文件的名字,-pthread是加上编译时所需要的线程库。这样,我们就可以看到main和out两个可以直接运行的文件。图4.2编译后的可执行文件二、运行环境运行就是启动分别启动主控节点和外围节点进程,即main和out这两个可执行文件。../是linux下的执行命令,我们输入./main之后,主控节点就开始启动。图4.3主控节点的启动随后我们再启动外围节点,./out10第二个参数是主控节点的IP地址,第三个参数是外围节点注册的设备号。图4.4外围节点注册界面第二节程序的实现外围节点的实现该设计中,基于登录报文和响应报文构成了一个基本的握手过程。经过此握手过程后,主控节点向外围节点发送该设备在hb_table数组中的编号(槽口号),外围节点在后续的心跳报文中将提供这个编号供主控节点快速访问该设备的状态信息。主控节点hb_table结构中的state和flag字段构成了一个有限状态机,如图5-5所示。图4.5主控节点的有限状态机因此外围节点虽然在功能实现上很简单,但是由于它要发送登录报文和定期心跳报文,所以对它的设计关键是在各种报文发送的时间上。1、登录报文和心跳报文之间的时间首先,考虑登录报文和第一个心跳报文之间的时间间隔。如果主控节点在t时刻接收到登录报文,将分配相应的hb_table表项,并设置此表项状态为BUSY。如果在此过程结束后就执行定期检查线程,则将此表现中的flag值设置为0。如果在下一次定期检查线程未执行之前还未收到心跳报文,则会导致该连接重复恢复到IDLE状态。因此,控制节点接收到登录报文和第一个心跳报文之间的时间间隔不能小于一秒。因此在接收到主控节点反馈的respond报文之后,应该休眠一秒后才可以发送心跳报文。代码如下:if((byte_read==sizeof(structrespond))&&(respond_serv.type==RESPOND_TYPE)) { hb.type=HEART_BEAT_TYPE; hb.index=respond_serv.index;printf("%d\n",respond_serv.index); hb.device_ID=(int)(*argv[2]); printf("registersuccess\n");sleep(1); flag=1; break;}2、连续两个心跳报文之间的时间其次,考虑两个心跳报文的时间间隔。如果在t时刻主控节点接收到前一个心跳报文,而随后执行定期检查线程,则后续心跳报文必须在下一次定期检查线程之前到达,否则将导致定期检查线程判断连接中断。因此,两个连续的心跳报文之间的时间间隔不能小于一秒。因此,发送完一个心跳报文之后也应当休眠一秒后才可以继续发送。代码如下:while(1){ints=sendto(sock_udp,(char*)&hb,sizeof(hb),0,(structsockaddr*)&serv_addr_udp,sizeof(structsockaddr));printf("heartbeatpackagesended!")sleep(1);}二、主控节点的设计该设计中的主要功能基本上都由主控节点完成,因此,主控节点的设计显得尤为重要。主控节点完成的操作由三个线程完成。1、接收登录报文的线程accept_connect()线程负责接收登录报文,并没有完成为外围节点在心跳注册表分配槽口号的功能。而分配槽口号的功能则由accept_login()线程实现,我们可以创建一个acc_login报文为这两个线程之间传递参数。代码如下:structacc_logina_l;a_l.controlsock=confd;a_l.login_addr=address;intret=pthread_create(th_accept_login,NULL,accept_login,&a_l);然后accept_login线程为其分配槽口号,分配槽口号的方法是顺序循环扫描心跳注册表,知道找到第一个设备号是NO_DEVICE为止。就为其分配,代码如下:for(i=0;i<HEART_BEAT_TABLE_SIZE;i++){if(hb_table[i].device_ID==NO_DEVICE){pos=i;//pos为分配到的槽口号 break;}}最后我们要对心跳注册表进行修改,代码如下:hb_table[pos].state=BUSY;hb_table[pos].device_ID=login_serv->device_ID;hb_table[pos].flag=1;hb_table[pos].addr=sock_addr;2、修改心跳注册表线程accept_hb()线程负责修改心跳注册表,即接收到心跳报文之后要根据所得到槽口来修改心跳注册表,把对应外围节点的state和flag标识都设置为1,代码如下:void*accept_hb(void*p){ char*p1,*p2; structheart_beat*h_b=(structheart_beat*)malloc(sizeof(structheart_beat)); structsockaddr*address=(structsockaddr*)malloc(sizeof(structsockaddr)); intsock_len=sizeof(structsockaddr); while(1){ inti=recvfrom(sock_udp,(char*)h_b,sizeof(structheart_beat),0,address,&sock_len); if(i==-1) printf("receiveheart_beaterror!\n"); else{ pthread_mutex_lock(&hb_table_lock); p1=inet_ntoa(hb_table[h_b->index].addr.sin_addr); p2=inet_ntoa(((structsockaddr_in*)&address)->sin_addr); if(hb_table[h_b->index].device_ID==h_b->device_ID&&(!strcmp(p1,p2))) {printf("%d\n",h_b->index); hb_table[h_b->index].state=BUSY; hb_table[h_b->index].flag=1; } pthread_mutex_unlock(&hb_table_lock); } } returnNULL;}定期检查心跳注册表线程定期检查注册表线程check_hb()负责扫描心跳注册表,对于一个表项,如果state为BUSY,flag为0就表示该节点注册了但没收到心跳报文;如果state为BUSY,flag为1则表示该节点正常,这时应该将flag设置为0,等到接收到下一个心跳报文时再设置为1,代码如下:void*check_hb(void*p3){ inti=0; while(1){ pthread_mutex_lock(&hb_table_lock); for(i=0;i<HEART_BEAT_TABLE_SIZE;i++) { if((hb_table[i].state==BUSY)&&(hb_table[i].flag==0)) { hb_table[i].state=IDLE; printf("thisnodeerrors!:%d\n",i); } if((hb_table[i].state==BUSY)&&(hb_table[i].flag==1)) {hb_table[i].flag=0;} } pthread_mutex_unlock(&hb_table_lock); sleep(1); } returnNULL;}第三节本章小节这一章是介绍了系统的需求分析和详细设计。需求分析主要是介绍系统主控节点和外围节点分别完成的功能,然后介绍了系统用例图。接下来是详细设计,这是系统的关键部分,在这一部分,我完成了心跳注册表、报文、主控节点和外围节点的设计,并用使用相关的程序结构图来描述程序设计的思路。第五章系统测试系统经过以上几个阶段的设计之后,进入系统设计的最后阶段,即系统测试阶段。系统测试的任务是发现并排除在分析、设计、编程各阶段中产生的各种类型的错误,以得到可运行的软件系统。第一节测试环境本系统有两台电脑,其中一台电脑打开两个虚拟机,分别充当主控节点和外围节点,另外一台电脑开启一台虚拟机充当外围节点。其中主控节点的IP为0,外围节点的IP分别为0(主控节点所在电脑的另一个虚拟机)和0(另一台电脑的虚拟机),我们分别称他们为外围节点2和外围节点1,充当主控节点的计算机的环境如表5.1:表5.1主控节点计算机环境CPUIntelPentiumprocesser2.06GHZ存2GDDR3硬盘160G操作系统Redhat企业版5另一台计算机的配置表5.2:表5.2另一台计算机环境CPUIntelPentiumprocesser1.86GHZ存1GDDR2硬盘60G操作系统Ubuntu8.0第二节测试方法通常的测试方法有黑盒测试和白盒测试。本次测试主要用黑盒测试来测试本系统的主要模块。一、黑盒测试黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序部结构和部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑部逻辑结构,主要针对软件界面和软件功能进行测试。黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。黑盒测试法注重于测试软件的功能需求,主要试图发现下列几类错误。①功能不正确或遗漏;②界面错误;④性能错误;⑤初始化和终止错误等。二、测试步骤eq\o\ac(○,1)我们首先启动主控节点(IP地址为0),此时,主控节点已经阻塞,等待外围节点注册报文的到来,如图5.1所示:图5.1主控节点启动eq\o\ac(○,2)这时,启动Ubuntu虚拟机的外围节点1(IP地址为0),启动后主控节点将槽口号0分配给它,如图5.2:图5.2外围节点1注册成功eq\o\ac(○,3)外围节点得到了主控节点的反馈信息connectsuccess和registersuccess,随后又显示了外围节点所分配到的槽口号,而后就是发送心跳报文,heartbeatpackageissended是心跳报文的发送消息,每隔一秒发送一次,因此这条发送消息也会每隔一秒钟显示一次:图5.3外围节点1得到反馈信息并发送报文eq\o\ac(○,4)启动外围节点2,并发送心跳报文,主控节点为它分配槽口号1的反馈信息如图5.4,外围节点获得反馈信息,并每隔一秒发送心跳报文,如图5.5:图5.4外围节点2注册成功图5.5外围节点获得反馈信息并发送心跳报文eq\o\ac(○,5)这时,我们断开外围节点1,此时主控节点将显示出节点发生网络故障的信息——thisnodeerrors!:0,表示槽口号0对应的节点(外围节点1)出现网络连接故障,如图5.6:图5.6外围节点1断开eq\o\ac(○,6)这时,断开外围节点2,主控节点端也将显示出相应的出错信息,如图4.7:图5.7外围节点2断开第三节本章小结在程序将要完成以后,对系统作个全面的测试是必须的。通常我们用黑盒测试的方法来发现那些不可预见的问题。在测试过程中尽力做到测试数据的全面,有限的测试数据不是很容易发现系统中存在的致命错误。虽然测试的数据越多越好,但无论是白盒法还是黑盒法测试,都不可能进行穷举测试,因为即使测试所有路径的一跟小的子集,也会导致也许大量的测试数据,而这在实际测试过程中是无法实现的。

结论心跳检测系统在故障检测方面有着巨大的优势。本设计介绍了分布式系统中常见的心跳检测问题,介绍了心跳检测中必须的socket编程技术,以及心跳检测主控节点和外围节点的软件实现算法、数据结构与交互报文格式,还对心跳检测协议的时间特征进行了初步分析。事实上,在分布式系统中设计一个完善的协议时非常困难的。本设计中,原有的心跳检测协议还有很多可以改进的地方。eq\o\ac(○,1)登录报文与第一个心跳报文之间的最小时间间隔仅有1秒,这对广域分布式系统而言是不够的,需要将其扩大。eq\o\ac(○,2)由于主控节点和外围节点之间的网络延迟和抖动难以确定,因此当心跳报文之间的延迟超过1秒时,主控节点就认为外围节点出现故障,而此时外围节点并不了解控制主机已经将其设置为故障节点,还会将继续向其发送心跳报文。这不仅浪费了网络和主机资源,而且协议也缺乏健壮性,需要进一步改进。我相信,在深入学习心跳检测相关的技术之后,我可以完成一个功能更强大,程序更健壮的心跳检测系统。

致至此,我的毕业设计结束了,在这一个多月里,我得到了很多人的关怀,在这里我要意义表示感。首先,我要感我的毕业设计指导老师——易芝老师,我之前并没有接触过心跳检测系统,是她给我介绍了相关的理论并给我详细的讲解,我才能着手开始做这个设计。在后期论文的撰写中,她也是细心给我指导,详细给我指出了论文中的不足,并指导我修改,付出了大量的心血。其次,我要感我的父母,我在设计过程中有过灰心,是他们打鼓励我,给我战胜困难的勇气,让我跌倒了重新站起来,一步步走向最后。再次,要感林业贵,章祥,龙等同学,他们给我介绍了Linux下的网络编程,并帮我调试程序。写论文中,又给我介绍ROSE、VISIO等工具的使用。最后,还要向参加论文审阅、答辩的专家和老师表示感!你们辛苦了!向所有关心我和帮助我的人表示诚挚的意!

参考文献[1]虎,吴涛.嵌入式系统课程设计[M].:机械工业,2005.[2]长生;胡庆平;谭志虎.“Heartbeat-Gear:一种新型的实时心跳检测技术[J]”.计算机工程与科学,2004年26期:62-65页.[3]GCC百科.baike.baidu./view/4848.htm.[4]NeilMatthew,RichardStones.BeginningLinuxProgramming[M].:人民邮电,2007.[5]TCP检测.hi.baidu./zhihui3409/blog/item/7c5b8dd151b99cd6562c8471.html[6]PeterBaerGalvin,GregGagne.OperatingSystemConcepts[M].:高等教育2008.[7]W.RichardStevens.Unix环境高级编程(第二版)[M].:人民邮电,2004.[8]叶树华,高志红.网络编程实用教程[M].:人民邮电,2006.[9]AlanWood.AvailabilityModeling[J].IEEECircuitsandDevicesMagazine,1994。10(3):22—27.[10]W.RichardStevens.Unix网络编程(第一卷)[J].:机械工业,2007.[11]W.RichardStevens.Tcp/Ip详解(第一卷)[D].:机械工业,2007.[12]W.RichardStevens.Tcp/Ip详解(第二卷)[D].:机械工业,2007.[13]吴书华.KylinOS可靠心跳协议研究.:国防科学技术大学,2008.[14]长生;胡庆平;谭志虎.“Heartbeat-Gear:一种新型的实时心跳检测技术[J]”.计算机工程与科学,2004年26期:62-65页.[15]熊盛武;王鲁;婕。“构建高性能集群计算机系统的关键技术”.微计算机信息,2006年03期:86-88页.

附录一、英文原文ComputernetworksecurityandtoguardagainstIntheinformationage,informationcanhelpgroupsorindividualssothattheybenefitfrom,thesameinformationcanalsobeusedtoposeathreattothem,causeddamage.Thereforenetworksecurity,includingthecompositionofnetworkhardware,softwareandnetworktransmissionofinformationsecurity,sothattheydonotbecauseofaccidentalormaliciousdestructionoftheattacks,networksecuritynotonlythetechnicalaspects,butalsomanagementissues,bothcomplementeachother,areindispensable.First,theconceptofcomputernetworksecurityInternationalOrganizationforStandardizationof"computersecurity"isdefinedas:"Toestablishadataprocessingsystemandtheadoptionoftechnologyandmanagementofsecurityprotection,theprotectionofcomputerhardware,software,dataisnotduetoaccidentalandmaliciousdestructionofreasons,changeandleakage."Theabovedefinitionofcomputersecurityincludesphysicalsecurityandlogicalsecurityofboththecontentsofthecontentsofthelogicofsecuritycouldbeunderstoodasweoftensaythattheinformationsecurity,informationreferstotheconfidentiality,integrityandavailabilityofprotection,andnetworksecurityInformationsecurityisthemeaningoftheextension,thatnetworksecurityisanetworkofinformationconfidentiality,integrityandavailabilityprotection.Computernetworksecurityasthespecificmeaningoftheusercha

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论