PySNMP中文4、文檔-SNMP的設計

文檔

設計

與名稱所指明的意思相反,SNMP不僅僅是用於管理數據的協議。隨着時間的推移,它已經變得比最初的設計者們所計劃的要複雜得多。

術語和實體

網絡管理領域中,每個組件都有自己特定的術語,因此,我們也將在這裏採用這些術語。有意思的是,“管理”這個詞被過度使用。

網絡管理體系結構中有三個主要組件:管理實體、被管理實體和網絡管理協議。
arch

  • 管理實體是在集中式網絡管理站(NMS)中運行的應用程序。管理實體控制着網絡管理信息的收集、處理、分析和展示。它發出控制網絡的行爲命令並且與網絡管理員交互。
  • 被管理實體是存在於此網絡中的硬件或者軟件。被管理實體枚舉並格式化自己的一些屬性和狀態,使管理實體可以使用它們,這個很重要。例如,被管理實體可以是主機、路由器、交換機、打印機或者其他設備。
  • 網絡管理協議在管理實體和被管理實體之間起作用,允許管理實體查詢被管理實體的狀態並通過agent執行一些操作。

結構和組件

SNMP由以下四部分組成:

  • 網絡管理對象的定義,也被稱爲MIB objects。管理信息表示爲管理對象的集合,這些對象組成一個虛擬的信息存儲,被稱爲管理信息庫(MIB)。一個MIB對象可能是一個計數器、描述性的信息(軟件版本)、狀態信息、協議特定信息(如到目的地的路由路徑)。因此,MIB objects定義由受管節點維護的管理信息。相關的MIB對象被收集到所謂的MIB模塊中。
  • 數據定義 語言,也叫SMI(管理信息結構),引入了基本數據類型,允許創建它們的子類型和更復雜的數據結構。MIB對象用這種數據定義語言表示。
  • SNMP協議用來在管理和被管理實體間傳達信息和命令。SNMP是C/S模型。有趣的是,管理和被管理實體上都有客戶端和服務端組件,哈哈哈哈。
  • 可擴展的安全框架和系統管理功能。
    SNMPv3之前的版本沒有後一種特性。

數據類型

SMI引入了11種用於表示託管對象的基礎數據類型。
它們是純ASN.1類型或者定製化類型。純ASN.1類型有:

  • Integer
  • Octet String
  • Object Identifier
    ASN.1是一個古老並且複雜的標準,它通過可移植的方式處理數據的結構化和序列化。

基於ASN.1的SNMP定製子類型:

  • Integer32/Unsigned32 - 32位整型
  • Counter32/Counter64 - 可增長數
  • Guage32 - 未包裝的31位整型
  • TimeTicks - 事件發生後的時間
  • Opaque - uninterpreted ANS.1 string
    在這些標量類型之外,SNMP還定義了一種將它們放到有序數組中的方法。通過這些數組可以構建二維表。

PySNMP依賴PyASN.1來創建SNMP的類型。在PyASN.1中,ASN.1類型的實例由看起來像字符串或整數的Python對象表示。

我們可以將PyASN1對象與Python類型相互轉換。PyASN1可以參與基本算術運算或字符串連接等操作。所有SNMP基礎類型都是不可變的,就像它們對應的Python類型一樣。

>>> from pyasn1.type.univ import *
>>> Integer(21) * 2
Integer(42)
>>> Integer(-1) + Integer(1)
Integer(0)
>>> int(Integer(42))
42
>>> OctetString('Hello') + ', ' +
>>> OctetString(hexValue='5079534e4d5021')
OctetString('Hello, PySNMP!')

在向PySNMP發數據或從PySNMP接收數據時,PySNMP的用戶可能會遇到PyASN1類和對象。
稍後我們將更詳細地討論Object Indentifier這一數據類型,它用於命名一個對象。在本系統中,對象以分層分層分層的方式進行identified。

Object Identifier

OIDs被廣泛地應用來identifying標識對象。這個標識系統可以描述爲一棵樹,其節點由不同的組織、知識領域、對象的概念或類型、對象具體的實例 來分配。以開發人員的角度看,OID是一長串由點分割的數字,來編碼對應的節點。
oid
樹的每個分支都有一個數字和名稱,從樹的頂部到你感興趣的點的完整路徑構成該點的名稱。這個完整的路徑就是OID,也叫identifier of an object。樹頂周圍的點具有普遍性。

頂級OIDs對應不同的標準組織。供應商爲自己的產品和託管對象定義私有分支。

在這個分層結構的頂端是國際標準化組織(ISO)和國際電信標準化部門。
ITU-T電信聯盟 是上面兩個組織共同努力的分支。

在PyASN1模型中,OID看起來像一個不可變的數字序列。與Python 元組一樣,PyASN1 OID可以被分割或連接。切割子串返回一個sub-OID。

>>> from pyasn1.type.univ import *
>>> internetId = ObjectIdentifier((1, 3, 6, 1))
>>> internetId
ObjectIdentifier('1.3.6.1')
>>> internetId[2]
6
>>> [ x for x in internetId ]
[1, 3, 6, 1]
>>> internetId + (2,)
ObjectIdentifier('1.3.6.1.2')
>>> internetId[1:3]
ObjectIdentifier('3.6')
>>> internetId[1] = 2
...
TypeError: object does not support item assignment

對象集合

可以將管理信息庫(MIB)視爲相關託管對象集合的正式描述,這些對象的值共同反映了某個託管實體中某些子系統的當前狀態。
這些值可以通過向託管節點的代理髮送SNMP消息,讓其執行,來查詢、修改,或者向管理實體報告。

比如,典型的對象,監控打印機上不同墨盒的狀態和可能打印文件袋 數量,再如,交換機上進出的流量以及丟包率或者廣播包數量。

每個託管設備都有一個存放 MIB中鍵對應值的數據庫,所以,可用數據實際上並不依賴數據庫,而是依賴於實現。重要的是,你得知道MIB不包含實際數據,只是定義數據模式,有點像數據庫模式。

爲了正確地組織MIB模塊和對象,所有產品的所有可管理特性都安排在這個MIB樹的結構中。每個MIB模塊和對象都由一個OID唯一標識。

SNMP的管理實體和託管實體都可以使用MIB信息。

  • 管理對象
    • 通過MIB對象名稱查詢OID
    • 將值轉換爲對應類型的MIB對象
    • humans read comments left by other humans
  • managed entity
    • 用代碼實現MIB對象
      從人類的角度看,MIB是一個ASN.1語言的子集語言編寫的文本文件。我們維護了一個9000+行的MIB模塊得到即刻,你可以將它應用在子集的項目中。

PySNMP將ASN.1 MIB文件轉換成Python模塊,然後SNMP引擎在運行時按需加載這些模塊。PySNMP MIB 模塊是通用的——相同的模塊可以被管理實體和託管實體使用。

MIB轉換由PySNMP自動執行,但是從技術上講,它是由PySNMP的兄弟項目PySMI來處理的。。但是,你也可以使用PySMI的mibdump.py工具手動執行上述轉換。

協議操作

SNMP是c/s模型的,管理和托實體組件都包含客戶端和服務器組件。客戶端和服務器都以name-value的形式交換數據。value是強類型的。

SNMP協議的核心就是協調SNMP所有組件工作的引擎啊!!!

協議操作

協議定義了兩種操作模式:

  • Request-preponse messages 請求-響應消息
  • Unsolicited messages 未響應消息

協議攜帶了SNMP消息。除了用於協議操作的頭信息外,管理信息還通過所謂的協議數據單元PDU來傳輸。SNMP尋址中定義了其中PDU類型,它們在概念上不同,由管理實體或託管實體分別執行。

  • Manager-to-agent
    • GetRequest, SetRequest, GetNextRequest, GetBulkRequest, InformRequest
  • Manager-to-manager
    • InformRequest, Response
  • Agent-to-manager
    • SNMPv2-Trap, Response

核心應用

RFC3413定義了一些標準的SNMP應用。
核心應用

PySNMP嚴格遵循RFCs及其抽象服務接口 來實現這些標準應用程序(通過本機SNMP API)。
這種方法的缺點是對於大多數SNMP任務來說過於詳細和冗長。爲了使SNMP易於使用,PySNMP引入了高級SNMP API——High-level SNMP API.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章