RFC 1270

SNMP Communications Services

๐Ÿ“… published October 1991, from ietf

RFC 1270: SNMP Communications Services ๐Ÿ’–

okay bestie, RFC 1270 is an Informational RFC ๐ŸŽ€ so it's giving "here's some info," not a rulebook. F. Kastenholz wrote it as the editor, from Clearpoint Research Corporation, and it dropped in October 1991 โœจ The header doesn't list anything it obsoletes or updates, so there's no drama there ๐Ÿ’…


Status of This Memo ๐ŸŒธ

This memo provides information for the Internet community ๐Ÿฆ‹ It does not specify an Internet standard. Distribution of this memo is unlimited ๐Ÿ’œ

Table of Contents ๐Ÿงš

   1. Abstract ..............................................    1
   2. Introduction ..........................................    1
   3. Standardization .......................................    3
   4. Interoperability ......................................    3
   5. To Transport or Not To Transport ......................    3
   6. Connection Oriented vs. Connectionless ................    6
   7. Which Protocol ........................................    8
   8. Security Considerations ...............................    9
   9. Appendix ..............................................    9
   10. References ...........................................   10
   11. Acknowledgements .....................................   11
   12. Author's Address .....................................   11

1. Abstract โœจ

This memo is being shared with the Internet community as an Informational RFC ๐Ÿฆ‹ The whole point is to talk through the issues around the communications services for SNMP ๐Ÿ’… Some of these issues might not be directly relevant to the research problems of the Internet, but researchers and implementors could still find them super interesting ๐Ÿค“

2. Introduction ๐ŸŒˆ

This doc goes through the various issues you'd consider when picking which underlying communications services an SNMP implementation uses ๐Ÿ’–

So, as RFC 1052, IAB Recommendations for the Development of Internet Network Management Standards [8] tells us, the IAB went with a two-prong strategy for managing TCP/IP-based internets ๐Ÿ”ฅ For the short term, SNMP (the Simple Network Management Protocol, defined in RFC 1067) was the tool for managing nodes in the Internet community.

Long term, the plan was to take a look at the OSI network management framework ๐Ÿ‘€ Two docs were made to define the management information. RFC 1065 defined the Structure of Management Information (SMI), and RFC 1066 defined the Management Information Base (MIB) ๐ŸŒธ Both were built to work with SNMP AND the OSI network management framework, which is so thoughtful ngl.

And honestly, the short-term plan slayed ๐Ÿ‘‘ Internet-based network management tech got fielded by both the research AND commercial crowds within a few months, so chunks of the Internet community became network manageable pretty fast ๐Ÿ’…

In May of 1990, the core docs got promoted to "Standard Protocols" with "Recommended" status ๐ŸŽ‰ So the Internet-standard network management framework is made up of:

  • Structure and Identification of Management Information for TCP/IP-based internets, RFC 1155 [9], which describes how managed objects contained in the MIB are defined;
  • Management Information Base for Network Management of TCP/IP-based internets, which describes the managed objects contained in the MIB, RFC 1156 [10]; and
  • the Simple Network Management Protocol, RFC 1157 [1], which defines the protocol used to manage these objects.

At the same time, people were writing docs about how to carry SNMP messages over protocols other than UDP/IP ๐Ÿฆ‹ We got SNMP Over Ethernet [3], SNMP Over OSI [2], and SNMP Over IPX [6], and honestly, it'd be surprising if there weren't more coming ๐Ÿ™ˆ Those memos caused a bit of confusion in the community, so this doc is here to clear the air. It walks through the issues that matter to an implementor when choosing how to encapsulate SNMP packets ๐Ÿซถ

Quick reality check: none of those docs became full Internet Standards ๐Ÿ’€ SNMP Over ISO and SNMP Over Ethernet are both Experimental protocols. SNMP Over IPX [6] is an Internet Draft. Only the SNMP Specification [1] is an Internet Standard ๐Ÿ‘‘

No single transport scheme is the absolute best for every situation, ngl ๐Ÿ™… But this note is going to argue that, except for a very small set of special circumstances, operating SNMP over UDP/IP is the optimal scheme ๐Ÿ’œ

Also, this doc isn't a standard or a protocol for the Internet Community ๐Ÿ™…โ€โ™€๏ธ For production use on the Internet, the SNMP and its required communication services are specified in [1] ๐Ÿ“Œ

3. Standardization ๐Ÿงš

Right now, the SNMP Specification [1] only specifies that the UDP protocol be used to exchange SNMP messages. The IAB may standardize other protocols for use in exchanging SNMP messages in the future, but for now only UDP is standardized for this purpose ๐Ÿ’–

So if you want to claim full compliance with the SNMP Specification, your implementation would have to use UDP for SNMP message exchange ๐Ÿ’…

4. Interoperability ๐Ÿซถ

Interoperability is the degree to which the equipment produced by one vendor can operate with equipment produced by another vendor ๐ŸŽ€

Compliance with a standard is related to interoperability too ๐Ÿ’– Everything else being equal, a device that follows some standard is more likely to be interoperable than one that doesn't ๐ŸŒธ

For commercial product development, the pros and cons of making an interoperable product have to get weighed, and then a choice gets made ๐Ÿงฎ Both engineering AND marketing teams are part of that process ๐Ÿ’ผ

The Internet is the single biggest market for SNMP systems ๐ŸŒ A big chunk of SNMP systems get developed with the Internet as the target environment, so it's expected that the Internet's needs and requirements will be the driving force for SNMP โญ

SNMP over UDP/IP is specified as the "Internet Standard" protocol. So to operate on the Internet and be managed there on a production basis, a device has to support SNMP over UDP/IP ๐Ÿ“Œ That makes SNMP over UDP/IP the most common way of running SNMP. Which means the widest interoperability and the widest acceptance for a commercial product come from running SNMP over UDP/IP ๐Ÿ†

Plus, the preponderance of UDP/IP based network management stations strongly suggests that an agent should operate SNMP over UDP/IP ๐Ÿซถ

And the interoperability decision drives a bunch of technical decisions after it ๐Ÿ”ฅ If interoperability is desired, then SNMP has to be operated over UDP/IP ๐Ÿ’–

5. To Transport or Not To Transport โœจ

okay so the big question is whether SNMP should run on top of a transport-layer protocol like UDP or not ๐Ÿค” Usually it's a choice between running over a transport/network/data link stack or just running straight over the datalink. Several protocols have already been published for running SNMP over different datalink and transport protocols, so people have definitely been experimenting ๐Ÿ’…

Running SNMP over a Transport and Network protocol stack is the preferred option ๐Ÿฆ‹ These protocols give at least five functions that are super important for moving SNMP packets through a network:

  • Routing ๐Ÿ—บ๏ธ The network layer handles routing, which makes network management way more useful. The network can re-route packets around failed areas, so network management can keep working during localized losses of service. (Btw, these losses don't only happen because of failures. They can also happen for non-failure reasons, like preventive maintenance.)
  • Media Independence ๐ŸŒˆ The network layer gives a high degree of media independence, so lots of different types of network elements can be managed. If you tie SNMP to one particular data link protocol, you limit the management scope to only the devices that use that datalink protocol. Tiny world, huge limits ๐Ÿ˜ญ
  • End-to-End Checksum ๐Ÿ” The end-to-end checksum from transport protocols makes data transfer more reliable. no notes, just vibes โœจ
  • Multiplexing/Demultiplexing ๐Ÿ”€ Transport protocols provide multiplexing and demultiplexing services, and those are exactly what make the many-to-many management relationships possible with SNMP. Iconic teamwork ๐Ÿ‘‘
  • Fragmentation and Reassembly ๐Ÿงฉ This one is connected to media independence. IP lets SNMP packets travel over media with different MTU sizes, and that's not something datalink-specific transmission schemes can do. BUT fragmentation and reassembly does lower the overall robustness of network management, because if even one fragment gets lost along the way, the whole operation fails. The worse the network is doing, the more likely a fragment is to get lost or delayed ๐Ÿ’€ When the network is running normally, for monitoring and data gathering, this isn't a problem. When the network is running poorly (and the operators are usually trying to diagnose and fix a failure), small packets should be used so the packet doesn't get fragmented in the first place ๐Ÿซถ

There are other services and functions that come with a connection-oriented transport. Those aren't desired for SNMP, and a later section goes deeper into this ๐ŸŽ€

The main drawbacks people cite for using Transport and Network layers in the managed object are a) increased development time and b) increased resource requirements. ngl, these arguments are less than compelling ๐Ÿ™„

There are several excellent public domain or freely redistributable UDP/IP stacks that provide enough support for SNMP. Porting the essential components of one of these stacks takes only a small effort compared to the overall effort of installing the SNMP software ๐Ÿ“

The extra resources needed in the managed object to support UDP/IP are minimal ๐Ÿงš CPU resources are only needed when a packet is actually being transmitted or received. The biggest single resource cost of UDP/IP is calculating the UDP checksum, and that's very small compared to the cost of ASN.1 encoding/decoding, Object Identifier lookup, and so on ๐Ÿ’œ

The author has personal knowledge of a UDP/IP stack that was built specifically to support SNMP ๐Ÿ”ฅ It needs less than 4Kb of code space. It's a minimalist implementation of UDP/IP, "just enough" to support SNMP. It supports UDP, IP, ARP, and handles ICMP redirect and echo request messages. And get this: one person built it in about two months โœจ So obviously, neither the development effort nor the memory requirements are big.

The network overhead of UDP/IP is also pretty small. A UDP/IP header is 28 octets (assuming no IP options). Since UDP is connectionless, it doesn't generate any overhead traffic of its own, like TCP SYNs, FINs, and ACKs ๐Ÿฆ‹

The growing popularity of internetworking outside of The Internet means SNMP has to operate over at least a network layer protocol ๐ŸŒธ These internetworks are a bunch of networks all connected together with routers. To get through a router, a packet has to use one of the network layer protocols that the router understands. So if you want SNMP management in an internetwork, the SNMP entities in that internetwork must use a network layer protocol. SNMP over a datalink can NOT traverse a router ๐Ÿ™…โ€โ™€๏ธ

There are some situations where running SNMP over a datalink is appropriate ๐Ÿ’–

Schemes are under development to provide Out-Of-Band (OOB) management access to network devices ๐Ÿ› ๏ธ OOB access is usually set up over point-to-point or dial-up connections. These connections are dedicated to OOB network management and go directly from the network management station to the managed device, so a Transport/Network protocol may not be necessary there.

Using a Transport/Network protocol on these links might still be easier from a development point of view though ๐Ÿง  It's probably a simple configuration step to have the management station's IP use a serial port instead of the "normal" (e.g., Ethernet) port for traffic going to a particular node.

If the Out-Of-Band link is also used as a "primary" route to some nodes, then network-layer functions are required ๐Ÿ‘‘ Those functions are easily supplied by using UDP/IP.

For a datalink interface and driver (e.g., a PC Ethernet interface card) that has to be manageable independent of the higher-level protocol suite (which might NOT be manageable), running SNMP directly over the datalink is reasonable ๐ŸŽ€ Nobody knows in advance what higher-level protocol services will be available, so those services can't be relied on. If someone arbitrarily decides to add an elementary UDP/IP stack, then there may be two independent UDP/IPs in the system ๐Ÿ˜ต That's undesirable, since it would need two IP addresses per managed node. Otherwise, a brand-new protocol stack gets introduced into the environment ๐ŸŒˆ

6. Connection Oriented vs. Connectionless ๐Ÿฆ‹

okay so this section is mostly about the transport layer, but the basic connection oriented vs connectionless debate applies to ANY layer that gives SNMP its communication services ๐Ÿ’…

For SNMP, the connectionless transport service (UDP) is what's specified in the Protocol Specification [1]. The original SNMP developers made this call after careful study and consideration, and honestly? Iconic ๐Ÿ™Œ

The prime motivation here is that SNMP must continue to operate (if at all possible) when the network is operating at its absolute worst ๐Ÿ˜ญ For other apps, like Telnet or FTP, the user can always just "try again later" if the network is being crusty. But the whole job of a network management protocol is to fix the network when it's struggling, so the "try again later" strategy is totally useless here ๐Ÿ’€

By using a connectionless transport, SNMP takes on the responsibility of reliable data transmission itself (A SNMP application may time out outstanding requests and either retransmit them or abort them as appropriate). However, SNMP only requires these functions of the sender of a Request PDU (get, getNext, or Set), which is typically a network management station. Since the Agent only generates responses, it doesn't need to do any of that stuff. This vastly reduces the resource and functional requirements on the Agent ๐Ÿงš

If a connection oriented transport is used, then a fundamental design choice has to be made about connection maintenance:

  1. Keep a connection open to each managed object on the network,
  2. Establish and tear down connections on a per-operation basis, or
  3. Keep a fixed number of connections open and, when another connection is needed, use some algorithm (e.g., LRU) to select one for closing and opening to the new agent.

All of these alternatives pose severe problems, so each one is undesirable. Not ideal, bestie ๐Ÿฅฒ

The first option cuts down the resources needed for a single operation, because the connection establishment and termination cost is "amortized" over many operations. On the other hand, keeping a connection open means the management station has to maintain a large number of connection records (in the hundreds or even thousands). Furthermore, if either side of the connection engages in "keep-alives" (even though such behavior is frowned upon), a large amount of traffic gets generated, eating up a ton of network resources, all for no gain ๐Ÿ™ˆ

The second option reduces the amount of idle resources, like connection records, but vastly increases the amount of resources required to perform an operation. A connection must be established, the request Message sent and the response returned, and then the connection closed for each operation. For a TCP, this would typically require 10 separate packet transfers plus the TCP Time-Wait (see the Appendix for details). Yikes ๐Ÿ˜ตโ€๐Ÿ’ซ

In the face of pathological network problems, a connection oriented transport protocol may simply cease to operate, because the probability of getting all of these packets through drops to a very small number ๐Ÿ“‰

The third option requires that the management station maintain connection usage information in order to implement the LRU algorithm. This excessively complicates the management station. Furthermore, this option tends to reduce to the second option when doing health check polling for a number of agents that is large compared to the number of supported connections. Circular drama ๐Ÿ”

A connection oriented transport protocol may provide services that are undesirable or unneeded by SNMP.

For example, one application of network management is to poll nodes to determine if they are up or not. When a node is up, it makes little difference whether SNMP operates over TCP or UDP. However, if the node goes down then TCP will eventually close the connection. Every poll request must then be translated into a TCP Open request while the managed node is down. Once the node comes up, the send must then be done ๐Ÿซ 

For connection oriented transports, the transport ACK does not necessarily indicate delivery of data to the destination application process (for TCP, see section 2.6 of [4]). The SNMP would still need its own timeout/retry procedure to ensure that the SNMP software actually got the packet ๐Ÿ“ฆ

A connection oriented transport such as TCP provides flow control for the data stream. Because of the lock-step nature of SNMP protocol exchanges, this is not a service that SNMP requires. Not needed, not wanted ๐Ÿ™…โ€โ™€๏ธ

Architectural purists may argue that an "Application" layer entity (SNMP) must not perform operations that are properly the realm of the Transport layer (timeouts, retransmissions, and so on). While architecturally pure, this line of reasoning is not relevant. The network management applications and protocols are monitoring the "health" of the network and, as a result, have the best information and are in the best position to adapt their own behavior to the state of the network, and thereby, continuing operations in the face of network adversity. Main character energy, the people monitoring the network know best ๐Ÿ‘‘


7. Which Protocol ๐Ÿ“

The final point of discussion is the actual choice of a protocol to support SNMP.

If a device is destined for use in the Internet then it must operate SNMP over UDP/IP. Non-negotiable, periodt โœจ

If the device is operating in some other protocol environment, then SNMP ought to use the transport services that are native to that environment. It may make very little sense to introduce a new protocol stack into a network just to provide one service. For example, it could require that the network operations staff understand and be able to administer and operate two protocol stacks, that hosts and routers understand both protocols, and so on. It may also be bureaucratically impossible to introduce UDP/IP into the environment (the "We are only a FOONET shop - if it doesn't speak FOONET, we don't want it" argument). The FOONET gatekeepers are a whole mood ๐Ÿ’€

References [2] and [6] are experimental standards for operating SNMP over IPX and OSI respectively. In these environments, those standards ought to be adhered to ๐ŸŒธ


8. Security Considerations ๐Ÿ’€

Security issues are not discussed in this memo.

Full stop. This memo doesn't cover security at all, so keep that in mind, bestie ๐Ÿซฃ


9. Appendix ๐Ÿงš

This appendix details the TCP packet transfers required to perform a single SNMP operation assuming that the connection is established only for that operation and that a single SNMP operation (e.g., get request) is performed. We also assume that all operations are "normal" i.e., that there are no lost packets, no simultaneous opens, no half opens, and no simultaneous closes. We also ignore the possibility of TCP segmentation and IP fragmentation.

The nomenclature used to illustrate the packet transactions is the same as that used in the TCP Specification [4]. Here's the whole packet dance:

              Packet  Management                         Managed
              Number  Station                            Object
                               Connection Open...
               1         >--<CTL=SYN>----------------------->
               2         <--<CTL=SYN,ACK>-------------------<
               3         >--<CTL=ACK>----------------------->
                           Connection now open,
                           SNMP Request is sent.
               4         >--<DATA=SNMP Request>------------->
                           Response comes back
               5         <--<DATA=SNMP Response, CTL=ACK>---<
               6         >--<CTL=ACK>----------------------->
                           Operation is complete,
                           Management station initiates the
                           close.
               7         >--<CTL=FIN,ACK>------------------->
               8         <--<CTL=ACK>-----------------------<
               9         <--<CTL=FIN,ACK>-------------------<
              10         >--<CTL=ACK>----------------------->
                          Wait 2 MSL
                          Connection now closed.

Some optimizations are possible IF the TCP has knowledge of the type of operation. However, a general purpose TCP would not be tuned to SNMP operations, so those optimizations would not be done. Tuned for SNMP? Only if you're lucky ๐ŸŽ€


10. References ๐Ÿ“š

[1] Case, J., Fedor, M., Schoffstall, M., and J. Davin, "Simple Network Management Protocol", RFC 1157, SNMP Research, Performance Systems International, Performance Systems International, MIT Laboratory for Computer Science, May 1990.

[2] Rose, M., Editor, "SNMP over OSI", RFC 1161, Performance Systems International, Inc., June 1990.

[3] Schoffstall, M., Davin, C., Fedor, M., and J. Case, "SNMP over Ethernet", RFC 1089, Rensselaer Polytechnic Institute, MIT Laboratory for Computer Science, NYSERNet, Inc., University of Tennessee at Knoxville, February 1989.

[4] Postel, J., "Transmission Control Protocol - DARPA Internet Program Protocol Specification", RFC 793, DARPA, September 1981.

[5] Postel, J., "User Datagram Protocol", RFC 768, USC/Information Sciences Institute, August 1980.

[6] Wormley, R., "SNMP Over IPX", draft in process, August 1990.

[7] Postel, J., Editor, "IAB Official Protocol Standards", RFC 1250, IAB, August 1991.

[8] Cerf, V., "IAB Recommendations for the Development of Internet Network Management Standards", RFC 1052, NRI, April 1988.

[9] Rose M., and K. McCloghrie, "Structure and Identification of Management Information for TCP/IP-based internets", RFC 1155, Performance Systems International, Hughes LAN Systems, May 1990.

[10] McCloghrie K., and M. Rose, "Management Information Base for Network Management of TCP/IP-based internets", RFC 1156, Hughes LAN Systems, Performance Systems International, May 1990.


11. Acknowledgements ๐Ÿ’œ

The author wishes to thank Jeff Case, Chuck Davin and Keith McCloghrie for their technical and editorial contributions to this document. Shoutout to the squad ๐Ÿซถ


12. Author's Address ๐ŸŒˆ

Frank Kastenholz

Clearpoint Research Corporation

35 Parkwood Drive

Hopkinton, Mass. 01748

Phone: (508) 435-2000

Email: kasten@europa.clearpoint.com

๐Ÿ“ฆ where this page comes from