簡單網路管理協議(snmp)是目前在計算機網路中用得最廣泛的網路管理協議,它使用asn.1(abstract syntax notation one)來定義snmp報文格式和mib(management information base)變數的名稱。
asn.1是一種描述資料和資料特徵的正式語言,它和資料的儲存及編碼無關。根據asn.1標準定義,資料型別分為:簡單資料型別: boolean、null、integer、real、octerstring、object identifier、ipaddress、time ticks等。構造資料型別:sequence、sequence of set、set ofchoice等。構造資料型別提供一種或多種簡單資料型別進行復合的方法。
基本編碼規則ber
在具體系統中,我們需要用具體的編碼規則將asn.1語法表示的抽象資料轉換成具體的位元流。
snmp
使用的編碼方法是ber(basic encoding rule)。ber的資料都由三個域構成:標識域(tag)+長
度域(length)+值域(value)。
標識域
標識域指明資料的型別,占用1個位元組,常見的
型別有:
bool(0x01);
int(0x02);
octstr(0x04);
null(0x05);
objid(0x06);
enum(0x0a);
seq(0x30);
setof(0x31);
ipaddr (0x40);
counter (0x41);
gauge(0x42);
timeticks(0x43);
opaque(0x44);
get(0xa0);
getnext(0xa1);
getresp(0xa2);
set(0xa3);
trap(0xa4);
長度域長度域指明值域的長度,不定長,一般為一到三個位元組。其格式可分為短格式和長格式.長度域採用短/長指示器(short/long form)來標明長度指示符是否是單個位元組,指示器在bit8上。如果短/長指示器是0,則為短限定格式,低7位包含的就是資料的長度值,長度值在0到127之間;如果短/長指示器是1,則為長限定格式,其低7位的值表示後面緊跟的長度指示值的位元組數,而後續位元組拼接起來的值就是資料字段的長度,即資料長度。例:
length:30 => 1e
length:169 => 81 a9
length:1500 => 82 05 dc 值域
值域儲存的是資料的實際編碼。雖然asn.1定義了很多資料型別,但大多數型別可由整形、物件標
識、空、串等基本資料型別和sequence構造型別表示。例如有符號整數和無符號整數、timeticks、gauge、counter統一用整數表示。
整型integer
integer::=0x02 length *
(*表示重複)
整型資料值域用補碼表示,去掉多餘的零(正數)或一(負數)。值域最高位為符號位。例:
1500 => 02 02 05 dc
-1500 => 02 02 fa 24
物件標識objectid
snmp伺服器維護的所有管理資訊庫(mib)物件採用objectid表示,如,1.3.6.1.2.1.1.1表示mib庫
中的裝置描述sysdesc變數,其編碼規則如下:
objectid::=0x06 length *
(1)
subidentifier::=* lastbyte (2)
leadingbyte::=1 7bitvalue (3)
lastbyte::=0 7bitvalue (4)
首兩個id被合併為乙個位元組x*40+y (5)
雖然規則很多,但由於大多數子物件標識在0~127,只需按規則(1)、(5)即可;當子物件標識大於127,則按規則(2)、(3)、(4)將其分解為多個位元組,最後乙個位元組的高位為零,其餘位元組的高位為一。
如:1.3.6.1.810.1,根據規則(5),首兩個子物件
標識1.3被合併為2b(1*40+3=43);子物件標識810超過127 ,根據規則(2)、(3)、(4)將其拆分為兩個
位元組86 2a(810=11 0010 1010 ==> 1000 0110 00101010);整個mib被編碼為:0x06 0x06 0x2b 0x06 0x010x86 0x2a 0x01。
sequence
組合型別
sequence::=0x30 length *
如:30 05 02 01 10 05 00表示乙個sequence結構,內含兩個成員,其中乙個為整型,另乙個為空型別(null)。
其它型別
null::=0x05 0x00
string::=0x04 length *
snmp報文
snmp報文格式
snmp共有五種報文,分別為get_request(0xa0)、get_next_request(0xa1)、get_response(0xa2)、set_request(0xa3)和trap(0xa4),其結構如下:
snmp_message::=sequence
pdu::=sequence
**自網路)
SNMP報文格式分析
snmp定義了在客戶和伺服器之間交換的snmp報文的語法和語義。它使用asn.1 抽象語言 abstract syntax notation one 來定義snmp報文格式和mib變數的名稱。因此與絕大多數udp協議不同,snmp報文不含固定字段,也不能用固定的結構來定義。在iso osi參考模型中...
HTTP協議報文格式
接下來我們看看http協議 hypertext transfer protocol 超文字傳輸協議 瀏覽器端 客戶端 向web伺服器端訪問頁面的過程和http協議報文的格式。基於http協議的客戶機訪問包括4個過程,分別是建立tcp套接字連線 傳送http請求報文 接收http應答報文和關閉tcp套...
HTTP協議報文格式
http協議 hypertext transfer protocol 超文字傳輸協議 瀏覽器端 客戶端 向web伺服器端訪問頁面的過程和http協議報文的格式。基於http協議的客戶機訪問包括4個過程,分別是建立tcp套接字連線 傳送http請求報文 接收http應答報文和關閉tcp套接字連線 1....