网络通信基础(局域网、广域网、IP地址、端口号、协议、封装、分用)
目錄
- 一、局域網(wǎng)和廣域網(wǎng)
- 1.1 局域網(wǎng)LAN
- 1.2 廣域網(wǎng)
- 二、網(wǎng)絡(luò)通信基礎(chǔ)
- 2.1 IP地址
- 2.2 端口號
- 2.3 協(xié)議
- 2.4 協(xié)議分層
- OSI七層網(wǎng)絡(luò)模型
- TCP/IP五層(或四層)模型
- 網(wǎng)絡(luò)設(shè)備所在分層
- 三、封裝和分用
- 3.1 封裝
- 應(yīng)用層(QQ應(yīng)用程序)
- 傳輸層(操作系統(tǒng)內(nèi)核)
- 網(wǎng)絡(luò)層(操作系統(tǒng)內(nèi)核)
- 數(shù)據(jù)鏈路層(驅(qū)動程序)
- 物理層(硬件設(shè)備)
- 3.2 分用
- 物理層(硬件設(shè)備,網(wǎng)卡)
- 數(shù)據(jù)鏈路層(驅(qū)動)
- 網(wǎng)絡(luò)層(操作系統(tǒng)內(nèi)核)
- 傳輸層(操作系統(tǒng)內(nèi)核)
- 應(yīng)用層(應(yīng)用程序QQ)
獨立模式:計算機之間相互獨立。
隨著時代的發(fā)展,越來越需要計算機之間互相通信,共享軟件和數(shù)據(jù),即以多個計算機協(xié)同工作來完成業(yè)務(wù),就有了網(wǎng)絡(luò)互連。
網(wǎng)絡(luò)互連:將多臺計算機連接在一起,完成數(shù)據(jù)共享。
數(shù)據(jù)共享本質(zhì)是網(wǎng)絡(luò)數(shù)據(jù)傳輸,即計算機之間通過網(wǎng)絡(luò)來傳輸數(shù)據(jù),也稱為網(wǎng)絡(luò)通信。
根據(jù)網(wǎng)絡(luò)互連的規(guī)模不同,可以劃分為局域網(wǎng)和廣域網(wǎng)。
一、局域網(wǎng)和廣域網(wǎng)
1.1 局域網(wǎng)LAN
局域網(wǎng),即 Local Area Network,簡稱LAN。
Local 即標識了局域網(wǎng)是本地,局部組建的一種私有網(wǎng)絡(luò)
局域網(wǎng)內(nèi)的主機之間能方便的進行網(wǎng)絡(luò)通信,又稱為內(nèi)網(wǎng);局域網(wǎng)和局域網(wǎng)之間在沒有連接的情況下,是無法通信的。
局域網(wǎng)組建網(wǎng)絡(luò)的方式有很多種:通過路由器/交換機組建起來的這些都叫做局域網(wǎng)。
-
基于網(wǎng)線直連
用兩根線把三個主機給連起來,這三個主機就構(gòu)成了一個局域網(wǎng)。 -
基于交換機組建
交換機上面的網(wǎng)口之間都是對等.(都是一樣的口)效果就是把插在上面的設(shè)備給組建成一個局域網(wǎng).這個局域網(wǎng)內(nèi)部的主機之間就可以相互進行訪問,交換機是把若干個設(shè)備給組建到一個局域網(wǎng)中. -
基于路由器組建
路由器這里其實有兩類端口:WAN口和LAN口.
其中插在LAN口上的設(shè)備,在一個局域網(wǎng)里.
通過WAN口連接到另外一個局域網(wǎng);
路由器則是連接了兩個局域網(wǎng)(LAN口是一個,WAN又連了一個)。
1.2 廣域網(wǎng)
廣域網(wǎng),即 Wide Area Network,簡稱WAN。
通過路由器,將多個局域網(wǎng)連接起來,在物理上組成很大范圍的網(wǎng)絡(luò),就形成了廣域網(wǎng)。廣域網(wǎng)內(nèi)部的局域網(wǎng)都屬于其子網(wǎng)。
廣域網(wǎng)其實和局域網(wǎng)之間,沒有明確界限.認為比較大的局域網(wǎng),就可以稱為"廣域網(wǎng)"
全世界最大的廣域網(wǎng),叫做Internet(因特網(wǎng))。
二、網(wǎng)絡(luò)通信基礎(chǔ)
網(wǎng)絡(luò)互連的目的是進行網(wǎng)絡(luò)通信,也即是網(wǎng)絡(luò)數(shù)據(jù)傳輸,更具體一點,是網(wǎng)絡(luò)主機中的不同進程間,基于網(wǎng)絡(luò)傳輸數(shù)據(jù)。
那么,在組建的網(wǎng)絡(luò)中,如何判斷到底是從哪臺主機,將數(shù)據(jù)傳輸?shù)侥桥_主機呢?這就需要使用IP地址來標識。
2.1 IP地址
IР地址:描述了網(wǎng)絡(luò)上的一個主機的位置(定位主機的一個網(wǎng)絡(luò)位置).(就相當于買快遞時的收貨地址)
格式:
IP地址是一個32位的二進制數(shù),這樣不方便人來讀取和記憶,通常把它被分割為4個“8位二進制數(shù)”(也就是4個字節(jié)),如:01100100.00000100.00000101.00000110。
通常用“點分十進制”的方式來表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之間的十進制整數(shù))。如:100.4.5.6。
特殊IP:
127.*的IP地址用于本機環(huán)回(loop back)測試,通常是127.0.0.1(環(huán)回IP ,表示自己的這個主機)。
2.2 端口號
端口號:描述了一個主機上的某個應(yīng)用程序.(相當于收件人的電話)
格式:
端口號本質(zhì)上是一個2個字節(jié)(16位)的無符號整數(shù)(0~65535范圍的數(shù)字),在網(wǎng)絡(luò)通信中,進程可以通過綁定一個端口號,來發(fā)送及接收網(wǎng)絡(luò)數(shù)據(jù)。
兩個不同的進程,不能綁定同一個端口號,但一個進程可以綁定多個端口號。
3306 mysql默認的端口號.
服務(wù)器程序在啟動的時候,就需要綁定上一個端口號,以便客戶端程序來訪問。
知名端口號:把0-1024這些端口號,給劃分出了一些具體的作用.
很多網(wǎng)絡(luò)服務(wù)是屬于非常常用,非常廣泛的服務(wù),為了更好的管理就給這些服務(wù)分配一些專門的端口號,并不是強制要求,而只是建議。
比如:
80: http服務(wù)器
443 :https服務(wù)器
22: ssh
23: ftp
如果你自己部署http服務(wù)器,可以把他綁定到80,也可以綁定到其他端口上.像java中知名的http服務(wù)器tomcat,使用的默認端口就不是 80 而是8080。
2.3 協(xié)議
協(xié)議,網(wǎng)絡(luò)協(xié)議的簡稱,網(wǎng)絡(luò)協(xié)議是網(wǎng)絡(luò)通信(即網(wǎng)絡(luò)數(shù)據(jù)傳輸)經(jīng)過的所有網(wǎng)絡(luò)設(shè)備都必須共同遵從的一組約定、規(guī)則。如怎么樣建立連接、怎么樣互相識別等。只有遵守這個約定,計算機之間才能相互通信交流。
協(xié)議(protocol)最終體現(xiàn)為在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包的格式。
為什么需要協(xié)議?
網(wǎng)絡(luò)通信的時候,本質(zhì)上傳輸?shù)氖枪庑盘柡碗娦盘?#xff1b;通過光信號的頻率(高頻率/低頻率)電信號的電平(高電平/低電平)來表示0和1。要想傳遞各種不同的信息,就需要約定好雙方的數(shù)據(jù)格式。
2.4 協(xié)議分層
網(wǎng)絡(luò)通信這個過程其實很復(fù)雜,里面有很多很多的細節(jié).如果就只通過一個協(xié)議,來約定所有的細節(jié),這個協(xié)議就會非常龐大,復(fù)雜;更好的辦法就是把一個大的復(fù)雜的協(xié)議,拆成多個小的,更簡單的協(xié)議,每個協(xié)議,負責一部分工作。
協(xié)議分層類似于打電話時,定義不同的層次的協(xié)議:
我們的協(xié)議只有兩層;但是實際的網(wǎng)絡(luò)通信會更加復(fù)雜,需要分更多的層次。
分層的好處:
好處1:每層協(xié)議不需要理解其他層協(xié)議的細節(jié).(更好的做到了封裝)
打電話的人,不需要理解電話的工作原理,就能完成打電話的操作制造電話的人,也不需要成為語言大師。
好處2:把對應(yīng)層的協(xié)議替換成其他協(xié)議.(更好的解耦合)
打電話的人,可以不使用有線電話,可以使用無線電話.
打電話的人,也可以使用英語,不使用漢語》
OSI七層網(wǎng)絡(luò)模型
OSI:即Open System Interconnection,開放系統(tǒng)互連。
- OSI 七層網(wǎng)絡(luò)模型是一個邏輯上的定義和規(guī)范:把網(wǎng)絡(luò)從邏輯上分為了7層。
- OSI 七層模型是一種框架性的設(shè)計方法,其最主要的功能使就是幫助不同類型的主機實現(xiàn)數(shù)據(jù)傳輸;
- 它的最大優(yōu)點是將服務(wù)、接口和協(xié)議這三個概念明確地區(qū)分開來,概念清楚,理論也比較完整。通過七個層次化的結(jié)構(gòu)模型使不同的系統(tǒng)不同的網(wǎng)絡(luò)之間實現(xiàn)可靠的通訊。
OSI 七層模型既復(fù)雜又不實用:所以 OSI 七層模型沒有落地、實現(xiàn)。
實際組建網(wǎng)絡(luò)時,只是以 OSI 七層模型設(shè)計中的部分分層,也即是以下 TCP/IP 五層(或四層)模型來實現(xiàn)。
TCP/IP五層(或四層)模型
TCP/IP是一組協(xié)議的代名詞,它還包括許多協(xié)議,組成了TCP/IP協(xié)議簇。
TCP/IP通訊協(xié)議采用了5層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。
下面這四層的代碼邏輯都是由操作系統(tǒng)和驅(qū)動以及硬件已經(jīng)實現(xiàn)好了的。
站在全局的角度,認為是5層,但是最下面的物理層描述的是硬件設(shè)備,(和軟件沒啥關(guān)系,和程序猿距離比較遠),這個時候就認為是四層。
物理層:網(wǎng)絡(luò)通信中的硬件設(shè)備(網(wǎng)線/網(wǎng)卡…),針對硬件設(shè)備的約定,就是物理層協(xié)議所負責的范疇,需要保證所有的主機和網(wǎng)絡(luò)設(shè)備之間,都是相互匹配的。
物理層負責光/電信號的傳遞方式。比如現(xiàn)在以太網(wǎng)通用的網(wǎng)線(雙絞 線)、早期以太網(wǎng)采用的的同軸電纜(現(xiàn)在主要用于有線電視)、光纖,現(xiàn)在的wifi無線網(wǎng)使用電磁波等都屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等。集線器(Hub)工作在物理層。
數(shù)據(jù)鏈路層:負責完成相鄰(一根網(wǎng)線相連)的兩個設(shè)備之間的通信的。[局部]
負責設(shè)備之間的數(shù)據(jù)幀的傳送和識別。例如網(wǎng)卡設(shè)備的驅(qū)動、幀同步(就是說從網(wǎng)線上檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到?jīng)_突就自動重發(fā))、數(shù)據(jù)差錯校驗等工作。有以太網(wǎng)、令牌環(huán)網(wǎng),無線LAN等標準。交換機(Switch)工作在數(shù)據(jù)鏈路層
網(wǎng)絡(luò)層:負責點到點之間的通信.[全局]
網(wǎng)絡(luò)中的任意節(jié)點,到任意節(jié)點之間的通信(不一定是相鄰了,更多的是指不相鄰的),網(wǎng)絡(luò)層就負責在這兩個點之間,規(guī)劃出一條合適的路線。(實際的網(wǎng)絡(luò)環(huán)境結(jié)構(gòu)非常復(fù)雜.兩個點之間的路線不只一條。就需要規(guī)劃處最合適的一條)。
傳輸層:負責端到端之間的通信.
起點和終點,只是關(guān)注結(jié)果(數(shù)據(jù)到?jīng)]到),不關(guān)注過程(不關(guān)注數(shù)據(jù)是走哪條路)
比如買快遞時就需要填寫自己的收件人地址和收件人姓名.商家就要根據(jù)這個地址把快遞發(fā)給我,我和商家,都是只關(guān)注結(jié)果,不關(guān)注過程,快遞公司要關(guān)注中間的過程。
應(yīng)用層:和應(yīng)用程序密切相關(guān)的.(你傳輸?shù)倪@個數(shù)據(jù),是干啥用的,不同的應(yīng)用程序就有不同的用途)
比如有一天我在網(wǎng)上買一個床刷子:
商家,站在傳輸層:考慮這個東西是能不能發(fā)到我手上.
快遞公司:站在網(wǎng)絡(luò)層規(guī)劃路線.
快遞小哥:站在數(shù)據(jù)鏈路層,騎著電動車把貨拉到集散中心.
電動車/集裝箱卡車/公路站在物理層:提供傳輸?shù)幕A(chǔ).
上面四步都是只在考慮包裹如何傳輸,不考慮這個包裹里面是啥,更不關(guān)心包裹里的東西是干啥用的。而我:作為買床刷子的人站在應(yīng)用層,就是抱著一定的用途/目的來買的。
網(wǎng)絡(luò)設(shè)備所在分層
對于一臺主機,它的操作系統(tǒng)內(nèi)核實現(xiàn)了從傳輸層到物理層的內(nèi)容,也即是TCP/IP五層模型的下四層;
對于一臺路由器,它實現(xiàn)了從網(wǎng)絡(luò)層到物理層,也即是TCP/IP五層模型的下三層;
對于一臺交換機,它實現(xiàn)了從數(shù)據(jù)鏈路層到物理層,也即是TCP/IP五層模型的下兩層;
注意我們這里說的是傳統(tǒng)意義上的交換機和路由器,也稱為二層交換機(工作在TCP/IP五層模型的下兩層)、三層路由器(工作在TCP/IP五層模型的下三層)。
三、封裝和分用
- 不同的協(xié)議層對數(shù)據(jù)包有不同的稱謂,在傳輸層叫做段(segment),在網(wǎng)絡(luò)層叫做數(shù)據(jù)報(datagram),在鏈路層叫做幀(frame)。
- 應(yīng)用層數(shù)據(jù)通過協(xié)議棧發(fā)到網(wǎng)絡(luò)上時,每層協(xié)議都要加上一個數(shù)據(jù)首(header),稱為封裝(Encapsulation)。
- 首部信息中包含了一些類似于首部有多長,載荷(payload)有多長,上層協(xié)議是什么等信息。
- 數(shù)據(jù)封裝成幀后發(fā)到傳輸介質(zhì)上,到達目的主機后每層協(xié)議再剝掉相應(yīng)的首部,根據(jù)首部中的 “上層協(xié)議字段” 將數(shù)據(jù)交給對應(yīng)的上層協(xié)議處理。
3.1 封裝
例如,使用QQ給一個同學(xué)發(fā)送消息,用戶A在鍵盤上,輸入了一個"hello",按下發(fā)送鍵。
應(yīng)用層(QQ應(yīng)用程序)
根據(jù)用戶輸入的內(nèi)容,QQ的代碼中就會根據(jù)程序猿所設(shè)計的應(yīng)用層協(xié)議,把數(shù)據(jù)構(gòu)造成一個應(yīng)用層的協(xié)議報文(協(xié)議:是一種約定,報文:遵守了這個約定的一組數(shù)據(jù))。注:QQ使用的應(yīng)用層協(xié)議,是開發(fā)QQ的程序員自己設(shè)定的,假設(shè)現(xiàn)在的一種應(yīng)用層協(xié)議格式為:
應(yīng)用層協(xié)議就調(diào)用操作系統(tǒng)提供的API(稱為socket API),把應(yīng)用層的數(shù)據(jù),交給傳輸層(就已經(jīng)進入操作系統(tǒng)內(nèi)核了)。
傳輸層(操作系統(tǒng)內(nèi)核)
根據(jù)剛才傳過來的數(shù)據(jù),基于當前使用的傳輸層協(xié)議,來構(gòu)造出一個傳輸層的協(xié)議報文。傳輸層最典型的協(xié)議為UDP,TCP。以TCP為例:
TCP的數(shù)據(jù)報=TCP報頭+數(shù)據(jù)載荷(Payload,也就是一個完整的應(yīng)用層數(shù)據(jù))。
TCP的報頭中有很多信息,其中最重要的,就是**“源端口"和“目的端口”**,類似于發(fā)件人電話和收件人電話。
可以簡單的把這個構(gòu)造TCP報文的過程視為是一個字符串拼接(這里拼的是二進制數(shù)據(jù))。接下來就會把這個傳輸層的數(shù)據(jù)報,交給網(wǎng)絡(luò)層。
網(wǎng)絡(luò)層(操作系統(tǒng)內(nèi)核)
拿到了完整的傳輸層數(shù)據(jù)報,就會再根據(jù)當前使用的網(wǎng)絡(luò)層協(xié)議(例如IP),再次進行封裝,把TCP數(shù)據(jù)報構(gòu)造成IР數(shù)據(jù)報,這里還是添加上一個協(xié)議報頭:
IP數(shù)據(jù)報=IР協(xié)議報頭+載荷(完整的TCP/UDP的數(shù)據(jù)報)
這個報頭中也有很多重要的信息,其中最重要的就是源IP和目的IP,類似于發(fā)件人的地址,和收件人的地址。緊接著,當前的網(wǎng)絡(luò)層協(xié)議,就會把這個IP數(shù)據(jù)報,交給數(shù)據(jù)鏈路層。
數(shù)據(jù)鏈路層(驅(qū)動程序)
在剛才的IP數(shù)據(jù)報基礎(chǔ)上,根據(jù)當前使用的數(shù)據(jù)鏈路層的協(xié)議,給構(gòu)造成一個數(shù)據(jù)鏈路層的數(shù)據(jù)報.典型的數(shù)據(jù)鏈路層的協(xié)議,叫做“以太網(wǎng)”,就會構(gòu)造成一個"以太網(wǎng)數(shù)據(jù)幀":
以太網(wǎng)數(shù)據(jù)幀=幀頭+IP數(shù)據(jù)報+幀尾
幀頭里面存儲的是最重要的信息:接下來要傳給的設(shè)備的地址是什么;
幀尾負責校驗和。
IP協(xié)議里面寫的地址,是起點和終點.(西安到安廣鎮(zhèn))
以太網(wǎng)數(shù)據(jù)幀,幀頭里寫的地址,是接下來一個相鄰節(jié)點的地址.(西安和長春)
隨著數(shù)據(jù)往下一個設(shè)備轉(zhuǎn)發(fā),幀頭中的地址,一直在時刻發(fā)生改變.
人在西安,這里的地址,寫的是西安/長春;
人在長春,這里的地址,寫的是長春/白城;
人在白城,這里的地址,寫的是白城/安廣鎮(zhèn);
數(shù)據(jù)鏈路層,又會把上述這個數(shù)據(jù)交個物理層。
物理層(硬件設(shè)備)
物理層做的工作,就是根據(jù)剛才的以太網(wǎng)數(shù)據(jù)幀(其實就是一組0 1)把這里的0 1變成高低電平,通過網(wǎng)線傳輸出去.或者把這里的0 1變成高頻/低頻的電磁波,通過光纖/無線的方式傳播出去。
到了這一步,此時數(shù)據(jù)就已經(jīng)離開了當前主機,前往了下一個設(shè)備.
下一個設(shè)備,可能是路由器/交換機/其他設(shè)備。
3.2 分用
分用就是封裝的逆過程:
封裝是從上往下,數(shù)據(jù)依次被加上了協(xié)議報頭(包快遞);
分用是從下往上,,數(shù)據(jù)一次被去掉了協(xié)議報頭(拆快遞);
物理層(硬件設(shè)備,網(wǎng)卡)
主機B的網(wǎng)卡感知到了一組高低電平,就會把這些電平翻譯成0 1的一串數(shù)據(jù),然后這一串0 1就是一個完整的以太網(wǎng)數(shù)據(jù)幀.物理層就把這個數(shù)據(jù)交給了數(shù)據(jù)鏈路層。
數(shù)據(jù)鏈路層(驅(qū)動)
數(shù)據(jù)鏈路層負責對這個數(shù)據(jù)進行解析,去掉幀頭和幀尾,取出里面的IP數(shù)據(jù)報,然后交給網(wǎng)絡(luò)層協(xié)議。
網(wǎng)絡(luò)層(操作系統(tǒng)內(nèi)核)
網(wǎng)絡(luò)層協(xié)議(IP協(xié)議)又會對這個數(shù)據(jù)進行解析,去掉IP協(xié)議報頭,取出里面的TCP數(shù)據(jù)報再交給傳輸層;
傳輸層(操作系統(tǒng)內(nèi)核)
傳輸層協(xié)議(TCP協(xié)議)又會對這個數(shù)據(jù)進行解析,去掉TCP報頭,取出里面的TCP數(shù)據(jù)報,交給應(yīng)用層.
應(yīng)用層(應(yīng)用程序QQ)
應(yīng)用層就會調(diào)用socket API從內(nèi)核中讀取到這個應(yīng)用層數(shù)據(jù)報,再按照應(yīng)用層協(xié)議進行解析,根據(jù)解析結(jié)果給顯示到窗口中。
上述討論的只是起點和終點的情況.A和B中間還有很多路由器和交換機呢?
無論網(wǎng)絡(luò)多么復(fù)雜,這里整體的傳輸過程都是類似的.只是在不停的重復(fù)封裝和分用的過程。
總結(jié)
以上是生活随笔為你收集整理的网络通信基础(局域网、广域网、IP地址、端口号、协议、封装、分用)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2477):封装数据接口
- 下一篇: 2020年百度之星程序设计大赛-初赛二(