1.1.3 NetBIOS编程基础(1)
1.1.3? NetBIOS編程基礎(1)
NetBIOS是用于網絡的基本輸入/輸出系統,是一個應用程序接口,用于源與目的地之間的交換,即能夠支持計算機應用程序與設備通信時要用到的各種具有明確而簡單的通信協議,必須用特殊的命令序列來調用NetBIOS。
在參考層次模型中,NetBIOS處于表示層和會話層之間,是參考模型的高層。因此其接口程序的應用在很大程度上(并且從本質上)與較低層次的各種活動隔離開。它支持IEEE 802.2的邏輯鏈路控制協議。現在NetBIOS正迅速地成為不同操作系統環境下普遍使用的通信平臺,這些操作系統包括PC DOS、OS/2、Unix和Windows。
1. 處理過程
NetBIOS提供會話服務的建立過程如下。
(1)?建立會話
該過程類似于C/S模式中的連接建立過程,在此不再討論。需注意的是,NetBIOS的Client方是采用Call呼叫對方,而不是Connect。
(2)?傳送數據
因為NetBIOS的會話服務是以雙工流的形式實現的,因此會話雙方(或多方)均可以同時發送或接收數據,而無須考慮對方的狀態。
NetBIOS的命令發送支持兩種模式,一種是send,其數據塊最大長度為64KB,且位于連續的內存空間;另一種則是chain send命令。顧名思義,它是以多個緩沖區(兩個)提供發送數據的,因此該命令一次可最大傳送64KB×2的數據。與此對應的NetBIOS接收命令有如下3種。
receive:它以建立會話時所獲得的唯一標識對方的會話號為句柄接收數據。
receive any:該命令可從一個name建立的多個會話上取得數據。
receive any-any:它可從任何會話上接收任何數據。
(3)?終止會話
當會話一方發出hang up命令后,即可終止對話,并釋放相應的資源。
2. NetBIOS命令
NetBIOS作為一種接口,擁有許多實現某些功能的接口。最為常用的NetBIOS命令如表1-3所示。
表1-3? NetBIOS命令一覽表
| 類? 別 | 命? 令 | 命令代碼 | 功能說明 | |
| wait | no wait | |||
| 名字管理 | add name add group name delete name | 30h 36h 31h | b0h b6h b1h | 增加本地唯一名 增加本地小組名 刪除本地名字 |
| 數據報服務 | send datagram send broadcast receive datagram receive broadcast | 20h 22h 21h 23h | a0h a2h a2h a3h | 發送數據報 發送廣播數據報 接收數據報 接收廣播數據報 |
| 會話服務 | call listen send chain send send no-ack chain send no-ack receive receive any hang up | 10h 11h 14h 17h 71h 72h 15h 16h 12h | 90h 91h 94h 97h f1h f2h 95h 96h 92h | 呼叫建立會話 偵聽建立會話 按會話號發送數據 按會話號發送數據,不應答 發送雙緩沖數據,不應答 按會話號接收數據 從任意會話號上接收數據 拆除當前會話 |
| 一般命令 | repeat adapter status session status cancel unlink | 32h 33h 34h 35h 70h | ? b3h b4h | 初始化網絡適配器 讀取網絡適配器狀態 按名字讀取當前會話狀態 撤消一個NetBIOS命令 斷開遠程連接 |
1.1.3? NetBIOS編程基礎(2)
3. NetBIOS名字解析
由于NetBIOS是一種與TCP/IP獨立發展的標準,雖然它可以使用TCP/IP作為傳輸協議,但是由于概念上的不同,它并沒有利用TCP/IP提供的全部能力,而是使用自己的方式來完成類似的工作。其中最大的區別在于名字解析方式上。NetBIOS具備自己獨立的名字解析概念和能力,因此它使用的名字解析方式就與TCP/IP 中標準解析方式--DNS不同。在必須經過NetBIOS名字解析獲得相應的IP地址之后,NetBIOS會話就可以建立在普通TCP連接的基礎上了。所以在NetBIOS中,名字解析是NetBIOS會話與普通TCP 連接最大的不同之處。
NetBIOS名字解析與DNS名字解析的最大不同在于NetBIOS是動態的,計算機需要首先注冊自己的名字,然后才能解析到該名字。動態解析雖然帶來很大的方便性,但卻復雜和低效得多,因此只能用于小范圍的局域網中。
每個NetBIOS的名字可以多達16個字符,第16個字符用來標識輸入名字時使用的程序類型。當NetBIOS的計算機進行通信時,它必須基于NetBIOS名字,而不能基于IP地址。一個NetBIOS服務程序必須首先注冊自己的NetBIOS名字,而一個應用程序則需要查詢所需要的NetBIOS名字。例如,每臺Windows計算機在啟動之后初始化網絡時就使用所配置的計算機名字來初始化其使用的NetBIOS名字。
(1)?NetBIOS名字解析方式
從NetBIOS名字查找相應的節點地址(TCP/IP協議中為IP地址)有如下幾種不同的查找方式。
本地廣播:在本地網絡上發送廣播,通過廣播某設備的NetBIOS名字,查找其對應的IP地址。廣播方式也能用于注冊自己的NetBIOS名字,例如,一臺計算機可以通過廣播本機的名字,向其他計算機宣告自己使用了這個NetBIOS名字。
緩沖:每個支持NetBIOS的計算機中,維護一個NetBIOS名字和相應IP地址的列表,這些對應的名字都有一定的生存期,以便能及時更新。
NetBIOS名字服務器:使用一個名字服務器來提供名字與IP之間的解析任務,這個NetBIOS名字服務器被稱為NBNS(NetBIOS Name Server),Microsoft實現的NBNS名字服務器為WINS(Windows Internet Name Service)。NetBIOS計算機首先要向NBNS登記自己的NetBIOS名字,完成名字的注冊過程。
預定義文件lmhosts:Microsoft Windows能通過查找存放在本地文件lmhosts中的數據,來識別網絡上NetBIOS名字和IP的關系,這個方式不是NetBIOS名字識別的標準,但它是Microsoft的實現方式,因此是一種事實標準。
通過DNS和hosts文件解析:DNS服務器和本地hosts文件中存放的數據是用于標準TCP/IP協議中名字和IP之間轉換使用的方式,但使用其他方式查找不出對應的節點地址時,Microsoft Windows中通常也能通過標準的TCP/IP名字解析方式,進行名字和IP的轉換。同樣這也不是NetBIOS的標準,而是Microsoft的擴展。
從上述5種NetBIOS識別方式,以及其中的不同的名字注冊方式出發,可以實現不同的組合方式,從而構成了不同的名字識別策略。在NetBIOS標準中,將使用不同名字識別策略的模式稱為不同的NetBIOS節點類型。
B-node:通過廣播方式來進行注冊和識別NetBIOS名字。對于IP協議上的Net BIOS,就需要基于UDP進行廣播,在小網絡上這種方式工作得很好,但當網絡增大時,就會被使用路由器將大網絡分割為幾個小網。在一般情況下路由器不轉發廣播數據,廣播包僅發送到本地網絡。雖然可以配置路由器進行b-node廣播轉發,但是這將使UDP廣播產生大量的無用網絡數據,且名字注冊和解析的難度也增加了。因此對于較大的網絡,這種方式不可取。
P-node(peer-to-peer):對等方式能為識別名字提供非常有效的方法,它使用 NetBIOS名字服務器進行名字的注冊登記和名字識別。因此對于每個NetBIOS計算機,必須指定同樣的NBNS服務器的IP地址。這樣在NBNS服務器停機或更改了設置(如IP地址等)的情況下,名字解析不能完成,就不能進行NetBIOS通信。當然NetBIOS計算機可以配置為使用多個NBNS服務器,以便在其中一個出現問題時使用備份的服務器。
M-node(Mixed):為了正確解析NetBIOS名字,最好綜合使用廣播和名字服務器的方式,這樣的名字識別是一個復合的過程。M-node首先通過B-node廣播方式進行名字識別過程,當廣播方式失敗之后,再使用P-node方式進行查詢。
H-Node(Hybrid):H-node模式也是一種復合模式,它與M-node不同的地方是查找的順序不同。H-node先查找NBNS名字服務器,然后再使用廣播方式進行查詢。
Windows中實際使用的名字識別方式是對標準H-node方式的擴展,Windows系列的計算機將首先檢查緩存中的內容,然后再查看WINS服務器,之后進行廣播,然后將查找lmhosts文件,以及通過hosts和DNS進行查找。實際進行NetBIOS識別是一個復雜的過程,主要就是由于NetBIOS是一個動態的名字解析方式,每一臺計算機都必須注冊自身。
(2)?NetBIOS名字識別的過程
與DNS不同,NetBIOS名字使用動態方式進行管理。DNS數據是靜態的,增加和刪除DNS名字需要管理員手工更改配置文件。但NetBIOS要求計算機在網絡上自動注冊其名字,計算機停機之后占用的名字會被釋放,這個過程不需要管理員干預。因為它需要額外的網絡數據以完成名字登記等過程,使得它不適合像Internet這樣的大型網絡。
NetBIOS名字識別需要經過如下3個步驟。
①?名字注冊:在NetBIOS啟動時,計算機向整個網絡聲明占用了一個NetBIOS名字,如果已經有其他計算機占用了這個名字,這臺計算機就會收到錯誤信息。注冊是通過向網絡廣播聲明信息或向NetBIOS名字服務器登記的方式來實現的。
②?名字解析:通過廣播或查詢NetBIOS名字服務器來解析一個NetBIOS名字。此外還可以通過lmhosts文件和DNS輔助解析名字。
1.1.3? NetBIOS編程基礎(3)
③?名字刪除:系統關機或提供的工作站服務結束時,會刪除其占用的NetBIOS名。
通過NetBIOS名字和共享的目錄名,就能夠定位Windows計算機上的資源。Microsoft使用UNC的形式來確定一個網絡資源的位置,一個UNC以雙反斜線開始,接下來是提供資源計算機的NetBIOS名字,然后是該臺計算機上提供資源的共享名,接下來就是下面的目錄和文件名。如\\ntserver\share\files。
因此使用一個資源的命令格式如下所示:
?
(3)?名字服務器的工作原理
由于B-node廣播會在網絡上產生大量的信息流,尤其是在網絡是由多個子網構成的時候,而使用路由器本來就是要隔離廣播信息,可是為了進行名字解析,就不得不轉發B-node廣播信息包,這就達不到縮減無用網絡流量的目的。
使用名字服務器進行解析就能避免這個問題,客戶通過對名字服務器進行查詢而非廣播,信息流就不必傳播到各個子網上,就能減少廣播數據,減輕網絡的負擔,節省帶寬,并且能有效地提高名字解析的速度及準確性。
實際存在的Windows網絡甚至很少利用名字服務器進行名字解析,這就使得這些網絡名字解析存在很大問題,常常會出現不同計算機的網絡鄰居列表不同,根本原因就是廣播方式是沒有保證的,必須轉向名字服務器方式才能解決名字解析問題。
當普通NetBIOS計算機和NBNS服務器進行通信時,有如下4個不同的通信過程。
名字注冊:每臺NetBIOS計算機啟動時,都在名字服務器上注冊。這樣就保持了數據庫的自動更新,并具備動態更新的特性。名字服務器將返回確認信息,以及這個名字的生存期TTL。如果客戶要求的名字已經被占用了,服務器就查詢占用這個名字的客戶是否還在網絡上,以判斷這個名字是否可以再次被使用。這種情況主要發生在Windows計算機死機后重新登記的過程中,因為此時在計算機死機之前,它在名字服務器中登記的名字還存在,如果名字服務器簡單地拒絕提供 名字,那么這個計算機就無法再次獲得自己的名字。只有在真正發生沖突的情況下,客戶的名字注冊才會失敗。
名字更新:由于每個名字都存在一個生存期TTL,那么當經歷了這個TTL一半的時候,客戶會向服務器進行更新請求,刷新服務器上的TTL設置。
名字釋放:客戶停機時會與服務器通信釋放其占用的NetBIOS名字,其名字TTL超時也會使得服務器釋放這個名字。
名字識別:客戶可以向NBNS服務器發送查詢名字的請求,進行名字解析。
在某些情況下,客戶沒有設置支持名字服務器,或者使用的客戶軟件還不支持名字服務器進行解析,可以通過設置一個 WINS代理,由它來在廣播數據和查詢名字服務器之間進行轉換,它可以幫助客戶注冊并回應客戶的廣播查詢。
4. 何謂NetBEUI
NetBEUI是網絡操作系統使用的NetBIOS協議的加強版本。它規范了在NetBIOS中未標準化的傳輸幀,還加了額外的功能。傳輸層驅動器經常被Microsoft LAN Manager(微軟局域網管理器)使用。
NetBEUI執行OSI LLC2協議。NetBEUI是原始的PC網絡協議和IBM為LanManager(局域網管理器)服務器設計的接口。本協議稍后被微軟采用,作為它們的網絡產品的標準。它規定了高層軟件通過NetBIOS幀協議發送、接收信息的方法。本協議運行在標準802.2數據鏈協議層上。
5. NetBIOS范圍
NetBIOS范圍ID為建立在TCP/IP(叫做NBT)模塊上的NetBIOS提供額外的命名服務。NetBIOS范圍ID的主要目的是隔離單個網絡上的NetBIOS通信和那些有相同NetBIOS范圍ID的節點。NetBIOS范圍ID是附加在NetBIOS名稱上的字符串。兩個主機上的 NetBIOS范圍ID必須匹配,否則兩主機無法通信。NetBIOS范圍ID允許計算機使用相同的計算機名,不同的范圍ID。范圍ID是NetBIOS名稱的一部分,使名稱唯一。
6. NetBIOS控制塊
NetBIOS控制塊(NCB)是所有NetBIOS應用程序訪問NetBIOS服務時都要用到的一個程序設計結構,并且是唯一的一個。設備驅動程序也使用類似的結構。NetBIOS控制塊的定義結構如下:
?
?
轉載于:https://www.cnblogs.com/For-her/p/3939045.html
總結
以上是生活随笔為你收集整理的1.1.3 NetBIOS编程基础(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是cmd?常见的cmd命令 cd、m
- 下一篇: NB-IoT和GSM概述