Linux網路協議棧基於分層的設計思想,總共分為四層,從下往上依次是:物理層,鏈路層,網路層,應用層。 Linux網路協議棧其實是源於BSD的協議棧,它向上以及向下的介面以及協議棧本身的軟體分層組織的非常好。 Linux的協議棧基於分層的設計思想,總共分為四層,從下往上依次是:物理層,鏈路層,網路層,應用層。 物理層主要提供各種連線的物理裝置,如各種網絡卡,串列埠卡等; 鏈路層主要指的是提供對物理層進行訪問的各種介面卡的驅動程式,如網絡卡驅動等; 網路層的作用是負責將網路資料包傳輸到正確的位置,最重要的網路層協議當然就是IP協議了,其實網路層還有其他的協議如ICMP,ARP,RARP等,只不過不像IP那樣被多數人所熟悉; 傳輸層的作用主要是提供端到端,說白一點就是提供應用程式之間的通訊,傳輸層最著名的協議非TCP與UDP協議末屬了; 應用層,顧名思義,當然就是由應用程式提供的,用來對傳輸資料進行語義解釋的“人機介面”層了,比如HTTP,SMTP,FTP等等,其實應用層還不是人們最終所看到的那一層,最上面的一層應該是“解釋層”,負責將資料以各種不同的表項形式最終呈獻到人們眼前。 Linux網路核心架構Linux的網路架構從上往下可以分為三層,分別是: 使用者空間的應用層。 核心空間的網路協議棧層。 物理硬體層。 其中最重要最核心的當然是核心空間的協議棧層了。 Linux網路協議棧結構Linux的整個網路協議棧都構建與Linux Kernel中,整個棧也是嚴格按照分層的思想來設計的,整個棧共分為五層,分別是 :
1,系統呼叫介面層,實質是一個面向使用者空間應用程式的介面呼叫庫,向用戶空間應用程式提供使用網路服務的介面。
2,協議無關的介面層,就是SOCKET層,這一層的目的是遮蔽底層的不同協議(更準確的來說主要是TCP與UDP,當然還包括RAW IP, SCTP等),以便與系統呼叫層之間的介面可以簡單,統一。簡單的說,不管我們應用層使用什麼協議,都要透過系統呼叫介面來建立一個SOCKET,這個SOCKET其實是一個巨大的sock結構,它和下面一層的網路協議層聯絡起來,遮蔽了不同的網路協議的不同,只吧資料部分呈獻給應用層(透過系統呼叫介面來呈獻)。
3,網路協議實現層,毫無疑問,這是整個協議棧的核心。這一層主要實現各種網路協議,最主要的當然是IP,ICMP,ARP,RARP,TCP,UDP等。這一層包含了很多設計的技巧與演算法,相當的不錯。
4,與具體裝置無關的驅動介面層,這一層的目的主要是為了統一不同的介面卡的驅動程式與網路協議層的介面,它將各種不同的驅動程式的功能統一抽象為幾個特殊的動作,如open,close,init等,這一層可以遮蔽底層不同的驅動程式。
5,驅動程式層,這一層的目的就很簡單了,就是建立與硬體的介面層。 可以看到,Linux網路協議棧是一個嚴格分層的結構,其中的每一層都執行相對獨立的功能,結構非常清晰。 其中的兩個“無關”層的設計非常棒,透過這兩個“無關”層,其協議棧可以非常輕鬆的進行擴充套件。在我們自己的軟體設計中,可以吸收這種設計方法。
Linux網路協議棧基於分層的設計思想,總共分為四層,從下往上依次是:物理層,鏈路層,網路層,應用層。 Linux網路協議棧其實是源於BSD的協議棧,它向上以及向下的介面以及協議棧本身的軟體分層組織的非常好。 Linux的協議棧基於分層的設計思想,總共分為四層,從下往上依次是:物理層,鏈路層,網路層,應用層。 物理層主要提供各種連線的物理裝置,如各種網絡卡,串列埠卡等; 鏈路層主要指的是提供對物理層進行訪問的各種介面卡的驅動程式,如網絡卡驅動等; 網路層的作用是負責將網路資料包傳輸到正確的位置,最重要的網路層協議當然就是IP協議了,其實網路層還有其他的協議如ICMP,ARP,RARP等,只不過不像IP那樣被多數人所熟悉; 傳輸層的作用主要是提供端到端,說白一點就是提供應用程式之間的通訊,傳輸層最著名的協議非TCP與UDP協議末屬了; 應用層,顧名思義,當然就是由應用程式提供的,用來對傳輸資料進行語義解釋的“人機介面”層了,比如HTTP,SMTP,FTP等等,其實應用層還不是人們最終所看到的那一層,最上面的一層應該是“解釋層”,負責將資料以各種不同的表項形式最終呈獻到人們眼前。 Linux網路核心架構Linux的網路架構從上往下可以分為三層,分別是: 使用者空間的應用層。 核心空間的網路協議棧層。 物理硬體層。 其中最重要最核心的當然是核心空間的協議棧層了。 Linux網路協議棧結構Linux的整個網路協議棧都構建與Linux Kernel中,整個棧也是嚴格按照分層的思想來設計的,整個棧共分為五層,分別是 :
1,系統呼叫介面層,實質是一個面向使用者空間應用程式的介面呼叫庫,向用戶空間應用程式提供使用網路服務的介面。
2,協議無關的介面層,就是SOCKET層,這一層的目的是遮蔽底層的不同協議(更準確的來說主要是TCP與UDP,當然還包括RAW IP, SCTP等),以便與系統呼叫層之間的介面可以簡單,統一。簡單的說,不管我們應用層使用什麼協議,都要透過系統呼叫介面來建立一個SOCKET,這個SOCKET其實是一個巨大的sock結構,它和下面一層的網路協議層聯絡起來,遮蔽了不同的網路協議的不同,只吧資料部分呈獻給應用層(透過系統呼叫介面來呈獻)。
3,網路協議實現層,毫無疑問,這是整個協議棧的核心。這一層主要實現各種網路協議,最主要的當然是IP,ICMP,ARP,RARP,TCP,UDP等。這一層包含了很多設計的技巧與演算法,相當的不錯。
4,與具體裝置無關的驅動介面層,這一層的目的主要是為了統一不同的介面卡的驅動程式與網路協議層的介面,它將各種不同的驅動程式的功能統一抽象為幾個特殊的動作,如open,close,init等,這一層可以遮蔽底層不同的驅動程式。
5,驅動程式層,這一層的目的就很簡單了,就是建立與硬體的介面層。 可以看到,Linux網路協議棧是一個嚴格分層的結構,其中的每一層都執行相對獨立的功能,結構非常清晰。 其中的兩個“無關”層的設計非常棒,透過這兩個“無關”層,其協議棧可以非常輕鬆的進行擴充套件。在我們自己的軟體設計中,可以吸收這種設計方法。