這是重點和難點,抽象概念比較多,學習的時候要多思考。
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協定提供網絡互連服務
而TCP協定在享受IP協定提供的網絡互聯服務的基礎上,可向應用層的相應協定提供可靠傳輸的服務。UDP協定在享受IP協定提供的網絡互聯服務的基礎上,可向應用層的相應協定提供不可靠傳輸的服務。
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請求封包,内容如下
應用層将HTTP請求傳遞給運輸層處理,運輸層給HTTP封包添加一個TCP首部,使之成為TCP封包段。下圖為TCP封包段的首部格式,該首部的作用主要是為了區分應用程序,以及實作可靠傳輸。
運輸層将TCP封包段傳遞給網絡層處理,網絡層給TCP封包段添加一個IP首部,使之成為IP資料報,IP資料報的首部格式如下,該首部的作用是使IP資料報可以在網際網路上傳輸。也就是被路由器轉發。
網絡層将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實體:
任何可發送或接收資訊的硬體和軟體程序,下圖中的字母
對等實體:通信雙方相同層次中的實體
1.5.4.2協定:
邏輯通信的規則的集合,這種通信并不存在,隻是我們假設出來的。目的在于我們可以專注研究一層而不用考慮其他層。
例如當我們在研究運輸層時我們可以看成運輸層的對等實體在進行邏輯通信 ,而不用考慮其他層。
計算機網絡協定有三個要素:
- 文法就是定義這些小格子的長度和先後順序。換句話說:文法定義了所交換資訊由哪些字段以及何種順序構成。格式不需要記住,能看懂就行。
- 語義:定義收發雙方要完成的操作。主機要通路伺服器,會建構一個HTTP的GET請求封包,然後将其發送給web伺服器。web伺服器收到該封包并進行解析。知道這是一個HTTP的GET請求封包。于是就在自身内部查找所請求的内容。并将找到的内容封裝到一個HTTP響應封包中發回該主機。主機收到HTTP響應封包之後對其進行解析,取出所請求的内容并由浏覽器解析顯示。這個例子就可以展現出通信雙方收到分組後完成怎樣的操作。這是HTTP協定的語義所規定的。
- 同步:定義通信雙方的時序關系。比如TCP三向交握過程可以看出兩個主機之間的時序和狀态轉換。
- 隻有雙方建立連接配接之後才可以進行資料傳輸。這個例子充分展現了同步。
1.5.4.3 服務:
在協定的控制下,兩個對等實體間的邏輯通信使得本層能夠向上一層提供服務。
協定是水準的,而服務是垂直的。
特别注意的是:實體看得見下層所提供的服務,但并不知道該服務的具體協定。我們看的見手機為我們提供的服務,鬧鐘啊,打電話啊,但是我們不知道具體實作。
1.5.4.4 服務通路點
在同一系統相鄰兩層的實體交換資訊的邏輯接口,用于區分不同的服務類型。
例如:資料鍊路層的服務通路點為幀的“類型”字段
網絡層的服務通路點為IP資料報首部中的“協定字段”
運輸層的服務通路點為“端口号”
1.5.4.5 服務原語
上層使用下層所提供的服務必須通過與下層交換一些指令,這些指令稱為服務原語。
1.5.4.6 協定資料單元
對等層次之間傳送的資料包稱為該層的協定資料單元。
實體層的稱為 :比特流
資料鍊路層的稱為: 幀
網絡層的稱為: IP資料報或分組