我讀過的每個教程都討論各層如何相互“通信”,但從未提及硬體/軟體接收、添加和發送每層控制數據的內容。
哪塊硬體和軟體接收/封裝/發送與 IP/TCP 每層相關的資料?
例如,我的路由器工作在哪一層?什麼軟體可以將文字檔轉換為 SMTP?我的電腦中的什麼/哪裡有用於流量控制/傳輸的軟體?
答案1
Layer 1 - Physical - Signaling
Layer 2 - Data Link - Switching (Ethernet frames)
Layer 3 - Network - Routing (IP packets)
Layer 4 - Transport - Multiplexing (TCP segments)
Layer 5 - Session
Layer 6 - Presentation
Layer 7 - Application
之所以沒有提及特定的軟體/硬體實現,是因為這是開發標準的全部目的。每一層並不關心上面和下面的層如何處理其功能,只要資料按照標準呈現即可。它可以是軟體、硬體、固件,透過機械非電子設備,甚至可以是人類手動的(Google「透過信鴿的TCP」作為一個非嚴肅的例子)。
在現實世界中,所涉及的具體軟體和硬體也有很大差異。完全有可能在軟體中執行所有功能(便宜但速度慢)。也完全有可能在硬體中完成所有這些(快速但昂貴)。專用網路設備(例如 Cisco 路由器等)將在硬體中執行比配置為路由器的運行 Linux 的 PC 更多的功能。
一般來說,第 1 層和大多數第 2 層保證在硬體中執行。第 3 層主要在企業級路由器(例如 Cisco 的路由器)上的硬體中完成。許多 NIC 都具有稱為「TCP 卸載引擎」的功能,可透過 NIC 上的硬體加速大多數第 3 層和第 4 層。沃爾瑪的消費級路由器通常完全透過軟體來完成路由功能。第 5、6 和 7 層通常不是在硬體中完成的,如果是,則這樣做的設備被稱為「加速器」。
答案2
哪塊硬體和軟體接收/封裝/發送與 IP/TCP 每層相關的資料?
乙太網路硬體通常僅在最低層、實體層和連結層使用。根據其 MAC 位址,硬體將僅接受符合的單播訊框。乙太網路設備驅動程式通常負責提供該設備的軟體介面。該裝置通常可以從佈置在連結(圓形)環中的緩衝區讀取和寫入完整的乙太網路幀,並且驅動程式可以服務中斷或輪詢狀態以了解緩衝區環狀態的任何變化(即讀取或寫入幀操作完成)。
該軟體統稱為協定堆疊。它是內建在內核中的過程和函數的集合。它們的呼叫就像任何軟體層次結構一樣。當使用者程式進行套接字讀/寫系統呼叫時,將呼叫頂層應用程式例程。這個子程式/過程層次結構就像任何其他結構良好的軟體一樣,增強了模組化、鬆散耦合和高內聚性。
協定中的每一層都由一個或多個(嵌套)過程呼叫執行,直到資料包儲存在幀緩衝區中,準備好由硬體輸出。成功寫入完成後,狀態將傳回給使用者的呼叫。
例如,我的路由器工作在哪一層?
互聯網被描述為TCP/IP模型:
- 應用層
- 傳輸層
- 網際網路層
- 連結層
- 物理層
您的路由器會根據 IP 位址(即網際網路層)定向資料包。但路由器有自己的協定棧來執行其他服務,例如基於 Web 的設定公用程式。網路上的每台主機可能都有一個完整的協定棧;這些層不分佈在網路主機/設備之間。
什麼軟體可以將文字檔轉換為 SMTP?
您的郵件程式與應用程式層互動。
我的電腦中的什麼/哪裡有流量控制/傳輸的軟體?
可能是傳輸層,TCP 在此運作。