目錄
一、認(rèn)識(shí)協(xié)議
1.概念
2.作用(為什么需要協(xié)議?)
二、協(xié)議分層
1.為什么需要?絡(luò)協(xié)議的分層?
2. 協(xié)議分層是什么
3.分層帶來的好處
三、TCP/IP五層(或四層)模型
(1)物理層
(2)數(shù)據(jù)鏈路層
(3)網(wǎng)絡(luò)層
(4)傳輸層
(5)應(yīng)用層
四、封裝和分用(協(xié)議的層和層之間是如何配合工作的?)
1.封裝(和Java面向?qū)ο蟮姆庋b,不是一個(gè)封裝)
2.分用
一、認(rèn)識(shí)協(xié)議
1.概念
簡單來說:就是一種通信雙方,對于通信規(guī)則的約定(標(biāo)準(zhǔn)),一定是通信雙方都認(rèn)可的
但是這個(gè)協(xié)議不一定是認(rèn)可面非常廣的,即使是兩個(gè)人之間的也可叫做協(xié)議
就好???友,彼此協(xié)商胸?插?玫瑰花??,這就是?種提前的約定,也可以稱之為協(xié)議
2.作用(為什么需要協(xié)議?)
兩個(gè)用來通信的主機(jī)設(shè)備有著不同的硬件,不同的操作系統(tǒng),不同的應(yīng)用程序,有了協(xié)議,即使上述內(nèi)容不同,通信也能正常進(jìn)行
進(jìn)行網(wǎng)絡(luò)通信的時(shí)候,通信協(xié)議是非常關(guān)鍵的環(huán)節(jié)
二、協(xié)議分層
1.為什么需要?絡(luò)協(xié)議的分層?
網(wǎng)絡(luò)通信是一個(gè)非常復(fù)雜的事情,這個(gè)過程涉及到很多細(xì)節(jié)問題
如果你使用一個(gè)協(xié)議來約定上述所以的細(xì)節(jié),這個(gè)協(xié)議就會(huì)非常的龐大,非常的復(fù)雜
——>拆分:為了管理復(fù)雜程度,不要讓這個(gè)東西太復(fù)雜,每個(gè)部分負(fù)責(zé)一個(gè)功能
這樣一個(gè)功能復(fù)雜的協(xié)議,就拆分成多個(gè)功能更單一的協(xié)議了
但是拆出來的協(xié)議太多了,就要對這個(gè)協(xié)議進(jìn)行分類,甚至要“分層”
2. 協(xié)議分層是什么
協(xié)議分層:把很多的協(xié)議,按照功能分成不同的層級(jí),每個(gè)層級(jí)都有對應(yīng)的主線任務(wù)(目標(biāo)/要解決的問題),上層協(xié)議會(huì)調(diào)用下層協(xié)議的功能,下層協(xié)議會(huì)給上次協(xié)議提供服務(wù)
注意:不能“越級(jí)調(diào)用”
3.分層帶來的好處
好處主要有兩個(gè)方面:
(1)封裝的效果:某層協(xié)議,不必知道其他層協(xié)議的細(xì)節(jié),降低學(xué)習(xí)使用成本
eg:只要會(huì)說漢語,不需要理解電話的工作原理,就能打電話;
? ? ? ? 設(shè)計(jì)電話的人,可能是老外,不必懂漢語,也不妨礙他設(shè)計(jì)開發(fā)電話
(2)任意層次的協(xié)議,都是可以靈活替換的(也就是解耦合),這樣就給整個(gè)網(wǎng)絡(luò)體系,升級(jí)迭代,帶來了很大的便利
eg:將電話機(jī)協(xié)議改為無線電協(xié)議:站在使用者的角度,完全感知不到任何的區(qū)別,電話該咋打還是咋打;
????????將漢語協(xié)議改為英語協(xié)議:雖然語言變了,電話這一層,沒有任何影響,設(shè)計(jì)電話的人不需要針對“英語”做任何的改變和特殊處理
當(dāng)前網(wǎng)絡(luò)的現(xiàn)狀,就是有很多的協(xié)議,這些協(xié)議就是按照一定的分層規(guī)則組織起來的,業(yè)內(nèi)普遍的分層方式有兩種:
(1)OSI七層模型:
只是存在于教科書上,實(shí)際客觀世界中并不存在,因?yàn)樗愕糜悬c(diǎn)復(fù)雜(這里就不作介紹了)
(2)TCP/IP五層(或四層)模型:
可以認(rèn)為是OSI的簡化版本,就是真實(shí)世界采取的網(wǎng)絡(luò)分成模型,目前接觸到的網(wǎng)絡(luò),大部分都是TCP/IP模型的(電腦上網(wǎng)),當(dāng)然,也有不是的,eg:4G/5G通信,就是一套專門的模型協(xié)議(手機(jī)流量上網(wǎng))
三、TCP/IP五層(或四層)模型
(1)物理層
硬件層面上的相關(guān)約定,網(wǎng)線,網(wǎng)口
eg:金工實(shí)習(xí),8根銅線穿到一起,接上水晶頭,這樣的一些接線規(guī)則
下面(2)(3)(4)以快遞為例介紹?
(2)數(shù)據(jù)鏈路層
關(guān)注的是通信過程中,兩個(gè)相鄰節(jié)點(diǎn)之間的通信
eg:快遞具體運(yùn)輸?shù)?,這是快遞員自行進(jìn)行確定的
例如,當(dāng)前路線:
上海 -> 蘇州 -> 南京 -> 西安
上海 -> 蘇州大卡車 就運(yùn)過去,有一個(gè)開著打開車的快遞小哥
蘇州 ->南京輪船,沿著長江,一路逆流而上,有一個(gè)開著船的快遞小哥,
南京 ->西安 鐵路 裝上火車
西安 ->我家門口 電三輪
每個(gè)節(jié)點(diǎn)之間的運(yùn)輸方式,就相當(dāng)于數(shù)據(jù)鏈路層
(3)網(wǎng)絡(luò)層
關(guān)注的是通信中,通信路徑的規(guī)劃,規(guī)劃出的路徑就決定了,數(shù)據(jù)要經(jīng)過哪些節(jié)點(diǎn)“點(diǎn)到點(diǎn)的傳輸”
eg:商家發(fā)貨,就會(huì)把快遞交給快遞小哥,就會(huì)拿到快遞公司,
快遞公司,就會(huì)對這些包衷,進(jìn)行分揀~~根據(jù)快遞的目的地,分配到不同的運(yùn)輸線路上
發(fā)貨地點(diǎn)是在 上海.如果收件地點(diǎn)是在西安
上海 -> 南京 ->西安
上海 -> 無錫 ->西安
上海 -> 徐州 ->西安
快遞公司,就會(huì)把路線規(guī)劃好,包裏就會(huì)按照這樣的既定路線進(jìn)行傳輸
(4)傳輸層
關(guān)注的是通信雙方的“起點(diǎn)”和“終點(diǎn)”,“端到端的傳輸”
eg:我和商家,我們倆只關(guān)注,發(fā)件人信息,和收件人信息(也就相當(dāng)于起點(diǎn)和終點(diǎn))
(5)應(yīng)用層
和具體應(yīng)用程序直接相關(guān),傳輸?shù)臄?shù)據(jù)是干啥用的,如何用的,有啥意義
eg:我在淘寶上還是買了個(gè)東西,買了個(gè)床刷子~~
我拿著這個(gè)床刷子要干啥~~ 就是我需要關(guān)心的, 快遞公司/商家,都是不關(guān)心的~~當(dāng)我拿到刷子之后,用來刷床,還是用來刷沙發(fā), 還是用來打兒子~~就是我自己來決定了~
?也有人把上述通信協(xié)議分層的模型,稱為TCP/IP四層(沒算物理層)
站在程序員的角度,物理層是純硬件,其余的四層還是軟件
但是物理層又和數(shù)據(jù)鏈路層聯(lián)系緊密,所以有時(shí)也算五層
對于OSI模型:只是將TCP/IP模型中的應(yīng)用層細(xì)分為應(yīng)用層+表示層+會(huì)話層?
上圖中:網(wǎng)絡(luò)層==互聯(lián)網(wǎng)層 ;數(shù)據(jù)鏈路層==網(wǎng)卡層;物理層==(硬件)只是名稱不同而已
關(guān)注上圖的側(cè)面:分別涉及應(yīng)用程序,操作系統(tǒng)(內(nèi)核),設(shè)備驅(qū)動(dòng)程序與網(wǎng)絡(luò)接口
對于Java程序員,重點(diǎn)關(guān)注應(yīng)用層+傳輸層(應(yīng)用層是需要調(diào)用傳輸層提供的接口(api)來進(jìn)行一些功能實(shí)現(xiàn)的),這些和日常開發(fā)息息相關(guān),其他層簡單了解即可
筆試題(選擇題):
路由器是工作在上述協(xié)議中的哪一層
交換機(jī)是工作在上述協(xié)議中的哪一層
如果出現(xiàn):這里的”路由器"和”交換機(jī)“就是"經(jīng)典的路由器交換機(jī)"(課本上的)
路由器就是工作在網(wǎng)絡(luò)層(三層轉(zhuǎn)發(fā))
交換機(jī)就是工作在數(shù)據(jù)鏈路層(二層轉(zhuǎn)發(fā)) (稍后詳細(xì)介紹)
但是真實(shí)的情況:現(xiàn)在的路由器和交換機(jī)功能越來越多,界限越來越模糊
eg:有些路由器/交換機(jī)可以工作在應(yīng)用層,你通過wx發(fā)個(gè)信息,路由器/交換機(jī)就能感知到,你發(fā)的這個(gè)信息內(nèi)容是啥(信息內(nèi)容,屬于應(yīng)用層的范疇)
四、封裝和分用(協(xié)議的層和層之間是如何配合工作的?)
上層協(xié)議調(diào)用下層協(xié)議,下層協(xié)議給上層協(xié)議提供服務(wù)
下面以A通過QQ給B發(fā)送hello為例分別介紹封裝和分用
首先QQ里面就會(huì)有一個(gè)應(yīng)用層網(wǎng)絡(luò)協(xié)議,這個(gè)協(xié)議約定了數(shù)據(jù)按照什么樣的格式來組織
這種數(shù)據(jù)的格式:本質(zhì)上是(二進(jìn)制的)字符串(更準(zhǔn)確的說是二進(jìn)制的bit流),因此要傳輸?shù)陌l(fā)送人,接收人,消息時(shí)間,消息內(nèi)容...就要組織到一個(gè)字符串中,組織的時(shí)候要按照一定的格式來
不同的協(xié)議,數(shù)據(jù)組織的格式是不同的
序列化和反序列化:
序列化:把結(jié)構(gòu)化數(shù)據(jù)(包含很多屬性,很多字段) ——>字符串/二進(jìn)制字符串
反序列化: 把字符串/二進(jìn)制字符串——>結(jié)構(gòu)化數(shù)據(jù)
發(fā)送和接收的過程中就進(jìn)行了一個(gè)序列化和反序列化
1.封裝(和Java面向?qū)ο蟮姆庋b,不是一個(gè)封裝)
A的在聊天窗口里,輸入hello,點(diǎn)擊發(fā)送,那么QQ應(yīng)用程序就要負(fù)責(zé)實(shí)現(xiàn)上述邏輯,而這些邏輯都要通過網(wǎng)絡(luò)來傳輸
(1)QQ應(yīng)用程序首先就會(huì)把上述要傳遞的內(nèi)容,組織成“應(yīng)用層數(shù)據(jù)包”
假設(shè)QQ的應(yīng)用層協(xié)議是這樣的:發(fā)送人的qq號(hào),接收人的qq號(hào),發(fā)送時(shí)間,消息正文\n
(2)應(yīng)用層數(shù)據(jù)包已經(jīng)有了,QQ程序就要調(diào)用系統(tǒng)的api來進(jìn)行傳輸
QQ 程序,就要調(diào)用系統(tǒng)的 api, 來進(jìn)行傳輸.
應(yīng)用層接下來要把數(shù)據(jù)交給,傳輸層.
怎么交給傳輸層?傳輸層(操作系統(tǒng)內(nèi)核) 提供了 api,讓應(yīng)用程序去調(diào)用.
調(diào)用這樣的 api, 就會(huì)把剛才的應(yīng)用層數(shù)據(jù)交給傳輸層.(進(jìn)入到系統(tǒng)內(nèi)核了),稱為 socket api
傳輸層拿到應(yīng)用層數(shù)據(jù)包之后,就會(huì)把這個(gè)數(shù)據(jù)包進(jìn)行進(jìn)一步的封裝,構(gòu)造成 傳輸層數(shù)據(jù)包在傳輸層
典型協(xié)議有兩個(gè),TCP,UDP
此處假設(shè)使用 UDP 來作為傳輸層協(xié)議
整個(gè)是UDP數(shù)據(jù)包,前面是UDP報(bào)頭,后面是UDP數(shù)據(jù)包的載荷(payload)
報(bào)頭里放著一些UDP相關(guān)的屬性(比如發(fā)件人和收件人的端口號(hào)就在UDP報(bào)頭中)
傳輸層 構(gòu)造好數(shù)據(jù)包之后,就會(huì)繼續(xù)把數(shù)據(jù)包,交給網(wǎng)絡(luò)層,(傳輸層會(huì)調(diào)用網(wǎng)絡(luò)層提供的 api,這個(gè)調(diào)用的過程
都是系統(tǒng)內(nèi)核,自行負(fù)責(zé)了,咱們程序員感知不到
(3)網(wǎng)絡(luò)層 典型的協(xié)議IP協(xié)議
整個(gè)是IP數(shù)據(jù)包,前面是IP數(shù)據(jù)包的報(bào)頭,后面是IP數(shù)據(jù)包的載荷(IP協(xié)議不關(guān)心后面的載荷里頭是啥,只關(guān)心IP報(bào)頭里的數(shù)據(jù))
IP報(bào)頭中就包含收件人的IP地址和發(fā)件人的IP地址
又進(jìn)一步的調(diào)用數(shù)據(jù)鏈路層的 api, 把上述 IP 數(shù)據(jù)包,交給數(shù)據(jù)鏈路層的協(xié)議.
同樣也是系統(tǒng)內(nèi)核負(fù)責(zé)完成的.程序員感知不到了,
這里的 api 往往是 網(wǎng)卡 的驅(qū)動(dòng)程序提供的.
硬件廠商,發(fā)布硬件的時(shí)候,提供配套的軟件(驅(qū)動(dòng)程序)通過驅(qū)動(dòng)程序,可以讓操作系統(tǒng)實(shí)現(xiàn)對硬件的精細(xì)控制
(4)數(shù)據(jù)鏈路層 典型協(xié)議 以太網(wǎng)
以太在物理中是光在真空中傳輸?shù)慕橘|(zhì),此處傳輸網(wǎng)絡(luò)數(shù)據(jù),也需要介質(zhì)所以引入這個(gè)詞
電腦, 通過有線網(wǎng), 傳輸數(shù)據(jù), 走的就是"以太網(wǎng)"協(xié)議~~
咱們電腦上插的網(wǎng)線,也叫做"以太網(wǎng)線
以太網(wǎng),也有自己的數(shù)據(jù)包格式,就會(huì)拿到上述 IP 數(shù)據(jù)包,進(jìn)一步的封裝
上述數(shù)據(jù)已經(jīng)進(jìn)入到網(wǎng)卡驅(qū)動(dòng)中了,接下來就是要真正的發(fā)送出去了?
(5)物理層:上述的以太網(wǎng)數(shù)據(jù)幀,本質(zhì)上還是0101二進(jìn)制數(shù)據(jù)
硬件設(shè)備,要把上述的二進(jìn)制數(shù)據(jù),轉(zhuǎn)為光信號(hào)/電信號(hào)/電磁波才會(huì)真正的進(jìn)行發(fā)射
上述層層包裝數(shù)據(jù),不停的加數(shù)據(jù)報(bào)頭的過程,稱為”封裝“ ,類似包裝快遞
2.分用
上述數(shù)據(jù),并非直接到達(dá)B,而是要先到和A連接的交換機(jī)/路由器,數(shù)據(jù)經(jīng)過交換機(jī)/路由器的一系列轉(zhuǎn)發(fā)之后,最終到達(dá)B
當(dāng)數(shù)據(jù)到達(dá)B之后,又要做哪些事情呢? 就是上述過程的“逆過程”(拆快遞)
(1)物理層
收到一系列光電信號(hào),把這些信號(hào)轉(zhuǎn)為0101二進(jìn)制數(shù)據(jù),交給數(shù)據(jù)鏈路層
(2)數(shù)據(jù)鏈路層
按照以太網(wǎng)協(xié)議,對數(shù)據(jù)進(jìn)行解析(解析報(bào)頭中的關(guān)鍵信息,為后續(xù)的傳輸/轉(zhuǎn)發(fā)打下基礎(chǔ),還需要拿到載荷數(shù)據(jù))
解析出來的載荷數(shù)據(jù),是要交給上層(網(wǎng)絡(luò)層)
(3)網(wǎng)絡(luò)層 IP協(xié)議
IP協(xié)議拿到IP數(shù)據(jù)包,按照協(xié)議格式進(jìn)一步解析,解析報(bào)頭中的關(guān)鍵信息,取出載荷
把載荷再進(jìn)一步交給上層(傳輸層)
(4)傳輸層? UDP
拿著UDP數(shù)據(jù)包,按照UDP格式進(jìn)一步解析,解析出關(guān)鍵的信息(要交給哪個(gè)端口號(hào)對應(yīng)的進(jìn)程),以及解析成載荷數(shù)據(jù)
?
再把載荷交給對應(yīng)的應(yīng)用程序
(5)應(yīng)用層
QQ程序拿到了應(yīng)用數(shù)據(jù)包
QQ按照自己的協(xié)議格式,進(jìn)行解析,拿到這里的結(jié)構(gòu)化數(shù)據(jù)(反序列化),顯示到界面上
這個(gè)過程就是分用,就相當(dāng)于拆快遞
中間的路由器,交換機(jī),也要進(jìn)行封裝分用,也是上述的過程
只不過,交換機(jī),封裝分用到數(shù)據(jù)鏈路層,即可知道下一步如何轉(zhuǎn)發(fā)(工作在數(shù)據(jù)鏈路層)文章來源:http://www.zghlxwxcb.cn/news/detail-856372.html
路由器,封裝分用到,網(wǎng)絡(luò)層,即可知道下一步如何轉(zhuǎn)發(fā)(工作在網(wǎng)絡(luò)層)文章來源地址http://www.zghlxwxcb.cn/news/detail-856372.html
到了這里,關(guān)于【JavaEE初階】網(wǎng)絡(luò)原理|認(rèn)識(shí)協(xié)議|協(xié)議分層|TCP/IP模型|封裝和分用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!