rfc1592.txt
来自「<VC++网络游戏建摸与实现>源代码」· 文本 代码 · 共 1,404 行 · 第 1/5 页
TXT
1,404 行
Wijnen, Carpenter, Curran, Sehgal & Waters [Page 5]RFC 1592 SNMP-DPI March 1994 Please note that in the following portion of this text the SNMP-DPI agent is referred simply as the agent. Once the transport connection has been set up, the sub-agent must also initialize the logical connection with the agent. To do so it issues an OPEN request to the agent in which the sub-agent uniquely identifies itself and passes some other parameters to the agent, such as, the maximum number of varBinds per interaction it is prepared to handle, and the timeout the agent should use when waiting for a response from the sub-agent. When the sub-agent prepares to stop or cease operations, it first issues a CLOSE to shut down the logical connection with the agent, and then closes the transport connection.2.2 REGISTRATION A sub-agent supports a collection of MIB variables or object identifiers (object IDs) that constitute its MIB (sub)tree. Each of these object IDs consists of a group ID and an instance ID. The group ID is the root of the sub-agent's MIB tree that it supports and the point of registration to the agent's MIB tree. The instance ID is the piece of the Object Identifier that follows the group ID (registration point), so it is not an instance in the terms of the SNMP definition of an instance. Regardless of the transport mechanism used, after establishing a connection to the agent, the sub-agent registers a branch (group ID) to the Agent's MIB tree. With the registration request, the sub- agent passes some parameters, such as, requested priority and a timeout value for this specific sub-tree. The agent sends back a response to indicate success or failure of the registration request.2.3 NORMAL OPERATION Once the sub-agent has set up both the physical and logical connection to the agent, and once it has successfully registered the sub-tree(s) of the MIB(s) that it supports, it waits for requests from the SNMP agent or generates traps as required.2.4 DPI ARCHITECTURE These are the requests that can be initiated by the SNMP agent: GET, GETNEXT, GETBULK, SET, COMMIT, UNDO, UNREGISTER, and CLOSE.Wijnen, Carpenter, Curran, Sehgal & Waters [Page 6]RFC 1592 SNMP-DPI March 1994 The first four of these correspond directly to SNMP requests that a network management station can make (By default a GETBULK request will be translated into multiple GETNEXT requests by the agent, but a sub-agent may request that the GETBULK be passed to it). The COMMIT, UNDO, UNREGISTER, ARE_YOU_THERE and CLOSE requests are specific SNMP-DPI requests. The sub-agent normally responds to a request with a RESPONSE packet. The CLOSE request is an exception for which the sub-agent only closes the physical connection. These are the requests that can be initiated by a sub-agent: OPEN, REGISTER, TRAP, UNREGISTER, ARE_YOU_THERE and CLOSE. The agent responds to OPEN, REGISTER, UNREGISTER and ARE_YOU_THERE with a RESPONSE packet. The TRAP packet is just accepted and forwarded by the agent without returning any information to the sub- agent. The CLOSE packet is also just accepted by the agent upon which it closes the physical connection. See Figure 1 for an overview of the DPI packet flow.Wijnen, Carpenter, Curran, Sehgal & Waters [Page 7]RFC 1592 SNMP-DPI March 1994 ------------------------------------------------------------------- *---------------------------------* | | | SNMP Network | | Management Station | | | |---------------------------------| | SNMP Protocol | *---------------------------------* A | Get A | | GetNext | GetResponse Trap | | GetBulk | | | Set | | V | *------------------------------* *-------------------* | SNMP Protocol | | DPI Interface | |------------------------------| Response | *--------------| | | |<----------->| | | | | | | | | | SNMP Agent | | | | | | | | Get,GetNext | | | | | | (GetBulk) | | Client | | | | Set,Commit | | | | A *-----------+-> | Undo | | | | | | Get/Set | |------------>| | or | | Trap| | info | | | | | | | | | SNMP | | | | |-----+-----+-------* | | trap | | SNMP | | | V | | DPI |<------------| | Sub-Agent | | | | | | | | | Statically Linked | | | | | | | Instrumentation | | | | | | | (like MIB II) | | | | | | | | | | close | | | | A | | | unregister | | | |-------+-----------| | |<----------->| | | | V | | | | | | | | | | | | | | | | | AreYouThere | | | | TCP/IP layers | | | open | | | | Kernel | | | register | | | | | | |<------------| | | *------------------------------* *-------------------* ------------------------------------------------------------------- Figure 1. SNMP DPI overviewWijnen, Carpenter, Curran, Sehgal & Waters [Page 8]RFC 1592 SNMP-DPI March 1994 Remarks for Figure 1: o The SNMP agent communicates with the SNMP manager via the standard SNMP protocol. o The SNMP agent communicates with some statically linked-in instrumentation (potentially for the MIB II), which in turn talks to the TCP/IP layers and kernel (operating system) in an implementation-dependent manner. o An SNMP sub-agent, running as a separate process (potentially on another machine), can set up a connection with the agent. The sub-agent has an option to communicate with the SNMP agent through UDP or TCP sockets, or even through other mechanisms. o Once the connection is established, the sub-agent issues a DPI OPEN and one or more REGISTER requests to register one or more MIB sub-trees with the SNMP agent. o The SNMP agent responds to DPI OPEN and REGISTER requests with a RESPONSE packet, indicating success or failure. o The SNMP agent will decode SNMP packets. If such a packet contains a Get or GetNext request for an object in a sub-tree registered by a sub-agent, it sends a corresponding DPI packet to the sub-agent. If the request is for a GetBulk, then the agent translates it into multiple DPI GETNEXT packets and sends those to the sub-agent. However, the sub-agent can request (in the REGISTER packet) that a GETBULK be passed to the sub-agent. If the request is for a Set, then the agent uses a 2-phase commit scheme and sends the sub-agent a sequence of SET/COMMIT, SET/UNDO or SET/COMMIT/UNDO DPI packets. o The SNMP sub-agent sends responses back via a RESPONSE packet. o The SNMP agent then encodes the reply into an SNMP packet and sends it back to the requesting SNMP manager. o If the sub-agent wants to report an important state change, it sends a DPI TRAP packet to the SNMP agent which will encode it into an SNMP trap packet and send it to the manager(s). o If the sub-agent wants to stop operations, it sends a DPI UNREGISTER and a DPI CLOSE packet to the agent. The agent sends a response to an UNREGISTER request. o There is no RESPONSE to a CLOSE, the agent just closes the DPI connection. A CLOSE implies an UNREGISTER for all registrations that exist for the DPI connection being CLOSED. o An agent can send DPI UNREGISTER (if a higher priority registration comes in or for other reasons) to the sub-agent, the sub-agent then responds with a DPI RESPONSE packet. o An agent can also (for whatever reason) send a DPI CLOSE to indicate it is terminating the DPI connection. o A sub-agent can send an ARE_YOU_THERE to verify that the "connection" is still open. If so, the agent sends a RESPONSE with no error, otherwise, it may send a RESPONSE with an errorWijnen, Carpenter, Curran, Sehgal & Waters [Page 9]RFC 1592 SNMP-DPI March 1994 indication, or not react at all.3. SNMP DPI PROTOCOL This section describes the actual protocol used between the SNMP agent and sub-agents.3.1 CONNECTION ESTABLISHMENT In a TCP/IP environment, the SNMP agent listens on an arbitrary TCP/UDP port for a connection request from a sub-agent. It is important to realize that a well-known port is not used: every invocation of the SNMP agent will potentially result in a different TCP/UDP port being used. A sub-agent needs to determine this port number to establish a connection. The sub-agent learns the port number from the agent by sending it one conventional SNMP get-request PDU. The port numbers are maintained by the SNMP agent as the objects whose identifiers are: 1.3.6.1.4.1.2.2.1.1.0 dpiPort.0 (old DPI 1.x form) 1.3.6.1.4.1.2.2.1.1.1.0 dpiPortForTCP.0 1.3.6.1.4.1.2.2.1.1.2.0 dpiPortForUDP.0 These variables are registered under the IBM enterprise-specific tree. See 4, "DPI 2.0 MIB definition" for more information. The SNMP agent replies with a conventional SNMP response PDU that contains the port number to be used. This response is examined by the sub-agent and the port number is extracted. The sub-agent then establishes the connection to the specified port. On the surface, this procedure appears to mean that the sub-agent must be able to create and parse SNMP packets, but this is not the case. A DPI Application Programming Interface (API) normally provides a library routine, query_DPI_port(), which can be used to generate and parse the required SNMP packets. This very small routine (under 100 lines of C), does not greatly increase the size of any sub-agent. NOTE: Since this RFC does not define an API, the actual code of and interface to a query_DPI_port() type of function depends on the implementation. For completeness, byte-by-byte descriptions of the packets to be generated by an SNMP DPI API routine query_DPI_port() are provided below. This is probably of little interest to most readers and reading the source of a query_DPI_port() function provides much ofWijnen, Carpenter, Curran, Sehgal & Waters [Page 10]
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?