計算機網絡:TCP/IP 協議棧概述


參考模型

在網絡剛剛被搞出來的年代,通常只有同一個廠家生產的設備才能彼此通信,不同的廠家的設備不能兼容。這是因為沒有統一的標准去要求不同的廠家按照相同的方式進行通信,所以不同的廠家都閉門造車。為了解決這個問題,后來就產生出參考模型的概念。
參考模型是描述如何完成通信的概念模型,它指出了完成高效通信所需要的全部步驟,並將這些步驟划分為稱之為“層”的邏輯組。分層最大的優點是為上層隱藏下層的細節,即對於開發者來說,如果他們要開發或實現某一層的協議,則他們只需要考慮這一層的功能即可。其它層都無需考慮,因為其它層的功能有其它層的協議來完成,上層只需要調用下層的接口即可。參考模型的優點如下:

  1. 將網絡通信過程划分為更小、更簡單的組件,使得組件的開發、設計和排錯更為方便;
  2. 通過標准化網絡組件,讓不同的廠商能夠協作開發;
  3. 定義了模型每層執行的功能,從而鼓勵了行業標准化;
  4. 讓不同類型的網絡硬件和軟件能夠彼此通信;
  5. 避免讓對一層的修改影響其它層,從而避免妨礙開發工作。

協議

計算機網絡中的數據交換必須遵守事先約定好的規則,這些規則明確規定了所交換的數據的格式以及有關的同步問題,網絡協議 (network protocol)是為進行網絡中的數據交換而建立的規則、標准或約定。網絡協議有 3 個要素:

  1. 語法:數據與控制信息的結構或格式;
  2. 語義:需要發出何種控制信息,完成何種動作以及做出何種響應;
  3. 同步:事件實現順序的詳細說明。

OSI 模型

OSI 模型旨在以協議的形式幫助廠商生產兼容的網絡設備和軟件,讓不同廠商的網絡能夠協同工作。同時對於用戶而言,OSI 能幫助不同的主機之間傳輸數據。OSI 並非是具體的模型,而是一組指導原則,開發者以此為依據開發網絡應用。同時它也提供了框架,指導如何制定和實施網絡標准、制造設備,以及制定網絡互聯的方案。
OSI 模型包含 7 層,上三層指定了終端中應用程序如何彼此通信,以及如何與用戶交互,下四層指定了如何進行端到端數據傳輸。

應用層

上 3 層負責主機之間的應用程序通信,其中用戶界面位於應用層。應用層是用戶和計算機交互的層次,是用戶唯一能夠直接操作的場所。應用層可以讓應用程序能夠將信息沿着協議棧向下傳輸,充當了應用程序和下一層之間的接口。
應用層還負責確定目標通信方的可用性,並且判斷對方是否有足夠的資源。為什么應用層需要完成這個任務?因為很多網絡應用的發展很快,但是這些技術卻超過了現有物理網絡的極限。

表示層

表示層向應用層提供數據,並負責數據轉換和代碼格式化。表示層能夠保證從一個系統的應用層傳輸而來的數據可被另一個系統的應用層讀取。

會話層

會話層負責在表示層實體之間建立、管理和終止對話,對設備或節點之間的對話進行控制。簡而言之,會話層的基本功能是將不同應用程序的數據分離。

傳輸層

傳輸層將數據進行分段並重組為數據流,位於傳輸層的服務將來自上層應用的程序進行分段和重組,然后將它們合並到一個數據流中。傳輸層提供的是端到端的數據傳輸服務,並且可以在互聯網絡上的發送主機和目的主機之間建立邏輯連接。傳輸層提供的服務可以是有鏈接的,也可以是無連接的,可靠數據傳輸需要保證實現以下目標:

  1. 收到數據段后,向發送方進行確認;
  2. 重傳所有未得到確認的數據段;
  3. 數據段到達目的主機之后,可以按序排列;
  4. 確保數據流量不超過處理能力,避免擁塞、過載和丟包。


面向連接的服務應該具備以下特征:建立虛電路、使用排序技術、使用確認和使用流量控制。

網絡層

網絡層的任務是管理設備編址、跟蹤設備在網絡中的位置,並確認最佳的數據傳輸路徑,這意味着網絡層必須在位於不同網絡中的設備之間傳輸數據流。網絡層傳輸的分組有以下 2 種:

  1. 數據分組:用於在互聯網中傳輸用戶數據;
  2. 路由更新分組:路由器的網絡更新信息,將這些信息告知鄰接的路由器。這些分組是由路由選擇協議產生的,常見的有 RIP、OSPF 和 EIGRP 協議等。

路由器維護路由表來完成分組轉發,路由表包含網絡地址、接口和度量值的信息。因為路由器的每個接口都屬於不同的網絡,所以必須給網絡每個接口都分配不同的網絡表示號,且與同一個接口相連的每台主機都必須使用相同的網絡號。

數據鏈路層

數據鏈路層提供數據的物理傳輸,並且處理錯誤通知、網絡拓撲和流浪控制。鏈路層將報文封裝成數據幀,並加上鏈路層的報頭,包頭中有目標的硬件地址和源硬件地址。鏈路層傳輸數據的過程中,分組的本身沒有被修改過,而是封裝了必要的控制信息,以此實現通過不同的介質傳輸。
IEEE 以太網數據鏈路層包含 2 個子層:

  1. 介質訪問控制 (MAC) 子層:定義如何通過介質傳輸分組;
  2. 邏輯鏈路控制 (LLC) 子層:負責識別網絡層協議並進行封裝。

網絡層的設備需要確定網絡的位置,而鏈路層的設備要確定設備的位置。鏈路層值把幀轉發到目標硬件地址所屬的網段,如果目標設備和發送設備處於同一個網段,鏈路層設備將阻止它進入其他網段。

物理層

物理層具有發送和接收比特的功能,OSI 以標准的形式定義了物理層接頭和各種物理拓撲,讓不同的系統能彼此通信。

TCP/IP 協議棧

OSI 沒有被推廣

OSI 只獲得了一些理論研究的成果,但是因為一些原因沒有被推廣到商業層面上。原因包括:

  1. OSI 的專家們在完成 OSI 標准時沒有商業驅動力;
  2. OSI 的協議實現起來過分復雜,且運行效率很低;
  3. OSI 標准的制定周期太長,因而使得按 OSI 標准生產的設備無法及時進入市場;
  4. OSI 的層次划分也不太合理,有些功能在多個層次中重復出現。

四層協議系統

OSI 的七層協議體系結構的概念清楚,理論也較完整,但它既復雜又不實用。而網絡協議通常分不同層次進行開發,每一層分別負責不同的通信功能。TCP/IP 協議棧是一組不同層次上的多個協議的組合,它通常被認為是一個四層協議系統,每一層負責不同的功能:

  1. 鏈路層,通常包括操作系統中的設備驅動程序和計算機中對應的網絡接口卡,負責處理與電纜(或其他任何傳輸媒介)的物理接口細節
  2. 網絡層,有時也稱作互聯網層,處理分組在網絡中的活動,例如分組的選路。
  3. 運輸層,主要為兩台主機上的應用程序提供端到端的通信
  4. 應用層,負責處理特定的應用程序細節

但是 TCP/IP 最下面的網絡接口層(鏈路層)並沒有具體內容,因此實際應用的是綜合 OSI 和 TCP/IP 的優點的只有五層協議的體系結構。

分層的意義

大多數的網絡應用程序都被設計成客戶—服務器模式,服務器為客戶提供某種服務,例如 FTP 協議就是訪問服務器所在主機上的文件。在同一層上,雙方都有對應的一個或多個協議進行通信。應用程序通常是一個用戶進程,而下三層則一般在(操作系統)內核中執行。頂層與下三層之間還有另一個關鍵的不同之處,應用層關心的是應用程序的細節,而不是數據在網絡中的傳輸活動,下三層對應用程序一無所知,但它們要處理所有的通信細節。網絡接口層和應用層的目的是很顯然的——前者處理有關通信媒介的細節(以太網、令牌環網等),而后者處理某個特定的用戶應用程序(FTP、Telnet 等)。
因此我們可以得出分層的意義所在:分層可以為上層隱藏下層的細節,這樣上層的程序就不需要考慮下層的具體實現,只需要使用對應的接口即可。互聯網的目的之一,就是在應用程序中隱藏所有的物理細節

網絡層和傳輸層

從表面上看,網絡層和運輸層之間的區別不那么明顯,為什么要把它們划分成兩個不同的層次呢?為了理解這一點,我們必須把視野從單個網絡擴展到一組網絡。在 80 年代,網絡不斷增長的原因之一是:大家都意識到只有一台孤立的計算機構成的“孤島”沒有太大意義,於是就把這些孤立的系統組在一起形成網絡。到了 90 年代,我們又逐漸認識到這種由單個網絡構成的新的更大的“島嶼”同樣沒有太大的意義,於是人們又把多個網絡連在一起形成一個網絡的網絡,或稱作互連網 (internet)。
如圖是一個包含兩個網絡的互連網,通過一個路由器互相連接,我們可以划分出端系統(兩邊的兩台主機)和中間系統(中間的路由器)。應用層和運輸層使用端到端(End-to-end)協議,在圖中只有端系統需要這兩層協議。但是網絡層提供的是逐跳(Hop-by-hop)協議,兩個端系統和每個中間系統都要使用它。

在 TCP/IP 協議族中,網絡層 IP 提供的是一種不可靠的服務,它只是盡可能快地把分組從源結點送到目的結點。而另一方面,TCP 在不可靠的 IP 層上提供了一個可靠的運輸層,通過超時重傳、發送和接收端到端的確認分組等機制提供了可靠傳輸服務。由此可見,運輸層和網絡層分別負責不同的功能。

TCP/IP 協議分層

TCP 和 UDP 是兩種最為著名的運輸層協議,都使用 IP 作為網絡層協議。雖然 TCP 使用不可靠的 IP 服務,但它卻提供一種可靠的運輸層服務。UDP 為應用程序發送和接收數據報,但是與 UDP 是不可靠的,它不能保證數據報能安全無誤地到達最終目的。
IP 是網絡層上的主要協議,同時被 TCP 和 UDP 使用。TCP 和 UDP 的每組數據都通過端系統和每個中間路由器中的 IP 層在互聯網中進行傳輸。ICMP 是 IP 協議的附屬協議,IP 層用它來與其他主機或路由器交換錯誤報文和其他重要信息。IGMP 是 Internet 組管理協議。它用來把一個 UDP 數據報多播到多個主機。
ARP(地址解析協議)和 RARP(逆地址解析協議)是某些網絡接口(如以太網和令牌環網)使用的特殊協議,用來轉換 IP 層和網絡接口層使用的地址。

數據的收發

封裝

當應用程序用 TCP 傳送數據時,數據將被送入協議棧中,然后逐個通過每一層直到被當作一串比特流送入網絡,每一層對收到的數據都要增加一些首部信息(有時還要增加尾部信息)。TCP 傳給 IP 的數據單元稱作 TCP 報文段或簡稱為 TCP 段(TCPs egment),UDP 傳給 IP 的信息單元稱作 UDP 數據報(UDP datagram),IP 傳給網絡接口層的數據單元稱作 IP 數據報(IP datagram),通過以太網傳輸的比特流稱作幀(Frame)

由於 TCP、UDP、ICMP 和 IGMP 都要向 IP 傳送數據,因此 IP 必須在 IP 首部中表明數據屬於哪一層,在 IP 數據報中使用協議域字段實現。類似地許多應用程序都可以使用 TCP 或 UDP 來傳送數據,運輸層協議在生成報文首部時要存入一個應用程序的標識符,這就是所謂的端口號,TCP 和 UDP 把源端口號和目的端口號分別存入報文首部中。網絡接口分別要發送和接收 IP、ARP 和 RARP 數據,因此也必須在以太網的幀首部中加入標識指明生成數據的網絡層協議,這就是所謂的幀類型域

分用

當目的主機收到一個以太網數據幀時,數據就開始從協議棧中由底向上升,同時去掉各層協議加上的報文首部。每層協議盒都要去檢查報文首部中的協議標識,以確定接收數據的上層協議。這個過程稱作分用,協議使用目的端口號、源 IP 地址和源端口號進行解包的。

TCP/IP 通信過程

當用戶使用某個應用時一次網絡通信就開始了,例如用戶 A 給用戶 B 使用 QQ 發送一個消息。因為 QQ 是一款軟件,所以它屬於應用層,此時在應用層上發生的是進程和進程之間的通信,也就是用戶 A 需要將消息發送給用戶 B 的端系統上的 QQ 這個進程。通信開始后,進程將封裝好向下交付給傳輸層。
傳輸層接收到了應用層的信息后,如果是 UDP 則經過封裝后直接交給下一層,如果是 TCP 則需要建立 TCP 連接。所謂 TCP 連接此時可以先這么理解,傳輸層上發生的是端系統和端系統之間的通信,也就是這一層的任務是將信息送到目的主機上。而如果使用 TCP 就需要和目的主機建立一條連接,2 台主機通過這條連接來通信。無論是 TCP 還是 UDP,它們封裝好數據之后繼續向下傳遞。
網絡層接收到了傳輸層的信息后,就會進行路由,將信息發送給下一跳。因為網絡是由網絡節點和端系統組成的,端系統之間進行通信往往需要經過好幾個網絡節點的傳輸接力,網絡節點往往是路由器。網絡層上發生的是跳與跳之間的通信,路由器會通過路由表選擇最合適的下一條路由器,把數據傳輸過去。
獲得 IP 地址網絡就可以通嗎?不可能,因為 IP 地址是一種邏輯地址,不能代表物理層面上設備的位置。想要到達下一跳主機,網絡層就需要把數據繼續封裝交付給鏈路層。鏈路層使用的是 MAC 地址,MAC 地址也稱之為物理地址,通過 MAC 地址就可以找到具體的設備。
知道具體要傳輸給什么設備后,就可以把數據給物理層了。物理層就是實際在傳輸這些信息的地方,常用的物理介質有雙絞線、同軸電纜和光纜等。
無論是路由器還是目的主機,當收到從物理層傳過來,鏈路層接收到一個以太網數據幀時,數據就開始從協議棧中由底向上升開始“分用”。如果是路由器,在網絡層接收到鏈路層的數據時,會根據目的 IP 地址進行路由,然后繼續把數據給下一跳。如果是目的主機,在網絡層接收到鏈路層的數據時發現目的 IP 地址是自己的 IP 地址,就會去掉網絡層的頭把數據交給傳輸層。傳輸層收到網絡層傳上來的報文段時,將根據端口號確定這個數據是哪個應用程序的,最后把這個數據交給對應的進程完成通信。

參考資料

《TCP/IP 詳解 卷1:協議》(美)W.Richard Stevens 著,范建華 胥光輝 張濤 等譯,謝希仁 校,機械工業出版社
《計算機網絡(第七版)》 謝希仁 著,電子工業出版社
《CCNA 學習指南(第 7 版)》,[美] Todd Lammle 著,袁國忠 徐宏 譯,人民郵電出版社


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM