一种基于TCP/UDP私有网管接口的实现制造技术

技术编号:7936744 阅读:153 留言:0更新日期:2012-11-01 07:12
本发明专利技术提出一种基于TCP/UDP私有网管接口的实现,属于客户端/服务器模式中的服务器端,用于向上层提供可靠的数据传输,也可以从上层接收命令来对网络设备进行配置。网管接口主要包括TCP数据传输、UDP告警发送、守护进程三大模块。当上层与底层交互数据时,通过高效的代码处理方式为上层提供可靠的数据传输,并能方便不同平台之前的系统移植。当网络设备发生告警时,会将信息以单播的方式向上层发送告警。在网管接口运行的过程中,存在一个守护的进程在监控网管接口运行是否良好,一旦发现网管接口进程非正常退出,会立即将网管接口重新启动,以保证整个网管接口的良好运行。

【技术实现步骤摘要】
—种基于TCP/UDP私有网管接口的实现所属领域本专利涉及一种基于TCP/UDP私有网管接口的实现。在工业通信领域,越来越多的网络设备已经开始连入到互联网上,对于一个庞大的企业内部网络,需要有一套可靠的网络管理协议来对所有的网络设备进行监控和管理。本网管接口基于Linux操作系统下的网络编程,通过TCP协议提 供可靠的数据传输,以及UDP协议发送网络设备告警。通过这样一套私有的代码框架,限定底层具体的函数实现以及数据填充方式,来为上层的网管提供高效、直观、可靠的数据传输。
技术介绍
目前最通用的网络管理协议是SNMP (Simple Network Management Protocol,简单网络管理协议),但是SNMP具有以下几个弊端。首先,SNMP是一种基于UDP的数据传输协议,而UDP提供的是一种不可靠数据传输,没有超时重传等协商机制,并不能够保证client端的请求会被准确无误的响应。其次,SNMP是基于管理工作站/代理模式的,运行网络管理程序的计算机被称为管理工作站,代理是运行在网络设备上的进程。管理工作站通过向代理询问获得网络设备的工作状态信息;代理则负责处理和相应来着管理工作站的请求,并向管理工作站报告本地发生的重大事件(TRAP)。SNMP的代码架构需要先向代理注册节点信息,编写中间处理函数,再编写相应的数据处理函数。这样繁琐的调用以及实现过程会导致代码的执行效率十分低下。另外,SNMP的开发一般是移植开源社区上的优秀SNMP源代码,需要花费大量的时间和精力去了解、调试,不利于快速开发。因此,如果想更加灵活、高效去设置和采集底层数据,更加可靠、精确地向上层界面提供数据,开发一套通用私有的网管接口协议就变得十分必要和紧迫。
技术实现思路
今TCP数据传输部分TCP数据传输部分采用主-从线程的模式,基本的思想是当主线程通过侦听到client端一个连接请求时,会立即去创建一个子线程去处理该请求。也就是说,client端主动与server端进行连接,并向server端请求(发送)数据,下面进行详细说明。进程fser会在交换机中一直运行,侦听来自外界的连接请求,当fser进程在accept 一个请求时,会调用pthread_create创建一个子线程,同时将通过accept建立连接的socketClient,接收并分析数据的函数sock_decode_cmd(int sockHandle)传入到线程中去执行。为了防止多个子线程可能在同一时刻去get、set数据,而导致不同的client可能会读到的“脏数据”,或者因为设置数据而给某一些用户造成不便,必须要解决多线程中的同步问题。 Linux提供了三种同步机制互斥(mutex)、信号量(semaphore)和条件变量(condition variable),此网管接口采用互斥的方法来进行多线程之前的同步。在fser进程中定义一个全局的互斥变量st_mutext (pthread_mutext_t类型),在进入函数sock_decode_cmd 之后,会执行上锁操作((void)pthread_mutex_lock(&st_mutex)),在离开函数 sock_decode_cmd 之前会进行解锁操作((void) pthread_mutext_unlock (&st_mutex))。这样就能够保证,在同一个时刻,只有一个线程在分析套接字接收到的数据包,当然也能保证在分析完数据之后即将执行的get数据与set数据能够互斥的进行。TCP数据传输部分完全基于TCP,在TCP帧结构数据部分,对传输数据的帧结构进行约定。在TCP的数据端插入Private Data Interface部分,在这一部分,将定义私有的数据巾贞结构,方便客户端和服务器端对代码进行解析。下面对Private Data Interface中的每个字段进行说明。· Magic :约定的私有协议的标识,如果检测到TCP数据部分的开始32个字节是0xBA20A76B,则表明该协议是私有的网管协议。· Tag :命令标识,用于标识某一种特定的操作命令,方便网络设备进行特定的读取或设置操作。· Sub-Command number :某一个Tag所附带的子命令的数量,若没有子命令,该字段为零。其中,Sub-Command都附带在Data部分。· Data length :有效数据部分的长度,也就是Data部分的字节总数。· Data :有效的数据部分,如果是客户端给服务器端发送请求,Data部分也可以包含客户端向服务器端请求的子命令。其中需要特别说明的是,Data部分为了区分不同的数据段,使用了特殊的分隔符“*#0胖”加以区分。如果在TCP的数据段碰到*#0#*,则认为是前后两段不同的数据。同样地,采用特殊分隔符“#*0绅”标识数据的末尾。此网管接口提供的数据主要分成两大类第一类为可读可写型数据,用于配置相应的网络设备,第二类为只读型数据,用于获取交换机当前的某种状态或信息。两种数据类型都以“*#0#*”作为分隔符,“#*0*#”作为结尾符。下面对两种不同的数据进行相应的说明。第一类数据为可读可写型数据,这部分数据信息用于配置网络设备,需要与网络设备中的某一些进程交互,以达到配置网络设备的目的。所有的可读可写部分的数据全部保存在一个文本中,当更新完这个文本之后,会立即通知相应的进程文本中的数据已经被更新,让该进程重新去读取此文本文件,根据文本文件中的新数据重新配置交换机。当一次进行多个数据操作的时候,以分隔符“*#0#*”分隔不同的数据。第二类数据为只读型数据,只读型数据部分为结构体类型(或者结构体链表类型),对于不同平台的网络设备,只用填充定义好的结构体即可。对于结构体链表类型,结构体之间采用“*#0胖”,方便上层解析相应的数据。因为通用型网管接口必须能适应多种上位机语言,有些语言并不存在结构体,所以还是需要定义分隔符作为区分,方便上层解析数据。 第三类数据为命令型数据,例如重启网络设备、网络设备恢复出厂设置等命令。今UDP数据部分UDP部分主要是server端为某一个client端提供的trap告警消息。当网络设备发生链路连接变化、重启、网络风暴等重大事件的时候,往往需要及时地向用户报告发生该事件的设备(IP)、时间以及具体事件内容。当设备发生某种事件,需要向上层发送告警的时候,就会往一个管道中写入trap的内容,同时会通知网管接口,管道中存在数据,让网管接口去:read管道。网管接口从管道中读到固定长度的trap之后,会以UDP单播的形式,向上层发送此trap。下面对数据帧结构进行详细的说明· Magic :约定的私有协议的标识,如果检测到TCP数据部分的开始32个字节是0x9B20B79C,则表明该协议是私有的网管协议。 · Tag :命令标识,用于标识某一种特定的操作命令,方便网络设备进行特定的读取或设置操作。· Trap type :告警 Trap 的类型。· Data length :Data部分有效数据的长度。· Data :固定大小的缓冲区,用户向上层发送Trap的内容。当该Trap发送给上层之后,网管接口的UDP侦听管道模块会重新进入侦听状态,等待Trap本文档来自技高网
...

【技术保护点】
一种基于TCP/UDP私有网管接口的实现,该实现的特殊之处在于TCP、UDP帧结构的数据部分,它插入新的私有数据帧结构,该私有数据帧结构包含了帧标识、命令tag、命令个数等有效信息,其特征在于基于标准的TCP协议,UDP协议的基础上,在数据部分定义私有数据帧的结构。

【技术特征摘要】
1.一种基于TCP/UDP私有网管接ロ的实现,该实现的特殊之处在于TCP、UDP帧结构的数据部分,它插入新的私有数据帧结构,该私有数据帧结构包含了帧标识、命令tag、命令个数等有效信息,其特征在于基于标准的TCP协议,UDP协议的基础上,在数据部分定义私有数据帧的结构。2.上层与底层交互数据时,采用的可靠的TCP传输机制,在请求连接部分采用主-从线程模式,在具体的实现上采用固定代码填充的方式,不但能...

【专利技术属性】
技术研发人员:周厚明刘湘泉
申请(专利权)人:武汉迈威光电技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1