計算機網絡體系結構
從本此開始,我們就要開始介紹有關計算機網絡體系結構的知識了。內容包括:
-
常見的計算機網絡體系結構
-
計算機網絡體系結構分層的必要性
-
計算機網絡體系結構的設計思想
-
舉例說明及專用術語
計算機網絡體系結構是計算機網絡課程中的重點和難點,它的抽象概念較多。建議大家閱讀學習時多思考,這些概念的理解對后面的學習幫助會很大。
1、常見的計算機網絡體系結構
1.1 OSI體系結構
為了使不同體系結構的計算機網絡都能互連,國際標準化組織于1977年成立了專門機構研究該問題。不久,他們就提出了一個試圖使各種計算機在世界范圍內互連成網的標準框架,也就是著名的開放系統互聯參考模型,簡稱為OSI。該模型是一個七層協議的體系結構,從下往上依次是:物理層、數據鏈路層、網絡層、運輸層、會話層、表示層、應用層,如下圖所示。
它是法律上的國際標準。
1.2 TCP/IP體系結構
到了20世紀90年代初期,但這時英特網已搶先在全世界覆蓋了相當大的范圍。英特網從1983年開始使用TCP/IP協議族,并逐步演變成TCP/IP參考模型。該模型是一個四層協議的體系結構,從下往上依次是:網絡接口層、網際層、運輸層、應用層,如下圖所示。
它是事實上的國際標準。
1.3 標準制定與市場關系
在過去制定標準的組織中,往往以專家學者為主,但現在許多公司都紛紛擠進各種各樣的標準化組織,使得技術標準有著濃厚的商業氣息。一個新標準的出現有時不一定反映出其技術水平是最先進的,而是往往有著一定的市場背景。從這種意義上說,能夠占領市場的就是標準。
OSI標準失敗的原因可歸納為以下幾點:
OSI的專家們缺乏實際經驗,他們在完成OSI標準時沒有商業驅動力。
OSI的協議實現起來過分復雜,而且運行效率很低。
OSI標準的制定周期太長,因而使得按OSI標準生產的設備無法及時進入市場。
OSI的層次劃分也不太合理,有些功能在多個層次中重復出現。
1.4 體系結構對比
對比這兩個體系結構可以看出:
TCP/IP體系結構相當于將OSI體系結構的物理層和數據鏈路層合并為了網絡接口層。
并去掉了會話層和表示層。
另外由于TCP/IP在網絡層使用的協議是IP協議(IP協議的中文意思是網際協議),因此TCP/IP體系結構的網絡層常稱為網際層。
大多數用戶每天都有接入英特網的需求,這就要求用戶的主機必須使用TCP/IP協議。當然了,即使用戶的網絡不需要接入因特網,也可以使用TCP/IP協議。
在用戶主機的操作系統中,通常都帶有符合TCP/IP體系結構標準的TCP/IP協議族。而用于網絡互聯的路由器中,也帶有符合TCP/IP體系結構標準的TCP/IP協議族,只不過路由器一般只包含網絡接口層和網際層。
1.5 TCP/IP體系結構特點
TCP/IP體系結構的網絡接口層并沒有規定什么具體的內容,這樣做的目的是可以互聯全世界各種不同的網絡接口。例如:
-
有線的以太網接口
-
無線局域網的WiFi接口
而不限定僅使用一種或幾種網絡接口。因此本質上TCP/IP體系結構只有上面的三層。
IP協議是TCP/IP體系結構網際層的核心協議。TCP和UDP是TCP/IP體系結構運輸層的兩個重要協議。TCP/IP體系結構的應用層包含了大量的應用層協議,例如HTTP、SMTP、DNS、RTP等,即便大家是計算機網絡的初學者,對HTTP這個縮寫詞也不會陌生,因為每當我們打開瀏覽器,在地址欄輸入網址時,就會看到它。
IP協議可以將不同的網絡接口進行互連,并向其上的TCP協議和UDP協議提供網絡互聯服務。而TCP協議在享受IP協議提供的網絡互聯服務的基礎上,可向應用層的相應協議提供可靠傳輸的服務。UDP協議在享受IP協議提供的網絡互聯服務的基礎上,可向應用層的相應協議提供不可靠傳輸的服務。
IP協議作為TCP/IP體系結構中的核心協議,一方面負責互聯不同的網絡接口,也就是“IP over everything”;另一方面為各種網絡應用提供服務,也就是“Everything over IP”。
IP協議和TCP協議是其中非常重要的兩個協議,因此用TCP和IP這兩個協議來表示整個協議大家族,常稱為TCP/IP協議族。
順便提一下,在嵌入式系統開發領域,TCP/IP協議族常稱為TCP/IP協議棧。這是因為TCP/IP協議體系的分層結構與數據結構中的棧在圖形畫法上是類似的。
1.6 折中方案:五層協議體系結構
由于TCP/IP體系結構為了將不同的網絡接口進行互連,因此它的網絡接口層并沒有規定什么具體的內容。然而,這對我們學習計算機網絡完整體系時就會缺少一部分內容。
因此在學習計算機網絡原理時,我們往往采取折中的辦法,也就是綜合OSI和TCP/IP的優點,采用一種五層協議的原理體系結構。
五層協議的原理體系結構從下到上依次為:物理層、數據鏈路層、網絡層、運輸層、應用層,如下圖所示。
可以看出,五層協議的原理體系結構將TCP/IP體系結構的網絡接口層又重新劃分為了物理層和數據鏈路層。
學到這里,我們對計算機網絡體系結構有了初步的了解,同時也產生了更多的疑問。例如:
計算機網絡體系結構為什么要分層?
各層的主要任務是什么?
下面,我們就來繼續介紹計算機網絡體系結構分層的必要性,逐步解開這些疑惑。
2、計算機網絡體系結構分層的必要性
現在,我們就以前面介紹的五層協議的原理體系結構為例,介紹計算機網絡體系結構分層的必要性。
2.1 分層設計的意義
計算機網絡是個非常復雜的系統。早在最初的ARPANET設計時,就提出了分層的設計理念。分層可將龐大而復雜的問題轉化為若干較小的局部問題,而這些較小的局部問題就比較容易研究和處理。
下面我們按照由簡單到復雜的順序來看看,實現計算機網絡要面臨哪些主要問題,以及如何將這些問題劃分到相應的層次,層層處理。
2.2 兩臺計算機通過網線連接
首先來看最簡單的情況:兩臺計算機通過一條網線連接起來。對于這種最簡單的情況,我們需要考慮以下問題:
-
采用怎樣的傳輸媒體(介質),例如這是我們常見的雙絞線網線。
-
在計算機上采用怎樣的物理接口來連接傳輸媒體,例如這是RJ45以太網接口。
-
還有需要考慮的問題是使用怎樣的信號來表示比特0和1,例如使用這樣的方波信號,低電平表示0,高電平表示1。
解決了這些問題,兩臺計算機就可以通過信號來傳輸比特0或1了。我們可以將這些問題劃歸到物理層。
這里我們需要說明兩點:
-
嚴格來說,傳輸媒體并不屬于物理層,它并不包含在體系結構之中。
-
計算機網絡中傳輸的信號并不是我們舉例的方波信號。我們之所以舉例成方波信號是為了讓初學者容易理解,在學習本身就不容易理解的概念——抽象的計算機網絡體系結構時,不讓其他技術細節再給大家造成學習障礙。
2.3 簡單擴展:總線型網絡
實用的計算機網絡一般都由多臺主機構成。例如主機A、B、C、D通過總線互聯,構成了一個總線型網絡。
假設我們已經解決了物理層的問題,也就是說主機間可以發送信號來傳輸比特0或者1了。我們來看看在這樣一個總線型的網絡上,還面臨什么需要解決的問題。
如圖所示,主機A要給主機C發送數據,但是表示數據的信號會通過總線傳播到總線上的每一個主機。
那么問題來了:
主機C如何知道該數據是發給自己的,自己要接受?
而主機B和D又如何知道該數據并不是發送給自己的,自己應該拒絕?
這就很自然地引出了如何標識網絡中各主機的問題,也就是主機編址問題,如MAC地址。
大家可能聽說過網卡上的MAC地址,其實它就是主機在網絡中的地址。主機在發送數據時,應該給數據附加上目的地址。當其他主機收到后,根據目的地址和自身地址來決定是否接收數據。
這就又引出了一個問題:目的主機如何從信號所表示的一連串比特流中區分出地址和數據?也就是需要解決分組的封裝格式問題。
另外,對于總線型的網絡還會出現下面這種典型的問題:
如上圖所示,某個時刻總線是空閑的(也就是沒有主機使用總線來發送數據),片刻之后,主機B和D同時向總線發送數據,這必然會造成信號碰撞。因此,如何協調各主機征用總線也是必須要解決的問題。
需要說明的是,這種總線型的網絡早已淘汰,現在常用的是使用以太網交換機將多臺主機互聯形成的交換式以太網,如下圖所示。
那么以太網交換機又是如何實現的呢?我們將這些問題全部劃歸到數據鏈路層。
到這里大家可能會發現,只要解決了物理層和數據鏈路層各自所面臨的問題,我們就可以實現分組在一個網絡上傳輸了。沒錯,確實是這樣。
但是我們每天都會使用的英特網是由非常多的網絡和路由器互連起來的。僅解決物理層和數據鏈路層的問題還是不能正常工作。
2.4 多網絡互連:小型互聯網示例
我們來看這個例子:這是一個由三個路由器、四個網絡互聯起來的小型互聯網。我們可以把它看作是英特網中很小的一部分。
在之前的例子中,僅有一個網絡,我們不需要對網絡進行標識。而在本例中有多個網絡,很顯然,我們面臨著如何標識各網絡以及各網絡中各主機的問題。換句話說,也就是網絡和主機共同編制的問題。
相信大家一定聽過IP地址。例如下圖標識的網絡N1中各設備的IP地址。
該類IP地址的前3個十進制數用來標識網絡,第四個十進制數用來標識主機在本地網絡中的位置。網絡N1的網絡號為192.168.1,該網絡上的筆記本電腦、服務器以及路由器接口的IP地址的前三個數應該都是192.168.1,因為他們都在網絡N1上,而第四個十進制數分別為1、2、254,各不相同,用來標識他們自己。網絡N2上各設備的IP地址也是同理。
2.5 路由問題:路徑選擇與轉發
我們再來看另一個問題:源主機與目的主機之間的傳輸路徑往往不止一條。分組從源主機到目的主機可走不同的路徑。這樣就引出了路由器如何轉發分組的問題,以及如何進行路由選擇的問題。我們將這些問題全部劃歸到網絡層。
至此我們解決了物理層、數據鏈路層以及網絡層各自的問題,則可以實現分組在網絡間傳輸的問題。
但是對于計算機網絡應用而言,這仍然不夠。
2.6 應用通信:進程間交互問題
例如,假設這臺主機中運行著兩個與網絡通信相關的應用進程:一個是瀏覽器進程,另一個是QQ進程;這臺服務器中運行著與網絡通信相關的服務器進程。某個時刻主機收到了來自服務器的分組,那么這些分組應該交給瀏覽器進程處理呢?還是應該交給QQ進程處理?
這就引出了我們如何標識與網絡通信相關的應用進程,進而解決進程之間基于網絡通信的問題。
另外,如果某個分組在傳輸過程中出現了誤碼,或者由于路由器繁忙導致路由器丟棄分組,換句話說,若出現傳輸錯誤,應該如何處理?這也是需要解決的問題。
我們將這些問題全部劃歸到運輸層。
至此我們解決了物理層、數據鏈路層、網絡層以及運輸層各自的問題,則可以實現進程之間基于網絡的通信。
2.7 實現網絡應用:應用層功能
在此基礎上,我們只需制定各種應用層協議,并按協議標準編寫相應的應用程序,通過應用進程間的交互,即可完成特定的網絡應用。
比如支持萬維網應用的HTTP協議、支持電子郵件的SMTP協議、支持文件傳送的FTP協議等。
我們將這些問題全部劃歸到應用層。
2.8 總結各層問題
至此我們將實現計算機網絡所需要解決的各種主要問題分別劃歸到了原理體系結構的五個層次之中:
請大家思考一下這樣一個問題:假設你是一名程序員,要編程解決實現計算機網絡所面臨的所有軟件問題,那么你是愿意將這些問題全部放在一個模塊中編程實現呢?還是愿意將它們劃分到不同的模塊中逐模塊編程實現?
相信你一定會選擇后者。
3、計算機網絡體系結構分層思想舉例
接下來,我們將通過一個具體的網絡通信實例來看看計算機網絡體系結構的分層處理方法。
3.1 網絡拓撲與通信場景
假設網絡拓撲如下圖所示:
-
主機屬于網絡N1。
-
Web服務器屬于網絡N2。
-
N1和N2通過路由器互聯。
我們使用主機中的瀏覽器來訪問Web服務器。當輸入網址后,主機會向Web服務器發送請求,Web服務器收到請求后會發回相應的響應。主機的瀏覽器收到響應后,將其解析為具體的網頁內容顯示出來。
需要說明的是,我們給出的只是一個簡化的示意過程。這是因為本次介紹的重點是計算機網絡體系結構分層處理方法,而不是瀏覽器和Web服務器的實際交互過程。
主機和Web服務器之間基于網絡的通信,實際上是主機中的瀏覽器應用進程與Web服務器中的Web服務器應用進程之間的基于網絡的通信。
那么,體系結構的各層在整個過程中起到怎樣的作用呢?
3.2 主機端的封裝過程
我們從主機端,按體系結構自頂向下的順序來看:
3.2.1 應用層
應用層按HTTP協議的規定構建一個HTTP請求報文。這是該報文的內容,如下圖。應用層將HTTP報文交付給運輸層處理。
3.2.2 運輸層
運輸層給HTTP請求報文添加一個TCP首部,使之成為TCP報文段。下圖是TCP報文段的首部格式。該首部的作用主要是為了區分應用進程以及實現可靠傳輸。運輸層將TCP報文段交付給網絡層處理。
3.2.3 網絡層
網絡層給TCP報文段添加一個IP首部,使之成為IP數據報。下圖是IP數據報的首部格式。該首部的作用主要是為了使IP數據報可以在互聯網上傳輸,也就是被路由器轉發。網絡層將IP數據報交付給數據鏈路層處理。
3.2.4 數據鏈路層
數據鏈路層給IP數據報添加一個首部和一個尾部,使之成為幀。
假設網絡N1是以太網,IP數據報右邊是以太網幀首部的格式。該首部的作用主要是為了讓幀能夠在一段鏈路上或一個網絡上傳輸,能夠被相應的目的主機接收。IP數據報左邊是以太網幀尾部的格式,其作用是為了讓目的主機檢查所接收到的幀是否有誤碼。數據鏈路層將幀交付給物理層。
3.2.5 物理層
物理層將幀看作是比特流。
由于網絡N1是以太網,因此物理層還會給該比特流前面添加前導碼。這是前導碼的內容,其作用是為了讓目的主機做好接收幀的準備。
物理層將添加有前導碼的比特流變換成相應的信號,發送到傳輸媒體。然后信號通過傳輸媒體到達路由器。
3.3 路由器的處理過程
然后我們來看路由器的處理過程:
3.3.1 物理層
物理層將信號變換為比特流。
然后去掉前導碼后將其交付給數據鏈路層。
這實際上交付的是幀數據。
3.3.2 數據鏈路層
數據鏈路層將幀的首部和尾部去掉后,將其交付給網絡層。
這實際上交付的是IP數據報。
3.3.3 網絡層
網絡層解析IP數據報的首部,從中提取出目的網絡地址,然后查找自身的路由表,確定轉發端口以便進行轉發。
網絡層將IP數據報交付給數據鏈路層。
3.3.4 數據鏈路層(再次封裝)
數據鏈路層給IP數據報添加一個首部和一個尾部,使之成為幀。
數據鏈路層再次將幀交付給物理層。
3.3.5 物理層????????
物理層將幀看作是比特流。由于網絡N2是以太網,因此物理層還會給該比特流前面添加前導碼。物理層將添加有前導碼的比特流變換成相應的信號,發送到傳輸媒體。
3.4 Web服務器的處理過程
信號通過傳輸媒體到達Web服務器,接著以同樣類似的方式逐層解封,我們再來簡單看外部服務器的處理過程:
-
物理層 物理層將信號變換為比特流,然后去掉前導碼后將其交付給數據鏈路層。這實際上交付的是幀數據。
-
數據鏈路層 數據鏈路層將幀的首部和尾部去掉后,將其交付給網絡層。這實際上交付的是IP數據報。
-
網絡層 網絡層將IP數據報的首部去掉后,將其交付給運輸層。這實際上交付的是TCP報文段。
-
運輸層 運輸層將TCP報文段的首部去掉后,將其交付給應用層。這實際上交付的是HTTP請求報文。
-
應用層 應用層對HTTP請求報文進行解析,然后給主機發回HTTP響應報文。
與之前的過程類似,HTTP響應報文需要在外部服務器層層封裝,然后通過物理層變換成相應的信號,再通過傳輸媒體傳輸到路由器。路由器轉發該響應報文給主機。
3.6 主機端的接收與解封
主機通過物理層將收到的信號轉換為比特流之后,再通過逐層解封,最終取出HTTP響應報文。
到這里,對于計算機網絡體系結構的分層處理思想的講述就結束了。
4、計算機網絡體系結構中的專用術語
前面我們通過一個簡單的應用實例講述了計算機網絡體系結構的分層思想。相信大家已經對計算機網絡體系結構有了初步的認識。
接下來,我們將對計算機網絡體系結構中的專用術語進行介紹,以便大家對計算機網絡體系結構有更深入的理解。
需要說明的是,這些專用術語來源于OSI的七層協議體系結構,但也適用于TCP/IP的四層體系結構和五層協議原理體系結構。
我們將這些專用術語中最具代表性的三個作為分類名稱,它們分別是:
4.1 實體
實體是指任何可發送或接收信息的硬件或軟件進程。
例如這是通信雙方的五層原理體系結構,我們在他們的各層中用標有字母的小方格來表示實體。
有了實體的概念,我們再來看對等實體。對等實體是指通信雙方相同層次中的實體。例如圖中實體A與實體F為對等實體,實體B與實體G為對等實體,以此類推。
那么按照對等實體的定義,請大家思考一下:
通信雙方的網卡是不是對等實體呢?
通信雙方中正在進行通信的應用進程是不是對等實體呢?
回答是肯定的。因為首先根據實體定義可知,雙方的網卡都是實體,其次網卡在雙方都處于相同層次,因此是對等實體。應用進程同理。
4.2 協議
協議是控制兩個對等實體進行邏輯通信的規則的集合。
例如:
-
應用層對等實體在應用層協議的控制下進行邏輯通信
-
運輸層對等實體在運輸層協議的控制下進行邏輯通信
-
網絡層對等實體在網絡層協議的控制下進行邏輯通信
-
以此類推
需要注意的是,之所以稱為邏輯通信,是因為這種通信其實并不存在,它只是我們假設出來的一種通信。目的在于方便我們單獨研究體系結構某一層,而不用考慮其他層。
例如,當我們研究運輸層時,我們可以假設運輸層的對等實體在進行邏輯通信,而不用顧及其他層。
計算機網絡協議有三個要素,分別是語法、語義以及同步。
4.2.1 協議三要素:語法
定義通信雙方所交換信息的格式。
例如下圖是IP數據報的格式,其中的小格子稱為字段或域,表示字段的長度單位是bit(比特)。
語法就是定義了這些小格子的長度和先后順序。換句話說,語法定義了所交換信息有哪些字段,以及以何種順序構成。
需要說明的是,我們沒有必要記住每種分組的格式,只要我們能看懂它們的格式說明就可以了。
當然了,如果大家將來會從事計算機網絡相關的開發、教學研究等工作,像IP數據報、TCP報文段、HTTP報文等這些常見的分組格式,相信大家在學習和研究過程中自然而然就會記住了。
4.2.2 協議三要素:語義
定義通信雙方所要完成的操作。
比如前面舉的應用實例:主機要訪問遠程Web服務器,它會構建一個HTTP的GET請求報文,然后將其發送給Web服務器。Web服務器收到該報文并進行解析,知道這是一個HTTP的GET請求報文,于是就在自身內部查找所請求的內容,并將所找到的內容封裝在一個HTTP響應報文中發回給主機。主機收到HTTP響應報文后,對其進行解析,取出所請求的內容,并由瀏覽器解析顯示。
這個例子就可以體現出通信雙方收到分組后完成怎樣的操作,這是HTTP協議的語義所規定的。
4.2.3 協議三要素:同步
定義通信雙方的時序關系(雙方同時要相互進行的操作關系?)。請注意并不是指時鐘頻率同步。
例如TCP采用三報文握手建立連接的過程。要想進行運輸層TCP實體間的邏輯通信,首先必須建立連接。從連接建立的過程就可以看出,TCP客戶端和TCP服務器之間的時序關系以及各自的狀態轉換。只有雙方建立連接后才能進行TCP數據傳輸。如下圖
這個例子可以充分體現計算機網絡協議三要素中的同步。
4.3 服務
有了協議的概念,我們再來介紹服務。
在協議的控制下,兩個對等實體間的邏輯通信使得本層能夠向上一層提供服務。換句話說,要實現本層協議,還需要使用下面一層所提供的服務。
例如下圖所示狀態:
物理層對等實體在物理層協議的控制下向數據鏈路層提供服務;
數據鏈路層對等實體享受物理層提供的服務,并在數據鏈路層協議的控制下進行邏輯通信,給網絡層提供服務;
網絡層對等實體享受數據鏈路層提供的服務,并在網絡層協議的控制下進行邏輯通信,給運輸層提供服務;
運輸層對等實體享受網絡層提供的服務,并在運輸層協議的控制下進行邏輯通信,給應用層提供服務;
應用層對等實體享受運輸層提供的服務,并在應用層協議的控制下進行邏輯通信,給其上層也就是用戶提供服務。
很明顯,協議是水平的,而服務是垂直的。
需要特別注意的是:
實體看得見相鄰下層所提供的服務,但并不知道實現該服務的具體協議。換句話說,下層的協議對上層的實體是透明的。
這就好比我們肯定看得見手機為我們提供的各種服務,但我們只是享受這些服務,而沒有必要弄懂手機的工作原理。
4.4 服務訪問點
服務訪問點,是指在同一系統中,相鄰兩層的實體交換信息的邏輯接口,用于區分不同的服務類型。
例如:
-
數據鏈路層的服務訪問點為幀的類型字段
-
網絡層的服務訪問點為IP數據報首部中的協議字段
-
運輸層的服務訪問點為端口號
上層要使用下層所提供的服務,必須通過與下層交換一些命令,這些命令稱為服務原語。
4.5 PDU和SDU
在計算機網絡體系結構中,對通信雙方所交互的數據包有專門的術語:
我們把對等層次之間傳送的數據包稱為該層的協議數據單元(Protocol Data Unit),英文縮寫詞為PDU。
例如:
-
物理層對等實體邏輯通信的數據包稱為比特流;
-
數據鏈路層對等實體邏輯通信的數據包稱為幀;
-
網絡層對等實體邏輯通信的數據包稱為分組,如果使用IP協議,也稱為IP數據報;
-
運輸層對等實體邏輯通信的數據包一般根據協議而定:使用TCP協議則稱為TCP報文段;使用UDP協議則稱為UDP用戶數據報;
-
應用層對等實體邏輯通信的數據包一般稱為應用報文。
上述各層數據包可以統稱為協議數據單元(PDU)。
我們把同一系統內層與層之間交換的數據包稱為服務數據單元(Service Data Unit),英文縮寫詞為SDU。如下圖紅色框出部分。
多個服務數據單元(SDU)可以合成為一個協議數據單元(PDU),一個服務數據單元(SDU)也可以劃分為幾個協議數據單元(PDU)。
OK,講到這里,關于計算機網絡體系結構的相關專業術語也講述完畢了。也使我們更深入地了解了計算機網絡體系結構以及其中的一些專用術語。
最后,整理一下所講述的常用專業術語,如下圖所示
5、小結
到這里我們計算機網絡體系結構的四大板塊內容就結束了。相對來說,這些內容比較抽象。
如果大家一時無法完全理解,可以不用鉆牛角尖,暫時放過去。隨著后續課程的學習,大家會感覺到計算機網絡體系結構不再抽象難懂,它的分層思想是多么優美的設計哲學,其中的這些術語又是多么的貼切。
以上便是本次文章的所有內容,歡迎各位朋友在評論區討論,本人也是一名初學小白,愿大家共同努力,一起進步吧!
鑒于筆者能力有限,難免出現一些紕漏和不足,望大家在評論區批評指正,謝謝!