《SNMP网管系统开发》由会员分享,可在线阅读,更多相关《SNMP网管系统开发(33页珍藏版)》请在金锄头文库上搜索。
1、SNMP网管系统开发网管系统开发1ApplicationApplicationPresentationPresentationsessionsessionTransportTransportNetworkNetworkData LinkData LinkPhysicsPhysicsOSI Model802.3802.3、802.4802.4、802.5802.5,X.25X.25,FRFR,SLIP/PPPSLIP/PPPPSTN/ISDNPSTN/ISDN,PLMNPLMN,ATMATM,Released LineReleased LineTCPTCPUDPUDPSMTPSMTPFTPFTP
2、TELNETTELNETDNSDNSIP ICMP ARP RARPIP ICMP ARP RARPTCP/IP Protocol suitSNMPSNMP网络协议模型网络协议模型2SNMP 系统结构系统结构NetworkNetwork InterfaceSNMPUDPIPNetwork InterfaceSNMPUDPIPManagerAgent. . .管理工作站HostRouter网元 (NEs)通信协议SNMPNetwork InterfaceSNMPUDPIPAgent3SNMP协议实体协议实体NetworkNetwork InterfaceSNMPUDPIPSNMP Manager
3、SNMP ManagerApplicationApplicationGet-RequestGet-RequestGetNextGetNext-Request-RequestSet-RequestSet-RequestGet-ResponseGet-ResponseTrapTrapNetwork InterfaceSNMPUDPIPSNMP AgentSNMP AgentApplicationApplicationGet-RequestGet-RequestGetNextGetNext-Request-RequestSet-RequestSet-RequestGet-ResponseGet-Re
4、sponseTrapTrap4协议实体的功能协议实体的功能 用来支持应用实体用来支持应用实体 和远端对应的实体进行通信和远端对应的实体进行通信 SNMP消息包括消息包括 版本号版本号 公共体名公共体名 协议数据单元协议数据单元 消息封装和传送消息封装和传送5SNMP应用协议应用协议Network AccessSNMPUDPIPManager管理工作站网元 (NEs)Network AccessSNMPUDPIPAgent162Any161Any6UDP和和TCP都都使使用用了了与与应应用用层层接接口口处处的的端端口口(port)与上层的应用进程进行通信。与上层的应用进程进行通信。端口的概念端口
5、的概念7若若没有端口没有端口没有端口没有端口,传输层就无法知道数据应当交付传输层就无法知道数据应当交付传输层就无法知道数据应当交付传输层就无法知道数据应当交付给应用层的哪一个进程给应用层的哪一个进程给应用层的哪一个进程给应用层的哪一个进程。端口是用来标识应用端口是用来标识应用层的进程层的进程。端口号分为两类。一类是由端口号分为两类。一类是由因特网指派名字和因特网指派名字和因特网指派名字和因特网指派名字和号码公司号码公司号码公司号码公司ICANN负责分配给一些常用的应用层负责分配给一些常用的应用层程序固定使用的程序固定使用的熟知端口熟知端口熟知端口熟知端口(well-known port),其数
6、值一般为其数值一般为01023,见,见RFC 1700。例如,例如,FTP用用21,TELNET用用23,SMTP用用25,DNS用用53,HTTP用用80,SNMP用用161。端口的概念端口的概念8端口举例端口举例9Socket插口或套接字插口或套接字包括包括IPIP地址地址(32 bit)和端口号端口号(16 bit),共共48bit48bit。10Linux内核组成内核组成11内核中网络层次结构内核中网络层次结构12Socket类型类型TCP套接字是套接字是TCP协议的具体实现,实现协议的具体实现,实现TCP连接的建立及通信连接的建立及通信.UDP套接字是套接字是UDP协议的具体实现,协
7、议的具体实现,UDP是非连接的、不可靠的、传递数据报的传输是非连接的、不可靠的、传递数据报的传输协议。协议。RAW套接字将流经网卡的数据全部捕获,套接字将流经网卡的数据全部捕获,可用于可用于sniffer网络侦听软件,也常用于流量网络侦听软件,也常用于流量测量系统中。测量系统中。13SNMP 通信服务通信服务四种服务四种服务nGet, Set, GetNext, Trap五种五种SNMP消息消息nGetRequest, SetRequest, GetNextRequest, GetResponse, TrapManagerAgent(s)Get, Set, GetNext RequestGet
8、 ResponseTrap14 SNMP消息格式消息格式消息结构消息结构n版本号版本号n公共体名公共体名n协议数据单元协议数据单元SNMP 消息长度不大于消息长度不大于 484 字节字节. 消息格式消息格式VersionCommunitySNMP PDU15SNMP PDU格式格式TrapPDU type request-id00variable-bindingsGetRequest, GetNextRequest, SetRequestPDU type request-iderror-status error-indexvariable-bindingsGetResponsePDU type
9、enterprise agent-addr generic-trapvariable-bindingsspecific-traptime-stamp16信息模型信息模型SMI组织、命名及描述被管对象信息。组织、命名及描述被管对象信息。每个被管对象必须有一个名字每个被管对象必须有一个名字name,存储,存储类型类型syntax,及编码,及编码encoding。nName即即object identifier(OID), 是一串数字,用是一串数字,用来唯一的识别这个对象来唯一的识别这个对象nsyntax描述对象存储的数据类型描述对象存储的数据类型 ,如整型、字,如整型、字节串等节串等nencodi
10、ng 描述与该对象相关的信息如何编码,描述与该对象相关的信息如何编码,用于通信过程用于通信过程. SNMP使用使用BER (Basic Encoding Rules)编码方式编码方式. 17MIBMIB是被管对象信息的虚拟存储及访问之处,是被管对象信息的虚拟存储及访问之处,所有对象的描述使用所有对象的描述使用 ASN.1 (Abstract Syntax Notation One)语法。语法。 18两种类型的被管对象两种类型的被管对象普通类型普通类型:nsysDescr OBJECT-TYPESYNTAX DisplayString (SIZE(0.255):= system 1nOID举例举
11、例: mib-2.system.1.0列表类型列表类型nOID举例举例:mib-2.interface.ifTable.ifEntry.ifDescr.2mib-2.interface.ifTable.ifEntry.ifDescr.6 mib-2.interface.ifTable.ifEntry.ifType.2mib-2.interface.ifTable.ifEntry.ifType.619列表对象列表对象ifIndex ifDescr ifType . . . 1 le0 6 . . . 6 llc0 1 . . . 7 lo0 24 . . . 9 le1 6 . . . .ifT
12、able.ifEntry.1 (1.3.6.1.2.1.2.2.1.1) .ifTable.ifEntry.2 (1.3.6.1.2.1.2.2.1.2) .ifTable.ifEntry.3 (1.3.6.1.2.1.2.2.1.3)1.3.6.1.2.1.2.2.1.3.71.3.6.1.2.1.2.2.1.2.620列表举例列表举例21基本编码规则基本编码规则BER 当一个对象的实例需要通信时,需要利用基本当一个对象的实例需要通信时,需要利用基本编码规则对信息进行编码,然后封装在消息中进编码规则对信息进行编码,然后封装在消息中进行通信。行通信。 Basic Encoding Rules
13、(BER)- Type, Length, and Value (TLV)22例子:例子:SNMP Get-Requestsnmpgetsnmpget -d 10.144.18.118 .1.3.6.1.2.1.1.1.0 -d 10.144.18.118 .1.3.6.1.2.1.1.1.0Transmitted 41 bytes to Transmitted 41 bytes to camrycamry (10.144.18.118) port 161: (10.144.18.118) port 161:Initial Timeout: 0.80 secondsInitial Timeout
14、: 0.80 seconds 0: 30 0: 30 2727 02 01 02 01 0000 04 06 04 06 70 75 62 6c 69 6370 75 62 6c 69 63 a0 a0 1a1a 02 0.public. 02 0.public. 16: 02 16: 02 18 18 bcbc 02 01 02 01 0000 02 01 02 01 0000 30 0e 30 0c 06 08 30 0e 30 0c 06 08 2b2b .0.0.+ .0.0.+ 32: 32: 06 01 02 01 01 01 0006 01 02 01 01 01 00 05 0
15、0 - - - - - - - . 05 00 - - - - - - - . 0: SNMP MESSAGE (0x30): 0: SNMP MESSAGE (0x30): 3939 bytes bytes 2: INTEGER VERSION (0x2) 1 bytes: 2: INTEGER VERSION (0x2) 1 bytes: 0 0 (SNMPv1) (SNMPv1) 5: OCTET-STR COMMUNITY (0x4) 6 bytes: 5: OCTET-STR COMMUNITY (0x4) 6 bytes: publicpublic 13: GET-REQUEST-
16、PDU (0xa0): 13: GET-REQUEST-PDU (0xa0): 2626 bytes bytes 15: 15: INTEGER REQUEST-ID (0x2) 2 bytes: INTEGER REQUEST-ID (0x2) 2 bytes: 63326332 19: 19: INTEGER ERROR-STATUS (0x2) 1 bytes: INTEGER ERROR-STATUS (0x2) 1 bytes: noError(0)noError(0) 22: 22: INTEGER ERROR-INDEX (0x2) 1 bytes: INTEGER ERROR-
17、INDEX (0x2) 1 bytes: 0 0 25: 25: SEQUENCE VARBIND-LIST (0x30): 14 bytesSEQUENCE VARBIND-LIST (0x30): 14 bytes 27: 27: SEQUENCE VARBIND (0x30): 12 bytesSEQUENCE VARBIND (0x30): 12 bytes 29: 29: OBJ-ID (0x6) 8 bytes: OBJ-ID (0x6) 8 bytes: .1.3.6.1.2.1.1.1.0.1.3.6.1.2.1.1.1.0 39: 39: NULL (0x5) 0 bytes
18、NULL (0x5) 0 bytes23例子:例子:SNMP Get-ResponseReceived 69 bytes from 10.144.18.118 port 161:Received 69 bytes from 10.144.18.118 port 161: 0: 30 0: 30 4343 02 01 02 01 0000 04 06 04 06 70 75 62 6c 69 6370 75 62 6c 69 63 a2 36 02 0C.public.6. a2 36 02 0C.public.6. 16: 02 16: 02 18 18 bcbc 02 01 02 01 00
19、00 02 01 02 01 0000 30 2a 30 28 06 08 30 2a 30 28 06 08 2b2b .0*0(.+ .0*0(.+ 32: 32: 06 01 02 01 01 01 0006 01 02 01 01 01 00 04 1c 04 1c 53 75 6e 20 53 4e 4d53 75 6e 20 53 4e 4d .Sun SNM .Sun SNM 48: 48: 50 20 41 67 65 6e 74 2c 20 53 55 4e 57 2c 55 6c50 20 41 67 65 6e 74 2c 20 53 55 4e 57 2c 55 6c
20、P Agent, P Agent, SUNW,UlSUNW,Ul 64: 64: 74 72 61 2d 3174 72 61 2d 31 - - - - - - - - - - - tra-1. - - - - - - - - - - - tra-1. 0: SNMP MESSAGE (0x30): 0: SNMP MESSAGE (0x30): 6767 bytes bytes 2: INTEGER VERSION (0x2) 1 bytes: 2: INTEGER VERSION (0x2) 1 bytes: 0 0 (SNMPv1) (SNMPv1) 5: OCTET-STR COMM
21、UNITY (0x4) 6 bytes: 5: OCTET-STR COMMUNITY (0x4) 6 bytes: publicpublic 13: RESPONSE-PDU (0xa2): 54 bytes 13: RESPONSE-PDU (0xa2): 54 bytes 15: 15: INTEGER REQUEST-ID (0x2) 2 bytes: INTEGER REQUEST-ID (0x2) 2 bytes: 63326332 19: 19: INTEGER ERROR-STATUS (0x2) 1 bytes: INTEGER ERROR-STATUS (0x2) 1 by
22、tes: noError(0)noError(0) 22: 22: INTEGER ERROR-INDEX (0x2) 1 bytes: INTEGER ERROR-INDEX (0x2) 1 bytes: 0 0 25: 25: SEQUENCE VARBIND-LIST (0x30): 42 bytesSEQUENCE VARBIND-LIST (0x30): 42 bytes 27: 27: SEQUENCE VARBIND (0x30): 40 bytesSEQUENCE VARBIND (0x30): 40 bytes 29: 29: OBJ-ID (0x6) 8 bytes: OB
23、J-ID (0x6) 8 bytes: .1.3.6.1.2.1.1.1.0.1.3.6.1.2.1.1.1.0 39: 39: OCTET-STR (0x4) 28 bytes: OCTET-STR (0x4) 28 bytes: Sun SNMP Agent, SUNW,Ultra-1Sun SNMP Agent, SUNW,Ultra-1 24例子:例子:SNMP TrapTransmitted 64 bytes to 10.144.18.100 port 162:Transmitted 64 bytes to 10.144.18.100 port 162: 0: 30 3e 02 01
24、 00 04 06 70 75 62 6c 69 63 a4 31 06 0.public.1.0: 30 3e 02 01 00 04 06 70 75 62 6c 69 63 a4 31 06 0.public.1. 16: 09 2b 06 01 04 01 84 64 01 01 40 04 0a 90 12 74 .+.d.t 16: 09 2b 06 01 04 01 84 64 01 01 40 04 0a 90 12 74 .+.d.t 32: 02 01 06 02 03 01 86 9f 43 01 00 30 13 30 11 06 .C.0.0. 32: 02 01 0
25、6 02 03 01 86 9f 43 01 00 30 13 30 11 06 .C.0.0. 48: 04 2b 06 01 01 04 09 54 72 61 70 20 74 65 73 74 .+.Trap test 48: 04 2b 06 01 01 04 09 54 72 61 70 20 74 65 73 74 .+.Trap test 0: SNMP MESSAGE (0x30): 62 bytes 0: SNMP MESSAGE (0x30): 62 bytes 2: INTEGER VERSION (0x2) 1 bytes: 2: INTEGER VERSION (0
26、x2) 1 bytes: 0 0 (SNMPv1) (SNMPv1) 5: OCTET-STR COMMUNITY (0x4) 6 bytes: 5: OCTET-STR COMMUNITY (0x4) 6 bytes: publicpublic 13: V1-TRAP-PDU (0xa4): 49 bytes 13: V1-TRAP-PDU (0xa4): 49 bytes 15: 15: OBJ-ID ENTERPRISE (0x6) 9 bytes: OBJ-ID ENTERPRISE (0x6) 9 bytes: .1.3.6.1.4.1.612.1.1.1.3.6.1.4.1.612
27、.1.1 26: 26: IPADDRESS AGENT-ADDR (0x40) 4 bytes: IPADDRESS AGENT-ADDR (0x40) 4 bytes: 10.144.18.11610.144.18.116 32: 32: INTEGER GENERIC-TRAP (0x2) 1 bytes:INTEGER GENERIC-TRAP (0x2) 1 bytes: 6 6 35: 35: INTEGER SPECIFIC-TRAP (0x2) 3 bytes: INTEGER SPECIFIC-TRAP (0x2) 3 bytes: 9999999999 40: 40: TI
28、METICKS TIME-STAMP (0x43) 1 bytes: TIMETICKS TIME-STAMP (0x43) 1 bytes: 0 0 (0x0) (0x0) 43: 43: SEQUENCE VARBIND-LIST (0x30): 19 bytesSEQUENCE VARBIND-LIST (0x30): 19 bytes 45: 45: SEQUENCE VARBIND (0x30): 17 bytesSEQUENCE VARBIND (0x30): 17 bytes 47: 47: OBJ-ID (0x6) 4 bytes: OBJ-ID (0x6) 4 bytes:
29、.1.3.6.1.1.1.3.6.1.1 53: 53: OCTET-STR (0x4) 9 bytes: OCTET-STR (0x4) 9 bytes: Trap testTrap test 25Get-Next Request操作顺序操作顺序ABTE1.11.22.12.23.13.2Z26字典顺序字典顺序(Lexicographic Order)27例子:例子:get_next_requestGet “Interface Group” of MIB II循环使用循环使用 “get_next_request”由于我们不知道由于我们不知道ifTable中中ifIndex的每个值,的每个值,
30、所以不能直接象数据库查询那样使用关键字,所以不能直接象数据库查询那样使用关键字,方法是:方法是:+首先,首先,get 对象对象ifTable.ifEntry.0的下一个值的下一个值+然后,重复使用然后,重复使用 “get_next”+直到所有子树的内容直到所有子树的内容get完毕完毕. 28SNMP网管系统开发网管系统开发SNMP网管系统采用客户机网管系统采用客户机/服务器模式,路由服务器模式,路由器、交换机、打印机、器、交换机、打印机、HUB等处的等处的Agent是系是系统中的服务器方;而客户机方是统中的服务器方;而客户机方是Manager角色,角色,往往是单独的一台计算机,轮询并记录往往是
31、单独的一台计算机,轮询并记录Agent所返回的数据。所返回的数据。允许一台服务器允许一台服务器(Agent)对应多个客户机对应多个客户机(Manager)。 Agent开发是系统开发工作的核心和重点。开发是系统开发工作的核心和重点。29Agent开发流程开发流程设计所需的设计所需的MIB库,或者编辑和更改之库,或者编辑和更改之前做好的前做好的MIB库,保存成一个文件。库,保存成一个文件。针对编辑好的针对编辑好的MIB库文件库文件, 编译生成对应编译生成对应的的C+代码。代码。测试测试Agent开发结果,能够完成开发结果,能够完成MIB库节库节点的点的Get/Set操作,接收操作,接收Trap消
32、息以及消息以及MIB库结构的浏览等工作。库结构的浏览等工作。 30开发工具开发工具UCD-SNMP/NET-SNMPSNMP+/Agent+WINSNMPAdventNetHP OpenViewIBM NetView 31总结总结-1SNMP是目前事实上的管理标准,网管系统是目前事实上的管理标准,网管系统开发的核心是开发的核心是Agent的开发。的开发。SNMP本质是一个网络应用层协议,开发时本质是一个网络应用层协议,开发时可用标准的可用标准的Socket接口。接口。 SNMP信息模型的核心是信息模型的核心是MIB的深刻理解,的深刻理解,而开发时更是需要用而开发时更是需要用SMI来描述被管对象。来描述被管对象。32总结总结-2理解理解SNMP消息格式中的内容,核心是协消息格式中的内容,核心是协议数据单元中的议数据单元中的TLV(对象对象-长度长度-值值)编码,编码,它是网络中应用非常广泛的方法。它是网络中应用非常广泛的方法。作为开发人员,使用目前比较稳定的开源作为开发人员,使用目前比较稳定的开源或商业工具,可以低成本或商业工具,可以低成本/高效率高效率/可靠的可靠的实现具体的管理应用需求。实现具体的管理应用需求。最后,真正理解最后,真正理解SNMP如何工作的系统管如何工作的系统管理员和程序员实在太少了。理员和程序员实在太少了。 33