程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> TCP/IP學習筆記(7)

TCP/IP學習筆記(7)

編輯:關於VC++

一、SNMP:簡單網絡管理協議

基於TCP/IP的網絡管理包括兩部分:網絡管理站(manager)和被管理的網絡單元(被管設備)。這些被管設備的共同點就是都運行TCP/IP協議。管理進程和代理進程之間的通信有兩種方式,一種是管理進程向代理進程發出請求,詢問參數值,另一種方式是代理進程主動向管理進程報告某些重要的事件。

基於TCP/IP的網絡管理包含3個組成部分:

(1)一個管理信息庫(MIB)。管理信息庫包含所有代理進程的所有可被查詢和修改的參數。

(2)關於MIB的公用結構和表示符號,叫做管理信息結構SMI。例如:SMI定義計數器是一個非負整數,它的計數范圍是0-4294967295,當達到最大值後,又從0開始。

(3)管理進程和代理進程之間的通信協議,叫做簡單網絡管理協議SNMP。SNMP包括數據交換的格式等,主要采用UDP協議。

1、協議:SNMP定義了5種報文:

(1)get-request操作:從代理進程處提取一個或多個參數值。

(2)get-next-request操作:從代理進程處提取一個或多個參數的下一個參數值。

(3)set-request操作:設置代理進程的一個或多個參數值。

(4)get-response操作:由代理進程發出的一個或多個參數值。它是3種的響應操作。

(5)trap操作:代理進程主動發出的報文,通知管理進程由事情發生。

前面3個操作是由管理進程向代理進程發出的,後兩個是代理進程發給管理進程的。

說明:◆前4種操作是簡單的請求-應答方式,由於采用UDP協議,因此一定要有超時和重傳機制。

◆ 管理進程采用UDP的161端口,代理進程使用UDP的162端口,因此一個系統可以同時為管理進程和代理進程。

◆ 下面是UDP數據報5種操作的SNMP報文:

IP首部 UDP首部 版本0 共同體 PDU類型(0-3) 請求標識 差錯狀態(0-5) 差錯索引 名稱 值 名稱 值 ...

PDU類型4 企業 代理地址 Trap類型(0-6) 特定代碼 時間戳 名稱 值 ...

 

 

(1) SNMP報文的長度取決域變量的類型和值。

(2) 版本字段為0,表示為SNMP V1。

(3) PDU為協議數據單元,即分組。

PDU類型 名稱 0 Get-request 1 Get-next-request 2 Get-response 3 Set-request 4 Trap

(4) 共同體為一個字符串,這是管理進程和代理進程之間的口令,是明文格式,默認為public。

(5) 對於get、get-next和set操作,請求標識由管理進程設置,然後由代理進程在get-response中返回。這個字段的作用是使客戶進程(目前是管理進程)能夠將服務器進程(即代理進程)發出的響應和客戶進程發出的查詢進行匹配。這個字段允許管理進程對一個或多個代理進程發出多個請求,並且從返回的應答中分類。

(6) 差錯狀態字段是一個整數,由代理進程設置,指明有錯誤發生。

差錯狀態 名稱 描述 0 NoError 沒有錯誤 1 TooBig 代理進程無法把響應放在一個SNMP消息中發送 2 NoSuchName 操作一個不存在的變量 3 BadValue Set操作的值或語法有錯誤 4 ReadOnly 管理進程試圖改變一個只讀變量 5 genErr 其他錯誤

(7) 在get、get-next和set的請求數據報中,包含變量名稱和變量值的表,對於get和get-next操作,變量值部分被忽略。

2、管理信息結構SMI

(1) INTEGER:有些整形變量沒有范圍限制,有些整形變量定義為特殊的數值。

(2) OCTER STRING:0或多個8位字節,每個字節值在0-255之間。

(3) DisplayString:0或多個8位字節,每個字節必須是ASCII碼,所有該類型的變量不能超過255個字符。

(4) OBJECT IDENTIFIER:

(5) NULL:相關變量還沒有值。

(6) IPAddress:4字節的OCTER STRING,以網絡序表示的IP地址,每個字節代表IP地址的一個字段。

(7) PhyAddress:OCTER STRING類型,代表物理地址。

(8) Counter:非負整數,范圍為0-4294976295,達到最大後從0開始。

(9) Gauge:非負整數,范圍為0-4294976295,或增或減,達到最大值後鎖定,直到復位。

(10) TimeTicks:時間計數器,以0.01秒遞增,但是不同的變量可以有不同的遞增幅度,所以定義該類變量時必須指定遞增幅度。

(11) SEQUENCE:類似於結構,包括0個或多個元素。

(12) SEQUENCE OF:向量,其所有元素具有相同的類型。

3、對象標識符

對象標識是一種數據類型,它指明一種授權命名的對象。對象標識是一個整數序列,以點分隔。這些整數構成一個樹型結構,類似於DNS和文件系統。對象標識從頂部開始,頂部沒有標識,以root表示。所有的MIB變量都從1.3.6.1.2.1這個標識開始。樹上的每個節點還有文字名,例如1.3.6.1.2.1就和iso.org.dod.internet.memt.mib對應。

4、管理信息庫MIB

管理信息庫就是所有代理進程包含的,並且能夠被管理進程進行查詢和設置的信息的集合。UDP組中包含幾個變量和一個表格。變量為:udpInDatagram(1)、udpNoPorts(2)、udpInErrors(3)、udpOutDatagram(4),表格為udpTable(5)。

名稱 數據類型 R/W 描述 udpInDatagram Counter R UDP數據報輸入數 udpNoPorts Counter R 沒有發送到有效端口的UDP數據報個數 udpInErrors Counter R 接收到的有錯誤的UDP數據報個數 udpOutDatagram Counter R UDP數據報輸出數

在udpTable中有2個變量:

UDP監聽表,索引=<udpLocalAddress>.<udpLocalPort> 名稱 數據類型 R/W 描述 udpLocalAddress IpAddress R 監聽進程的本地IP地址,0.0.0.0代表接收任何接口的數據報 udpLocalPort [0..65535] R 監聽進程的本地端口號

5、實例標識

對MIB變量進行操作,必須對MIB的每個變量進行標識。只有葉子節點是可操作的SNMP沒法處理表格的一整行或一整列。

(1)簡單變量:

對於簡單變量的處理是通過在其對象標識後面添加".0"處理。例如對象標識是1.3.6.1.2.1.7.1,則實例標識是1.3.6.1.2.1.7.1.0。

(2)表格

每個MIB中的索引都包含一個以上的索引。對於UDP監聽表來說,MIB定義了包含兩個變量的聯合索引。假定UDP監聽表中有3行具體成員:

0.0.0.0 67

0.0.0.0 161

0.0.0.0 520

這表明系統將從端口67、161和520接收來自任何接口的UDP數據報。這三行數據處理後為:

行 對象標識 簡稱 值 1 1.3.6.1.2.1.7.5.1.1.0.0.0.0.67

 

1.3.6.1.2.1.7.5.1.2.0.0.0.0.67

UdpLocalAddress.0.0.0.0.67

 

UdpLocalPort.0.0.0.67

0.0.0.0

 

67

2 1.3.6.1.2.1.7.5.1.1.0.0.0.0. 161

 

1.3.6.1.2.1.7.5.1.2.0.0.0.0. 161

UdpLocalAddress.0.0.0.0. 161

 

UdpLocalPort.0.0.0. 161

0.0.0.0

 

161

3 1.3.6.1.2.1.7.5.1.1.0.0.0.0. 520

 

1.3.6.1.2.1.7.5.1.2.0.0.0.0. 520

UdpLocalAddress.0.0.0.0. 520

 

UdpLocalPort.0.0.0. 520

0.0.0.0

 

520

(3)字典式排序

MIB中按照對象標識進行排序有一個隱含規則,MIB表格是根據其對象標識按照字典的順序進行排序的。上面表格排序後如下所示:

行 對象標識 簡稱 值 1 1.3.6.1.2.1.7.5.1.1.0.0.0.0.67

 

1.3.6.1.2.1.7.5.1.1.0.0.0.0.161

1.3.6.1.2.1.7.5.1.1.0.0.0.0.520

UdpLocalAddress.0.0.0.0.67

 

UdpLocalAddress.0.0.0.0.161

UdpLocalAddress.0.0.0.0.520

0.0.0.0

 

0.0.0.0

0.0.0.0

2 1.3.6.1.2.1.7.5.1.2.0.0.0.0. 67

 

1.3.6.1.2.1.7.5.1.2.0.0.0.0. 161

1.3.6.1.2.1.7.5.1.2.0.0.0.0. 520

UdpLocalPort.0.0.0. 67

 

UdpLocalPort.0.0.0. 161

UdpLocalPort.0.0.0. 520

67

 

161

520

在表格中,一個給定變量的所有實例都在下個變量的所有實例之前顯示。這意味表格的操作順序是先行後列的。

表格中對行的排序和表格中索引的值有關。

6、管理信息庫MIB(2)

(1)system組:

system組包含7個變量,沒有表格,分別是:sysDescr、sysObjectID、sysUpTime、sysContact、sysName、sysLocation、sysServices。

(2)interface組

interface組只定義了一個簡單變量,是系統的接口數量。該組還有一個表格變量,有22列。

(3)at 組

at組是地址轉換組,在該組中僅有一個由3列組成的表格變量。

(4)ip組

ip組定義了很多簡單變量和3個表格變量(地址表、路由表、地址轉換表)。

(5)icmp組

icmp組包含4個普通計數器變量(ICMP報文的輸出和輸入數量以及ICMP差錯報文的輸入和輸出數量)和22個其他ICMP報文數量的計數器,11個輸出計數器,11個輸入計數器。

(6)tcp組

tcp組包含14個簡單變量,主要為TCP狀態。還包含1個表格變量,即TCP連接表。

7、Trap:

一共有6中trap PDU的格式,第7中類型是供應商自己定義的特殊類型。

二、Telnet:遠程登陸

Telnet是標准的提供遠程登陸功能的應用。它能夠運行在不同的操作系統的主機之間。Telnet通過客戶進程和服務器進程之間的選項協商機制,從而確定通信雙方可以提供的功能特性。

(1)Telnet客戶進程同時和終端客戶及TCP/IP協議模塊進行交互。通常我們所鍵入的任何信息的傳輸是通過TCP連接,連接的任何返回信息都輸出到終端上。

(2)Telnet服務器進程經常要和"偽終端設備"打交道。

(3)僅僅使用了一條TCP連接。

1、協議介紹:

一種通用字符終端叫網絡虛擬終端NVT,連接的客戶機和服務器,都必須把他們的物理終端和NVT進行相互轉換。不管客戶進程終端是什麼類型,操作系統必須把它轉換NVT格式,同時,不管服務器進程的終端是什麼類型,操作系統必須能夠將NVT格式轉換為終端所能夠接收的格式。

(1) NVT ASCII:

NVT ASCII代表7位的ASCII字符集,網間協議族都使用NVT ASCII ,每個7位的字符都以8位格式發送,最高位為0。行結束符以兩個字符CR(回車)和緊接著的LF(換行)這樣的序列表示以\r\n表示。單獨的一個CR表示為\r\0。

(2)Telnet命令:

命令以字節0xff開頭,後面的一個字節是命令字節。如果要發送數據255,就必須連續發送兩個255(設置選項才可以發送)。

名稱 代碼(10進制) 描述 EOF 236 文件結束符 SUSP 237 掛起當前進程 ABORT 238 異常終止進程 EOR 239 記錄結束符 SE 240 子選項結束 NOP 241 無操作 DM 242 數據標志 BRK 243 中斷 IP 244 中斷進程 AO 245 異常終止輸出 AYT 246 對方是否還在運行 EC 247 轉義字符 EL 248 刪除行 GA 249 繼續進行 SB 250 子選項開始 WILL 251 選項協商 WONT 252 選項協商 DO 253 選項協商 DONT 254 選項協商 IAC 255 數據字節255

(4)協商選項

Telnet連接雙方首先進行交互的信息是選項協商數據。選項協商是對稱的,也就是說任何一方都可以主動發送選項協商請求給對方。

◆ WILL:發送方將激活enable選項。

◆ DO:發送方想叫接收端激活選項

◆ WONT:發送方本身想禁止選項

◆ DON''T:發送方想讓接收端去禁止選項。

對於激活選項請求,有權同意或不同意。而對於使選項失效請求,必須同意。

選項協商需要3個字節,一個IAC字節(0xff),接著一個字節是 WILL、DO、WONT、DON''T四者之一,最後一個ID字節指明激活或禁止選項。

選項標識(10進制) 名稱 1 回顯 3 抑制繼續進行 5 狀態 6 定時標記 24 終端類型 31 窗口大小 32 終端速率 33 遠程流量控制 34 行方式 36 環境變量

(5)子選項協商

以指定終端類型為例。首先連接的一方發送3個字節的字符序列來請求激活該選項:<IAC,WILL,24>,如果收端同意,那麼響應數據就是<IAC,DO,24>,然後服務器進程再發送如下字符串<IAC,SB,24,1,IAC,SE>,該字符串詢問客戶進程的終端類型。SB是子選項協商的其實命令標記,24表示這是終端類型選項的子選項,1表示發送你的終端類型,子選項協商的結束命令標記也是IAC SE。如果終端類型是ibmpc,客戶的響應將是<IAC,SB,24,0, ''I'',''B'',''M'',''P'',''C'',IAC,SE>,其中0表示我的終端類型是。

(6)半雙工、一次一字符、一次一行或行方式

◆ 半雙工:NVT默認是一個半雙工設備,在接收用戶輸入之前,它必須從服務器進程獲得GA命令。用戶的輸入在本地回顯,方向是從NVT鍵到NVT打印機,所以客戶進程到服務器進程只能發送整行的數據。

◆ 一次一字符:每一個鍵入的字符都單獨發送到服務器進程,服務器進程回顯大多數的字符。

◆ 一次一行:准行方式,帶遠程回顯的一次一個字符。

◆ 行方式:客戶進程和服務器進程協商確定。

(7)同步信號

Telnet以Data Mark(DM)命令作為同步信號,該同步信號是以TCP緊急數據形式發送的。DM命令是隨數據流傳輸的同步標記,它告訴收端回到正常的處理進程上來。當一端收到隨訪已進入緊急方式的通知後,它將開始讀數據,一邊讀一邊丟棄數據,直到讀到Telnet命令緊急數據的最後一個字節就是DM字節。

(8)客戶的轉義符號

Telnet客戶進程也可以使客戶直接和客戶進程進行交互,而不是發送到服務器進程。通常客戶的轉義字符是Ctrl+],這使得客戶顯示它的提示符,通常是telnet>。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved