what is snmp

SNMP PDU Types: Get, GetNext, GetBulk, Set & Trap

GetRequest, GetNext, GetBulk, Set, Response, Trap and InformRequest—when each PDU is used.

By the SNMP Monitoring team · Reviewed July 2026

PDUs are the verbs of SNMP. Get this. Walk next. Bulk-fetch that table. Set a value. Answer. Yell a trap. If you only memorize OIDs and never look at message types, troubleshooting stays superstition—"snmpwalk hung" without knowing whether you asked for GetNext storms or GetBulk.

This page names the common PDUs, when each shows up, and the fields you'll see in a capture or a debug log. Spec anchor: RFC 3416 (PDU definitions in the SNMPv3 architecture docs people still use for the type set). Parent: What is SNMP. Conversation flow: how it works.

What is a PDU in SNMP

PDU = Protocol Data Unit. Fancy way to say "the SNMP message type and its payload."

A manager doesn't send "please give CPU" as English. It sends a GetRequest (or friends) with varbinds—OID slots that come back filled with type + value in a Response. Notifications use different PDUs entirely (Trap / Inform).

Why care:

  1. Tooling maps 1:1 to PDUs (snmpget ≈ GetRequest, snmpwalk ≈ GetNext/GetBulk loops, snmpset ≈ SetRequest)
  2. Errors live in Response fields (error-status, error-index)
  3. Version limits matter: GetBulk is not in SNMPv1

Also keep in mind:

  • Request PDUs and notification PDUs fail differently—don't debug traps with Get timeouts
  • Captures lie less than dashboards when you're arguing about what was sent

If a junior says "SNMP packet," ask which PDU. The answer tells you who started the talk and what they wanted.

The request PDUs

Manager → agent (usual direction):

  • GetRequest — fetch these exact OIDs. Scalar smoke tests. snmpget.
  • GetNextRequest — give me the next object after this OID. Classic walks. Slow on huge tables if that's all you use.
  • GetBulkRequest — efficient multi-varbind retrieval (SNMPv2c+). What modern walks should use.
  • SetRequest — write values. Needs write access. Most monitoring never should.

Bullets from the field:

  • Prefer Get for known scalars (sysUpTime.0).
  • Prefer GetBulk for tables (interfaces, storage, processes).
  • GetNext is what old agents and v1-only paths force you into.
  • Set is a change-control event, not a monitoring default.

Version matrix: versions.

GetBulk and performance

GetBulkRequest arrived with SNMPv2c (and exists in v3). It tells the agent "give me multiple successors" so you don't round-trip once per leaf like a GetNext crawl from hell.

Net-SNMP helper:

snmpbulkwalk -v2c -c <RO_string> <host> system
SNMPv2-MIB::sysDescr.0 = STRING: Linux poller-lab 6.1.0 ...
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
SNMPv2-MIB::sysUpTime.0 = Timeticks: (72000) 0:12:00.00
SNMPv2-MIB::sysContact.0 = STRING: ops@example.com

Under the hood that's GetBulk (or a bulk-ish walk strategy), not you hand-crafting non-repeaters/max-repetitions every time—though libraries expose those knobs when you care.

When GetBulk misbehaves: agent implementation bugs, too-big responses (tooBig error-status), or middleboxes fragmenting UDP badly. Fall back carefully; don't assume v1 forever. Troubleshooting mindset: setup troubleshooting.

Plain walk for comparison (often GetNext loop):

snmpwalk -v2c -c <RO_string> <host> 1.3.6.1.2.1.1.3.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (72000) 0:12:00.00

Response PDU

The agent answers requests with a Response PDU.

Older SNMPv1 docs called the reply GetResponse. In v2c/v3 naming, it's Response. Same job: echo request-id, fill varbinds or set error-status / error-index.

Managers match request-id to know which outstanding poll came home. If you timeout, you never got a Response—or it arrived after you gave up. UDP doesn't care about your feelings.

Notification PDUs (Trap, Inform)

Agent → manager (push):

  • SNMPv2-Trap (and the older v1 trap format in legacy gear) — fire-and-forget event message toward UDP 162.
  • InformRequest — like a trap that wants an acknowledgment and can retransmit (v2c+ world).

Polling vs push trade-offs: traps vs polling. Informs detail: informs.

Traps are not "Get in reverse" for continuous metrics. They're for discrete events. If you try to replace all polling with traps, you'll miss silent capacity creep and you'll still lose UDP messages.

Table of SNMP PDU types with direction and version introduced

PDU structure

Common fields you'll see discussed (exact encoding is BER; you rarely hand-edit that):

  • request-id — correlate request and response
  • error-statusnoError(0), tooBig(1), noSuchName(2), genErr(5), others
  • error-index — which varbind blew up (when relevant)
  • variable-bindings (varbinds) — list of OID + value slots
PDU Direction Typical version Role
GetRequest Manager → agent v1+ Read specific OIDs
GetNextRequest Manager → agent v1+ Walk / next object
GetBulkRequest Manager → agent v2c / v3 Efficient multi-get
SetRequest Manager → agent v1+ Write
Response (GetResponse in v1) Agent → manager all Reply or error
Trap / SNMPv2-Trap Agent → manager v1 / v2c+ Unacked notification
InformRequest Agent → manager v2c+ Acked notification

When error-status isn't noError, read the index, fix the OID list or the view—don't just lengthen the timeout and hope. Glossary: glossary.

Mapping tools to PDUs (cheat sheet)

You run…You're roughly doing…
snmpgetGetRequest → Response
snmpwalkrepeated GetNext (or bulk under the hood)
snmpbulkwalkGetBulk-oriented walk
snmpsetSetRequest → Response
snmptrap / agent trapTrap / SNMPv2-Trap toward 162
informsInformRequest + ack path

When a GUI says "SNMP timeout," you don't know if GetBulk is too fat, Set is denied, or traps never left the box—unless you know which PDU the feature uses. Push vendors (and your own scripts) to log PDU type + error-status. Future you will thank present you.

Also: mixing v1-only devices into a v2c GetBulk template produces mysterious partial failures. Pin version per device class. See versions.

One more ops detail: error-index points at a varbind position starting from the conventions your stack documents—when you multi-get ten OIDs and one is not-in-view, the Response may carry an error while other bindings are empty or partial depending on agent. Don't assume atomic all-or-nothing without testing that agent. For flaky devices, split critical OIDs into separate Gets so one bad leaf doesn't poison the batch. Painful? Yes. Clearer pages at 2 a.m.? Also yes. Worth the extra Get every time.

Frequently asked questions

What is a PDU in SNMP?

A Protocol Data Unit—the SNMP message type (Get, GetBulk, Response, Trap, etc.) plus its fields (request-id, errors, varbinds). Defined in the RFC 3416 family of specs.

GetNext vs GetBulk?

GetNext returns the next object—fine but chattier for big tables. GetBulk (v2c+) pulls many successors per request. Prefer GetBulk when the agent supports it.

What replaced GetResponse?

In v2c/v3 naming, the reply PDU is Response. SNMPv1 literature called it GetResponse. Same role: answer the manager.

What is an InformRequest?

A notification that expects an acknowledgment and can be retransmitted—more reliable than a pure trap over UDP, at the cost of complexity. See informs.

Key takeaways

  • PDUs = SNMP verbs; RFC 3416 is the type reference people cite.
  • Requests: Get, GetNext, GetBulk (v2c+), Set → Response.
  • Notifications: Trap / InformRequest.
  • Fields: request-id, error-status, error-index, varbinds.
  • Next: how it works, traps vs polling, versions.

Monitor it from outside the network

SNMP only tells you a box is healthy while something is still asking. ostr.io polls your endpoints externally and fires email + SMS alerts the moment a reading crosses your line — or the agent goes silent.