| |||||||
|
|||||||
由于網路的迅猛發展﹐出現了許多供網路使用的軟體和硬體﹐為了讓它們都能夠有效的溝通﹐我們需要建立一些規則。 在這一章裡面﹐我會向大家介紹目前比較通用的網路通訊協定﹐和模擬數據是如何的從一個節點傳送到另一個節點﹐從功能上面看看通訊協定的定義。 何為通訊協定﹖ 一個比較好理解的講法是﹕通訊協定就是一些標準和規則。例如﹐電話響起來的時候﹐為什麼接電話的人先說“喂~”﹐而不是打電話的人先介紹自己呢﹖我們可以說習慣上如此﹐那麼這個習慣行為就是回答電話的通訊協定了。當然﹐您和您親愛的或許不是這樣接電話的﹐那麼您們使用的就是另一套協定了。 如果節點A要將一個packet送給節點B﹐它們就必須使用相同的通訊協定。 LAN的工作就是幫助應用程式利用網路獲得、管理、和安排數據。每一個節點都通過一張網路卡(NIC, Network Interface Card)連接到網路﹐再由此和其它的節點溝通。在每一個獨立的工作站上面﹐已經安裝了一些應用程式﹐如Word、Excel等。這些程式如果想使用網路上面的資源﹐比如在伺服器上面的數據、網路印表機、電子郵箱等等﹐會使用網路軟體(network software)去和NIC溝通﹐然後NIC再和網路上的其它節點溝通。所有這些信息都要經過轉換﹐就必須要使用通訊協定來確保所有這些參與者﹐能夠彼此理解對方和進行有效的溝通。 正如您所見到的﹐在節點與節點之間﹐最先的交流是在NIC的層次上。當數據從一個節點通過NIC傳送到另一個節點之後﹐數據再從NIC傳送到網路軟體。而這個網路軟體就是我們所說的傳輸通訊協定(Transport protocol)了﹐在雙方的機器上都會有這些transport protocol。對於這個網路軟體﹐我們可以從好些不同的角度去理解﹐不過我們可以簡單的從三個層次去看﹕ 第一﹐也是最容易的理解的﹐就是NIC的驅動程式。 它負責處理網路卡和傳輸協定之間的溝通。網路卡的廠家都會提供一支驅動程式讓您使用一些特定的協定﹐您可以使用同一張卡來供不同的作業系統使用。只要這張網卡在“物理”上是兼容的﹐那你就可以在作業系統上面使用了﹐當然﹐您不能將Ethernet網路卡當Token Ring來使用啦。也就是說﹐您大可不必只依賴一個牌子的廠家。 我們也知道要讓網路卡工作﹐除了要使用正確的驅動程式之外﹐您還得要確定IRQ和IO要正確。另外﹐在網路卡上面﹐還有一個由12個十六進位數字組成的48bit的物理地址(Physical Address)﹐也叫MAC(Media Access Control) Address或 Node ID﹐等名稱﹐相信我們前面也聽過數次了。這個地址其實分為兩個部份﹐前面六個數字為Manufacture ID﹐也就是廠家ID﹔而後面的六個才是Card ID。如果我們見到一張卡的MAC地址是﹕02608C67CD54﹐那麼我們可以知道這張卡是3Com的﹐因為02608C就是3Com的ID。 然後﹐基于這個物理地址﹐我們就可以把邏輯地址設定於其上了。物理地址我們是無法更改的﹐而且您也很難找到兩張相同物理地址的網路卡﹔但邏輯地址則是由網路管理者設定。就好比您不能將公司門牌給改了﹐但您喜歡給您的公司起什麼名字都可以﹐只要不會和其它公司搞混了就行。 如果使用不同的傳輸協定﹐邏輯地址的格式也不相同(後面我們會就會講到這問題了)。但無論是物理地址還是邏輯地址﹐要在網路上面溝通的話﹐就必須不同﹐否則就是所謂的地址衝突啦。 下面我們以IPX為例子認識一下邏輯地址﹕
第二。在網路處理程式的另一端﹐有一個軟體叫重導向(Redirector)。 我們知道在單機作業模式下﹐當程式呼叫檔案IO的時候﹐會由作業系統接管這個請求﹐然後再傳給BIOS﹐再到硬體那裡。如果當程式呼叫的檔案IO為網路地址的時候﹐那麼redirector就會接管這個請求﹐而重新導向到網路上面去﹐把請求交給對方機器。 例如﹐當您使用Word的之後﹐要開啟一個在網路磁碟上面的檔案﹐將會如何呢﹖從Word的角度去看﹐它根本不知道有網路這回事﹐它只知道有一個和多個像A﹕、B﹕、C﹕這樣的磁碟。就像您吃麥當勞的時候﹐您不用知道漢堡包是怎樣製作出來的﹐您只需知道魚柳包、雞柳包和拿到什麼樣的Kitty貓就是了。Word在設計上並不是應用於非本地磁碟上的﹐當要使用存儲在網路上面的數據的時候﹐就必須有一種軟體能夠以磁碟代號的形式告訴Word才行。所以﹐如果您告訴Word去一個在叫FILESER1的伺服器之DOC目錄下面找檔案﹐那麼redirector軟體就會接管這個請求了。 ![]() 在網路世界中﹐有許多種這樣的file system﹐最出名的有 Novell的 NetWare File System、Unix網路的Network File System (NFS)、以及Microsoft 的New Technology File System (NTFS)。在client端的redirector必須要和在server上面的file system兼容(使用相同的協定)﹐否則client也只能望洋興嘆而已。 第三。終于來到這章的戲肉了﹗出場的就是通訊協定﹐也就是節點和節點之間在網路上搬運數據的方法。 我之所以將這三個層次的中間部份留在現在才說﹐是因為它是最抽象的。您或許可以這樣想象﹕NIC驅動程式負責和NIC之間的溝通且儘力討其歡心﹔在client上面的redirector和在server上面的mounter﹐則和程式溝通﹐也極盡體貼之能事﹔然後通訊協定﹐則出盡法寶綴合NIC驅動程式和redirector(或mounter)﹐並建立起網路通訊的交通規則。 正如前述﹐通訊協定只是一些標準和規則而已﹐而這些規則令到交流的融合性得以標準化。就如我們不能離開一些經已認同的規矩去使用電話一樣﹐我們的網路也需要一些共同的溝通語言﹐才能讓所有機器相互交流而不至于混亂。 LAN和LAN之間的通訊也一樣需要一些網路語言﹐所以它們都需要有語言大師的本領才行。事實上﹐網路語言有多種多樣﹐由于它們在設計之初只為了應付不同的工作﹐而且它們大部份都從來不考慮要和其它網路兼容的。傳輸協定雖然可說琳琅滿目﹐然而不幸得很﹐各自的廠商都有各自的一套偏好。但又非常幸運的是﹕大部份新的網路作業程式都支持超過一種協定﹐可以和不同的作業系統溝通﹐比起以前獨沽一味的情形的確容易多了。 下面我們就淺略的瀏覽一些您將會在網路上運用到的通訊協定。 NetBEUI 讓我們回到IBM最初進軍個人電腦網路的時代﹐他們當時的確需要一個很基本的網路通訊協定﹐但他們並不打算用此來建構大型網路﹐僅僅供數十台電腦甚至更小的網路而已。基于這個訴求﹐就誕生了Network Basic Input/Output System﹐或稱NetBIOS。 NetBIOS其實只有18個命令(command)來讓網路的電腦能夠建立、維持、和使用連接服務。不過IBM在不久後又再推出了NetBIOS的延伸版本﹕NetBIOS Extened User Interface﹐或稱NetBEUI﹐基本上是NetBIOS的改良版本而已。然而﹐NetBIOS和NetBEUI終究是不同的﹕NetBEUI事實上可以說是一個傳輸協定﹐而NetBIOS充其量只是一組命令來讓系統可以使用網路而已﹐在技術角度來看﹐它是一個Application Program Interface (API)。 NetBEUI可以算是您能夠用到的最快通訊協定了。這個“最快”是指它可以將格式化資料放進封包裡面﹐而接收節點又可以迅速的解讀到內容。然而﹐NetBEUI卻有一個最致命的弱點﹕它不是可路由(routable)協定﹐也就是不能夠和其它網路的機器對講。NetBEUI在本地網路裡面是非常優秀的協定﹐但如果您想和設在其它網路的機器溝通﹐NetBEUI就不是您所需要的了。如果您想實現和其它網路的電腦溝通﹐您極有可能必需通過路由設備或路由軟體來實現﹐但無論用哪一樣﹐很遺憾﹐NetBEUI都做不到。 不過﹐Microsoft 網路則運用一種叫 NetBIOS over IP 的技術﹐來連接不同網路的 NetBEUI 客戶。但歸根結底﹐用來達成路由的不是 NetBIOS 而是 TCP/IP﹐也就是下一個要介紹的協定。 TCP/IP 美國國防部開發的 Transmission Control Protocol / Internet Protocol (TCP/IP)﹐當初是用來配合ARPANET (Advanced Research Projects Agency Net)來處理不同硬體之間的連接問題的﹐比如Sun系統和Mainframe、Mainframe和個人電腦之間的連接。 Internet Protocol (IP)工作於網路層(以後會繼續和大家探討 OSI 的網路層級)﹐它提供了一套標準讓不同的網路有規則可循﹐當然﹐前提是您想使用IP從一個網路將封包路由到另一個網路。IP在設計上是用來在LAN和LAN及PC和PC之間進行傳輸的。 您可以把IP看成是游戲規則﹐而TCP則用來詮釋這些規則的。雖然TCP/IP原先是專門為幾所大學和機構的使用而設計的﹐但現在TCP/IP已經成為最流行的通訊協定了﹐我們使用的Internet就是用TCP/IP來傳送封包的了。下面就讓我們看看TCP/IP是怎樣工作的﹕ 假如您的公司在好些地方都有分公司﹐各自都有著自己的本地網路(LAN)﹐在總公司跑的是Novell網路﹐但分公司大部份都是用麥金塔電腦。當Mac有數據要傳送給PC的時候將會如何呢﹖ 首先﹐TCP會在這兩個平臺建立起一個可以提供全雙工檢錯(對雙向的數據都進行錯誤檢測)的連接。 接著﹐IP制定好溝通規則以及Mac和PC之間的連接port。到這裡為止﹐TCP已經準備好數據了﹐如果數據太大﹐IP就將之分拆成幾份較小的封包﹐並且在封包上面加上一個新的header(轉送地址)﹐確保封包會被正確傳送。TCP還會加上標籤說明數據的種類及其長度。 再下來﹐IP將封包轉換成標準的編碼格式並將之傳送給PC。 最後﹐在PC上面的TCP將封包解碼並翻譯成PC能夠懂的格式﹐也就是它自己所使用的網路協定。您可以從下圖看到這個過程﹕ ![]() 由於TCP/IP在設計上可供多種硬體部件使用﹐所以它是一個可路由協定。 DLC Data Link Control協定﹐為國際標準IEEE802.2協定﹐它的使用主要基於兩個原因﹕ 第一﹐許多Token Ring網路是使用DLC 來讓PC工作站和mainframe網關(gateway)溝通的。如果您使用Token Ring而且在CONFIG.SYS裡面又有三個裝置驅動程式是以DXM開頭的﹐那您就是使用DLC 驅動程式了。 第二﹐如果您有一些網路印表機本身直接通過JetDirect網卡連上網路的﹐那麼您或許需要DLC 來控制印表機了。 IPX/SPX Internetwork Packet Exchange (IPX) 是一個Novell協定﹐可以在網路設備之間建立、維持和終止通訊連接﹐他既負責數據的傳出﹐也負責傳入。當數據抵達的時候﹐IPX會讀取數據的地址﹐和將之搬運到網路伺服器或工作站的正確地方。如果伺服器或工作站需要送出數據﹐IPX則會確定好數據封包地址﹐然後再通過網路路由出去。 Sequenced Packet Exchange (SPX) 協定則是用來控制網路處理過程﹐諸如處理丟失封包或其它狀況。 雖然IPX和SPX都是屬于Novell的﹐但他們的使用並不限制於Novell網路。作為一個傳輸協定﹐IPX/SPX可以被用在許多不同的硬體上面﹐所以IPX/SPX也是一個可路由協定。 多種傳輸堆疊(Multiple Transport Stack) 到現在﹐有兩件事情是最明顯不過的﹕首先﹐沒有任何一個協定說得上是最好的﹔其次﹐您或者很想將上面所說的四個協定全跑上﹐而好消息是﹕您可以這樣做﹗ 現行網路模式是可以支持多傳輸協定的﹐我們稱之為協定堆疊(protocol stack)。比如﹐您可以在client機器上面安裝多個協定﹐而server機器卻只裝一個協定。如果您的client同時連接好幾個server﹐這完全是可能的﹕IPX可以和Novell server溝通、DLC可以讓工作站和mainframe gateway對講、和TCP/IP可以使用Internet mail路由、等等。 但要令到以上這些協定同時工作﹐我們還需要用一個方法將網路卡和協定堆疊連接在一起﹐也就是將網路傳輸層和網路卡驅動程式捆綁(bind)在一起﹐即在NIC driver和transport stack之間建立一個軟體連接﹐這樣在它們之間就需要一個很重要的標準界面了。 通常有兩個競爭者在爭拼這一戰場﹕Novell的ODI和Mircosoft的NDIS。下面我們就探討一下網路捆綁界面和應用程式界面是如何工作的。 網路捆綁界面 (NBI) 由於網路卡驅動程式的不足﹐您還必需額外的軟體來令到通訊協定工作﹐因為NIC driver在設計上只會和一個協定對講﹕IPX/SPX或NetBEUI或TCP/IP。這時﹐ Network Binding Interface (NBI)就派得上用場了﹐NBI 可以提供一個共同的前端接面給設備驅動程式﹐Open Datalink Interface (ODI) 和 Network Driver Interface Specification (NDIS)都可以做到這點。這樣﹐NIC driver就無需再直接和什麼IPX、TCP/IP或NetBEUI之類的協定打交到了﹐它只需要一個ODI 或 NDIS 界面就可以了﹐它們可以將這些協定“翻譯”給NIC 聽。 我們可以從下圖看看client和server的傳輸過程中﹐網路軟體中各組件之間的關係﹕ ![]() 網路應用程式界面 (API) 正如您在上面所讀到的﹐大多數應用程式其實都不為意到網路的存在。不過﹐有些程式﹐如果e-mail或群組程式﹐是必須認知到網路﹐更可以說﹐它們是應網路而生的。它們要能夠“插入”到網路中﹐並和其它在網路機器上面跑的程式溝通。程式設計者建立的網路應用程式﹐都要適應於網路給應用程式的一套指令﹐這些指令就是所謂的 API 了。 如果您懂得開汽車的話﹐您一定知道當初學開車的時候是先學如果踏油門、如何踩煞車、如何轉向等基本動作。我們可以將這些動作看成是一些“原始命令”﹐通過這些命令我們就可以做出將汽車倒出車庫然後開到目的地﹐雖然學車的時候是沒有諸如“倒出車庫”的動作。那麼我們就可以將API當成是那些學車的“基本動作”的操作界面。 在那些網路服務中﹐比如redirector﹐可以居於各種不同的傳輸協定之上﹐如果沒有API﹐您的網路軟體程式就要開發一個redirector程式來接通IPX/SPX﹐又要另外一個redirector程式接通TCP/IP了。其實來來去去都是同一個redirector﹐只是和不同的協定連接而已﹐而API則提供了一個共同的界面給所有網路服務使用。這樣﹐我們就算開 BMW 或 Benz 都知道如何操作了﹐但您未必會開游艇哦﹐因為汽車和游艇 API 是不同的。當然﹐如果有台汽車的油門是在左邊、煞車在右邊、離合器卻在中間、不用方向盤而是用搖竿﹗我們也可以說這台車的 API 是不同的。 剛才說的redirector 並不是寫來供通訊協定使用﹐而是給一個API (在我們的例子中是NetBIOS)使用﹕NetBIOSI可以居於IPX/SPX、NetBEUI、和TCP/IP 這些協定之上。這樣有個好處是﹐您可以改變您的通訊協定﹐而無需重寫您的網路服務﹐因為您的網路服務是針對API來寫的。API會接管您的網路請求﹐然後運用正確的通訊協定進行工作。 您或許聽過 socket 這個詞﹐它其實就是API啦。在網路世界中﹐有三種API您或許會接觸到的﹕
OSI 模式 有好幾個主要電腦廠家﹐如IBM、DEC、Burroughs等﹐都有設計它們各自的網路結構和通訊協定﹐如果採用這些設計的機器﹐在其各自的網路上面運作良好﹐但卻不能在不同廠家的機器之間進行溝通。為了解決這個問題﹐International Standardization Organisation (ISO) 於1978年開始開發一套標準架構﹐終於成功推出 Reference Model for Open System Interconnection (OSI) 作為其標準﹐它提供了一個很有用的模式去解釋各個不同層面的網路協定。 OSI 模式共有七個層面﹐且它們可以被劃分為兩組﹕
在底下的三層之上﹐還有四層是屬于使用者功能範圍的﹐不過它們也常常會被整合在一起。您要記住的一點是﹕無論程式設計者如何定義這些協定﹐(例如﹐把它們分為兩層或四層)﹐這四層在實際上都會被執行的。
以上所列舉的協定層並非是他們的詳細定義﹐只是一個框架而已。您可以把OSI的協定模式當成是人體的骨架﹐當您套上這個框架之後﹐您就差不多可以描繪出大致形狀了﹐雖然外表會有所不同﹐但骨子裡還是一樣的。 這裡還有一個tips﹕如果您忘記了這些協定層的排列順序﹐您可以參照這句話﹕Please Do Not Take Sales Person's Advice。
© 2000 Netman 網中人Last Updated: March 28, 2000 |