軟裝設(shè)計師培訓(xùn)網(wǎng)站優(yōu)化建設(shè)
文章目錄
- 局域網(wǎng) LAN
- 廣域網(wǎng) WAN
- 網(wǎng)絡(luò)中的重要概念
- IP 地址
- 端口號
- 認(rèn)識協(xié)議
- 協(xié)議分層
- 是什么
- OSI 七層網(wǎng)絡(luò)模型
- TCP/IP 五層網(wǎng)絡(luò)模型(或四層)
- 物理層
- 傳輸層
- 網(wǎng)絡(luò)層
- 數(shù)據(jù)鏈表層
- 應(yīng)用層
- 網(wǎng)絡(luò)設(shè)備所在分層
- 封裝和分用
- [站在發(fā)送方視角](封裝)
- [站在接收方視角](分用)
發(fā)展過程:
單機 —> 局域網(wǎng) —> 廣域網(wǎng) —> 移動互聯(lián)網(wǎng)
局域網(wǎng) LAN
- 局域?,即
Local Area Network
,簡稱LAN
。 Local
即標(biāo)識了局域?是本地,局部組建的?種私有?絡(luò)。- 局域?內(nèi)的主機之間能?便的進??絡(luò)通信,?稱為內(nèi)?;局域?和局域?之間在沒有連接的情況下,是?法通信的。局域?組建?絡(luò)的?式有很多種:
-
把幾個電腦連接到一起,就構(gòu)成了局域網(wǎng)
-
但當(dāng)電腦多了之后,就不方便兩兩相連,就創(chuàng)造了“路由器”
- 只要電腦都連在同一個路由器上面,就可以構(gòu)成局域網(wǎng)
[!quote] 調(diào)制解調(diào)器(貓)
- 不同種類的信號轉(zhuǎn)換
- 這個是寬帶普及之前,上網(wǎng)操作是通過“電話線”進行的,貓的作用是將電話線中的模擬新歡轉(zhuǎn)換成網(wǎng)絡(luò)中的“數(shù)字信號”
- “光貓”就是把光信號和電信號之間進行相互轉(zhuǎn)換(一般帶有路由功能)
- 因為路由器上面接口有限,當(dāng)機器多了之后,就插不下了,此時就引入了“交換機”,就解決了上述問題
- 交換機就相當(dāng)與是對路由器的端口的擴展
- 將計算機都插到交換機上面,然后交換機再連接路由器就行了
- 此時這些電腦就相當(dāng)于都插到路由器上了,這些電腦就都早一個局域網(wǎng)中了
- 局域網(wǎng)是有路由器負(fù)責(zé)的,本身與交換器沒有關(guān)系
廣域網(wǎng) WAN
- ?域?,即 Wide Area Network,簡稱 WAN。
- 通過路由器,將多個局域?連接起來,在物理上組成很?范圍的?絡(luò),就形成了?域?。?域?內(nèi)部的局域?都屬于其??。
- 現(xiàn)在見到的“萬維網(wǎng)”就是把全世界的設(shè)備都連接在一起的巨大廣域網(wǎng)
- “網(wǎng)游”就是電腦連接到了廣域網(wǎng)上,可以和全國甚至全世界的玩家一起進行對抗
網(wǎng)絡(luò)中的重要概念
IP 地址
- IP 地址就是描述了一臺主機,在互聯(lián)網(wǎng)上所處的位置
- IP 地址是使用一個 32 位整數(shù)來表示的
- 使用“點分十進制”這樣的方式,來表示“IP 地址”
- 將 32 位整數(shù)用三個點分成了四份,每份取值范圍 0~255(一個字節(jié))
- 使用點分十進制之后,更方便人閱讀
端口號
- 用來區(qū)分當(dāng)前主機上的指定的應(yīng)用程序(進程)
- 一個主機上,使用網(wǎng)絡(luò)的程序有很多個,可以通過端口號,區(qū)分當(dāng)前主機收到的數(shù)據(jù)是要交給哪個程序來處理使用
- 端口號同樣也是一個整數(shù),是一個兩個字節(jié)的整數(shù)(0~65535)
- 雖然是 0 ~65535 這樣的范圍,實際上 0~1023 這些端口都是有一些特定含義的
- 咱們自己寫代碼使用的端口,一般都是用剩下的
[!quote] IP 地址和端口號
類似發(fā)送快遞時,不光需要指定收貨地址(IP地址),還需要指定收貨?(端?號)
認(rèn)識協(xié)議
網(wǎng)絡(luò)中最核心的概念
- 協(xié)議是進行一切通信的基礎(chǔ)
- 協(xié)議至少得有兩個主機,讓發(fā)送方發(fā)送數(shù)據(jù),接收方能理解
- 比如,我雖然在重慶上學(xué),但我是湖北人,如果周圍有人說重慶話,我有時候就聽不到。
- 這就屬于無效的通信
- 所以雙方需要按照同樣的規(guī)則來構(gòu)造/解析數(shù)據(jù),否則就是無效的通信
- 協(xié)議就是在約束通信雙方,交互數(shù)據(jù)的“規(guī)則”,協(xié)議確定了,雙方就在一個頻道上了,才能進行有意義的通信
所以,如何進行網(wǎng)絡(luò)通信的問題,就轉(zhuǎn)為了如何設(shè)計網(wǎng)絡(luò)通信協(xié)議。
網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù):光信號(光纖,激光的光)/電信號(網(wǎng)線里的)/電磁波(WiFi、5G…)
- 無論是哪種信號,本質(zhì)上都是傳輸 0101 這樣的二進制
- 光信號:可以用高低頻光代表 0/1
- 電信號:可以用高低頻電代表 0/1
- 電磁波:也是光,也可以通過頻率進行編碼
- 所以在通信時就需要約定好,傳輸?shù)倪@一大串 101010 都是啥意思
- 這個就是"網(wǎng)絡(luò)通信協(xié)議“要完成的核心工作
由于網(wǎng)絡(luò)通信,是一件非常復(fù)雜的事情,如果只使用一個協(xié)議,去約定所有的網(wǎng)絡(luò)通信細(xì)節(jié),就會導(dǎo)致這個協(xié)議非常龐大,非常復(fù)雜
為了對抗這種復(fù)雜度,我們就進行“拆分”。將一個大的協(xié)議,拆分成多個小的協(xié)議,讓每個小的協(xié)議,專注于解決一個/一類問題,再讓這些協(xié)議相互配合
協(xié)議分層
是什么
- 但是,拆分之后,拆出來了很多協(xié)議,不方便組織
- 所以,將這些協(xié)議分層,把功能類似的協(xié)議放到一層,并且約定號,協(xié)議之間,不能隨意進行交互,只能是相鄰的層之間才能進行交互
- 上層協(xié)議調(diào)用下層協(xié)議,下層協(xié)議給上層協(xié)議提供服務(wù)
- 上層協(xié)議調(diào)用下層協(xié)議,下層協(xié)議給上層協(xié)議提供服務(wù)
分層的好處:
- 降低了使用的成本,使用某個協(xié)議的時候,不需要關(guān)注其他協(xié)議的實現(xiàn)細(xì)節(jié)
- 打電話這個事情,不需要理解電話機的工作原理,只需要會說話即可
- 降低整個體系的耦合性,可以靈活的變更某個協(xié)議
- 可以經(jīng)漢語協(xié)議變?yōu)橛⒄Z協(xié)議,不妨礙打電話;可以經(jīng)無線電協(xié)議變?yōu)殡娫拝f(xié)議,也不妨礙打電話
當(dāng)前互聯(lián)網(wǎng)體系的現(xiàn)狀就是“協(xié)議分層”的效果
OSI 七層網(wǎng)絡(luò)模型
這種劃分方式,只是存在于教科書里,并沒有被真正的采用
TCP/IP 五層網(wǎng)絡(luò)模型(或四層)
當(dāng)前世界上最主流的網(wǎng)絡(luò)協(xié)議模型
四層就是不散物理層,物理層和硬件相關(guān),距離程序員非常遙遠(yuǎn)
物理層
- 物理層:描述的是硬件設(shè)備(網(wǎng)線這樣的設(shè)備)需要滿足什么樣的條件
- 物理層就相當(dāng)與是“公路“、”鐵路”、“航線”
傳輸層
- 傳輸層:主要就是關(guān)注網(wǎng)絡(luò)通信中的“起點和終點”,并不關(guān)心通信的中間細(xì)節(jié)
- 比如,你在網(wǎng)上買了個東西
- 下單的時候,需要填寫“收件人信息”
- 賣家給你發(fā)快遞的時候,也需要填寫“發(fā)件人信息”
- 最后賣家就把快遞給快遞小哥,快遞小哥最后將快遞送到你手上
- 在這個過程中,傳輸層就只關(guān)注發(fā)貨地和收貨地,并不關(guān)心快遞是如何到你手上的、如何運輸?shù)摹?/li>
網(wǎng)絡(luò)層
- 網(wǎng)絡(luò)層:進行網(wǎng)絡(luò)通信的路徑規(guī)劃和地址管理
- 網(wǎng)絡(luò)是很負(fù)責(zé)的結(jié)構(gòu),從 A 到 B 中間有很多不同的路線,此時網(wǎng)絡(luò)層協(xié)議就要進行“路徑規(guī)劃”,稱為“路由選擇”
- 網(wǎng)絡(luò)上的這些設(shè)備他們的地址都是什么、怎么去描述、用什么樣的一套規(guī)則也是網(wǎng)絡(luò)層安排
- 比如快遞小哥攬收你的包裹之后,需要進行包裹運輸
- 就要規(guī)劃選擇一條合適的路徑將包裹送到你手中
- 合適的選擇不是絕對的,可能看路程、可能看速度、可能看成本…
- 使用地圖導(dǎo)航,也是類似于網(wǎng)絡(luò)層“路由選擇”的過程
數(shù)據(jù)鏈表層
- 數(shù)據(jù)鏈路層:針對好上述規(guī)劃好的路徑,進行具體的實施
- 比如,你的包裹要從上海運往西安,選擇的路徑是:上海 —> 南京 —> 西安
- 上海 —> 南京:走水路,坐船
- 南京 —> 上海:走鐵路,火車
- 西安 —> 驛站:走公路,坐卡車
- 驛站 —> 收貨地:騎三輪
- 在這每兩個地點之間的交通選擇,都是數(shù)據(jù)鏈路層負(fù)責(zé)的
- 董事長(傳輸層) —> 制定一個公司的發(fā)展目標(biāo)(今年營業(yè)額要達(dá)到 xxx 小目標(biāo))
- 高管(網(wǎng)絡(luò)層) —> 規(guī)劃一下,如何達(dá)到上述目標(biāo),明確達(dá)到上述目標(biāo),分成幾個步驟,先做什么再做什么。路徑規(guī)劃/路由選擇的過程
- 基層員工(數(shù)據(jù)鏈路層) —> 進行具體實施,第一步到第二步,第二步到第三步… 具體咋辦
- 辦公用到的基礎(chǔ)設(shè)施(物理層) —> 辦公室、工位、電腦、打印機、網(wǎng)絡(luò)…
這四層都是程序員干預(yù)不了的,操作系統(tǒng)/硬件設(shè)施已經(jīng)實現(xiàn)好了的
應(yīng)用層
- 應(yīng)用層:程序員可以干預(yù)到的,可以決定這個應(yīng)用是用來干什么
網(wǎng)絡(luò)設(shè)備所在分層
- 對于?臺主機,它的操作系統(tǒng)內(nèi)核實現(xiàn)了從傳輸層到物理層的內(nèi)容,也即是
TCP/IP
五層模型的下四層; - 對于?臺路由器,它實現(xiàn)了從?絡(luò)層到物理層,也即是
TCP/IP
五層模型的下三層; - 對于?臺交換機,它實現(xiàn)了從數(shù)據(jù)鏈路層到物理層,也即是
TCP/IP
五層模型的下兩層; - 對于集線器,它只實現(xiàn)了物理層;
這都是站在經(jīng)典的模型上討論的,筆試中遇到了相關(guān)的選擇/填空題,可以照著答
真實情況下,交換機也可能是工作在網(wǎng)絡(luò)層,甚至是傳輸層/應(yīng)用層
路由器也可能是工作在數(shù)據(jù)鏈路層,也可能是傳輸層,也可能是應(yīng)用層
封裝和分用
通過 QQ,發(fā)送一個 hello
給另一個人
[站在發(fā)送方視角](封裝)
- 用戶輸入框中輸入“
hello
”字符串,點擊“發(fā)送”按鈕- QQ 這樣的程序,就會把
hello
這個內(nèi)容從輸入框讀取到,構(gòu)成一個“應(yīng)用層數(shù)據(jù)包” - “應(yīng)用層數(shù)據(jù)包”是應(yīng)用層的協(xié)議,描述了這個數(shù)據(jù)包的構(gòu)造,此處的應(yīng)用層協(xié)議,往往是開發(fā) QQ 的程序員自行定義的
- QQ 這樣的程序,就會把
[!quote] 序列化/反序列化
- 將結(jié)構(gòu)化數(shù)據(jù) —> 二進制字符串:序列化
- 將二進制字符串 —> 結(jié)構(gòu)化數(shù)據(jù):反序列化
- 進行網(wǎng)絡(luò)傳輸數(shù)據(jù),通常就需要把一個“結(jié)構(gòu)化”(C 的結(jié)構(gòu)體/Java 的類,包含很多屬性)數(shù)據(jù)轉(zhuǎn)成一個“字符串”(二進制字符串,不需要非得在碼表上可以查到,任何的 01 序列都可以接在一起)
[!quote] 應(yīng)用層數(shù)據(jù)包
- 主要是做了一個“序列化”的工作,將傳入的信息整合成一個“字符串”
- “應(yīng)用層數(shù)據(jù)包”是應(yīng)用層的協(xié)議,描述了這個數(shù)據(jù)包的構(gòu)造,此處的應(yīng)用層協(xié)議,往往是開發(fā) QQ 的程序員自行定義的
- 如果是我來開發(fā) QQ,我可能會按照下列的方式定義這個應(yīng)用層數(shù)據(jù)包的結(jié)構(gòu)(定義方式有很多種)
- 數(shù)據(jù)包格式:發(fā)送者的 QQ 號;接收者的 QQ 號;發(fā)送時間;消息正文\n
- 數(shù)據(jù)包樣例:
123456789;987654321;2024-01-14 23:50:10;hello\n
-
應(yīng)用層數(shù)據(jù)包準(zhǔn)備就緒后,QQ 這樣的應(yīng)用程序,就會調(diào)用操作系統(tǒng)提供的
API
(傳輸層給應(yīng)用層提供的 API)- 操作系統(tǒng)就會提供一個類似于“發(fā)送數(shù)據(jù)”這樣的
API
,然后應(yīng)用程序就會把上述組織好的應(yīng)用層數(shù)據(jù)包作為參數(shù)傳進來,于是應(yīng)用層數(shù)據(jù)包就到了系統(tǒng)內(nèi)核里,就進入到傳輸層的代碼部分了 - 此時,傳輸層這里,就會把上述的應(yīng)用層數(shù)據(jù),再進一步封裝(字符串拼接)成一個傳輸層數(shù)據(jù)包
- 由于傳輸層有多種協(xié)議(其中最重要的是兩個:
TCP
和UDP
),這些協(xié)議給應(yīng)用層提供的API
是不同的,看應(yīng)用程序種使用哪組API
就使用哪個協(xié)議- 假設(shè)此處使用
UDP
協(xié)議,則會在剛剛整合的“字符串”前面加一個“UDP 報頭
”,這串“字符串”叫“UDP 正文
/載荷
(payload
)” UDP報頭
中就包含了一些UDP
相關(guān)的信息,比如發(fā)送者的端口號和接受者的端口號- 拼上的這些信息,都是給后續(xù)的轉(zhuǎn)發(fā)打下基礎(chǔ)的,就類似于“貼標(biāo)簽”
- 網(wǎng)絡(luò)中,有多層協(xié)議,每一層協(xié)議都要貼標(biāo)簽,每一層標(biāo)簽的側(cè)重點不同,貼上的標(biāo)簽中的信息也不一樣
- 假設(shè)此處使用
- 操作系統(tǒng)就會提供一個類似于“發(fā)送數(shù)據(jù)”這樣的
-
傳輸層構(gòu)造好數(shù)據(jù)之后,就會繼續(xù)調(diào)用網(wǎng)絡(luò)層提供給傳輸層的
API
,把數(shù)據(jù)進一步交給網(wǎng)絡(luò)層- 由于傳輸層和網(wǎng)絡(luò)層都是系統(tǒng)內(nèi)核里面實現(xiàn)好的,上述調(diào)用的過程,我們無需關(guān)心,也感知不到
- 網(wǎng)絡(luò)層也有多種協(xié)議,其中最重要的就是 IPv4 協(xié)議(簡稱為 IP 協(xié)議)
- IP 協(xié)議就會把上述拿到的傳輸層數(shù)據(jù)包構(gòu)造成網(wǎng)絡(luò)層數(shù)據(jù)包
- IP 報頭中也會包含很多信息,主要信息為發(fā)送方的 IP 地址,接收方的 IP 地址
-
網(wǎng)絡(luò)層繼續(xù)調(diào)用數(shù)據(jù)鏈路層的
API
,把數(shù)據(jù)交給數(shù)據(jù)鏈路層處理- 數(shù)據(jù)鏈路層的常見協(xié)議是:以太網(wǎng)(平時插網(wǎng)線,進行上網(wǎng)的方式)
- 在 IP 數(shù)據(jù)包的基礎(chǔ)上,進一步進行包裝
[!quote] 網(wǎng)絡(luò)傳輸數(shù)據(jù)的基本單位
- 數(shù)據(jù)包(packet)
- 數(shù)據(jù)報(Datagram)
- 數(shù)據(jù)段(segment)
- 數(shù)據(jù)幀(frame)
這幾個術(shù)語嚴(yán)格來說是有區(qū)別的,但平時日常交流的時候,不會刻意區(qū)分
- 上述得到的數(shù)據(jù),需要進一步交給物理層(硬件設(shè)備)
- 網(wǎng)卡就會針對上述的二進制數(shù)據(jù),進行真正的傳輸操作
- 就需要把上述 0101 這樣的序列轉(zhuǎn)為光信號/電信號/電磁波…
[站在接收方視角](分用)
-
接收方物理層收到光電信號,把這樣的光電信號還原成 010101 這樣的二進制字符串
-
物理層轉(zhuǎn)換回來的數(shù)據(jù),交給數(shù)據(jù)鏈路層,以太網(wǎng)拿到這個數(shù)據(jù)包,就會對這個數(shù)據(jù)包進行解析
- 拿出這里的報頭和載荷,根據(jù)報頭中的信息做一些處理
- 這個數(shù)據(jù)包是要丟棄、還是轉(zhuǎn)發(fā)、還是自己保留,向上進行解析
- 由于是站在接收方的視角,所以在這里這個數(shù)據(jù)包要交給上層協(xié)議,再做進一步解析
- 所以這個數(shù)據(jù)包就會從數(shù)據(jù)鏈路層交給網(wǎng)絡(luò)層
- 網(wǎng)絡(luò)層拿到了上述解析好的數(shù)據(jù),網(wǎng)絡(luò)層的 IP 協(xié)議也要對這個數(shù)據(jù)包進行解析
- 取出 IP報頭和載荷
- 根據(jù)報頭中的信息確認(rèn),是丟棄、轉(zhuǎn)發(fā)還是保留(給上層協(xié)議)
- 由于是站在接收方的視角,所以在這里這個數(shù)據(jù)包要交給上層協(xié)議,再做進一步解析
- 傳輸層這邊,UDP 協(xié)議也要針對數(shù)據(jù)進行解析
- 取出 UDP 報頭和載荷
- 此處也需要把載荷里面的內(nèi)容,進一步交給應(yīng)用層協(xié)議
- 依賴 UDP 報頭中的端口號,區(qū)分需要交給哪個應(yīng)用程序(端口號就是用來區(qū)分不同進程的)
- 數(shù)據(jù)就到了 QQ 這樣的應(yīng)用程序這里了
- QQ 就要針對上述的數(shù)據(jù)進行“反序列化”
- 再針對里面的數(shù)據(jù)進行進一步的邏輯
- 將收到的消息顯示到界面上
- 播放“滴滴滴”這樣的聲音,提醒收到信息
- 顯示彈窗,提示收到信息
- 更新未讀消息的列表(紅色的圓圈寫個數(shù)字)
- …
- 此處接收方做的工作就是發(fā)送方工作的“逆向工作”
- 發(fā)送方的“封裝”,認(rèn)為是“打包快遞”
- 接收方的“分用”,認(rèn)為是“拆快遞“
一個電腦,會先連到交換機上,交換機可能連到路由器上,路由器可能又連到另一個交換機上,交換機又連到另一個路由器上… 總之,這中間會連接很多的交換機和路由器,來完成數(shù)據(jù)轉(zhuǎn)發(fā)的過程
中間過程的交換機和路由器,也會涉及到封裝和分用(不會像主機這樣復(fù)雜)
- 交換機封裝分用到鏈路層,就可以決定數(shù)據(jù)是丟棄還是繼續(xù)轉(zhuǎn)發(fā)了,不再繼續(xù)分用(經(jīng)典的教科書上的交換機)
- 路由器,封裝分用到網(wǎng)絡(luò)層,就可以決定數(shù)據(jù)是丟棄還是繼續(xù)轉(zhuǎn)發(fā)了,也不再繼續(xù)分用
在傳輸?shù)倪^程中,每到一個設(shè)備都要進行封裝分用,經(jīng)過層層數(shù)據(jù)的交換,最終到達(dá)終點
封裝分用這么麻煩,會不會導(dǎo)致交換機、路由器、主機之間的通信效率很低呢?
- 得看和誰比
- 如果是那網(wǎng)絡(luò)通信和人的反應(yīng)時間相比,速度還是很快的
- 如果拿網(wǎng)絡(luò)通信和讀寫硬盤相比,通常認(rèn)為,網(wǎng)絡(luò)的速度比硬盤的速度更慢
- 更不必說和內(nèi)存比了
也有特殊情況:
- 如果拿網(wǎng)絡(luò)中最強的“萬兆網(wǎng)卡”和硬盤中最弱的“機械硬盤”相比,網(wǎng)絡(luò)的速度更快