網(wǎng)站seo優(yōu)化教程谷歌官方網(wǎng)站
🥊作者:一只愛打拳的程序猿,Java領(lǐng)域新星創(chuàng)作者,CSDN、阿里云社區(qū)優(yōu)質(zhì)創(chuàng)作者。
🤼專欄收錄于:計(jì)算機(jī)網(wǎng)絡(luò)原理
本期講解協(xié)議、OSI七層模型、TCP/IP五層模型、網(wǎng)絡(luò)設(shè)備所在的分層、數(shù)據(jù)的封裝和分傭。
目錄
1. 什么要有協(xié)議?
2. 協(xié)議的分層
2.1 協(xié)議分層的好處
3. OSI七層模型
4. TCP/IP協(xié)議五層模型
5、網(wǎng)絡(luò)設(shè)備所在分層
6、封裝和分用
6.1?封裝
6.1 分用
1. 什么要有協(xié)議?
假如網(wǎng)絡(luò)通信過程中,我給別人發(fā)一條信息“你吃飯了嗎?緊接著發(fā)了一個(gè)動圖表情包。有一個(gè)問題,接收者是如何區(qū)分我發(fā)的是文字還是圖片呢?
我們知道,數(shù)據(jù)傳輸?shù)倪^程是通過 0和1 這樣的二進(jìn)制數(shù)據(jù)進(jìn)行發(fā)送的。那么發(fā)送者和接受者如何區(qū)分傳輸?shù)?0和1 二進(jìn)制數(shù)據(jù)是關(guān)于文字的還是圖片的呢?因此,我們可以通過協(xié)議來規(guī)定相應(yīng)的格式。
2. 協(xié)議的分層
TCP/IP協(xié)議分層模型有:TCP/IP四層模型、TCP/IP五層模型、OSI七層模型。
對于我們程序猿來說,我們需要搞懂 TCP/IP五層協(xié)議 中的前四種協(xié)議即可。因?yàn)槲锢韺又饕且恍﹤鬏斀橘|(zhì)(網(wǎng)線等)類似于電腦的硬件部分,我們軟件開發(fā)無需深入了解。
網(wǎng)絡(luò)編程是通過應(yīng)用層進(jìn)行的,因此我們在后期 網(wǎng)絡(luò)編程 的學(xué)習(xí)中,把應(yīng)用層的一些規(guī)范與使用深入學(xué)習(xí)即可,而其他層我們只需要了解它們是什么就足夠了。
2.1 協(xié)議分層的好處
分層最大的好處,類似于面向接口編程:定義好兩層間的接口規(guī)范,讓雙方遵循這個(gè)規(guī)范來對接。
調(diào)用方,當(dāng)調(diào)用方使用這些接口時(shí)候不關(guān)心接口具體是怎么實(shí)現(xiàn)的。
提供方,提供方利用封裝的特性,隱藏了協(xié)議實(shí)現(xiàn)的細(xì)節(jié),只需要開放接口即可。
3. OSI七層模型
OSI:即Open System Interconnection,開放系統(tǒng)互連。它分為:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層(由低到高)。
應(yīng)用層:針對特定引用的協(xié)議。
表示層:設(shè)備固有數(shù)據(jù)格式和網(wǎng)絡(luò)標(biāo)準(zhǔn)數(shù)據(jù)格式的轉(zhuǎn)換。
會話層:通信管理,負(fù)責(zé)建立和斷開通信連接,管理傳輸層以下的分層。
傳輸層:管理兩個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)傳輸,負(fù)責(zé)可靠的數(shù)據(jù)傳輸。
網(wǎng)絡(luò)層:地址管理與路由選擇。
數(shù)據(jù)鏈路層:互聯(lián)設(shè)備之間傳送和識別數(shù)據(jù)幀。
物理層:傳輸 0、1 這樣的代表高低電平數(shù)據(jù),通過特定的傳輸介質(zhì)來傳輸。
OSI七層模型是教科書級別的。我們作為一名程序猿,只需要掌握TCP/IP五層協(xié)議即可。
4. TCP/IP協(xié)議五層模型
作為一名程序猿,對于TCP/IP五層協(xié)議,應(yīng)掌握應(yīng)用層和熟悉傳輸層,特別是以下兩層對應(yīng)協(xié)議:
- 應(yīng)用層:HTTP協(xié)議、FTP協(xié)議、SMTP協(xié)議和POP3協(xié)議等。這些協(xié)議是應(yīng)用程序與網(wǎng)絡(luò)的接口,程序猿需要了解其通信過程和數(shù)據(jù)格式,從而編寫適合的程序進(jìn)行數(shù)據(jù)交互。
- 傳輸層:TCP和UDP協(xié)議。TCP協(xié)議可確保傳輸?shù)臄?shù)據(jù)完整性和順序性,使用范圍較廣;UDP協(xié)議傳輸速度更快,但無法保證數(shù)據(jù)的完整性和順序性。
應(yīng)用層:負(fù)責(zé)程序之間的溝通,簡單的電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠(yuǎn)程訪問協(xié)議等(Telent)等。我們程序員網(wǎng)絡(luò)編程就是針對應(yīng)用層來進(jìn)行的。
傳輸層:負(fù)責(zé)兩臺主機(jī)之間的數(shù)據(jù)傳輸。如傳輸控制協(xié)議 (TCP),能夠確保數(shù)據(jù)可靠的從源主機(jī)發(fā)
送到目標(biāo)主機(jī)。
網(wǎng)絡(luò)層:負(fù)責(zé)地址管理和路由選擇。例如在IP協(xié)議中,通過IP地址來標(biāo)識一臺主機(jī),并通過路由表
的方式規(guī)劃出兩臺主機(jī)之間的數(shù)據(jù)傳輸?shù)木€路(路由)。路由器(Router)工作在網(wǎng)路層。
數(shù)據(jù)鏈路層:負(fù)責(zé)設(shè)備之間的數(shù)據(jù)幀的傳送和識別。例如網(wǎng)卡設(shè)備的驅(qū)動、幀同步(就是說從網(wǎng)線上檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到?jīng)_突就自動重發(fā))、數(shù)據(jù)差錯校驗(yàn)等工作。有以太網(wǎng)、令牌環(huán)網(wǎng),無線LAN等標(biāo)準(zhǔn)。交換機(jī)(Switch)工作在數(shù)據(jù)鏈路層。
物理層:負(fù)責(zé)光/電信號的傳遞方式。比如現(xiàn)在以太網(wǎng)通用的網(wǎng)線(雙絞 線)、早期以太網(wǎng)采用的的同軸電纜(現(xiàn)在主要用于有線電視)、光纖,現(xiàn)在的wifi無線網(wǎng)使用電磁波等都屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等。集線器(Hub)工作在物理層。
舉例說明:我在網(wǎng)上買一個(gè)物品,需要賣家信息(源IP地址)、我的信息(目的IP地址)。物流(協(xié)議)要?dú)v經(jīng)廣州,長沙,武漢。運(yùn)輸路徑可以是空運(yùn)(廣州直達(dá)武漢)、慢達(dá)(廣州、長沙、武漢)。
應(yīng)用層:告訴快遞站,賣家要快遞給我的貨物是什么,根據(jù)貨物的類型好用相應(yīng)的包裝發(fā)送。
應(yīng)用層負(fù)責(zé)程序之間的溝通,規(guī)定使用的格式。
傳輸層:我和賣家都不關(guān)注中間是怎么傳輸?shù)?#xff0c;只關(guān)心起點(diǎn)和終點(diǎn)對應(yīng)的就是源IP地址與目的IP地址。
傳輸層主要關(guān)注源IP地址與目的IP地址,不考慮中間路徑。
網(wǎng)絡(luò)層:發(fā)貨地址是長沙,收獲地址是武漢。長沙到武漢可以空運(yùn)、火車,網(wǎng)絡(luò)層可選擇合適的路徑進(jìn)行運(yùn)輸。
網(wǎng)絡(luò)層主要負(fù)責(zé)兩個(gè)遙遠(yuǎn)節(jié)點(diǎn)之間的路徑規(guī)劃。
?數(shù)據(jù)鏈路層:運(yùn)輸路徑選擇了慢達(dá),廣州到長沙使用的是貨車,長沙再到武漢使用的火車。
數(shù)據(jù)鏈路層主要負(fù)責(zé)兩個(gè)相鄰節(jié)點(diǎn)之間的傳輸。
物理層:網(wǎng)絡(luò)通信的基礎(chǔ)設(shè)施,也就是一些網(wǎng)線、光纖、網(wǎng)絡(luò)接口,也就是網(wǎng)絡(luò)上的告訴公路。?
5、網(wǎng)絡(luò)設(shè)備所在分層
何為網(wǎng)絡(luò)設(shè)備,就是聯(lián)網(wǎng)所需要的設(shè)備,如電腦主機(jī)、路由器、交換機(jī)、集線器等。
主機(jī):主機(jī),它的操作系統(tǒng)內(nèi)核實(shí)現(xiàn)了從傳輸層到物理層的內(nèi)容,對應(yīng)的TCP/IP五層模型的下四層即:傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層。
路由器:?路由器,它實(shí)現(xiàn)了從網(wǎng)絡(luò)層到物理層,對應(yīng)的是TCP/IP五層模型的下三層即:網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層。
交換機(jī):交換機(jī),它實(shí)現(xiàn)從了從數(shù)據(jù)鏈路層到物理層,對應(yīng)的是TCP/IP五層模型的下兩層。
集線器:集線器,只實(shí)現(xiàn)了物理層。
我們?nèi)粘I钪兴f的交換機(jī)也稱為?二層交換機(jī)?工作在 TCP/IP五層模型中的下兩層(數(shù)據(jù)鏈路層、物理層)。
路由器也稱為 三層路由器?工作在 TCP/IP五層模型中的下三層(網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層)。
6、封裝和分用
在協(xié)議被分層好的情況下,數(shù)據(jù)是怎樣通過網(wǎng)絡(luò)傳輸?shù)牡哪?#xff1f;答案是通過封裝和分用。
發(fā)送方發(fā)送數(shù)據(jù),要把數(shù)據(jù)從上到下,依次交給對應(yīng)層次的協(xié)議,進(jìn)行封裝。
接收方收到數(shù)據(jù),要把數(shù)據(jù)從下到上,依次也交給對應(yīng)層次的協(xié)議,進(jìn)行分用(解封裝)。
假設(shè)我給張三發(fā)一條信息:“你吃飯了嗎?”。模擬這條信息,在各個(gè)層次進(jìn)行封裝與分用的效果。
6.1?封裝
(1)?應(yīng)用層
應(yīng)用層拿到“你吃飯了嗎?”這條信息,進(jìn)行封裝,封裝成應(yīng)用層數(shù)據(jù)包。一個(gè)應(yīng)用層數(shù)據(jù)包大概分為發(fā)送方,接收方,時(shí)間,發(fā)送內(nèi)容這四個(gè)模塊。
當(dāng)然,以上的信息會變成一個(gè)字符串。通過 + 號進(jìn)行連接。如1234;6698;2023061510503;"你吃飯了嗎?",分別對應(yīng)的是發(fā)送方、接收方、時(shí)間、發(fā)送內(nèi)容?。真實(shí)開發(fā)中,這些數(shù)據(jù)包可能封裝得更難,在此大家理解即可。
(2) 傳輸層
傳輸層在拿到應(yīng)用層的數(shù)據(jù)包后,把該數(shù)據(jù)包再次封裝成傳輸層對應(yīng)的數(shù)據(jù)包。傳輸層對應(yīng)的協(xié)議比較多,最典型的是 TCP 和 UDP。
在本篇博文中以 UDP 協(xié)議為例,UDP 會提供一個(gè) UDP 數(shù)據(jù)報(bào)頭里面包含源端口和目的端口。源端口即發(fā)送方程序的端口號,目的端口即接收方程序的端口號。
本質(zhì)上,加上了UDP數(shù)據(jù)報(bào)頭也相當(dāng)于字符串拼接。
(3)網(wǎng)絡(luò)層
傳輸層已經(jīng)把數(shù)據(jù)封裝成帶有 UDP 數(shù)據(jù)報(bào)頭的數(shù)據(jù)包了,接下來網(wǎng)絡(luò)層就要把數(shù)據(jù)包加上 IP 協(xié)議報(bào)頭。
源IP地址就是表示這次傳輸過程中的起點(diǎn),目的IP就是表示這次傳輸過程中的終點(diǎn)。加上了 IP 協(xié)議報(bào)頭,也是通過字符串拼接的。
?(4)數(shù)據(jù)鏈路層
網(wǎng)絡(luò)層把數(shù)據(jù)包交給數(shù)據(jù)鏈路層,此時(shí)會用到以太網(wǎng)幀,此時(shí)涉及到mac地址。mac地址也叫做物理地址,描述的是主要在網(wǎng)絡(luò)中的位置,跟IP地址很像,但比IP地址更詳細(xì)。
IP地址是兩個(gè)較遠(yuǎn)節(jié)點(diǎn)之間交互,mac地址是相鄰節(jié)點(diǎn)之間交互。在本文 4. TCP/IP協(xié)議五層模型中有詳細(xì)介紹。
注意,以太網(wǎng)幀分為幀頭和幀尾,目前我們只需要掌握幀頭即可。幀頭包括源mac地址和目的mac地址。mac地址是和網(wǎng)卡進(jìn)行綁定的,每個(gè)設(shè)備都會有一個(gè)唯一標(biāo)識的 mac 地址(理論上)。?
(5)物理層
物理層在接受到上層以太網(wǎng)的數(shù)據(jù)幀后,就把數(shù)據(jù)包所拼接的字符串 0和1 這樣的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為光信號/電信號等信號進(jìn)行傳輸了。
6.1 分用
通過上述講解,我們知道了封裝是從應(yīng)用層到物理層,而分用恰好相反,從物理層到應(yīng)用層。
(1)物理層
把光信號/電信號進(jìn)行解析,還原成 0和1 的二進(jìn)制序列。交給數(shù)據(jù)鏈路層。
(2)數(shù)據(jù)鏈路層
把得到 0和1 二進(jìn)制序列當(dāng)作一個(gè)以太網(wǎng)幀。把以太網(wǎng)幀頭、幀尾去掉,得到中間的載荷再往上把數(shù)據(jù)包交給網(wǎng)絡(luò)層。
以太網(wǎng)數(shù)據(jù)幀頭有一個(gè)消息類型,根據(jù)這個(gè)類型,網(wǎng)絡(luò)層就能知道數(shù)據(jù)包開頭是IP協(xié)議了。?
(3)網(wǎng)絡(luò)層
網(wǎng)絡(luò)層得到數(shù)據(jù)包后,也是進(jìn)行去IP報(bào)頭,以及取出剩余載荷,把數(shù)據(jù)包上傳給傳輸層。
?IP報(bào)頭也有一個(gè)消息類型,標(biāo)識當(dāng)前數(shù)據(jù)包對應(yīng)的是傳輸層的哪個(gè)協(xié)議。
(4)傳輸層
傳輸層得到是 UDP 報(bào)頭,因此去掉 UDP 報(bào)頭,得到載荷把數(shù)據(jù)包傳給應(yīng)用層。
傳輸層會標(biāo)識端口號,這樣應(yīng)用層就能區(qū)分程序所在位置。
(5)應(yīng)用層
最后應(yīng)用層的工作,就是把數(shù)據(jù)包放到對應(yīng)的程序當(dāng)中。取出數(shù)據(jù)包中的信息,顯示在界面中。
注意:
- 不同的協(xié)議層對數(shù)據(jù)包有不同的稱謂,在傳輸層叫做段(segment),在網(wǎng)絡(luò)層叫做數(shù)據(jù)報(bào)(datagram),在鏈路層叫做幀(frame)。
- 應(yīng)用層數(shù)據(jù)通過協(xié)議棧發(fā)到網(wǎng)絡(luò)上時(shí),每層協(xié)議都要加上一個(gè)數(shù)據(jù)首部(header),稱為封裝(Encapsulation)。
- 首部信息中包含了一些類似于首部有多長,載荷(payload)有多長,上層協(xié)議是什么等信息。
- 數(shù)據(jù)封裝成幀后發(fā)到傳輸介質(zhì)上,到達(dá)目的主機(jī)后每層協(xié)議再剝掉相應(yīng)的首部,根據(jù)首部中的 "上層協(xié)議字段" 將數(shù)據(jù)交給對應(yīng)的上層協(xié)議處理。?
關(guān)于封裝和分用在程序上,實(shí)際各層就是把數(shù)據(jù)用字符串拼接的方式進(jìn)行傳輸。在現(xiàn)實(shí)傳輸中更為復(fù)雜,涉及到模電以及物理相關(guān)知識。在我們程序猿的眼中,知道知道傳輸?shù)倪^程大致是什么樣即可。
?本編博文到這里就結(jié)束了,感謝點(diǎn)贊、評論、收藏、關(guān)注~