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