現在 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 協議棧,而且可以訪問其他網絡協議棧。