1. 程式人生 > >TCP/IP 協議分層

TCP/IP 協議分層

共享內存 document 進行 soc alt 處理機制 () ip 協議 鏈路

協議分層

可能大家對OSI七層模型並不陌生,它將網絡協議很細致地從邏輯上分為了7層。但是實際運用中並不是按七層模型,一般大家都只使用5層模型。如下: 物理層:一般包括物理媒介,電信號,光信號等,主要對應於PHY芯片,PHY芯片將數據傳送給物理媒介(RJ45座->雙絞線),如圖:

技術分享

  • 數據鏈路層:一般簡單稱為MAC層,因為MAC芯片處於這層,對應於代碼中的網卡驅動層。數據包在這一層一般稱之為“以太網幀”。
  • 網絡層:對應於代碼中IP層。
  • 傳輸層:對應於代碼中TCP層。
  • 應用層:對應於代碼中應用層數據,即SOCKET通信,recv()/send()的數據。

對於一個以太網數據包,我們在代碼中能真實看到的包括4部分,分別對應鏈路層、網絡層、傳輸層、應用層,如下圖:

技術分享

註:有幾個概念需要解釋一下,從網卡收到的數據,此時是一個完整的包含各層頭的數據包,此時稱之為“以太網幀”;當解開以太網幀頭到達IP層,稱之為“IP Packet(IP數據包)”;當解開IP頭到達TCP層,稱之為“TCP Segment(TCP分片)”;當解開TCP頭時到達應用層,就是我們socket通信看到的數據了。

這種分層的設計作為一個協議設計與實現的向導,在這種方式下,每個協議可以分離地實現,互不幹擾。然而嚴格的分層設計,各層間的通訊可能會導致總體的性能下降。為了克服這些問題,協議的某些內部細節可以被其他的協議共享,但是必須註意,只有重要的信息才能在各層間共享。

大部分的TCP/IP協議棧實現在應用層到底層之間都遵循嚴格的分層設計,然而底層或多或少可以有交叉。在大多數操作系統中,所有的底層協議都與操作系統的內核綁定在一起(成為OS內核的一部分),內核提供入口點(API)與應用層的進程通信。此時,應用程序可認為是TCP/IP協議棧的一個抽象,不用關心底層的細節,對於支持SOCKET的系統,直接使用SOCKET進行網絡通信即可,這些操作基本和文件IO的操作差別不大。這意味著應用程序對底層一無所知,比如底層使用buffer緩沖數據,而應用層無法對buffer一無所知,如果有應用層有一部分數據頻繁使用,而它是無法操作buffer將頻繁使用的數據緩沖起來。

在最小系統中,一般不會嚴格地在內核和應用程序中間加一道保護屏障,如此應用程序可以使用共享內存(底層在內核中,與內核共享內存)的方式更輕松地與底層通信。具體來講,應用層知道底層使用的緩沖處理機制,因此,應用層可以更高效的重用buffer。既然應用層可以和底層協議使用同一段內存,這樣也可以節省拷貝帶來的開銷。

http://www.rt-thread.org/document/site/zh/1chapters/13-chapter_lwip/

TCP/IP 協議分層