訊協定


由于網路的迅猛發展﹐出現了許多供網路使用的軟體和硬體﹐為了讓它們都能夠有效的溝通﹐我們需要建立一些規則。

在這一章裡面﹐我會向大家介紹目前比較通用的網路通訊協定﹐和模擬數據是如何的從一個節點傳送到另一個節點﹐從功能上面看看通訊協定的定義。

何為通訊協定﹖

一個比較好理解的講法是﹕通訊協定就是一些標準和規則。例如﹐電話響起來的時候﹐為什麼接電話的人先說“喂~”﹐而不是打電話的人先介紹自己呢﹖我們可以說習慣上如此﹐那麼這個習慣行為就是回答電話的通訊協定了。當然﹐您和您親愛的或許不是這樣接電話的﹐那麼您們使用的就是另一套協定了。

如果節點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為例子認識一下邏輯地址﹕

  • 內部網路地址(Internal Network Address)。

    簡單地說﹐internal address是用來識別每一台機器是“誰”。很重要一點是﹐這個內部IPX號碼在同一個網路中﹐對每一台機器來說必須是唯一的。例如Novell NetWare使用內部IPX號碼來識別網路中的伺服器﹐當您安裝NetWare Server的時候﹐您會被問及接受或更改一個隨機產生的內部IPX號碼﹐然後這個號碼就成了該server的ID了。當您從工作站中輸入slist命令﹐您就可以看到每一台server的ID都被列出來了。

  • 外部網路地址(External Network Address)。

    這是用來識別一個網路或一個在網路中的網段(segment)的。如果在同一個網路上面同時有兩台server出現﹐那麼它們就必須使用相同的external address了。這個external address好比是用來識別所有的server在“哪裡”的。在Novell Netware裡面﹐只有Server才需要設定external address﹐工作站使用的是它登錄所在的server的external address。

    一個完整的IPX地址會是這個樣子的﹕1C9FDB42 : 2E701AID﹐在“﹕” 前面的部份為external address﹐而後一部份則為internal。不過這樣設定也有一個潛在的危險﹐如果您在安裝Novell server的時候一不留神﹐接受了程式自選的External Address﹐那樣就很可能不能和其它server溝通了﹐而且在接下來的安裝中﹐您會被諸如 wrong router address 等錯誤信息煩死﹗程式通常也可以提示您正確的號碼﹐但如果您有兩張網路卡在上面﹐您就要自己設定了。如果您的號碼輸入錯誤﹐您或許不可能修改系統的AUTOEXEC.NCF檔案﹐而external和internal地址都包括在這個檔案裡面﹐所以務必小心﹗

第二。在網路處理程式的另一端﹐有一個軟體叫重導向(Redirector)。

我們知道在單機作業模式下﹐當程式呼叫檔案IO的時候﹐會由作業系統接管這個請求﹐然後再傳給BIOS﹐再到硬體那裡。如果當程式呼叫的檔案IO為網路地址的時候﹐那麼redirector就會接管這個請求﹐而重新導向到網路上面去﹐把請求交給對方機器。

例如﹐當您使用Word的之後﹐要開啟一個在網路磁碟上面的檔案﹐將會如何呢﹖從Word的角度去看﹐它根本不知道有網路這回事﹐它只知道有一個和多個像A﹕、B﹕、C﹕這樣的磁碟。就像您吃麥當勞的時候﹐您不用知道漢堡包是怎樣製作出來的﹐您只需知道魚柳包、雞柳包和拿到什麼樣的Kitty貓就是了。Word在設計上並不是應用於非本地磁碟上的﹐當要使用存儲在網路上面的數據的時候﹐就必須有一種軟體能夠以磁碟代號的形式告訴Word才行。所以﹐如果您告訴Word去一個在叫FILESER1的伺服器之DOC目錄下面找檔案﹐那麼redirector軟體就會接管這個請求了。

然而﹐redirector在這個網路軟體集團裡面﹐也只是一個角色而已﹐要真正能夠拿回資料﹐我們還得需要另一位能士的配合﹕ Redirector只是工作在client上面﹐而在server那邊﹐還必須有一個檔案系統(File System)﹐或曰mounter﹐來接應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可以說是現行協定中用途最廣的協定之一﹐由于它嘗試在所有硬體上實現所有事情。不過﹐它也是最慢的傳輸協定之一﹐在某些情形之下﹐它的速度只有NetBEUI的七成。

由於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您或許會接觸到的﹕

  • Novell Sockets
  • NetBIOS
  • TCP/IP Sockets (用來和Internet上面的其它網路溝通)

OSI 模式

有好幾個主要電腦廠家﹐如IBM、DEC、Burroughs等﹐都有設計它們各自的網路結構和通訊協定﹐如果採用這些設計的機器﹐在其各自的網路上面運作良好﹐但卻不能在不同廠家的機器之間進行溝通。為了解決這個問題﹐International Standardization Organisation (ISO) 於1978年開始開發一套標準架構﹐終於成功推出 Reference Model for Open System Interconnection (OSI) 作為其標準﹐它提供了一個很有用的模式去解釋各個不同層面的網路協定。

OSI 模式共有七個層面﹐且它們可以被劃分為兩組﹕

  • 網路群組﹕由實體層、資料連接層、和網路層組成。
  • 使用者群組﹕由傳輸層、會談層、表現層、和應用層組成。
您也可以從下圖看到些協定層的排列﹕
應用層 (Application)
表現層 (Presentation)
會談層 (Session)
傳輸層 (Transport)
網路層 (Network)
資料連接層 (Data Link)
實體層 (Physical)
前面我們集中討論的就是其中的低層協定﹐也就是網路協定﹐這些功能是保障數據在網路中能夠迅速且準確的轉送。
實體層

在這層裡面您必須作出一些機械和電子方面的決定﹐也就是要定義出在終端和網絡之間要使用的設備。同時﹐採用何種佈線也要在這裡決定出來。

資料連接層

在這層指定了要採用的信息單元(message unit)是什麼﹐(通常在LAN上面的信息單元被稱為packet或frame)﹐以及它們的格式、和如何通過網絡。每一個packet都會被賦予一個地址碼和偵錯監測值(checksum)。有一個Binary synchronous communications協定﹐會判定出一個封包如果在丟失的情況下﹐要等待多久會被重新發送﹐這個協定也是在這層裡面定義。

總體來說﹐這層的工作就是保證一個無錯誤的物理上的數據傳輸。

網路層

這層就好比是一個中間人界乎於網絡功能和使用者功能之間。它會定義出封包在網路中移動的路由和其處理過程﹐這層還決定了網路是如何進行管理功能的﹐比如﹐發送狀態信息給接點和規範封包的流動等。

一個有趣的事情是﹐網路層還能將底層協定(網路功能)對上層協定(使用者功能)躲起來。這樣﹐在網路的使用者就可以使用不同種類的硬體了。這是非常好的事情﹐假如您用來建網的材料都不盡相同的話。

在底下的三層之上﹐還有四層是屬于使用者功能範圍的﹐不過它們也常常會被整合在一起。您要記住的一點是﹕無論程式設計者如何定義這些協定﹐(例如﹐把它們分為兩層或四層)﹐這四層在實際上都會被執行的。

傳輸層

在這層﹐將會設定節點地址的傳達﹐還有錯誤檢測和修正的方法。

會談層

這層定義了如何連接和掛斷連接﹐和在網路上面的數據如何交換。

表現層

在這層﹐定義了數據的語法(syntax)、變更、和格式。當應用程式的語法和格式都不同的時候﹐這層還將定義了如何翻譯這些不同。

應用層

這是最後一層了﹐它定義了應用程式是如何進入OSI模式進行傳送。它自己並不屬于應用程式﹐但它支持使用者的應用程式﹐如﹕檔案傳送、密碼驗證、和網路工具等。

以上所列舉的協定層並非是他們的詳細定義﹐只是一個框架而已。您可以把OSI的協定模式當成是人體的骨架﹐當您套上這個框架之後﹐您就差不多可以描繪出大致形狀了﹐雖然外表會有所不同﹐但骨子裡還是一樣的。

這裡還有一個tips﹕如果您忘記了這些協定層的排列順序﹐您可以參照這句話﹕Please Do Not Take Sales Person's Advice。

 

 


© 2000 Netman 網中人
Last Updated: March 28, 2000