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 + -
显示快捷键?