您好,登錄后才能下訂單哦!
TCP/IP網絡協議棧分為應用層(Application)、傳輸層( Transport)、網絡層(Network)和鏈路層(Link)四層。
1.數據鏈路層
實現了網卡接口的網絡驅動程序。
協議:ARP協議和RARP協議
ARP協議:目標機器IP地址—(ARP協議)→ 目標機器MAC地址→ 目標機器
RARP協議:(無盤工作站)MAC地址—(RARP協議)→IP地址
2.網絡層
實現數據包的選路和轉發。負責點對點(point to point)的傳輸(“點”:主機或路由器)。網絡層向上層協議隱藏了網絡拓撲連接的細節,在傳輸層和應用層看來通信雙方是直接相連的。
協議:IP協議,ICMP協議。
IP協議根據數據包的目的IP地址來決定如何投遞它。如果數據包不能直接發給目的主機,那么IP協議就為它尋找合適的下一跳路由器,并將數據包交付給該路由器來轉發。IP協議使用逐跳的方式確定通信路徑。
ICMP協議是IP協議重要的補充,用于檢測網絡連接。
3.傳輸層
傳輸層為兩臺主機上的應用程序提供端到端(end to end)的通信。傳輸層只關心通信的起始端和目的端,而不在乎數據包的中轉過程。
協議:TCP協議、UDP協議、SCTP協議
TCP協議 為應用層提供可靠的、面向連接和基于流(stream)的服務; | TCP協議使用超時重傳、數據確定等方式確認數據報被正確地發送至目的端 | 使用TCP協議通信的雙方必須先建立TCP連接,并在內核中為該連接維持一些必要的數據結構。通信結束時,雙方必須關閉連接以釋放這些內核數據。 | TCP協議是基于流的,數據沒有邊界(長度)限制。發送端可以逐個字節地向數據流中寫入數據,接收端也可以逐個字節將其讀出 |
UDP協議 為應用層提供不可靠、無連接、基于數據報的服務。 | UPD協議無法保證數據從發送端正確地傳到目的端。使用UDP協議的應用程序通常要自己處理數據確認、超時重傳等邏輯。 | UDP協議是無連接的,因此應用程序每次發送數據都要明確指定接收端的地址(IP地址等信息)。 | 每個UPD數據報都有一個長度,接收端必須以該長度為最小單位將其所有內容一次性讀出,否則數據將被截斷。 |
TCP是一種面向連接的,開放的協議,有點像打電話,雙方拿起電話互通身份后就建立了連接,然后說話就行了,這邊說話那邊保證聽得到,并且是按說話的順序聽到的,說完話掛機斷開連接。也就是說TCP傳輸的雙方需要首先建立連接,之后由TCP協議保證數據收發的可靠性,丟失的數據包自動重發,上層應用程序收到的總是可靠的數據流,通訊之后關閉連接。
UDP協議不面向連接,也不保證可靠性,有點像寄信,寫好信放進郵筒里,既不能保證信件在郵遞過程中不會丟失, 也不能保證信件是按順序寄到目的地的。使用UDP協議的應用程序需要自己完成丟包重發、消息排序等工作。
SCTP協議是為了在因特網上傳輸電話信號而設計的。
4.應用層
負責處理應用程序的邏輯
應用層協議(或程序)可能跳過傳輸層直接使用網絡層提供的服務,比如ping程序和OSPF協議。
應用層協議(或程序)通常既可以使用TCP服務,又可以使用UDP服務,比如DNS協議。
TCP/IP數據包的封裝
以太網幀使用6字節(48位)的目的物理地址和6字節(48位)的源物理地址(MAC地址)來表示通信的雙方。
協議類型字段有三種值,分別對應IP、ARP、RAPP。
以太網幀的數據長度規定最小46字節,最大1500字節,ARP和RARP數據包的長度不夠46字節,要在后面補充填位。最大值1500稱為以太網最大傳輸單元(MTU),不同的網絡類型有不同的MTU,如果一個數據包從以太網路由到撥號鏈路上,數據包的長度大于撥號鏈路的MTU,則需要對數據包進行分片(fragment)傳輸。
幀末尾的4字節CRC字段對幀的其他部分提供循環冗余校驗。
幀才是最終在網絡上傳送的字節序列。
TCP/IP數據包跨路由器通訊過程
數據鏈路層(驅動程序)封裝了物理網絡的電氣細節;
網絡層封裝了網絡連接的細節;
傳輸層則為應用程序封裝了一條端對端的邏輯通信鏈路,它負責數據的收發、鏈路的超時重連等。
分用
當幀到達目的主機時 ,將沿著協議棧自底向上依次傳遞。各層協議依次處理幀中本層負責的頭部數據,以獲取所需的信息,并將處理后的幀交給目的應用程序。這個過程稱為分用( demultiplexing)。
分用是依靠頭部信息中的類型字段實現的。
整理自《Linux高性能服務器編程》第1章,《Linux C一站式學習》第36章
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。