网络编程-网络分层的意义
網絡
- 我們生活在一個網絡無處不在的一個虛擬世界中,網絡中的每一個設備都是一個節點。大多是我們的計算機,但是他還可以連接其他設備,例如打印機,路由器,網關,你的手機,智能家居等。我們可以使用java與計算機交互,每個網絡節點都有自己的地址,這是唯一識別節點的一個字節序列。
- 不同網絡的地址信息會以不同方式分配,以太網(Ethernet)地址與物理以太網硬件相關。在硬件生產的時候,廠家就需要確保硬件地址與其他廠家的硬件地址不沖突。不過一個組織運行選擇的地址由改組織的internet服務供應商ISP分配,ISP從四個區域Internet注冊機構之一獲得IP地址,而這四個機構的IP地址由互聯網名稱與數學地址分配機構分配,這其實就是IP地址。
網絡分層
- 通過網絡發送數據指令是一個比較復雜的過程,我們發送出去的指令需要轉成電信號,或者wifi,或者光纖中光信號,傳輸,之后還得在轉回成我們發送出去的指令信息。這個過程必須咨詢協調網絡的物理特性以及所發送數據的邏輯特征。通過網絡發送數據的軟件必須了解如何避免數據包的沖突,將數字數據轉為模擬信號,檢查和修正錯誤,將數據包從一臺主機路由到另外一臺主機等。
- 為了對應用開發人員和最終用戶屏蔽這種復雜性,網絡通信的不同方面被分解為多個層,每一層標識為物理硬件(即線纜和電流)與傳輸信息之間的不同抽象層次(相當于將字節信息與電信號光信號轉換),每一層都只與緊挨著的上下層進行數據交互。將網絡分層,這樣就可以修改,替換某一層的軟件,只要層與層之間的接口保持不變,就不會影響其他層。
- 以下圖顯示網絡中可能存在的一些協議棧。雖然現在的Internet上中間層現已相當穩定,但是上層,下層的協議變化還是比較大的,郵箱主機用Ethernet,有些是Wifi等,但是這并不影響其他層協議,因為他們都按規范實現統一的接口,每層都按規范實現,完成數據上的交互,這樣分層模型實現了應用協議與網絡硬件的物理特征,以及網絡連接拓撲結構的解耦。
-
分層模型還是有多種的,分別適合特定類型的網絡,我們用最典型的Internet標準TCP/IP四層模型來講解。如下圖。
-
上圖模型中,應用程序例如Chrom,FireFox,運行在應用層,只與傳輸層進行交互。傳輸層只與應用層,網際層交互,網際層只與主機網絡層,傳輸層交互,絕不會跨層級交互。主機網絡層通過電纜,光纖或者其他媒介將數據移動到遠程系統的主機網絡層,然后在通過上述各層將數據逐級上移傳輸到遠程系統的應用層。
-
拿Chrom瀏覽器來舉例
-
當瀏覽器輸入網址,向Web服務器發送獲取網頁的請求時候,瀏覽器實際上只是與本地客戶機器的傳輸層在對話。
-
傳輸層將請求分解為TCP片,向數據添加序列號和校驗號,然后將請求傳遞給本地網際層
-
網際層根據本地網絡所需的大小將TCP片分成IP數據報,并床底到主機網絡層以便通過線纜或光線傳輸數據
-
主機網絡層將數字數據編碼為適合特定物理介質的模擬信號(光,電)將請求發送到線纜,光纖,
-
目標地址的遠程系統的主機網絡層可以由此讀取請求。
-
遠程系統的主機網絡層將模擬信號解碼為數字數據,將生產的IO數據報床底給服務器的網際層
-
網際層簡單的檢查IP數據報是否被破壞,如果已經分片則重組數據,然后傳遞給服務器傳輸層
-
傳輸層檢查是否所有數據都已到達,對于丟失或者破壞的部分則要求重傳(在來一次以上過程,對應用層透明),此時當傳輸層接收到足夠多的鏈接順序數據報,就將其重組寫入一個流,由服務器應用層上運行的Web服務器讀取,
-
服務器響應這個請求,在通過服務器系統的各個分層發回消息,通過Internet進行傳輸并發給web客戶端。
-
主機網絡層
- 主機網絡層處在最高的位置,他離java程序員最遠的一個層級,在基于IP的internet標準參考模型中,網絡中隱藏不是屬于主機網絡層(也稱為數據鏈路層),主機網絡層定義了特定的網絡接口(以太網,WIFI等)如何通過物理連接向本地網絡或者時間其他地方發送IP數據報,他由連接不同計算機的硬件(光纖,電纜,無線電)組成的部分有時稱為網絡的物理層,開發人員無需擔心這一層除非網線斷了,對開發人員透明。
網際層
- 網絡的下一次,這是開發需要考慮的第一層,在OSI模型中,網際層還稱為網絡層,定義了數據位和字節如何組織成為更大的分組,叫他包,還定義了尋址機制,不同計算機按照固定算法去查找對方。網際協議(IP)就是現在使用最廣泛的網絡層協議,也是java唯一理解的網絡層協議。這個協議是兩個:
- IPV4,使用32位地址
- IPV6,使用128位地址
- IPV4,IPV6中,數據按包在網際層傳輸,這些包稱為數據報datagram。每個IPV4數據報包含一個長度20~60字節的首部,以及一個包含65515字節的數據的有效荷載(payload)。實際上每個IPV4都比較小,從幾十字節到8K字節不等,IPV6則包含更大的首部,數據可以達到4G字節
- 下圖展示各個部分IPV4數據報中是如何排列的,所有位和字節都采用big-endian方式,由左到右為高位到低位:
- 網際層除了路由與尋址,網際層第二個左右是支持不同類型主機網絡層互相對話。Internet路由器會完成WIRI和Ethernet, Ethernet和DSL, DSL和光纖往返等協議直接的轉換,如果沒有網際層,或者類似的分層,子每個計算機只能與同一類網絡上的其他計算機對話。
- 網際層負責使用同構協議將異構網絡相互連接
傳輸層
- 因為原始數據報有一定缺陷。比如不保證可靠創術,即使能傳送也可能被破壞。首部校驗只能檢測首部的破壞情況,而不能檢測數據報中的數據部分。最后即使數據能夠到大,不被破壞,也不一定是按照我們預定的順序到大。各個數據報進過的路由過程完全不一樣的,即使先發送也不一定先到。
- 傳輸層(transport layer)負責確保各個包以發送順序接受,并保證沒有數據丟失或者被破壞,如果丟包,傳輸層請求重發。為實現這個目標,IP網絡會給每個數據報添加一個附加首部,其中包含有更多信息。這一層協議有兩個:
- 傳輸控制協議(Transmission Control Protocol TCP),這個是一個開銷高的協議,支持對丟失或者破壞的數據進行重傳,并且按照發送的順序進行傳送
- 用戶數據報協議(User Datagram Protocol, UDP),允許接收方檢測被破壞的包,但不保證這些包以正確的順序床送(或者包有可能更本沒有傳送)
- UDP比TCP快,TCP稱為可靠的協議,UDP不可靠協議。
應用層
- 這個才是程序員關注的關鍵部分,向用戶傳送數據的層稱為應用層(application layer)。他下面的三層共同定義了數據如何從一臺機器到另外一臺機器。應用層確定了數據傳輸后的操作。例如,我們應用層協議HTTP可以確保Web瀏覽器將圖像顯示為圖片,而不是一堆二進制數據。程序中有關網絡的部分大多都是在應用層來實現的。應用層還有其他很多協議,主要取決于應用層具體作用:
- 用于web的HTTP
- 用于電子郵件的SMTP,POP,IMAP
- 用于文件傳輸FTP,FSP, TFTP
- 用于文件訪問的NFS
HTTP,IP, TCP, UDP
下一篇 網絡編程-TCP/IP協議棧
總結
以上是生活随笔為你收集整理的网络编程-网络分层的意义的全部內容,希望文章能夠幫你解決所遇到的問題。