TCP IP協議棧與資料報封裝(1)

2021-06-10 06:26:39 字數 3179 閱讀 7555

tcp/ip

網路協議棧分為應用層(

)、傳輸層(

transport

)、網路層(

network

)和鏈路層(

link

)四層。如下圖所示。

兩台計算機通過

tcp/ip

協議通訊的過程如下所示。

傳輸層及其以下的機制由核心提供,應用層由使用者程序提供(後面將介紹如何使用

socket api

編寫應用程式),應用程式對通訊資料的含義進行解釋,而傳輸層及其以下處理通訊的細節,將資料從一台計算機通過一定的路徑傳送到另一台計算機。應用層資料通過協議棧發到網路上時,每層協議都要加上乙個資料首部(

header

),稱為封裝(

encapsulation

),如下圖所示。

不同的協議層對資料報有不同的稱謂,在傳輸層叫做段(

segment

),在網路層叫做資料報(

datagram

),在鏈路層叫做幀(

frame

)。資料封裝成幀後發到傳輸介質上,到達目的主機後每層協議再剝掉相應的首部,最後將應用層資料交給應用程式處理。

上圖對應兩台計算機在同一網段中的情況,如果兩台計算機在不同的網段中,那麼資料從一台計算機到另一台計算機傳輸過程中要經過乙個或多個路由器,如下圖所示。

其實在鏈路層之下還有物理層,指的是電訊號的傳遞方式,比如現在乙太網通用的網線(雙絞線)、早期乙太網採用的的同軸電纜(現在主要用於有線電視)、光纖等都屬於物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等。集線器(

hub)是工作在物理層的網路裝置,用於雙絞線的連線和訊號中繼(將已衰減的訊號再次放大使之傳得更遠)。

鏈路層有乙太網、令牌環網等標準,鏈路層負責網絡卡裝置的驅動、幀同步(就是說從網線上檢測到什麼訊號算作新幀的開始)、衝突檢測(如果檢測到衝突就自動重發)、資料差錯校驗等工作。交換機是工作在鏈路層的網路裝置,可以在不同的鏈路層網路之間**資料幀(比如十兆乙太網和百兆乙太網之間、乙太網和令牌環網之間),由於不同鏈路層的幀格式不同,交換機要將進來的資料報拆掉鏈路層首部重新封裝之後再**。

網路層的

ip協議是構成

internet

的基礎。

internet

上的主機通過

ip位址來標識,

internet

上有大量路由器負責根據

ip位址選擇合適的路徑**資料報,資料報從

internet

上的源主機到目的主機往往要經過十多個路由器。路由器是工作在第三層的網路裝置,同時兼有交換機的功能,可以在不同的鏈路層介面之間**資料報,因此路由器需要將進來的資料報拆掉網路層和鏈路層兩層首部並重新封裝。

ip協議不保證傳輸的可靠性,資料報在傳輸過程中可能丟失,可靠性可以在上層協議或應用程式中提供支援。

網路層負責點到點(

point-to-point

)的傳輸(這裡的「點

」指主機或路由器),而傳輸層負責端到端(

end-to-end

)的傳輸(這裡的「端

」指源主機和目的主機)。傳輸層可選擇

tcp或

udp協議。

tcp是一種面向連線的、可靠的協議,有點像打**,雙方拿起**互通身份之後就建立了連線,然後說話就行了,這邊說的話那邊保證聽得到,並且是按說話的順序聽到的,說完話掛機斷開連線。也就是說

tcp傳輸的雙方需要首先建立連線,之後由

tcp協議保證資料收發的可靠性,丟失的資料報自動重發,上層應用程式收到的總是可靠的資料流,通訊之後關閉連線。

udp協議不面向連線,也不保證可靠性,有點像寄信,寫好信放到郵筒裡,既不能保證信件在郵遞過程中不會丟失,也不能保證信件是按順序寄到目的地的。使用

udp協議的應用程式需要自己完成丟包重發、訊息排序等工作。

目的主機收到資料報後,如何經過各層協議棧最後到達應用程式呢?整個過程如下圖所示。

乙太網驅動程式首先根據乙太網首部中的

「上層協議

」字段確定該資料幀的有效載荷(

payload

,指除去協議首部之外實際傳輸的資料)是ip、

arp還是

rarp

協議的資料報,然後交給相應的協議處理。假如是

ip資料報,

ip協議再根據

ip首部中的

「上層協議

」字段確定該資料報的有效載荷是

tcp、

udp、

icmp

還是igmp

,然後交給相應的協議處理。假如是

tcp段或

udp段,

tcp或

udp協議再根據

tcp首部或

udp首部的

「埠號」字段確定應該將應用層資料交給哪個使用者程序。

ip位址是標識網路中不同主機的位址,而埠號就是同一臺主機上標識不同程序的位址,

ip位址和埠號合起來標識網路中唯一的程序。

注意,雖然ip、

arp和

rarp

資料報都需要乙太網驅動程式來封裝成幀,但是從功能上劃分,

arp和

rarp

屬於鏈路層,

ip屬於網路層。雖然

icmp

、igmp

、tcp

、udp

的資料都需要

ip協議來封裝成資料報,但是從功能上劃分,

icmp

、igmp與ip

同屬於網路層,

tcp和

udp屬於傳輸層。

本文對icmp

、igmp

協議不做進一步介紹,有興趣的讀者可以看參考資料。

TCP IP協議棧與資料報封裝

tcp ip 網路協議棧分為應用層 傳輸層 transport 網路層 network 和鏈路層 link 四層。如下圖所示 該圖出自 tcpip 圖 36.1.tcp ip協議棧 兩台計算機通過 tcp ip 協議通訊的過程如下所示 該圖出自 tcpip 圖 36.2.tcp ip通訊過程 傳輸層...

TCP IP協議棧與資料報封裝

兩台計算機通過tcp ip協議通訊的過程如下所示.傳輸層及其以下的機制由核心提供,應用層由使用者程序提供 後面將介紹如何使用socket api編寫應用程式 應用程式對通訊資料的含義進行解釋,而傳輸層及其以下處理通訊的細節,將資料從一台計算機通過一定的路徑傳送到另一台計算機。應用層資料通過協議棧發到...

TCP IP協議棧與資料報封裝

另附 linux c程式設計一站式學習 圖 36.1.tcp ip協議棧 兩台計算機通過tcp ip協議通訊的過程如下所示 該圖出自 tcpip 圖 36.2.tcp ip通訊過程 傳輸層及其以下的機制由核心提供,應用層由使用者程序提供 後面將介紹如何使用socket api編寫應用程式 應用程式對...