1. 程式人生 > >TCP/IP協議族——高效能Linux伺服器程式設計

TCP/IP協議族——高效能Linux伺服器程式設計

現在 Internet 使用的主流協議族是 TCP/IP 協議族,它是一個分層、多協議的通訊體系。

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

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

資料鏈路層

資料鏈路層實現了網絡卡介面的網路驅動程式,處理資料在物理媒介上的傳輸。常用的兩個協議是 ARP (Address Resoleve Protocol 地址解析協議) 和 RARP (Reverse Address Resoleve Protocol 逆地址解析協議),它們實現了 IP 地址和機器實體地址之間的相互轉換。

網路層

網路層實現資料包的選路和轉發。由於通訊的主機一般不是直接相連的,而是通過多箇中間節點(路由器)連線的,網路層的任務就是選擇這些節點,以確定通訊路徑。網路層的核心協議是 IP (Internet Protocol 因特網協議)。另一個重要的協議是 ICMP (Internet Control Message Protocol 因特網控制報文協議),是 IP 協議的重要補充,主要用於檢測網路連線,ping 程式就是使用的 ICMP 協議。

傳輸層

傳輸層為兩臺主機上的應用程式提供端對端的通訊,主要有三個協議:TCP、UDP、SCTP。

TCP (Transmission Control Protocol 傳輸控制協議) 為應用層提供可靠的、面向連線的和基於流的服務。使用超時重傳、資料確認等方式來確保資料包被正確地傳送到目的端,使用前必須先建立連線,核心維持一些連線資訊,傳送端逐個位元組地向資料流(沒有邊界即長度限制)中寫入,接收端逐個位元組接收,通訊結束時雙方必須關閉連線以釋放這些核心資料。

三次握手建立連線與四次揮手斷開連線

UDP (User Datagram Protocol 使用者資料報協議),與 TCP 相反,提供不可靠、無連線和基於資料報的服務,每個資料報都有一個長度。

SCTP (Stream Control Transmission Protocol 流控制傳輸協議) 是為傳輸電話號碼而設計的,

應用層

應用層負責處理應用程式的邏輯,在使用者空間來實現。資料鏈路層、網路層、傳輸層負責處理網路通訊,這部分在核心空間中實現,必須穩定又高效。

封裝

應用程式資料在傳送到物理網路上之前,沿著協議棧從上往下依次傳遞,每層協議都將在上層資料的基礎之上加上自己的頭部資訊,有時包括尾部資料,以實現該層的功能,這個過程就叫做封裝。

分用

當幀到達目的主機時,將沿著協議棧自底向上依次傳遞,各層依次處理幀中本層負責的頭部資料以獲取所需的資訊,並最終將處理後的幀交給目標程式,這個過程稱為分用,是依靠頭部資訊中的型別欄位實現的。

arp 協議工作原理

ARP 協議能實現任意網路層地址到任意實體地址的轉換,主機向自己所在的網路廣播一個 ARP 請求包含目標機器的網路地址,此網路上的其他機器都將收到這個請求,但只有被請求的目標機器會迴應一個 ARP 應答,其中包含自己的實體地址。

dns 工作原理

DNS 是一套分散式的域名服務系統,每個 DNS 伺服器上存放著大量的機器名和 IP 地址的對映,並且是動態更新的,眾多網路客戶端程式都是用 DNS 協議來向 DNS 伺服器查詢目標主機的 IP 地址。

Socket 和 TCP/IP 協議族的關係

Socket 是一套通用網路程式設計介面,不但可以訪問核心中 TCP/IP 協議棧,而且可以訪問其他網路協議棧