1.5 計算機網路體系結構
這是重點和難點,抽象概念比較多,學習的時候要多思考。
1.5.1 常見的計算機網路體系結構
為了使不同體系結構的計算機網路能夠互連,國際組織1977年成立專門機構研究該問題,不久他們就研究出一個使所有計算機在世界範圍內互連成網的框架,也就是著名的“開放系統互連參考模型”,簡稱OSI。
20世紀90年代初期,雖然標準已經註冊出來了,但是因特網已經搶先在全世界覆蓋了相當大的範圍,因特網從1983年開始使用TCP/IP協議族,並逐步演變成TCP/IP參考模型
在過去,制訂標準的人往往是專家學者。但現在,許多公司都紛紛擠進各種各樣的標準化組織,使得技術標準有著濃厚的商業氣息。
OSI標準失敗的原因可歸納為:
1)OSI的專家們缺乏實戰經驗,完成OSI標準時沒有商用驅動力
2)OSI本身體系結構複雜,實現難度大,效率低
3)OSI研發週期長,因而使得其他那些按照他標準生產的裝置無法進入市場
4)OSI層次劃分不合理,有些功能在多個體系重複出現
因為IP的意思是網際,所以TCP/IP的網路層叫網際層。
我們自己的電腦帶有TCP/IP協議族,路由器也帶有TCP/IP協議族,只不過路由器只包含網路介面層和網際層。
TCP/IP的網路介面層並沒有強制規定要有什麼內容,這樣做的目的是可以互連全世界各種不同的網路介面。比如有線的乙太網介面,無線區域網的WIFI介面。
因此,本質上TCP/IP協議只有上面的三層。
-
IP協議是TCP/IP中的網際層的核心協議。
-
TCP和UDP是TCP/IP體系結構運輸層的兩個重要的協議
-
應用層包含了大量的應用層協議,例如HTTP,SMTP,DNS,RTP等
IP協議可以將不同的網路介面進行互連,並向其上的TCP協議和UDP協議提供網路互連服務
IP協議作為TCP/IP中的核心協議,一方面負責互連不同的網路介面。另一方面為各種網路應用提供服務
TCP/IP體系中有大量的協議,IP協議和TCP協議是其中兩個非常重要的協議,因此,用TCP/IP這兩個協議來表示整個協議大家族。在嵌入式開發領域,TCP/IP協議族常稱為TCP/IP協議棧。這是因為TCP/IP協議體系的分層結構,與資料結構中的棧,在圖形畫法上是類似的。
因為TCP/IP協議的網路介面層是沒有實現的,OSI的又太多了,所以我們學習的時候,採用一種折中的思想。我們學習5層-原理體系結構。
1.5.2 分層的必要性
計算機網路是個非常複雜的系統。早在最初的APPANET設計時就提出了分層的設計概念
分層可以將龐大複雜的問題,轉換成若干較小的區域性問題,而這些較小的區域性問題就比較易於研究和處理
下面我們按照簡單到複雜的順序,來看看實現計算機網路要面臨哪些主要的問題,以及如何將這些問題劃分到對應的層次,層層處理。
先來看最簡單的兩臺:
注意:
-
傳輸媒體一般不認為是物理層的。
-
訊號傳輸的時候並不是我們畫的這種方波01訊號,這個只是方便大家學習。
實用的計算機網路,一般都由多臺主機構成。
假設我們已經解決了物理層的問題,也就是說主機間可以傳送訊號來傳輸位元0或1了。
我們來看看在這樣一個匯流排型的網路上還需要解決什麼問題。
A傳送資料給C,但是表示資料的訊號會通過匯流排傳播到匯流排的每一個主機。
那麼問題就來了,主機C如何知道是發給自己的,自己要接受?而主機B.D.E又如何知道該資料並不是傳送給自己的,自己應該拒絕呢?
這就很自然的引出瞭如何標識網路中個主機的問題。也就是主機編址問題。大家可能聽說過網絡卡上的MAC地址,其實他就是主機在網路中的地址。
主機在傳送資料時,應該給資料附加上目的地址。當其他主機收到後,看一下目的地址和自己的地址是否匹配,來決定是否接受資料。這就又引出了一個問題:目的主機如何從所表示的一連串位元流中區分出地址和資料?也就是需要解決分組的封裝格式的問題。
另外對於匯流排型的網路,還會出現下面這種典型的問題:某個時刻匯流排是空閒的,也就是沒有主機使用匯流排來發送資料,一會,主機B和D同時向匯流排傳送資料。這必然會造成訊號碰撞。
因此,如何協調各主機爭用主線,也是必須要解決的問題。
需要說明的是,這種匯流排型的早以淘汰,現在使用的是乙太網交換機將多臺主機互連形成的交換式乙太網。
那麼乙太網交換機又是如何實現的呢?
我們將這些問題全部劃分到資料鏈路層。
到目前為止大家發現,只要解決了物理層和資料鏈路層各自所面臨的問題,我們就可以實現分組在一個網路上實現傳輸了。但是我們每天都會使用的因特網是由非常多的網路和路由器互連起來的,僅解決物理層和資料鏈路層的問題,還是不能正常工作。
我們來看這個例子:
這是一個由3個路由器,4個網路組合起來的小型網際網路。我們可以把它看做因特網中很小的一部分,在之前的例子中,僅有一個網咯,我們不需要對網路進行標識,而在本例中,有多個網路。很顯然,我們面臨著如何標識各網路以及網路中各主機的問題?
換句話說,也就是網路和主機共同編址的問題。相信同學們一定聽過IP地址,例如這是網路N1中各裝置的網路地址
該類IP地址的前三個10進位制數用來標識網路,第四個10進位制數用來標識主機。
在本例中,網路N1的網路號為192,168 ,1。該網路上的筆記本,主機,路由器的IP地址的前三個數應該都是192,168,1。第四個十進位制數分別為1,2,254。用來標識他們自己。
我們再來看一個問題,源主機和目的主機之間的路徑不只一條,分組可走不同的路勁到達目的主機。這樣就引出了路由器如何轉發分組的問題?以及如何進行路由選擇的問題?
我們將這些問題全部劃分到網路層
到目前為止,我們解決了物理層,資料鏈路層,網路層各自的問題。則可以實現分組在網路間傳輸的問題。但是對於計算機網路應用而言這仍然不夠。
比如,假設這臺主機中執行著兩個與網路通訊相關的應用程序,瀏覽器程序和qq程序
另外一臺伺服器執行著與網路通訊相關的伺服器程序。
某個時刻,主機收到來自伺服器的分組,那麼這些分組應該交給瀏覽器程序處理呢?還是交給QQ程序處理呢?
這就引出了我們如何標識與網路通訊相關的應用程序問題?進而解決程序之間基於網路的通訊問題。
另外,如果某個分組在傳輸過程中出現了誤碼,或者由於路由器繁忙導致路由器丟失分組,換句話說:若出現傳輸錯誤,應該如何處理?
我們將這些問題全部劃分到運輸層。
解決了上面的問題的話我們就可以實現程序之間基於網路的通訊。
在此基礎上,只需制定各種應用層協議,並按照協議標準編寫相應的應用程式。通過應用程序間的互動來完成特定的網路應用。例如,支援全球資訊網應用的HTTP協議,支援電子郵件的SMTP協議,支援檔案傳送的FTP協議等。我們將這些問題全部劃分到應用層。
總結:
1.5.3 分層思想舉例
假設網路拓撲如下,主機屬於網路N1,伺服器屬於網路N2,N1和N2通過路由器互連。
我們使用主機中的瀏覽器來訪問web伺服器,當輸入網址後,主機會向web伺服器傳送請求。web伺服器收到請求後,會發回相應的響應
主機的瀏覽器收到相應後,將其解析為具體的網頁內容顯示出來。
主機和web伺服器之間基於網路的通訊,實際上是主機中的瀏覽器應用程序與web伺服器中的web伺服器應用程序之間基於網路的通訊。
那麼體系結構中的各層在體系結構中起到什麼樣的作用呢?
應用層按照HTTP請求協議的規定,構建一個HTTP請求報文,內容如下
網路層將IP資料報交付給資料鏈路層處理,資料鏈路層給IP資料報新增一個首部和一個尾部使之成為幀
假設網路N1是乙太網,下面為乙太網幀首部的格式。
下面為乙太網幀尾部的格式
其作用是為了讓目的主機檢查,所接收到的幀是否有誤碼。
資料鏈路層將幀交付給物理層,物理層將幀看做是位元流。
由於網路N1是乙太網,因此物理層還會給位元流前面新增前導碼。
前導碼的內容如下
物理層將新增有前導碼的位元流,變換成相應的訊號傳送到傳輸媒體,
我們來看路由器的處理過程。路由器的物理層將訊號變換為位元流,
然後去掉前導碼後,將其交付給資料鏈路層
這實際上交付的是幀,資料鏈路層將幀的首部和尾部去掉後,將其交付給網路層。這實際上交付的是IP資料報。
網路層解析IP資料報的首部,從中提取出目的網路地址,然後查詢自身的路由表,確定轉發埠,以便進行轉發。
網路層將IP資料報交付給資料鏈路層,資料鏈路層給IP資料報新增一個首部和一個尾部使之稱為幀
資料鏈路層將幀交付給物理層,物理層將幀看做是位元流,由於網路N2是乙太網,因此物理層還會給該位元流前面新增前導碼,
物理層將新增有前導碼的位元流,變換成相應的訊號傳送到傳輸媒體。
訊號通過傳輸媒體到達web伺服器。我們來看web伺服器的處理過程。
物理層將訊號變換為位元流,去掉前導碼,交給資料鏈路層。這實際上交付的是幀
資料鏈路層將幀的首部和尾部去掉後,將其交付給網路層,這實際上交付的是IP資料報
網路層將IP資料報去掉IP首部之後,將其交付給運輸層,這實際上交付的是TCP報文段
運輸層將TCP報文段的首部去掉之後,將其交付給應用層,這實際上交付的是HTTP請求報文。應用層對HTTP請求報文進行解析,然後給主機發回HTTP響應報文,與之前的過程類似,HTTP響應報文需要在web伺服器層層封裝,然後通過物理層變換成相應的訊號,再通過傳輸媒體傳輸到路由器。路由器轉發該響應報文給主機,主機通過物理層將收到的訊號轉換為位元流,之後通過逐層解封,最終取出HTTP響應報文
1.5.4 專用術語
1.5.4.1實體:
任何可傳送或接收資訊的硬體和軟體程序,下圖中的字母
控制兩個對等實體進行邏輯通訊的規則的集合,這種通訊並不存在,只是我們假設出來的。目的在於我們可以專注研究一層而不用考慮其他層。
例如當我們在研究運輸層時我們可以看成運輸層的對等實體在進行邏輯通訊 ,而不用考慮其他層。
計算機網路協議有三個要素:
- 語法:定義所交換資訊的格式
-
語義:定義收發雙方要完成的操作。主機要訪問伺服器,會構建一個HTTP的GET請求報文,然後將其傳送給web伺服器。web伺服器收到該報文並進行解析。知道這是一個HTTP的GET請求報文。於是就在自身內部查詢所請求的內容。並將找到的內容封裝到一個HTTP響應報文中發回該主機。主機收到HTTP響應報文之後對其進行解析,取出所請求的內容並由瀏覽器解析顯示。這個例子就可以體現出通訊雙方收到分組後完成怎樣的操作。這是HTTP協議的語義所規定的。
-
只有雙方建立連線之後才可以進行資料傳輸。這個例子充分體現了同步。
1.5.4.3 服務:
協議是水平的,而服務是垂直的。
特別注意的是:實體看得見下層所提供的服務,但並不知道該服務的具體協議。我們看的見手機為我們提供的服務,鬧鐘啊,打電話啊,但是我們不知道具體實現。
在同一系統相鄰兩層的實體交換資訊的邏輯介面,用於區分不同的服務型別。
例如:資料鏈路層的服務訪問點為幀的“型別”欄位
網路層的服務訪問點為IP資料報首部中的“協議欄位”
運輸層的服務訪問點為“埠號”
1.5.4.5 服務原語
上層使用下層所提供的服務必須通過與下層交換一些命令,這些命令稱為服務原語。
1.5.4.6 協議資料單元
對等層次之間傳送的資料包稱為該層的協議資料單元。
物理層的稱為 :位元流
資料鏈路層的稱為: 幀
網路層的稱為: IP資料報或分組