1. 程式人生 > >TCP/IP四層模型

TCP/IP四層模型

TCP/IP協議族體系結構以及主要協議

TCP/IP協議族是一個四層協議系統,自底而上分別是資料鏈路層、網路層、傳輸層和應用層。每一層完成不同
的功能,且通過若干協議來實現,上層協議使用下層協議提供的服務。
在這裡插入圖片描述

資料鏈路層

資料鏈路層實現了網絡卡介面的網路驅動程式,以處理資料在物理媒介(比如乙太網、令牌環等)上的傳輸。

資料鏈路層兩個常用的協議是ARP協議(Address Resolve Protocol,地址解析協議)和RARP協議(ReverseAddress Resolve Protocol,逆地址解析協議)。它們實現了IP地址和機器實體地址(通常是MAC地址,乙太網、令牌環和802.11無線網路都使用MAC地址)之間的相互轉換。

網路層使用IP地址定址一臺機器,而資料鏈路層使用實體地址定址一臺機器,因此網路層必須先將目標機器的IP地址轉化成其實體地址,才能使用資料鏈路層提供的服務,這就是ARP協議的用途。

RARP協議僅用於網路上的某些無盤工作站。因為缺乏儲存裝置,無盤工作站無法記住自己的IP地址,但它們可以利用網絡卡上的實體地址來向網
絡管理者(伺服器或網路管理軟體)查詢自身的IP地址。執行RARP服務的網路管理者通常存有該網路上所有機器的實體地址到IP地址的對映。

網路層

網路層實現資料包的選路和轉發。
WAN(Wide Area Network,廣域網)通常使用眾多分級的路由器來連線分散的主機或LAN(Local Area Network,區域網),因此,通訊的兩臺主機一般不是直接相連的,而是通過多箇中間節點(路由器)連線的。網路層的任務就是選擇這些中間節點,以確定兩臺主機之間的通訊路徑。同時,網路層對上層協議隱藏了網路拓撲連線的細節,使得在傳輸層和網路應用程式看來,通訊的雙方是直接相連的。

網路層最核心的協議是IP協議(Internet Protocol,因特網協議)。IP協議根據資料包的目的IP地址來決定如何投遞它。如果資料包不能直接傳送給目標主機,那麼IP協議就為它尋找一個合適的下一跳(next hop)路由器,並將資料包交付給該路由器來轉發。多次重複這一過程,資料包最終到達目標主機,或者由於傳送失敗而被丟棄。可見,IP協議使用逐跳(hop by hop)的方式確定通訊路徑。

網路層另外一個重要的協議是ICMP協議(Internet Control Message Protocol,因特網控制報文協議)。它是IP協議的重要補充,主要用於檢測網路連線。
在這裡插入圖片描述

8位型別欄位用於區分報文型別。它將ICMP報文分為兩大類


差錯報文,這類報文主要用來回應網路錯誤,比如目標不可到達(型別值為3)和重定向(型別值為5);
查詢報文,這類報文用來查詢網路資訊,比如ping程式就是使用ICMP報文檢視目標是否可到達(型別值為8)的。
有的ICMP報文還使用8位程式碼欄位來進一步細分不同的條件。比如重定向報文使用程式碼值0表示對網路重定向,程式碼值1表示對主機重定向。
ICMP報文使用16位校驗和欄位對整個報文(包括頭部和內容部分)進行迴圈冗餘校驗(Cyclic Redundancy Check,CRC),以檢驗報文在傳輸過程中是否損壞。不同的ICMP報文型別具有不同的正文內容。

傳輸層

傳輸層為兩臺主機上的應用程式提供端到端(end to end)的通訊。與網路層使用的逐跳通訊方式不同,傳輸層只關心通訊的起始端和目的端,而不在乎資料包的中轉過程。

在這裡插入圖片描述

垂直的實線箭頭表示TCP/IP協議族各層之間的實體通訊(資料包確實是沿著這些線路傳遞的),而水平的虛線箭頭表示邏輯通訊線路。該圖中還附帶描述了不同物理網路的連線方法。可見,
資料鏈路層(驅動程式)封裝了物理網路的電氣細節;網路層封裝了網路連線的細節;傳輸層則為應用程式封裝了一條端到端的邏輯通訊鏈路,它負責資料的收發、鏈路的超時重連等。

傳輸層協議:TCP協議、UDP協議。

  • TCP協議(Transmission Control Protocol,傳輸控制協議)為應用層提供可靠的、面向連線的和基於流(stream)的服務。TCP協議使用超時重傳、資料確認等方式來確保資料包被正確地傳送至目的端,因此TCP服務是可靠的。使用TCP協議通訊的雙方必須先建立TCP連線,並在核心中為該連線維持一些必要的資料結構,比如連線的狀態、讀寫緩衝區,以及諸多定時器等。當通訊結束時,雙方必須關閉連線以釋放這些核心資料。TCP服務是基於流的。基於流的資料沒有邊界(長度)限制,它源源不斷地從通訊的一端流入另一端。傳送端可以逐個位元組地向資料流中寫入資料,接收端也可以逐個位元組地將它們讀出。

  • UDP協議(User Datagram Protocol,使用者資料報協議)則與TCP協議完全相反,它為應用層提供不可靠、無連線和基於資料報的服務。“不可靠”意味著UDP協議無法保證資料從傳送端正確地傳送到目的端。如果資料在中途丟失,或者目的端通過資料校驗發現數據錯誤而將其丟棄,則UDP協議只是單地通知應用程式傳送失敗。因此,使用UDP協議的應用程式通常要自己處理資料確認、超時重傳等邏輯。UDP協議是無連線的,即通訊雙方不保持一個長久的聯絡,因此應用程式每次傳送資料都要明確指定接收端的地址(IP地址等資訊)。基於資料報的服務,是相對基於流的服務而言的。每個UDP資料報都有一個長度,接收端必須以該長度為最小單位將其所有內容一次性讀出,否則資料將被截斷。

應用層

應用層負責處理應用程式的邏輯。
資料鏈路層、網路層和傳輸層負責處理網路通訊細節,這部分必須既穩定又高效,因此它們都在核心空間中實現。而應用層則在使用者空間實現,因為它負責處理眾多邏輯,比如檔案傳輸、名稱查詢和網路管理等。如果應用層也在核心中實現,則會使核心變得非常龐大。當然,也有少數伺服器程式是在核心中實現的,這樣程式碼就無須在使用者空間和核心空間來回切換(主要是資料的複製),極大地提高了工作效率。不過這種程式碼實現起來較複雜,不夠靈活,且不便於移植。

ping是應用程式,而不是協議,前面說過它利用ICMP報文檢測網路連線,是除錯網路環境的必備工具。

telnet協議是一種遠端登入協議,它使我們能在本地完成遠端任務。

OSPF(Open Shortest Path First,開放最短路徑優先)協議是一種動態路由更新協議,用於路由器之間的通訊,以告知對方各自的路由資訊。

DNS(Domain Name Service,域名服務)協議提供機器域名到IP地址的轉換。

應用層協議(或程式)可能跳過傳輸層直接使用網路層提供的服務,比如ping程式和OSPF協議。應用層協議(或程式)通常既可以使用TCP服務,又可以使用UDP服務,比如DNS協議。我們可以通過/etc/services檔案檢視所有知名的應用層協議,以及它們都能使用哪些傳輸層服務。

五層協議背後的思想:上層遮蔽下層細節,只使用其提供的服務。高內聚低耦合,每一層專注於其功能,各層之間的關係依賴不大。

資料包在每層有不同的格式,從上到下依次叫段,資料報,幀,資料從應用層通過協議棧向下傳遞,每經過一層加上對應層協議的報頭,最後封裝成幀傳送到傳輸介質上,到達路由器或者目的主機剝掉頭部,交付給上層需要者。這一過程稱為封裝,傳輸,分離,分用。