计算机网络 | 网络基础 :网络协议,协议分层,数据封装与分用,地址管理,字节序
目錄
- 網(wǎng)絡(luò)協(xié)議
- 網(wǎng)絡(luò)協(xié)議的概念
- 網(wǎng)絡(luò)協(xié)議的組成
- 協(xié)議分層
- OSI七層模型
- TCP/IP五層模型(四層模型)
- 數(shù)據(jù)封裝與分用
- 封裝
- 分用
- 地址管理
- IP地址與端口
- MAC地址
- 網(wǎng)絡(luò)字節(jié)序與主機(jī)字節(jié)序
網(wǎng)絡(luò)協(xié)議
網(wǎng)絡(luò)協(xié)議的概念
協(xié)議,即是約定,是計(jì)算機(jī)網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或約定的集合。
若是通信雙方的數(shù)據(jù)格式,傳輸方式,字符集不一樣,那么兩者之間很難進(jìn)行通信,因?yàn)殡p方都不認(rèn)識(shí)對方的標(biāo)準(zhǔn),要想傳遞不同的信息,雙方就得約定好一個(gè)協(xié)議,按照這個(gè)協(xié)議的規(guī)定,雙方統(tǒng)一好數(shù)據(jù)的格式,這樣就可以完成通信。打個(gè)比方,你在網(wǎng)上與一個(gè)日本網(wǎng)友交流,你講中文,他講日語,誰都聽不懂對方的語言。但是如果雙方約定好一起講英語,這樣兩者就可以進(jìn)行正常的交流。
網(wǎng)絡(luò)協(xié)議的組成
網(wǎng)絡(luò)協(xié)議由三部分組成,語義,語法,時(shí)序。
1. 語義
語義是解釋控制信息每個(gè)部分的意義。它規(guī)定了需要發(fā)出何種控制信息,以及完成的動(dòng)作與做出什么樣的響應(yīng)。
(即要做什么)
2. 語法
語法是用戶數(shù)據(jù)與控制信息的結(jié)構(gòu)與格式,以及數(shù)據(jù)出現(xiàn)的順序。(即要怎么做)
3. 時(shí)序
時(shí)序是對事件發(fā)生順序的詳細(xì)說明。(即做的順序)
協(xié)議分層
在網(wǎng)絡(luò)通信中,因?yàn)橥ㄐ攀莻€(gè)極為復(fù)雜的過程,它包含了很多步驟,各個(gè)步驟之間又存在著許多關(guān)聯(lián)。
所以為了將問題簡單化,按照服務(wù)、協(xié)議、接口等將復(fù)雜的通信劃分成層次結(jié)構(gòu),通過封裝的方式,將底層的實(shí)現(xiàn)封裝為接口提供給上層,上層也不關(guān)心底層的實(shí)現(xiàn),只管去用。把原來的一個(gè)大問題,劃分為一個(gè)一個(gè)的小問題,每一層分工明確,形成標(biāo)準(zhǔn)化的結(jié)構(gòu)。這樣不僅靈活性高,之間的耦合度也降低了,可維護(hù)性和實(shí)現(xiàn)的難度也得到了優(yōu)化。
常見的層次模型有兩種,一種是OSI七層模型,一種是TCP/IP五層模型(四層模型)。
這里可以學(xué)習(xí)一下這篇文章,寫的非常好
TCP/IP四層模型和OSI七層模型的概念
OSI七層模型
- OSI(Open System Interconnection,開放系統(tǒng)互連)七層網(wǎng)絡(luò)模型稱為開放式系統(tǒng)互聯(lián)參考模型, 是一個(gè)邏輯上的定義和規(guī)范**
- OSI 七層模型是一種框架性的設(shè)計(jì)方法,其最主要的功能使就是幫助不同類型的主機(jī)實(shí)現(xiàn)數(shù)據(jù)傳輸; 它的最大優(yōu)點(diǎn)是將服務(wù)、接口和協(xié)議這三個(gè)概念明確地區(qū)分開來,概念清楚,理論也比較完整. 通過七個(gè)層次化的結(jié)構(gòu)模型使不同的系統(tǒng)不同的網(wǎng)絡(luò)之間實(shí)現(xiàn)可靠的通訊
OSI七層模型自上而下分別是:應(yīng)用層、表示層、會(huì)話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層
應(yīng)用層:網(wǎng)絡(luò)服務(wù)與最終用戶的一個(gè)接口
表示層:數(shù)據(jù)的表示、安全、壓縮
會(huì)話層:建立、管理、終止會(huì)話
傳輸層:負(fù)責(zé)進(jìn)程之間的數(shù)據(jù)傳輸
網(wǎng)絡(luò)層:負(fù)責(zé)地址管理和路由選擇
數(shù)據(jù)鏈路層:負(fù)責(zé)相鄰設(shè)備之間的數(shù)據(jù)傳輸
物理層:負(fù)責(zé)物理光電信號(hào)的傳輸
但是這種模型既復(fù)雜又不實(shí)用,因?yàn)樗压δ芟嘟膽?yīng)用層,表示層和會(huì)話層分開實(shí)現(xiàn),所以現(xiàn)在大部分都使用將這三層合為一體的TCP/IP五層模型。
TCP/IP五層模型(四層模型)
物理層一般考慮較少,有時(shí)候也會(huì)稱為四層模型
TCP/IP是一組協(xié)議的代名詞,它還包括許多協(xié)議,組成了TCP/IP協(xié)議簇.
TCP/IP通訊協(xié)議采用了5層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求
這也是如今常用的分層模型
在TCP/IP五層模型中,他將功能相近的應(yīng)用層,表示層和會(huì)話層合并為應(yīng)用層。
應(yīng)用層:負(fù)責(zé)應(yīng)用程序之間的數(shù)據(jù)溝通 ——(常用協(xié)議:HTTP、FTP、DNS、DHCP)
傳輸層:負(fù)責(zé)進(jìn)程之間的數(shù)據(jù)傳輸 ——(常用協(xié)議:TCP、UDP)
網(wǎng)絡(luò)層:負(fù)責(zé)終端節(jié)點(diǎn)之間的通信(點(diǎn)對點(diǎn)),具體包括地址管理和路由選擇等 ——(常用協(xié)議與設(shè)備:IP、ICMP、IGMP、路由器)
數(shù)據(jù)鏈路層:負(fù)責(zé)相鄰設(shè)備之間的數(shù)據(jù)傳輸 ——(常用協(xié)議與設(shè)備:以太網(wǎng)協(xié)議、交換機(jī))
物理層:負(fù)責(zé)物理光電信號(hào)的傳輸 ——(常用協(xié)議與設(shè)備:以太網(wǎng)協(xié)議、集線器)
數(shù)據(jù)封裝與分用
數(shù)據(jù)包利用網(wǎng)絡(luò)在不同設(shè)備之間傳輸時(shí),為了可靠和準(zhǔn)確地發(fā)送到目的地,并且高效地利用傳輸資源(傳輸設(shè)備和傳輸線路),事先要對數(shù)據(jù)包進(jìn)行拆分和打包,在所發(fā)送的數(shù)據(jù)包上附加上目標(biāo)地址,本地地址,以及一些用于糾錯(cuò)的字節(jié),安全性和可靠性較高時(shí),還要進(jìn)行加密處理等等。這些操作就叫數(shù)據(jù)封裝。而對數(shù)據(jù)包進(jìn)行處理時(shí)通信雙方所遵循和協(xié)商好的規(guī)則就是協(xié)議。與郵寄物品相比,數(shù)據(jù)包本身就如同物品,而封裝就如同填寫各種郵寄信息,協(xié)議就是如何填寫信息的規(guī)定。
- 不同的協(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é)議處理
封裝
這里我就簡要的畫一個(gè)圖
1.用戶信息轉(zhuǎn)換為數(shù)據(jù),以便在網(wǎng)絡(luò)上傳輸
2.數(shù)據(jù)轉(zhuǎn)換為數(shù)據(jù)段,并在發(fā)送方和接收方主機(jī)之間建立一條可靠的連接
3.數(shù)據(jù)段轉(zhuǎn)換為數(shù)據(jù)包或數(shù)據(jù)報(bào),并在報(bào)頭中放上邏輯地址,這樣每一個(gè)數(shù)據(jù)包都可以通過互聯(lián)網(wǎng)絡(luò)進(jìn)行傳輸
4.數(shù)據(jù)包或數(shù)據(jù)報(bào)轉(zhuǎn)換為幀,以便在本地網(wǎng)絡(luò)中傳輸。在本地網(wǎng)段上,使用硬件地址唯一標(biāo)識(shí)每一臺(tái)主機(jī)。
5.幀轉(zhuǎn)換為比特流,并采用數(shù)字編碼和時(shí)鐘方案
分用
同樣也是畫一個(gè)圖
分用很簡單,就是按照直接封裝的順序,將封裝的首部和尾部去掉,恢復(fù)成原來的數(shù)據(jù)。其實(shí)就是封裝的反操作,又稱為解封裝
地址管理
在網(wǎng)絡(luò)通信中,每臺(tái)通信的主機(jī)之間都應(yīng)該有屬于自己的標(biāo)志,就如同名字一樣,只有擁有這種標(biāo)志,才能夠進(jìn)行交流。就好比你想要在茫茫人海中找到一個(gè)人,就得知道他的名字,才能找到這個(gè)人。
而在網(wǎng)絡(luò)通信中,也不例外。
IP地址與端口
IP地址:
IP地址就是網(wǎng)絡(luò)中主機(jī)的唯一標(biāo)識(shí),無論哪個(gè)主機(jī)與哪個(gè)主機(jī)之間進(jìn)行通信,都需要用到IP地址來進(jìn)行定位。并且在通信時(shí),每條數(shù)據(jù)中都會(huì)包含源端地址和對端地址,他們指定了通信的兩個(gè)對象。
對于我們常用的IPV4來說,IP地址是一個(gè)uint32_t類型的數(shù)據(jù),也就是無符號(hào)32位的整數(shù)。
我們通常也采用點(diǎn)分十進(jìn)制的字符串來表示IP地址,如192.168.0.1。每一個(gè)字節(jié)的范圍是0-255
端口號(hào):
端口號(hào)則是主機(jī)上進(jìn)程的唯一標(biāo)識(shí),在編寫程序時(shí),需要告知計(jì)算機(jī)應(yīng)該處理發(fā)往哪個(gè)端口的數(shù)據(jù)。
一個(gè)端口只能被一個(gè)進(jìn)程占用,但是一個(gè)進(jìn)程可以同時(shí)使用多個(gè)端口。 并且在通信時(shí),每條數(shù)據(jù)也都會(huì)包含源端端口和對端端口,來指定從哪個(gè)進(jìn)程發(fā)送數(shù)據(jù),交給哪個(gè)進(jìn)程進(jìn)行處理
端口號(hào)是uint16_t,也就是無符號(hào)16位的整數(shù)。
MAC地址
MAC地址用來識(shí)別數(shù)據(jù)鏈路層中相連的節(jié)點(diǎn),通常也可以認(rèn)為是物理地址。在網(wǎng)卡出廠時(shí)就確定了, 不能被修改,mac地址通常是唯一的。
MAC地址由48位組成,一般是16進(jìn)制數(shù)字加上分割符:,如08:00:27:03:fb:19。
網(wǎng)絡(luò)字節(jié)序與主機(jī)字節(jié)序
在網(wǎng)絡(luò)通信時(shí),還需要注意字節(jié)序的問題。
字節(jié)序就是CPU對數(shù)據(jù)再內(nèi)存中以字節(jié)為單位的存取順序,也就是我們通常所說的大端小端問題。
關(guān)于大小端的問題我之前有寫過一篇博客
大端小端存儲(chǔ)解析
這里就簡要說一下
大端存儲(chǔ)模式:是指數(shù)據(jù)的低位保存在內(nèi)存的高地址中,而數(shù)據(jù)的高位,保存在內(nèi)存的低地址中。
小端存儲(chǔ)模式:是指數(shù)據(jù)的低位保存在內(nèi)存的低地址中,而數(shù)據(jù)的高位,保存在內(nèi)存的高地址中。
在網(wǎng)絡(luò)通信中,網(wǎng)絡(luò)字節(jié)序采用大端的存儲(chǔ)模式,而主機(jī)字節(jié)序根據(jù)主機(jī)不同也不一樣,我們現(xiàn)在的家用機(jī)一般都是小端,但網(wǎng)絡(luò)上的通信不能確保主機(jī)字節(jié)序的唯一性,因?yàn)槭鼙娛钦麄€(gè)網(wǎng)絡(luò),而一旦通信的雙方主機(jī)字節(jié)序不同,就會(huì)造成通信時(shí)的數(shù)據(jù)二義,所以需要確保字節(jié)序相同,就需要在通信時(shí)將主機(jī)字節(jié)序轉(zhuǎn)換為通用的網(wǎng)絡(luò)字節(jié)序。
總結(jié)
以上是生活随笔為你收集整理的计算机网络 | 网络基础 :网络协议,协议分层,数据封装与分用,地址管理,字节序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 面向对象(一)继承:继承、对象切
- 下一篇: C++ 面向对象(二)多态 : 虚函数、