跳到主要内容

8. 使用基本编码规则进行序列化

8. 使用基本编码规则进行序列化 (Serialization using the Basic Encoding Rules)

当 SNMP 实体序列化 SNMP 消息时, 它使用 ASN.1 [BER] 的基本编码规则 (Basic Encoding Rules, BER), 并带有以下限制:

  1. 编码长度字段时, 仅使用定长形式. 禁止使用不定长形式.

  2. 编码 INTEGER 类型的值时, 该值必须位于 -2^31 到 2^31-1 (含边界) 的范围内.

  3. 编码 Counter32, Counter64 或 Gauge32 类型的值时, 只使用非负值. 该值按 INTEGER 编码, 但第 2 项中的限制不适用.

  4. 编码 TimeTicks 类型的值时, 该值必须位于 0 到 2^32-1 (含边界) 的范围内.

  5. 编码 OCTET STRING 时, 该值使用原始定长 (primitive definite-length) 方法编码.

BER 对其接受的编码非常宽容. 例如, 解码长度字段时, 定长形式和不定长形式都会被接受. 为了保持协议简单并便于实现, 所有 SNMP 实现 MUST 在编码值时遵循上述第 1 到第 5 项定义的限制. 这确保所有接收方都能解码这些值.

不过, 在解码值时, SNMP 实现 SHOULD 接受不符合上述限制的值. 对于不合规编码, SNMP 实现应尽可能解释该值, 并继续处理该消息.