Linux服務器編程(1)

Linux服務器編程(1)

前言

雖然有OSI七層標準協議,但是現在Internet上的實際協議是四層的TCP/IP協議族,從上倒下,分別是應用層,傳輸層,網絡層和數據鏈路層。其是一個分層,多協議的通訊體系。每一層通過不同的協議完成不同的功能,上層使用下層提供的服務,如下圖所示。

數據鏈路層

數據鏈路層實現了網卡接口的驅動程序,來處理在數據在物理媒介的傳輸。不同的物理網絡,比如以太網,令牌環,wlan,其具體的電氣屬性時不同的,那麼數據鏈路層必須隱藏這些細節,爲上層提供統一的服務接口。
數據鏈路層包含兩個常用協議,一個是ARP(Address Resolve Protocol, 地址解析協議),另一個是RARP(Reverse Address Resolve Protocol,逆地址解析協議)。
數據鏈路層的上層是使用IP地址來尋找一臺主機,而數據鏈路層使用MAC地址,也就是硬件地址來尋址一臺主機。所以網路層需要對IP地址進行轉換才能使用數據鏈路層的功能,那麼數據鏈路層提供了一個協議來幫助網絡層完成這樣的轉換。RARP主要用於如果自身不能保存IP地址,那麼其可以通過RARP協議,得到自己在當前網絡中的IP地址。

網絡層

網絡層完成數據包的選路和轉發。internet是一個個規模更小的網絡組成的,一般通訊的主機不可能是直接連接的,而是通過中間節點連接。網絡層的主要任務就是選擇這些中間節點,來確定兩臺主機的通訊路徑。對上層,其屏蔽了網絡拓撲的細節,在上層看來,兩臺主機時直接連接的。
網絡層的核心協議是IP協議。IP協議根據數據包的目標IP地址來確定如何投遞它,如果不能直接發送,那麼其會根據一定的算法,找到合適的下一跳節點路由器,將數據包轉發給它轉發,循環重複這一過程,直接發送到目標主機或者TTL爲0。
另一個網絡協議時ICMP協議,其主要用於檢測網絡。

傳輸層

傳輸層爲兩臺主機的進程提供端到端的通信能力。數據鏈路層封裝了電氣細節,網絡層封裝了網絡連接的細節,傳輸層爲應用程序封裝了一條端到端的邏輯通信鏈路,負責鏈路數據的收發,超時重載等。
傳輸層主要有TCP和UDP兩種協議。
TCP協議提供可靠的,面向連接和基於流的連接。其使用超時重傳,數據確認來保證TCP的可靠性。
UDP協議提供不可靠的,無連接的和基於數據報的服務。UDP無法保證數據的可靠發送,如果在途中發送失敗,其指示簡單的通知一些應用程序,而沒有重傳的機制。

應用層

應用層處理處理應用程序的邏輯。
應用層可以使用下層傳輸層協議,也可以直接使用網絡層的協議。

封裝和拆包

上層協議是如何使用下層協議,上層協議時怎麼解析下層傳上來的數據了?其實這就是一個封裝和拆包的過程。
應用層需要使用傳輸層提供的可靠連接傳輸功能,那麼就需要在原來的數據包上添加TCP報頭。然後傳輸層使用了網絡層的IP協議,那在TCP報外面又要加上一些IP協議數據報頭。使用數據鏈路層的功能實現真正的發送,就需要在IP數據包外面加上具體物理媒介的頭。到達目的主機時,從數據鏈路層往上開始拆包,那麼到達應用層還是對方應用層數據。封裝和拆包是互逆的過程。這個過程也就是我們在水平方面上看,爲什麼他們在每一次上都具有一條邏輯鏈路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章