1. 網絡發(fā)展史
? ? ? ? 網絡發(fā)展的幾個主要時期:
????????單機時代->局域網時代->廣域網時代->移動互聯(lián)網時代
????????隨著時代的發(fā)展,越來越需要計算機之間互相通信,共享軟件和數據,即以多個計算機協(xié)同工作來完成 業(yè)務,就有了網絡互連。
????????網絡互連:將多臺計算機連接在一起,完成數據共享。
????????數據共享的本質是網絡數據傳輸,即計算機之間通過網絡來傳輸數據,也稱為網絡通信。 根據網絡互連的規(guī)模不同,可以劃分為局域網和廣域網。
1.1 局域網
????????局域網(把幾個電腦通過路由器連到一起),即 Local Area Network,簡稱LAN。 Local 即標識了局域網是本地,局部組建的一種私有網絡。局域網內的主機之間能方便的進行網絡通信,又稱為內網;局域網和局域網之間在沒有連接的情況下, 是無法通信的。
????????局域網組建網絡的方式有很多種:
(1)基于網線直連
? ? ? ? 直接相連,要求電腦上有很多網口;
(2)基于路由器組建
? ? ? ? 一般的家用路由器,常見的是五個網口,1WAN+4LAN,想要讓這幾個電腦能在同一個局域網中上網,就需要把他們連接到LAN口,其中WAN 口是用來連上級的路由器的
(3)基于交換機組建
????????交換機可以拓展路由器的端口:
1.2 廣域網
????????廣域網,即 Wide Area Network,簡稱WAN。 通過路由器,將多個局域網連接起來,在物理上組成很大范圍的網絡,就形成了廣域網。廣域網內部的局域網都屬于其子網。且要注意局域網和廣域網之間都沒有明確的界限;
2. 網絡通信基礎
????????網絡互連的目的是進行網絡通信,也即是網絡數據傳輸,更具體一點,是網絡主機中的不同進程間,基于網絡傳輸數據。
2.1 IP地址
???????? IP地址主要用于標識網絡主機、其他網絡設備(如路由器)的網絡地址。簡單說,IP地址用于定位主機的網絡地址。 就像我們發(fā)送快遞一樣,需要知道對方的收貨地址,快遞員才能將包裹送到目的地。
????????IP地址是一個32位的二進制數,通常被分割為4個“8位二進制數”(也就是4個字節(jié)),如: 01100100.00000100.00000101.00000110。通常用“點分十進制”的方式來表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之間的十進制整數)。如: 100.4.5.6。
????????特殊IP:
???????? 127.*的IP地址用于本機環(huán)回(loop back)測試,通常是127.0.0.1 本機環(huán)回主要用于本機到本機的網絡通信(系統(tǒng)內部為了性能,不會走網絡的方式傳輸),對于開發(fā)網絡通信的程序(即網絡編程)而言,常見的開發(fā)方式都是本機到本機的網絡通信。
????????IP地址解決了網絡通信時,定位網絡主機的問題;
2.2?端口號
????????在網絡通信中,端口號可以標識主機中發(fā)送數據、接收數據的進程。即端口號用于定位主機中的進程。 類似發(fā)送快遞時,不光需要指定收貨地址(IP地址),還需要指定收貨人(端口號)。
????????端口號格式是0~65535范圍的數字,在網絡通信中,進程可以通過綁定一個端口號,來發(fā)送及接收網絡數 據。 ?兩個不同的進程,不能綁定同一個端口號,但一個進程可以綁定多個端口號。?????????
???????? 一個進程啟動后,系統(tǒng)會隨機分配一個端口(啟動端口) 程序代碼中,進行網絡編程時,需要綁定端口號(收發(fā)數據的端口)來發(fā)送、接收數據。 進程綁定一個端口號后,fork一個子進程,可以實現(xiàn)多個進程綁定一個端口號,但不同的進程不 能綁定同一個端口號。
????????有了IP地址和端口號,可以定位到網絡中唯一的一個進程,但還存在一個問題,網絡通信是基于二進制 0/1數據來傳輸,如何告訴對方發(fā)送的數據是什么樣的呢? 網絡通信傳輸的數據類型可能有多種:圖片,視頻,文本等。同一個類型的數據,格式可能也不同,如 發(fā)送一個文本字符串“你好!”:如何標識發(fā)送的數據是文本類型,及文本的編碼格式呢? 基于網絡數據傳輸,需要使用協(xié)議來規(guī)定雙方的數據格式。
2.3 協(xié)議
2.3.1 認識協(xié)議
????????協(xié)議,網絡協(xié)議的簡稱,網絡協(xié)議是網絡通信(即網絡數據傳輸)經過的所有網絡設備都必須共同遵從 的一組約定、規(guī)則;網絡上,本質上是通過光/電(只能用高低電平,高低頻光信號表示1或0,等二進制數據) 信號進行信號傳輸,我們通過協(xié)議來約定通信雙方都遵循的方式來傳輸數據;
????????如怎么樣建立連接、怎么樣互相識別等。只有遵守這個約定,計算機之間才能相互 通信交流。通常由三要素組成:
1. 語法:即數據與控制信息的結構或格式; 類似打電話時,雙方要使用同樣的語言:普通話 2. 語義:即需要發(fā)出何種控制信息,完成何種動作以及做出何種響應; 語義主要用來說明通信雙方應當怎么做。用于協(xié)調與差錯處理的控制信息。 類似打電話時,說話的內容。一方道:你瞅啥?另一方就得有對應的響應:瞅你咋的!
3. 時序,即事件實現(xiàn)順序的詳細說明。 時序定義了何時進行通信,先講什么,后講什么,講話的速度等。比如是采用同步傳輸還是 異步傳輸。 女生和男生的通話,總是由男生主動發(fā)起通話,而總是在男生戀戀不舍的時候,由女生要求 結束通話。
????????協(xié)議(protocol)最終體現(xiàn)為在網絡上傳輸的數據包的格式。?
2.3.2?協(xié)議的作用
????????就好比見網友,彼此協(xié)商胸口插支玫瑰花見面,這就是一種提前的約定,也可以稱之為協(xié)議。計算機之間的傳輸媒介是光信號和電信號。通過 "頻率" 和 "強弱" 來表示 0 和 1 這樣的信息。要想傳遞 各種不同的信息,就需要約定好雙方的數據格式。
????????計算機生產廠商有很多; 計算機操作系統(tǒng),也有很多; 計算機網絡硬件設備,還是有很多; 如何讓這些不同廠商之間生產的計算機能夠相互順暢的通信? 就需要有人站出來,約定一個 共同的標準,大家都來遵守,這就是 網絡協(xié)議;
2.3.3?知名協(xié)議的默認端口
????????系統(tǒng)端口號范圍為 0 ~ 65535,其中:0 ~ 1023 為知名端口號,這些端口預留給服務端程序綁定廣泛使用的應用層協(xié)議,如:
????????22端口:預留給SSH服務器綁定SSH協(xié)議
????????21端口:預留給FTP服務器綁定FTP協(xié)議
????????23端口:預留給Telnet服務器綁定Telnet協(xié)議
????????80端口:預留給HTTP服務器綁定HTTP協(xié)議
????????443端口:預留給HTTPS服務器綁定HTTPS協(xié)議
? ? ? ? 同時:以上只是說明 0 ~ 1023 范圍的知名端口號用于綁定知名協(xié)議,但某個服務器也可以使用其他 1024 ~ 65535 范圍內的端口來綁定知名協(xié)議
2.3.4?五元組
????????在TCP/IP協(xié)議中,用五元組來標識一個網絡通信:
????????1. 源IP:標識源主機
????????2. 源端口號:標識源主機中該次通信發(fā)送數據的進程
????????3. 目的IP:標識目的主機
????????4. 目的端口號:標識目的主機中該次通信接收數據的進程
????????5. 協(xié)議號:標識發(fā)送進程和接收進程雙方約定的數據格式
2.3.5?協(xié)議分層
????????網絡通信的場景,可能會遇到很多復雜的問題,就需要通過協(xié)議來進行解決問題;
?????? 如果弄一個大的協(xié)議來解決這些所有的問題,此時這個協(xié)議就非常大和復雜,不利于我們學習和理解;相比之下,我們就把大的協(xié)議拆分成小的協(xié)議,讓每一個小的協(xié)議只專注于做每一件小事,使得每一個小的協(xié)議,都不太會復雜;
?????? 由于拆分出來的小協(xié)議非常多,不便于很好的管理,就需要對協(xié)議進行分層(按照協(xié)議的定位/作用分類,并且約定了不同層次之間的“調用關系”,“上層協(xié)議調用下層協(xié)議”“下層協(xié)議給上層協(xié)議提供支持”,這樣的話,這么多協(xié)議就不容易混亂);
????????協(xié)議分層的好處:
? ? ? ? 1、協(xié)議分層之后,上層和下層之間就進行了封裝;使用上層協(xié)議,不必過多關注下層協(xié)議;使用下層協(xié)議,也不必過多關注上層協(xié)議;
2、協(xié)議分層之后,每一層協(xié)議都可以根據需要靈活替換;
? ? ? ? 綜上所述,分層最大的好處,類似于面向接口編程:定義好兩層間的接口規(guī)范,讓雙方遵循這個規(guī)范來對接。 在代碼中,類似于定義好一個接口,一方為接口的實現(xiàn)類(提供方,提供服務),一方為接口的使用類 (使用方,使用服務):
????????對于使用方來說,并不關心提供方是如何實現(xiàn)的,只需要使用接口即可
????????對于提供方來說,利用封裝的特性,隱藏了實現(xiàn)的細節(jié),只需要開放接口即可。 這樣能更好的擴展和維護,如下圖:
3. 協(xié)議分層
3.1 OSI七層網絡協(xié)議
????????OSI:即Open System Interconnection,開放系統(tǒng)互連
????????OSI 七層網絡模型是一個邏輯上的定義和規(guī)范:把網絡從邏輯上分為了7層。
????????OSI 七層模型是一種框架性的設計方法,其最主要的功能使就是幫助不同類型的主機實現(xiàn)數據傳輸;
????????它的最大優(yōu)點是將服務、接口和協(xié)議這三個概念明確地區(qū)分開來,概念清楚,理論也比較完整。通過七個層次化的結構模型使不同的系統(tǒng)不同的網絡之間實現(xiàn)可靠的通訊。
? ? ? ? OSI七層網絡協(xié)議實現(xiàn)簡介如下:
????????OSI七層網絡協(xié)議結構分層如下:
???????OSI 七層模型既復雜又不實用:所以 OSI 七層模型沒有落地、實現(xiàn)。 實際組建網絡時,只是以 OSI 七層模型設計中的部分分層,也即是以下 TCP/IP 五層(或四層)模型來實現(xiàn)。
3.2?TCP/IP五層(或四層)模型
?3.2.1 認識TCP/IP協(xié)議
????????TCP/IP通訊協(xié)議采用了5層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。
????????應用層:(應用程序如何使用該數據)負責應用程序間溝通,如簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網絡遠 程訪問協(xié)議(Telnet)等。我們的網絡編程主要就是針對應用層。
????????傳輸層:(關注起點和終點)負責兩臺主機之間的數據傳輸。如傳輸控制協(xié)議 (TCP),能夠確保數據可靠的從源主機發(fā) 送到目標主機。
????????網絡層:(進行路徑規(guī)劃)負責地址管理和路由選擇。例如在IP協(xié)議中,通過IP地址來標識一臺主機,并通過路由表 的方式規(guī)劃出兩臺主機之間的數據傳輸的線路(路由)。路由器(Router)工作在網路層。 ????????
????????數據鏈路層:(兩個相鄰節(jié)點之間的數據傳輸情況)負責設備之間的數據幀的傳送和識別。例如網卡設備的驅動、幀同步(就是說從網線 檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到沖突就自動重發(fā))、數據差錯校驗等工 作。有以太網、令牌環(huán)網,無線LAN等標準。交換機(Switch)工作在數據鏈路層。
????????物理層:描述進行網絡通信時所需要的硬件設備,以及負責光/電信號的傳遞方式。比如現(xiàn)在以太網通用的網線(雙絞 線)、早期以太網采用的的 同軸電纜(現(xiàn)在主要用于有線電視)、光纖,現(xiàn)在的wifi無線網使用電磁波等都屬于物理層的概念。 物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等。集線器(Hub)工作在物理層。(光纖,網線的規(guī)格和規(guī)范)
? ? ? ? 兩種協(xié)議比較如下圖所示:
3.2.2 網絡設備所在分層
????????對于一臺主機,它的操作系統(tǒng)內核實現(xiàn)了從傳輸層到物理層的內容,也即是TCP/IP五層模型的下 四層;
????????對于一臺路由器,它實現(xiàn)了從網絡層到物理層,也即是TCP/IP五層模型的下三層;
???????? 對于一臺交換機,它實現(xiàn)了從數據鏈路層到物理層,也即是TCP/IP五層模型的下兩層;
????????對于集線器,它只實現(xiàn)了物理層;我們以下說的網絡設 備都是傳統(tǒng)意義上的交換機和路由器。
3.2.3?網絡分層對應
????????網絡數據傳輸時,經過不同的網絡節(jié)點(主機、路由器)時,網絡分層需要對應。 以下為同一個網段內的兩臺主機進行文件傳輸:
? ? ? ? 兩臺計算機通過TCP/IP協(xié)議通訊的過程如下所示:
????????
????????以下為跨網段的主機的文件傳輸:數據從一臺計算機到另一臺計算機傳輸過程中要經過一個或多個路由器:
4. 封裝分用
????????不同的協(xié)議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做數據報 (datagram),在鏈路層叫做幀(frame)。
????????應用層數據通過協(xié)議棧發(fā)到網絡上時,每層協(xié)議都要加上一個數據首部(header),稱為封裝 (Encapsulation)。 首部信息中包含了一些類似于首部有多長,載荷(payload)有多長,上層協(xié)議是什么等信息。
????????數據封裝成幀后發(fā)到傳輸介質上,到達目的主機后每層協(xié)議再剝掉相應的首部,根據首部中 的 "上層協(xié)議字段" 將數據交給對應的上層協(xié)議處理。
? ? ? ?下面通過一個例子來講解,eg:考慮A通過QQ 將有一個hello傳遞給B;
4.1 封裝
? ? ? ? 下面是封裝的過程:
? ? ? ? 發(fā)送方:
1、應用層
? ? ? ? QQ應用程序,就會把用戶輸入的“hello”給打包成一個應用層的數據報(該數據報的格式只有qq程序員才能知道),假設數據報的格式是下圖所示的;
? ? ? ? 如上所示,我們就可以把應用層數據報,通過操作系統(tǒng)的api,把數據交給傳輸層;
2、傳輸層
? ? ? ? 就要對剛才的應用層數據在進行打包,變成傳輸層的數據報,這里所說的打包過程,本質上還是“字符串拼接”,在剛才的應用層數據報的基礎上拼接上傳輸層的報頭;
? ? ? ? 傳輸層的典型協(xié)議是TCP和UDP協(xié)議,且一個數據報=報頭+載荷;所謂進行封裝的過程,也就是給數據添加更多“輔助信息”的過程,即傳輸層的打包圖解如下圖所示:
? ? ? ? 傳輸層的數據封裝好之后,就會進一步交給網絡層;
3、網絡層
? ? ? ? ?網絡層最主要的協(xié)議是ip協(xié)議;
? ? ? ? 網絡層的數據打包好之后,就繼續(xù)報數據交給“數據鏈路層”來進一步打包;
4、數據鏈路層
? ? ? ? 在該層的打包信息如下圖所示:
最后將打包好的數據交給物理層;
5、物理層
????????將上述的數據,轉換成2進制的0,1序列,通過光信號、電信號進行傳輸;
? ? ? ? 從上層協(xié)議到下層協(xié)議,層層給數據報添加報頭的這個過程稱為“封裝”,數據發(fā)送出去之后,就會經過一系列的交換機和路由器的轉發(fā),因為A和B一般來說不是直接通過網線連接的,且中間還要經過很多的路由器和見換機設備的轉發(fā),當數據到達B這邊后,B就要針對上述所傳輸的數據進行“分用”,即對于所打包的數據進行層層解析;
4.2 分用
? ? ? ? 接收方:
1、物理層
? ? ? ? 拿到的光信號->轉換成二進制數據->得到以太網數據報
? ? ? ? 最后將得到的數據交給數據鏈層隊形的協(xié)議來處理
2、數據鏈路層
? ? ? ? 通過以太網,針對以太網數據報進行解析,這個解析過程就會解析出報頭和報尾以及中間的載荷,把載荷部分進一步的在交給網絡層的相關協(xié)議來處理;
3、網絡層
? ? ? ? ip協(xié)議,在進一步的針對網絡層數據報進行解析,去掉報頭拿到載荷,再進一步把載荷數據包交給上層(傳輸層)
4、傳輸層
? ? ? ? 此處使用的是UDP協(xié)議,針對這個數據報進行解析,拿到載荷,去掉報頭,把載荷數據進一步上交給上層(應用層),并根據端口號來區(qū)分把數據報交給哪個應用層;
5、應用層
? ? ? ? 把上述的數據報根據端口號,交給qq這個程序
? ? ? ? qq程序就要進一步解析這里的數據,這個解析過程也是按照前面程序員自定義的應用層協(xié)議來展開的;文章來源:http://www.zghlxwxcb.cn/news/detail-828527.html
ps:本篇的內容就到這里了,如果大家感興趣的話,就請一鍵三連哦?。。?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-828527.html
到了這里,關于【Java EE初階十三】網絡初識的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!