|
在計算機(jī)網(wǎng)絡(luò)的基本概念中,分層次的體系結(jié)構(gòu)是最基本的。我們從計算機(jī)網(wǎng)絡(luò)的體系結(jié)構(gòu)的形成開始討論,然后討論分層次的概念。在此基礎(chǔ)之上介紹本書使用的計算機(jī)網(wǎng)絡(luò)原理體系結(jié)構(gòu)。本章篇幅不大,但抽象概念較多,在學(xué)習(xí)時要多思考。學(xué)好這些概念對后面的學(xué)習(xí)將會有很大的幫助。
2.1 計算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)的形成
計算機(jī)網(wǎng)絡(luò)是個非常復(fù)雜的系統(tǒng)。為了說明這一點,可以設(shè)想一個最簡單的情況:連接在網(wǎng)絡(luò)上的兩臺計算機(jī)要互相傳送文件。
顯然,在這兩合計算機(jī)之間必須有一條傳送數(shù)據(jù)的通路。但這還遠(yuǎn)遠(yuǎn)不夠,至少還需要完成以下動作:
(1)發(fā)起通信的計算機(jī)必須將數(shù)據(jù)通信的通路進(jìn)行激活(activate)。所謂“激活”就是要發(fā)出一些信今,保證要傳送的計算機(jī)數(shù)據(jù)能在這條通路上正確的發(fā)送和接收。
(2)要告訴網(wǎng)絡(luò)如何識別將要接收數(shù)據(jù)的計算機(jī)。
(3)發(fā)起通信的計算機(jī)必須查明對方計算機(jī)是否已經(jīng)準(zhǔn)備好接收數(shù)據(jù)。
(4)發(fā)起通信的計算機(jī)必須弄清楚,在對方計算機(jī)中的文件管理程序是否已做好了文件接收和存儲文件的準(zhǔn)備工作。
(5)若計算機(jī)的文件格式不兼容,則至少其中的一臺計算機(jī)應(yīng)完成格式轉(zhuǎn)換功能。
(6)對出現(xiàn)的各種差錯和意外事故,如數(shù)據(jù)傳送錯誤、重復(fù)或丟失,網(wǎng)絡(luò)中某個結(jié)點交換機(jī)出故障等,應(yīng)當(dāng)有可靠的措施保證對方計算機(jī)最終能夠收到正確的文件。
由此可見,相互通信的兩臺計算機(jī)的系統(tǒng)必須高度協(xié)調(diào)工作才行,而這種“協(xié)調(diào)”是相當(dāng)復(fù)雜的。為了設(shè)計這樣復(fù)雜的計算機(jī)網(wǎng)絡(luò),早在最初的ARPANET設(shè)計時就提出了分層的方法,“分層’可將龐大而復(fù)雜的問題轉(zhuǎn)化為若干較小的局部問題,這些較小的局部問題就比較易于研究和處理了。
1974年,美國的IBM公司宣布了它研制的系統(tǒng)網(wǎng)絡(luò)體系結(jié)構(gòu)SNA(System Network Architecture),這個著名的網(wǎng)絡(luò)標(biāo)準(zhǔn)就是按照分層的方法制定的。不久后,其他—些公司也相繼推出本公司的一套體系結(jié)構(gòu),并都采用不同的名稱。以后SNA又不斷得到改進(jìn),更新了幾個版本。現(xiàn)在它是世界上使用得相當(dāng)廣泛的一種網(wǎng)絡(luò)體系結(jié)構(gòu)。
網(wǎng)絡(luò)體系結(jié)構(gòu)的出現(xiàn)使得一個公司所生產(chǎn)的各種設(shè)備都能夠很容易地互連成網(wǎng)。這種情況顯然有利于一個公司壟斷自己的產(chǎn)品。用戶一旦購買了某個公司的網(wǎng)絡(luò),當(dāng)需要擴(kuò)大容量時,就只能再購買原公司的產(chǎn)品。如果同時又再購買了其他公司的產(chǎn)品,那么出于網(wǎng)絡(luò)體系結(jié)構(gòu)的不同,就很難互相連通。
然而,全球經(jīng)濟(jì)的發(fā)展使得不同網(wǎng)絡(luò)體系結(jié)構(gòu)的用戶迫切要求能夠互相交換信息。為了使不同體系結(jié)構(gòu)的計算機(jī)網(wǎng)絡(luò)都能互連,國際標(biāo)準(zhǔn)化組織IS0于1977年成立了專門機(jī)構(gòu)研究該問題。不久,他們就提出一個試圖使各種計算機(jī)在世界范圍內(nèi)互連成網(wǎng)的標(biāo)準(zhǔn)框架,即著名的開放系統(tǒng)互連基本參考模型OSI/RM(Open systems Interconnection Reference Model)簡稱為OSI。“開放”是指:只要遵循OSI標(biāo)難,一個系統(tǒng)就可以和位于世界上任何地方的、也遵循這同一標(biāo)準(zhǔn)的其他任何系統(tǒng)進(jìn)行通信。這一點很像世界范圍的電話和郵政系統(tǒng),這兩個系統(tǒng)都是開放系統(tǒng)。“系統(tǒng)”是指在現(xiàn)實的系統(tǒng)中與互連有關(guān)的各部分,所以開放系統(tǒng)互連參考模型OSI/RM是個抽象的概念。在1983年形成了開放系統(tǒng)互連基本參考模型的正式文件,即著名的ISO 7498國際標(biāo)準(zhǔn),也就是所謂的七層協(xié)議的體系結(jié)構(gòu)。
OSI試圖達(dá)到一種理想境界,即全世界的計算機(jī)網(wǎng)絡(luò)都遵循這統(tǒng)一的標(biāo)準(zhǔn),因而全世界的計算機(jī)都將能夠很方便地進(jìn)行互連和交換數(shù)據(jù)。在20世紀(jì)80年代,許多大公司甚至—些國家的政府機(jī)構(gòu)都紛紛表示支持0SI。當(dāng)時看來似乎在不久的將來全世界一定全都按照OSI制定的標(biāo)準(zhǔn)來構(gòu)造自己的計算機(jī)網(wǎng)絡(luò)。然而到了20世紀(jì)90年代初期,雖然整套的OSI國際標(biāo)準(zhǔn)都已經(jīng)制定出來了,但由于因特網(wǎng)已搶先在全世界覆蓋了相當(dāng)大的范圍,而與此同時卻幾乎找不到有什么廠家生產(chǎn)出符合OSI標(biāo)準(zhǔn)的商用產(chǎn)品。因此人們得出這樣的結(jié)論:OSI事與愿違地失敗了?,F(xiàn)今規(guī)模最大的、覆蓋全世界的計算機(jī)網(wǎng)絡(luò)因特網(wǎng)并未使用0SI標(biāo)準(zhǔn)。OSI失敗的原因可歸納為:OSI的專家們?nèi)狈嶋H經(jīng)驗,他們在完成OSI標(biāo)準(zhǔn)時沒有商業(yè)驅(qū)動力;OSI的協(xié)議實現(xiàn)起來過分復(fù)雜,而且運行效率很低;OSI標(biāo)準(zhǔn)的制定周期太長,因而使得按0SI標(biāo)準(zhǔn)生產(chǎn)的設(shè)備無法及時進(jìn)入市場:最后,OSI的層次劃分也不太合理,有些功能在多個層次中重復(fù)出現(xiàn)。
按照一般的概念,網(wǎng)絡(luò)技術(shù)和設(shè)備只有符合有關(guān)的國際標(biāo)準(zhǔn)才能在大范圍獲得工程上的應(yīng)用。但現(xiàn)在情況卻反過來了。得到最廣泛應(yīng)用的不是法律上的國際標(biāo)準(zhǔn)OSI,而是非國際標(biāo)TCP/IP。這樣,TCP/IP就常被稱為是事實上的國際標(biāo)準(zhǔn)。從這種意義上說,能夠占領(lǐng)市場的就是標(biāo)準(zhǔn)。在過去制定標(biāo)準(zhǔn)的組織中往往以專家、學(xué)者為主。但現(xiàn)在許多公司都紛紛擠進(jìn)各種各樣的標(biāo)準(zhǔn)化組織,使得技術(shù)標(biāo)準(zhǔn)具有濃厚的商業(yè)氣息?!獋€新標(biāo)準(zhǔn)的出現(xiàn),有時不一定反映出其技術(shù)水平是最先進(jìn)的,而是往往有著一定的市場背景。
2.2 協(xié)議與劃分層次
在計算機(jī)網(wǎng)絡(luò)中要做到有條不紊地交換數(shù)據(jù),就必須遵守—些事先約定好的規(guī)則。這些規(guī)則明確規(guī)定了所交換的數(shù)據(jù)的格式以及有關(guān)的同步問題。這里所說的同步不是狹義的(即同頻或同頻同相)而是廣義的,即在一定的條件下應(yīng)當(dāng)發(fā)生什么事件(如發(fā)送一個應(yīng)答信息),因而同步含有時序的意思。這些為進(jìn)行網(wǎng)絡(luò)中的數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或約定即稱為網(wǎng)絡(luò)協(xié)議。更進(jìn)一步講,—個網(wǎng)絡(luò)協(xié)議主要由以下三個要素組成:
(1)語法,即數(shù)據(jù)與控制信息的結(jié)構(gòu)或格式;
(2)語義,即需要發(fā)出何種控制信息,完成何種動作,以及做出何種響應(yīng)。
(3)同步,即事件實現(xiàn)順序的詳細(xì)說明。
由此可見,網(wǎng)絡(luò)協(xié)議是計算機(jī)網(wǎng)絡(luò)的不可缺少的組成部分。
ARPANET的研制經(jīng)驗表明,對于非常復(fù)雜的計算機(jī)網(wǎng)絡(luò)協(xié)議,其結(jié)構(gòu)應(yīng)該采用層次式的。我們可以舉一個簡單的例子來說明劃分層次的概念。
現(xiàn)在假定我們在計算機(jī)1和計算機(jī)2之間通過一個通信網(wǎng)絡(luò)傳送文件。這是一件比較復(fù)雜的工作,因為還需要做不少的工作。
我們可以將要做的工作劃分為三類,第一類工作與傳送文件直接有關(guān)。例如,發(fā)送方的文件傳送應(yīng)用程序應(yīng)當(dāng)確信接收方的文件管理程序已做好接收和存儲文件的準(zhǔn)備。若兩臺計算機(jī)所用的文件格式不一樣.則至少其中的一臺計算機(jī)應(yīng)完成文件格式的轉(zhuǎn)換工作。這兩件工作可用一個文件傳送模塊來完成。這樣,兩個計算機(jī)可將文件傳送模塊作為最高的一層(如圖2-1所示。在這兩個模塊之間的虛線表示兩個計算機(jī)系統(tǒng)交換文件和一些有關(guān)文件交換的命令。

圖2-1 劃分層次的舉例
但是,我們并不想讓文件傳送模塊完成全部工作的細(xì)節(jié),這樣會使文件傳送模塊過于復(fù)雜。我們可以再設(shè)立一個通信服務(wù)模塊.用來保證文件和文件傳送命令可靠地在兩個系統(tǒng)之間交換。也就是說,讓位于上面的文件傳送模塊利用下面的通信服務(wù)模塊所提供的服務(wù)。我們還可以看出,如果將位于上面的文件傳送模塊換成電子郵件模塊,那么電子郵件模塊同樣可以利用在它下面的通信服務(wù)模塊所提供的可靠通信的服務(wù)。
同樣道理,我們再構(gòu)造一個網(wǎng)絡(luò)接入模塊,讓這個模塊負(fù)責(zé)做與網(wǎng)絡(luò)接口細(xì)節(jié)有關(guān)的工作,并向上層提供服務(wù),使上面的通信服務(wù)模塊能夠完成可靠通信的任務(wù)。
從上述簡單例子可以更好地理解分層可以帶來如下好處:
(1)各層之間是獨立的。某一層并不需要知道它的下一層是如何實現(xiàn)的,而僅僅需要知道該層通過層間的接口(即界面)所提供的服務(wù)。由于每一層只實現(xiàn)—種相對獨立的功能,因而可將一個難以處理的復(fù)雜問題分解為若干個較容易處理的更小一些的問題。這樣,整個問題的復(fù)雜程度就下降了。
(2)靈活性好。當(dāng)任何一層發(fā)生變化時(例如由于技術(shù)的變化),只要層間接口關(guān)系保持不變,則在這層以上或以下各層均不受影響。此外,對某一層提供的服務(wù)還可進(jìn)行修改。甚至當(dāng)某層提供的服務(wù)不再需要時,還可以將這層取消而不會影響其他的層。
(3)結(jié)構(gòu)上可分割開,各層都可以采用最合適的技術(shù)來實現(xiàn)。
(4)易于實現(xiàn)利維護(hù)。這種結(jié)構(gòu)使得實現(xiàn)和調(diào)試一個龐大而又復(fù)雜的系統(tǒng)變得易于處理,因為整個的系統(tǒng)己被分解為若干個相對獨立的子系統(tǒng)。
(5)能促進(jìn)標(biāo)準(zhǔn)化工作,因為每一層的功能及其所提供的服務(wù)都已有了精確的說明。
分層時應(yīng)注意使每一層的功能非常明確。若層數(shù)太少,就會使每一層的協(xié)議太復(fù)雜。但層數(shù)太多又會在描述和綜合各層功能的系統(tǒng)工程任務(wù)時遇到較多的困難。通常每一層所要實現(xiàn)的一般功能往往是下面的一種功能或多種功能。
- 差錯控制 使得和網(wǎng)絡(luò)對端的相應(yīng)層次的通信更加可靠;
- 流量控制 使得發(fā)送端的發(fā)送速率不要太快,要使接收端來得及接收;
- 分段和重裝 發(fā)送端將要發(fā)送的數(shù)據(jù)塊劃分為更小的單位,在接收端將其還原;
- 復(fù)用和分用 發(fā)送端幾個高層會話復(fù)用一條低層的連接,在接收端再進(jìn)行分用;
連接建立和釋放 在交換數(shù)據(jù)之前,先交換一些控制信息,以建立一條邏輯連接;當(dāng)數(shù)據(jù)傳送結(jié)束時,將連接釋放。
分層當(dāng)然也有一些缺點,例如,有些功能會在不向的層次中重復(fù)出現(xiàn),因而產(chǎn)生了額外開銷。
我們將計算機(jī)網(wǎng)絡(luò)的各層及其協(xié)議的集合稱為網(wǎng)絡(luò)的體系結(jié)構(gòu)(architecture),也就是說,計算機(jī)網(wǎng)絡(luò)的體系結(jié)構(gòu)就是這個計算機(jī)網(wǎng)絡(luò)及其部件所應(yīng)完成的功能的精確定義。需要強調(diào)的是:這些功能究竟是用何種硬件或軟件完成的,則是一個遵循這種體系結(jié)構(gòu)的實現(xiàn)(implementation)的問題。體系結(jié)構(gòu)的英文名詞architecture的原意是建筑學(xué)或建筑的設(shè)計和風(fēng)格。它和一個具體的建筑物的概念很不相同。例如,我們可以走進(jìn)一個明代的建筑物中,但不能走進(jìn)一個明代的建筑風(fēng)格之中。同理,我們也不能把一個具體的計算機(jī)網(wǎng)絡(luò)說成是一個抽象的網(wǎng)絡(luò)體系結(jié)構(gòu)。總之,體系結(jié)構(gòu)是抽象的,而實現(xiàn)則是具體的,是真正在運行的計算機(jī)硬件和軟件。
2.3 具有五層協(xié)議的計算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)
2.3.1 從OSI體系結(jié)構(gòu)到原理體系結(jié)構(gòu)
OSI的七層協(xié)議體系結(jié)構(gòu)既復(fù)雜又不實用,但其概念清楚,體系價格低廉,理論較完整。TCP/IP的協(xié)議現(xiàn)在得到了全世界的承認(rèn),但它實際上并沒有一個完整的體系結(jié)構(gòu)。TCP/IP是一個四層的體系結(jié)構(gòu),它包含應(yīng)用層、運輸層、網(wǎng)際層和網(wǎng)絡(luò)接口層。但從實質(zhì)上講,TCP/IP只有三層,即應(yīng)用層、運輸層和網(wǎng)際層,因為最下面的網(wǎng)絡(luò)接口層并沒有什么具體內(nèi)容。因此在學(xué)習(xí)計算機(jī)網(wǎng)絡(luò)的原理時往往采取折衷的辦法,也就是綜合OSI和TCP/IP的優(yōu)點,采用一種原理體系結(jié)構(gòu),它只有五層(如圖2-2所示),這樣既簡潔又能將概念闡述清楚[TANE96]。

圖2-2具有五層協(xié)議的計算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)
下面我們將結(jié)合因特網(wǎng)的情況,自上而下地簡單介紹各層的主要功能。但只有認(rèn)真學(xué)習(xí)完各章的協(xié)議后才能真正弄清各層的作用。
1.應(yīng)用層(application layer)
應(yīng)用層是原理體系結(jié)構(gòu)中的最高層。應(yīng)用層確定進(jìn)程之間通信的性質(zhì)以滿足用戶的需要(這反映在用戶所產(chǎn)生的服務(wù)請求)。這里的進(jìn)程就是指正在運行的程序。應(yīng)用層不僅要提供應(yīng)用進(jìn)程所需要的信息交換和遠(yuǎn)地操作,而且還要作為互相作用的應(yīng)用進(jìn)程的用戶代理(user Agent),來完成一些為進(jìn)行語義上有意義的信息交換所必須的功能,應(yīng)用層直接為用戶的應(yīng)用進(jìn)程提供服務(wù)。在因特網(wǎng)中的應(yīng)用層協(xié)議很多,如支持萬維網(wǎng)應(yīng)用的HTTP協(xié)議,支持電子郵件的SMTP協(xié)議,支持文件傳送的FTP協(xié)議等等。
2.運輸層(transport layer)
運輸層的任務(wù)就是負(fù)責(zé)主機(jī)中兩個進(jìn)程之間的通信,其數(shù)據(jù)傳輸?shù)膯挝皇菆笪?/span>(segment)。運輸層具有復(fù)用(multiplexing)和分用(demultiplexing)的功能。運輸層中的多個進(jìn)程可復(fù)用下面網(wǎng)絡(luò)層的傳輸功能,到了目的主機(jī)的網(wǎng)絡(luò)層后,再使用分用功能,將數(shù)據(jù)交付給相應(yīng)的進(jìn)程。
因特網(wǎng)的運輸層可使用兩種不同協(xié)議。即面向連接的傳輸控制協(xié)議TCP(Transmission Control Protocol),和無連接的用戶數(shù)據(jù)報協(xié)議UDP(User Datagram Protocol)。面向連接的服務(wù)能夠提供可靠的交付,但無連接服務(wù)則不能提供可靠的交付,它只是“盡最大努力交付(best-effort delivery)”。這兩種服務(wù)方式都很有用,各有其優(yōu)缺點。
在分組交換網(wǎng)內(nèi)的各個交換結(jié)點機(jī)都沒有運輸層。運輸層只能存在于分組交換網(wǎng)外面的主機(jī)之中。運輸層以上的各層就不再關(guān)心信息傳輸?shù)膯栴}了。正因為如此,運輸層就成為計算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)中非常重要的一層。
網(wǎng)絡(luò)層負(fù)責(zé)為分組交換網(wǎng)上的不同主機(jī)提供通信。在網(wǎng)絡(luò)層,數(shù)據(jù)的傳送單位是分組或包。在TCP/IP體系中,分組也叫做IP數(shù)據(jù)報,或簡稱為數(shù)據(jù)報:因此不要將運輸層的用戶數(shù)據(jù)報和網(wǎng)絡(luò)層的IP數(shù)據(jù)報弄混。網(wǎng)絡(luò)層的任務(wù)就是要選樣合適的路由,使發(fā)送站的運輸層所傳下來的分組能夠按照地址找到目的主機(jī)。
這里要強調(diào)指出,網(wǎng)絡(luò)層中的“網(wǎng)絡(luò)”二字,已不是我們通常談到的具體的網(wǎng)絡(luò),而是在計算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)模型中的專用名詞。對于由廣播信道構(gòu)成的分組交換網(wǎng),路由選擇的問題很簡單,因此這種網(wǎng)絡(luò)的網(wǎng)絡(luò)層非常簡單,甚至可以沒有。
因特網(wǎng)是一個很大的互聯(lián)網(wǎng),它的大量的異構(gòu)(heterogeneous)網(wǎng)絡(luò)通過路由器(router)相互連接起來。因特網(wǎng)主要的網(wǎng)絡(luò)層協(xié)議是無連接的網(wǎng)際協(xié)議IP(Internet Protocol)和許多種路由選擇協(xié)議,因此因特網(wǎng)的網(wǎng)絡(luò)層也叫做網(wǎng)際層或IP層。在本書中,網(wǎng)絡(luò)層、網(wǎng)際層和IP層都是同義語。
數(shù)據(jù)鏈路層的任務(wù)是在兩個相鄰結(jié)點間的線路上無差錯地傳送以幀(frame)為單位的數(shù)據(jù)。每一幀包括數(shù)據(jù)和必要的控制信息。在傳送數(shù)據(jù)時,若接收結(jié)點檢測到所收到的數(shù)據(jù)中有差錯,就要通知發(fā)方重發(fā)這一幀,直到這一幀正確無誤地到達(dá)接收結(jié)點為止。在每一幀所包括的控制信息中,有同步信息、地址信息、差錯控制以及流量控制信息等。數(shù)據(jù)鏈路層有時也常簡稱為鏈路層。
這樣,數(shù)據(jù)鏈路層就把一條有可能出差錯的實際鏈路,轉(zhuǎn)變成為讓網(wǎng)絡(luò)層向下看去好去是一條不出差錯的鏈路。
5.物理層(physical layer)
物理層的任務(wù)就是透明地傳送比特流。在物理層上所傳數(shù)據(jù)的單位是比特。傳遞信息所利用的一些物理媒體.如雙絞線、同軸電纜、光纜等,并不在物理層之內(nèi)而是在物理層的下面。因比也有人把物理媒體當(dāng)作第0層。
“透明”是一個很重要的術(shù)語。它表示:某一個實際存在的事物看起來卻好像不存在一樣。“透明地傳送比特流”表示經(jīng)實際電路傳送后的比特流沒有發(fā)生變化,因此,對傳送比特流來說,由于這個電路并沒有對其產(chǎn)生什么影響,因而比特流就“看不見”這個電路?;蛘哒f,這個電路對該比特流來說是透明的。這樣,任意組合的比特流都可以在這個電路上傳送。當(dāng)然,哪幾個比特代表什么意思,則不是物理層所要管的,
物理層要考慮用多大的電壓代表“1”或“0”,以及當(dāng)發(fā)送端發(fā)出比特“1”時,在接收端如何識別出這是比特“1”而不是比特“0”。物理層還要確定連接電線的插頭應(yīng)當(dāng)有多少根腿以及各個腿應(yīng)如何連接。
在因特網(wǎng)所使用的各種協(xié)議中,最重要的和最著名的就是TCP和IP兩個協(xié)議:現(xiàn)在人們經(jīng)常提到的TCP/IP并不一定是指TCP和IP這兩個具體的協(xié)議,而往往是表示因特網(wǎng)所使用的體系結(jié)構(gòu)或是指整個的TCP/IP協(xié)議族(protocol suite)。
圖2-3說明的是應(yīng)用進(jìn)程的數(shù)據(jù)在各層之間的傳遞過程中所經(jīng)歷的變化。這里為簡單起見,假定兩個主機(jī)是直接相連的。
假定計算機(jī)1的應(yīng)用進(jìn)程AP1向計算機(jī)2的應(yīng)用進(jìn)程AP2傳送數(shù)據(jù)。AP1先將其數(shù)據(jù)交給第5層。第5層加上必要的控制信息H5就變成了下一層的數(shù)據(jù)單元,第4層收到這數(shù)據(jù)單層后,加上本層的控制信息H4,再交給第3層,成為第3層的數(shù)據(jù)單元。依此類推。不過到了第2層(數(shù)據(jù)鏈路層)后,控制信息分成兩部分,分別加上本層數(shù)據(jù)單元的首部(H2)和尾部(T2),而第1層(物理層)由于是比特流的傳送,所以不再加上控制信息。
請讀者注意。我們在畫出數(shù)據(jù)單元時,習(xí)慣上是將數(shù)據(jù)單元的首部畫在左邊,而將數(shù)據(jù)部分畫在首都的右邊,尾部畫在最右邊。在傳送時,都是先傳送數(shù)據(jù)單元的首部,再傳送數(shù)據(jù)部分,最后傳送尾部。因此,當(dāng)我們觀察圖2-3時,不要誤認(rèn)為“從計算機(jī)1向計算機(jī)2傳送數(shù)據(jù)時,是先傳送數(shù)據(jù)部分或尾部,而最后傳送首部。”

圖2-3數(shù)據(jù)在不同層間的流動
在OSI參考模型中,在對等層次上傳送的數(shù)據(jù),其單位都稱為該層的協(xié)議數(shù)據(jù)單元PDU(Protocol Data Unit)。這個名詞現(xiàn)已被許多非OSI標(biāo)準(zhǔn)中采用。
當(dāng)這—串的比特流經(jīng)網(wǎng)絡(luò)的物理媒體傳送到目的站時,就從第1層依次上升到第5層。每—層根據(jù)控制信息進(jìn)行必要的操作,然后將控制信息剝?nèi)?,將該層剩下的?shù)據(jù)單元上交給更高的一層。最后,把應(yīng)用進(jìn)程AP1發(fā)送的數(shù)據(jù)交給目的站的應(yīng)用層進(jìn)程AP2。
可以用一個簡單的例子來比喻上述過程。有—封信從最高層向下傳。每經(jīng)過—層就包上一個新的信封。包有多個信封的信傳送到目的站后,從第1層起,每層拆開一個信封后就交給它的上一層。傳到最高層后,取出發(fā)信人所發(fā)的信交給收信用戶。
雖然應(yīng)用進(jìn)程數(shù)據(jù)要經(jīng)過如圖2-3所示的復(fù)雜過程才能送到對方的應(yīng)用進(jìn)程,但這些復(fù)雜過程對用戶來說都已被屏蔽掉了,以致應(yīng)用通往AP1覺得好像是直接把數(shù)據(jù)交給了應(yīng)用進(jìn)程AP2。同理,任何兩個同樣的層次(例如在兩個系統(tǒng)的第四層)之間,也好像如同圖中的水平虛線所示的那樣,將數(shù)據(jù)(即數(shù)據(jù)單元加上控制信息)通過水平虛線直接傳遞結(jié)對方。這就是所謂的“對等層”(Peer layers)之間的通信。我們以前經(jīng)常提到的各層協(xié)議,實際上就是在各個對等層之間傳遞數(shù)據(jù)時的各項規(guī)定。
在文獻(xiàn)中也還可以見到術(shù)語“協(xié)議棧”(protocol stack)。這是因為幾個層次畫在一起很像一個棧(stack)。
2.3.2 實體、協(xié)議、服務(wù)和服務(wù)訪問點
當(dāng)研究在開放系統(tǒng)中進(jìn)行交換信息時,發(fā)送或接收信息的究竟是一個進(jìn)程,是一個文件還是一個終端,都沒有實質(zhì)上的影響。為此,可以用實體(entity)這—名詞表示任何可發(fā)送或接收信息的硬件或軟件進(jìn)程。在許多情況下,實體就是一個特定的軟件模塊。
協(xié)議是控制兩個對等實體進(jìn)行通信的規(guī)則的集合。協(xié)議的語法方面的規(guī)則定義了所交換的信息的格式,而協(xié)議的語義方面的規(guī)則就定義了發(fā)送者或接收者所要完成的操作,例如,在何種條件下數(shù)據(jù)必須重傳或丟棄。
在協(xié)議的控制下,兩個對等實體間的通信使得本層能夠向上一層提供服務(wù)。要實現(xiàn)本層協(xié)議,還需要使用下面一層所提供的服務(wù)。
一定要弄清楚,協(xié)議和服務(wù)在概念上是很不一樣的。
首先,協(xié)議的實現(xiàn)保證了能夠向上一層提供服務(wù)。本層的服務(wù)用戶只能看見服務(wù)而無法看見下面的協(xié)議。下面的協(xié)議對上面的服務(wù)用戶是透明的。
其次,協(xié)議是“水平的”,即協(xié)議是控制對等實體之間通信的規(guī)則。但服務(wù)是“垂直的”,即服務(wù)是由下層向上層通過層間接口提供的。另外,并非在—個層內(nèi)完成的全部功能都稱為服務(wù)。只有那些能夠被高一層看得見的功能才能稱之為“服務(wù)”。上層使用下層所提供的服務(wù)必須通過與下層交換一些命令,這些命令在0SI中稱為服務(wù)原語。
在同一系統(tǒng)中相鄰兩層的實體進(jìn)行交互(即交換信息)的地方,通常稱為服務(wù)訪問點SAP(Service Access Point)。服務(wù)訪問點SAP是一個抽象的概念,它實際上就是—個邏輯接口(有些像郵政信箱),但和通常所說的兩個設(shè)備之間的硬件并行接口或串行接口是很不一樣的。OSI將層與層之間交換的數(shù)據(jù)的單位稱為服務(wù)數(shù)據(jù)單元SDU(Service Data Unit)。它可以與PUD不一樣。例如,可以是多個SDU合成為一個PDU,也可以是一個SDU劃分為幾個PDU。
這樣,在任何相鄰兩層之間的關(guān)系可概括為圖2-4所示的那樣。這里要注意的是,某一層向下一層所提供的服務(wù)實際上已包括了在它以下各層所提供的服務(wù)。所有這些對上一層來說就相當(dāng)于一個服務(wù)提供者。在服務(wù)提供者的上一層的實體,也就是“服務(wù)用戶”,它使用服務(wù)提供者所提供的服務(wù)。
計算機(jī)網(wǎng)絡(luò)的協(xié)議還有一個很重要的特點,就是協(xié)議必須將所有不利的條件都事先估計到,而不能假定都是在很順利的條件下進(jìn)行通信。例如,兩個朋友在電話中約好.晚上8時在某某電影院門口碰頭,然后看電影,并且約定“不見不散”。這就是—個很壞的協(xié)議,因為任何一方臨時有急事來不了,另—方按照協(xié)議就必須永遠(yuǎn)等待下去,這顯然是不行的。因此,看一個計算機(jī)網(wǎng)絡(luò)協(xié)議是否正確,就要看這個協(xié)議能否應(yīng)付任何不利的情況,哪怕這種不利情況出現(xiàn)的概率極其微小。
下面是一個有關(guān)協(xié)議的非常著名的例子。
占據(jù)東邊和西邊兩個山頂?shù)乃{(lán)軍與駐扎在這兩個山之間的山谷的白軍作戰(zhàn)。其力量對比是:—個山頂上的藍(lán)軍打不過白軍,但兩個山頂?shù)乃{(lán)軍協(xié)同作戰(zhàn)則可戰(zhàn)勝白軍。東邊藍(lán)軍擬于次日正午向白軍發(fā)起攻擊。于是用計算機(jī)發(fā)送電文給西邊的友軍,但通信線路很不好,電文出錯或丟失的可能性較大。因此要求收到電文的友軍必須送回一個確認(rèn)電文。但比確認(rèn)電文也可能出錯或丟失。試問能否設(shè)計出一種協(xié)議使得兩個山頂?shù)乃{(lán)軍能夠?qū)崿F(xiàn)協(xié)同作戰(zhàn)因而一定(即100%而不是99.999.%)取得勝利
東邊藍(lán)軍先發(fā)送:“擬于次日下午向白軍發(fā)起攻擊,請協(xié)同作戰(zhàn),并確認(rèn)。”
西邊藍(lán)軍收到電文后加以確認(rèn),回答:“同意。”
然而現(xiàn)在兩邊的藍(lán)軍都不敢貿(mào)然下決心進(jìn)攻。因為,西邊藍(lán)軍不知道此確認(rèn)電文對方是否正確地收到了。如未正確收到,東邊藍(lán)軍必定不敢貿(mào)然進(jìn)攻;在此情況下,如果自己發(fā)起進(jìn)攻就肯定要失敗。因此,必須等待東邊藍(lán)軍的“對確認(rèn)的確認(rèn)”。
假定西邊藍(lán)軍收到了東邊藍(lán)軍發(fā)送的確認(rèn)。但東邊藍(lán)軍同樣關(guān)心自己發(fā)出的確認(rèn)是否已被對方正確地收到。因此還要等待西邊藍(lán)軍的“對確認(rèn)的確認(rèn)的確認(rèn)”。
這樣無限循環(huán)下去,兩邊的藍(lán)軍都始終無法確定自己最后發(fā)送的電文對方是否已經(jīng)收到。因此,沒有—種協(xié)議能夠使兩邊的藍(lán)軍能夠100%地確定雙方將于次日正午發(fā)起的協(xié)同進(jìn)攻。
從這個例子可以看出,哪怕看起來是個很簡單的問題,要設(shè)計—個很可靠的協(xié)議則并不簡單。
2.3.3 面向連接服務(wù)與無連接服務(wù)
從通信的角度看,各層所提供的服務(wù)可分為兩大類.即面向連接的(connection-oriented)與無連接的(connectionless).現(xiàn)分別介紹如下。
1.面向連接服務(wù)
所謂連接,就是兩個對等實體為進(jìn)行數(shù)據(jù)通信而進(jìn)行的一種結(jié)合。面向連接服務(wù)是在數(shù)據(jù)交換之前,必須先建立連接。當(dāng)數(shù)據(jù)交換結(jié)束后,則應(yīng)終止這個連接。
面向連接服務(wù)具有連接建立、數(shù)據(jù)傳輸和連接釋放這三個階段。在傳送數(shù)據(jù)時是按序傳送的。這點和電路交換的許多特性很相似,因此面向連接服務(wù)在網(wǎng)絡(luò)層中又稱為虛電路服務(wù)。“虛”表示:雖然在兩個服務(wù)用戶的通信過程中并沒有至始至終占用一條端到端的完整物理電路(注意:采用分組交換時,鏈路是逐段被占用的),但好像—直占用了一條這樣的電路。面向連接服務(wù)比較適合于在一定期間內(nèi)要向同一目的地發(fā)達(dá)許多報文的情況。對于發(fā)送很短的零星報文,面向連接服務(wù)的開銷就顯得過大了。
若兩個用戶需要經(jīng)常進(jìn)行頻繁的通信,則可建立永久虛電路。這樣就免除每次通信時連接建立和連接釋放這兩個過程。這點和電話網(wǎng)中的專用電路通信是十分相似的。
2.無連接服務(wù)
在無連接服務(wù)的情況下,兩個實體之間的通信不需要先建立好—個連接,因此其下層的有關(guān)資源不需要事先進(jìn)行預(yù)定保留;這些資源將在數(shù)據(jù)傳輸時動態(tài)地進(jìn)行分配。
無連接服務(wù)的另—特征就是它不需要通信的兩個實體同時是活躍的(即處于激活態(tài))。當(dāng)發(fā)送端的實體正在進(jìn)行發(fā)送時,它才必須是活躍的。這時接收端的實體并不—定必須是活躍的。只有當(dāng)接收端的實體正在進(jìn)行接收時,它才必須是活躍的。
無連接服務(wù)的優(yōu)點是靈活方便和比較迅速,但無連接服務(wù)不能防止報文的丟失、重復(fù)或失序。無連接服務(wù)特別適合于傳送少量零星的報文。
無連接服務(wù)有以下三種類型:
(1)數(shù)據(jù)報(datagram)。它的特點不需要接收端做任何響應(yīng),因而是一種不可靠的服務(wù)數(shù)據(jù)報常被描述為“盡最大努力交付”(best effort delivery)。
(2)證實交付(confirmed delivery)。它又稱為可靠的數(shù)據(jù)報。這種服務(wù)對每—個報文產(chǎn)生一個證實給發(fā)方用戶,不過這個證實不是來自接收端的用戶而是來自提供服務(wù)的層。這種證實只能保證報文已經(jīng)發(fā)給遠(yuǎn)端的目的站了,但并不能保證目的站用戶已收到了這個報文。
(3)請求回答(request-reply)。這種類型的數(shù)據(jù)報是收端用戶每收到一個報文,就向發(fā)端用戶發(fā)送一個應(yīng)答報文。事務(wù)(即transaction,又可譯為事務(wù)處理或交易)中的“一問—答”方式的短報文,以及數(shù)據(jù)庫中的查詢,都很適合使用這種類型的服務(wù)。
前面已經(jīng)說過,TCP/IP的體系結(jié)構(gòu)比較簡單,它只有四層。圖2.4給出了用這種四層協(xié)議表示方法的例子。注意,路由器在轉(zhuǎn)發(fā)分組時最高只用到網(wǎng)絡(luò)層而沒有使用運輸層和應(yīng)用層。路由器的數(shù)據(jù)鏈路層和物理層是在路由器的網(wǎng)絡(luò)接口板上實現(xiàn)的。
還有一種方法,就是分層次畫出具體的協(xié)議來表示TCP/IP族,如圖2-5所示,它的特點是上下兩頭大而中間?。簯?yīng)用層和網(wǎng)絡(luò)接口層都有多種協(xié)議,而中間的IP層很小,上層的各種協(xié)議都向下匯聚到一個IP中。這種很像沙漏計時器形狀的TCP/IP族表明:TCP/IP可以為各式各樣的應(yīng)用提供服務(wù)(所謂的everything over IP),同時TCP/IP也可以允許IP在各式各樣的網(wǎng)絡(luò)構(gòu)成的互聯(lián)網(wǎng)上運行(所謂的IP over everything)。正因為如此,因特網(wǎng)才會發(fā)展到今天的這種全球規(guī)模。從圖2-5不難看出IP在因特網(wǎng)中的核心作用。
【例1】 下面我們利用協(xié)議棧說明在因特網(wǎng)中常用的客戶服務(wù)器工作方式。
圖2-6中的主機(jī)A和主機(jī)B都各有自己的協(xié)議棧。主機(jī)A中的應(yīng)用進(jìn)程(即客戶進(jìn)程)的位置在最高的應(yīng)用層。這個客戶進(jìn)程向主機(jī)B應(yīng)用層的服務(wù)器進(jìn)程發(fā)出請求,請求建立連接(圖中的①)。然后,主機(jī)B中的服務(wù)器進(jìn)程接受主機(jī)A中的客戶進(jìn)程發(fā)來的請求(圖中的②)。所有這些通信,實際上都需要使用下面各層所提供的服務(wù)。但若僅僅考慮客戶進(jìn)程和服務(wù)器進(jìn)程的交互,則可把它們之間的交互看成是如圖2-6中的水平虛線所示的那樣。
圖2.7畫出了三個主機(jī)的協(xié)議棧。主機(jī)C的應(yīng)用層中同時有兩個服務(wù)器進(jìn)程在通信。服務(wù)器l在和主機(jī)A中的客戶1通信,而服務(wù)器2在和主機(jī)B中的客戶2通信。有的服務(wù)器進(jìn)程可以同時向幾百個客戶進(jìn)程提供服務(wù)。
習(xí) 題
- 網(wǎng)絡(luò)協(xié)議的三個要素是什么 各有什么含義?
- 網(wǎng)絡(luò)體系結(jié)構(gòu)為什么要采用分層次的結(jié)構(gòu)
- 試舉出—些與分層體系結(jié)構(gòu)的思想相似的日常生活。
- 試述具有五層協(xié)議的原理網(wǎng)絡(luò)體系結(jié)構(gòu)的要點,包括各層的主要功能。
- 試舉出日常生活中有關(guān)“透明”這種名詞的例子。
- 試將TCP/IP和OSI的體系結(jié)構(gòu)進(jìn)行比較,討論其異同之處。
- 解釋以下名詞:協(xié)議棧、實體、對等層、協(xié)議數(shù)據(jù)單元、服務(wù)訪問點、客戶、服務(wù)器、客戶服務(wù)器方式。
- 面向連接服務(wù)與無連接服務(wù)各自和特點是什么?
- 協(xié)議與服務(wù)有何區(qū)別 有何關(guān)系?
|