最近,看到了網(wǎng)上一些關(guān)于網(wǎng)絡(luò)協(xié)議和OSI七層協(xié)議的一些文章撬槽,對(duì)網(wǎng)絡(luò)這塊,了解也深刻了一點(diǎn)趾撵,所以參考一些文章侄柔,總結(jié)了下自己對(duì)于OSI七層協(xié)議的理解共啃。PS:認(rèn)真看完這篇文章,你肯定會(huì)有收獲暂题。
OSI七層模型是什么移剪?
OSI七層模型是一個(gè)標(biāo)準(zhǔn),規(guī)定了機(jī)器(主要是電腦)之間如何通信薪者。OSI模型是一個(gè)分層的模型纵苛,每一個(gè)部分稱為一層,每一層扮演固定的角色言津,互不干擾攻人。
OSI有7層,從下到上分別是:
1悬槽、物理層 ( Physical layer ): 硬件怀吻,有線及無線。例如網(wǎng)線陷谱,中間的物理鏈接可以是光纜烙博、電纜、雙絞線烟逊、無線電波渣窜。中間傳的是電信號(hào),即010101...這些二進(jìn)制位宪躯。
2乔宿、數(shù)據(jù)鏈路層( Data Link layer ) :數(shù)據(jù)鏈路層就是來對(duì)電信號(hào)來做分組的
3、網(wǎng)絡(luò)層 (Network layer ):網(wǎng)絡(luò)層定義了一個(gè)IP協(xié)議
4访雪、傳輸層( Transport layer): 建立端口到端口的通信
5详瑞、會(huì)話層 (Session layer):
6、表示層 (Presentation layer):
7臣缀、應(yīng)用層 (Application layer ) : 應(yīng)用層功能:規(guī)定應(yīng)用程序的數(shù)據(jù)格式坝橡。例:TCP協(xié)議可以為各種各樣的程序傳遞數(shù)據(jù),比如Email精置、WWW计寇、FTP等等
如何巧記這7層,這里有一個(gè)小技巧
記憶口訣:
All People Seem To Need Data Processing脂倦。
從第7層到第一層番宁,從下到上每一個(gè)的首字母剛好組成這句話。
在通信主機(jī)上完成的功能:應(yīng)用層赖阻,表示層蝶押,會(huì)話層,傳輸層
在網(wǎng)絡(luò)設(shè)備上實(shí)現(xiàn)的功能:網(wǎng)絡(luò)層火欧,數(shù)據(jù)鏈路層棋电,物理層
OSI七層模型是一個(gè)理論模型茎截,今天的互聯(lián)網(wǎng)使用的實(shí)際模型是TCP/IP模型,而后者不使用OSI的第5層和第6層离陶,因此我們本文不做介紹稼虎。
現(xiàn)在,你們想象一個(gè)這樣的場景:你坐在電腦錢招刨,在瀏覽器里打開百度這個(gè)網(wǎng)站。
雖然你并不知情哀军,但其實(shí)你就在使用OSI模型沉眶。
大體來說,位于OSI第7層的應(yīng)用程序(這里是瀏覽器)杉适,與第1-4層(合稱“網(wǎng)絡(luò)層”)對(duì)話谎倔,以便這4層把機(jī)器上的應(yīng)用程序所要的信息從遠(yuǎn)端的機(jī)器上(此處是百度服務(wù)器)傳輸過來。
1猿推、物理層(Physical layer)
解釋:物理傳輸片习、硬件、有線及無線蹬叭。在杭州的你與溫州的朋友聊天藕咏,你的電腦要上網(wǎng),物理層體現(xiàn)是什么秽五?是不是一個(gè)網(wǎng)線孽查、有個(gè)路由器,溫州那邊的朋友是不是也要網(wǎng)線和路由器坦喘。也就是說計(jì)算機(jī)與計(jì)算機(jī)之間的通信盲再,必須要有底層物理層方面的連通,就類似于你打電話瓣铣,中間是不是必須得連電話線答朋。
中間的物理鏈接可以是光纜、電纜棠笑、雙絞線梦碗、無線電波。中間傳的是電信號(hào)腐晾,即010101...這些二進(jìn)制位叉弦。
底層傳輸?shù)?10010101001...這些二級(jí)制位怎么才能讓它有意義呢?
人為的分組再適合不過了藻糖,8位一組淹冰,發(fā)送及接收都按照8位一組來劃分。接收到8位為一組的話巨柒,那么就可以按照這8位數(shù)來做運(yùn)算樱拴。如果沒有分組柠衍,對(duì)方接收的計(jì)算機(jī)根本就不知道從哪一位開始來做計(jì)算,也解析不了收到的數(shù)據(jù)晶乔。寫過Socket的同學(xué)一定知道珍坊,就像Socket發(fā)送和接收消息一樣,要規(guī)定一個(gè)傳輸協(xié)議正罢,比如規(guī)定前面8位數(shù)表示要發(fā)送數(shù)據(jù)的長度阵漏,后面代表要發(fā)送的實(shí)際數(shù)據(jù),這樣接收方就可以先解析收到的前面的8位翻具、在根據(jù)長度解析實(shí)際的數(shù)據(jù)履怯。因此要想讓底層的電信號(hào)有意義,必須要把底層的電信號(hào)做分組裆泳。而這分組的工作叹洲,就是接下來我們要講的數(shù)據(jù)鏈路層的工作。
2工禾、數(shù)據(jù)鏈路層(Data Link layer )
我們可以簡單的理解為:數(shù)據(jù)鏈路層就是來對(duì)電信號(hào)來做分組的运提。
一組電信號(hào)稱之為一個(gè)數(shù)據(jù)包,或者叫做一個(gè)“幀”闻葵。
- 每一數(shù)據(jù)幀分成:報(bào)頭head和數(shù)據(jù)data兩部分
head包含:(固定18個(gè)字節(jié))
- 發(fā)送者(源地址民泵,6個(gè)字節(jié))
- 接收者(目標(biāo)地址,6個(gè)字節(jié))
- 數(shù)據(jù)類型(6個(gè)字節(jié))
data包含:(最短46字節(jié)笙隙,最長1500字節(jié))
- 數(shù)據(jù)包的具體內(nèi)容
這就像寫信洪灯,發(fā)送者的地址(源地址)就是你家的地址,接收者地址(目標(biāo)地址)就是對(duì)方的收信地址竟痰,你家的路由器就相當(dāng)于郵局签钩。其實(shí)在計(jì)算機(jī)通信中的源地址和目標(biāo)地址指的是mac地址。
Mac地址的由來:
head中包含的源和目標(biāo)地址由來:Ethernet規(guī)定接入Internet的設(shè)備都必須具備網(wǎng)卡坏快,發(fā)送端的和接收端的地址便是指網(wǎng)卡的地址铅檩,即Mac地址。
每塊網(wǎng)卡出廠時(shí)都被燒錄上一個(gè)實(shí)際上唯一的Mac地址莽鸿,長度為48位2進(jìn)制昧旨,通常由12位16進(jìn)制數(shù)表示,(前六位是廠商編碼祥得,后六位是流水線號(hào))
有了mac地址以后兔沃,計(jì)算機(jī)就可以通信了。
-
網(wǎng)上看到一個(gè)很通俗易懂的列子:
假設(shè)一個(gè)教室就是一個(gè)局域網(wǎng)(隔離的網(wǎng)絡(luò))级及,這個(gè)教室里面有幾臺(tái)計(jì)算機(jī)乒疏,計(jì)算機(jī)的通信和人的通信是一個(gè)道理,把教室里面的人都比作一個(gè)個(gè)計(jì)算機(jī)饮焦,假設(shè)教室里面的人都是瞎子怕吴,其實(shí)計(jì)算機(jī)就是瞎子的窍侧,計(jì)算機(jī)通信基本靠吼,現(xiàn)在我要找教室里面的飛哥要戰(zhàn)狼2的片转绷,然后我就吼一聲伟件,說我要找飛哥要戰(zhàn)狼2的片,戰(zhàn)狼2的片就屬于我的數(shù)據(jù)议经,但是我在發(fā)的時(shí)候我是不是要標(biāo)識(shí)我是誰斧账,我要找誰,我是誰就是我的mac地址煞肾,我要找誰就是飛哥的mac地址其骄,這兩個(gè)地址做數(shù)據(jù)包的頭部,再加上數(shù)據(jù)戰(zhàn)狼2的片就構(gòu)成了一個(gè)數(shù)據(jù)幀扯旷。
這個(gè)數(shù)據(jù)包封裝好以后就往外發(fā),到物理層以后就全部轉(zhuǎn)成二級(jí)制索抓,往外發(fā)是怎么發(fā)的呢钧忽?就是靠吼。即“我是Edison逼肯,我找飛哥要戰(zhàn)狼2的片”耸黑。這么吼了一嗓子以后,全屋子的人都能聽到篮幢,這就是廣播大刊。
計(jì)算機(jī)底層,只要在一個(gè)教室里(一個(gè)局域網(wǎng))三椿,都是靠廣播的方式缺菌,吼。
局域網(wǎng)的理解:什么是互聯(lián)網(wǎng)搜锰,互聯(lián)網(wǎng)就是由一個(gè)個(gè)局域網(wǎng)組成伴郁,局域網(wǎng)內(nèi)的計(jì)算機(jī)不管是對(duì)內(nèi)還是對(duì)外都是靠吼,這就是數(shù)據(jù)鏈路層的工作方式-----廣播蛋叼。
廣播出去以后焊傅,所有人都聽得見,所有人都會(huì)拆開這個(gè)包狈涮,讀發(fā)送者是誰狐胎,接收者是誰,只要接收者不是自己就丟棄掉歌馍。對(duì)計(jì)算機(jī)來說握巢,它會(huì)看自己的Mac地址,飛哥收到以后骆姐,他就會(huì)把片發(fā)給我镜粤,發(fā)送回來同樣采用廣播的方式了捏题,靠吼。同一個(gè)教室(同一個(gè)局域網(wǎng))的計(jì)算機(jī)靠吼來通信肉渴,那不同教室的計(jì)算機(jī)又如何公荧?
比如說局域網(wǎng)1的pc1與局域網(wǎng)2的pc10如何通信?你在教室1(局域網(wǎng)1)吼同规,教室2(局域網(wǎng)2)的人肯定是聽不見的循狰。這就是跨網(wǎng)絡(luò)進(jìn)行通信,數(shù)據(jù)鏈路層就解決不了這個(gè)問題了券勺,這就得靠網(wǎng)絡(luò)層出面了绪钥。
在講網(wǎng)絡(luò)層之前,其實(shí)基于廣播的這種通信就可以實(shí)現(xiàn)全世界通信了关炼,你吼一聲程腹,如果全世界是一個(gè)局域網(wǎng),全世界的計(jì)算機(jī)肯定可以聽得見儒拂,從理論上似乎行得通寸潦,如果全世界的計(jì)算機(jī)都在吼,你想一想社痛,這是不是一個(gè)災(zāi)難见转。因此,全世界不能是一個(gè)局域網(wǎng)蒜哀。于是就有了網(wǎng)絡(luò)層斩箫。
3、網(wǎng)絡(luò)層(Network layer)
網(wǎng)絡(luò)層定義了一個(gè)IP協(xié)議撵儿,
你想乘客,我是這個(gè)教室的一個(gè)學(xué)生,我想找隔壁教室一個(gè)叫老王的學(xué)生统倒,我也不認(rèn)識(shí)老王寨典,那怎么辦,我吼房匆?老王在另外一個(gè)教室肯定是聽不到的耸成。找教室的負(fù)責(zé)人,這個(gè)教室的負(fù)責(zé)人就負(fù)責(zé)和隔壁教室的負(fù)責(zé)人說話浴鸿,說我們教室的有個(gè)學(xué)生要找你們教室的老王井氢。往外傳的東西交給負(fù)責(zé)人就可以了,內(nèi)部的話上面已經(jīng)提到岳链,通過廣播的方式花竞,對(duì)外的東西廣播失效。教室的負(fù)責(zé)人就是網(wǎng)關(guān),網(wǎng)關(guān)即網(wǎng)絡(luò)關(guān)口的意思约急。
Mac地址是用來標(biāo)識(shí)你這個(gè)教室的某個(gè)位置零远,IP地址是用來標(biāo)識(shí)你在哪個(gè)教室(哪個(gè)局域網(wǎng))。你要跨網(wǎng)絡(luò)發(fā)包你是不是要知道對(duì)方的IP地址厌蔽,比如你要訪問百度牵辣,你肯定得知道百度服務(wù)器的IP地址。計(jì)算機(jī)在發(fā)包前奴饮,會(huì)判斷你在哪個(gè)教室纬向,對(duì)方在哪個(gè)教室,如果在一個(gè)教室戴卜,基于mac地址的廣播發(fā)包就OK了逾条;如果不在一個(gè)教室,即跨網(wǎng)絡(luò)發(fā)包投剥,那么就會(huì)把你的包交給教室負(fù)責(zé)人(網(wǎng)關(guān))來轉(zhuǎn)發(fā)师脂。Mac地址及IP地址唯一標(biāo)識(shí)了你在互聯(lián)網(wǎng)中的位置。
數(shù)據(jù)鏈路層中會(huì)把網(wǎng)絡(luò)層的數(shù)據(jù)包封裝到數(shù)數(shù)據(jù)鏈路層的數(shù)據(jù)位置江锨,然后再添加上自己的包頭危彩,再發(fā)給物理層,物理層發(fā)給網(wǎng)關(guān)泳桦,網(wǎng)關(guān)再發(fā)給對(duì)方教室的網(wǎng)關(guān),對(duì)方教室的網(wǎng)關(guān)收到后在那個(gè)教室做廣播娩缰。
現(xiàn)在來看另一個(gè)問題灸撰,在吼之前怎么知道對(duì)方的Mac地址?這就得靠ARP協(xié)議拼坎。
ARP: Adress Resolution Protocol 地址解析協(xié)議浮毯,根據(jù)IP地址獲取物理地址的一個(gè)TCP/IP協(xié)議。
ARP協(xié)議的由來:在你找飛哥要片之前泰鸡,你的先干一件事债蓝,想辦法知道飛哥的Mac地址。即你的機(jī)器必須先發(fā)一個(gè)ARP包出去盛龄,ARP也是靠廣播的方式發(fā)饰迹,ARP發(fā)送廣播包的方式如下:
局域網(wǎng)中怎么獲取對(duì)方的Mac地址:
肯定要知道對(duì)方的IP地址,這是最基本的余舶,就像你要訪問百度啊鸭,肯定得知道百度的域名,域名就是百度的IP地址匿值。自己的IP可以輕松獲得赠制,自己的Mac也輕松獲取,目標(biāo)Mac為12個(gè)F挟憔,我們叫廣播地址钟些,表達(dá)的意思是我想要獲取這個(gè)目標(biāo)IP地址172.16.10.11的機(jī)器的Mac地址烟号。Mac為12個(gè)F代表的是一種功能,這個(gè)功能就是獲取對(duì)方的MAC地址政恍,計(jì)算機(jī)的Mac永遠(yuǎn)不可能是12個(gè)F汪拥。假設(shè)是在本教室廣播,一嗓子吼出去了抚垃,所有人開始解包喷楣,只有IP地址是172.16.10.11的這個(gè)人才會(huì)返回他的Mac地址,其他人全部丟棄鹤树。發(fā)回來源Mac改成飛哥自己的Mac地址铣焊,同時(shí)把飛哥的Mac地址放在數(shù)據(jù)部分。
跨網(wǎng)絡(luò)怎么獲取對(duì)方的Mac地址:
通過IP地址區(qū)分罕伯,計(jì)算機(jī)運(yùn)算判斷出飛哥不在同一個(gè)教室曲伊,目標(biāo)IP就變成了網(wǎng)關(guān)的IP了。網(wǎng)關(guān)的IP在計(jì)算機(jī)上配死了追他,可以輕松獲取坟募。
這樣網(wǎng)關(guān)就會(huì)把它的Mac地址返回給你,然后正常發(fā)包
網(wǎng)關(guān)幫你去找飛哥邑狸,但對(duì)用戶來說懈糯,我們根本就感覺不到網(wǎng)關(guān)的存在。
4单雾、傳輸層(Transport layer )
傳輸層的由來:網(wǎng)絡(luò)層的ip幫我們區(qū)分子網(wǎng)赚哗,以太網(wǎng)層的mac幫我們找到主機(jī),然后大家使用的都是應(yīng)用程序硅堆,你的電腦上可能同時(shí)開啟qq屿储,暴風(fēng)影音,等多個(gè)應(yīng)用程序渐逃,
那么我們通過ip和mac找到了一臺(tái)特定的主機(jī)够掠,如何標(biāo)識(shí)這臺(tái)主機(jī)上的應(yīng)用程序,答案就是端口茄菊,端口即應(yīng)用程序與網(wǎng)卡關(guān)聯(lián)的編號(hào)疯潭。
傳輸層功能:建立端口到端口的通信
補(bǔ)充:端口范圍0-65535,0-1023為系統(tǒng)占用端口
網(wǎng)絡(luò)中的計(jì)算機(jī)通信無外乎有以下兩種情況:
要發(fā)送的內(nèi)容多面殖,需要將發(fā)送的內(nèi)容分成多個(gè)數(shù)據(jù)包發(fā)送袁勺。(TCP協(xié)議 丟包后會(huì)重傳,考慮可靠傳輸 )
要發(fā)送的內(nèi)容少畜普,一個(gè)數(shù)據(jù)包就能發(fā)送全部內(nèi)容期丰。(UDP協(xié)議 丟包后不重傳,不考慮可靠傳輸?shù)模?/p>
TCP :要傳輸?shù)膬?nèi)容需要分成多個(gè)數(shù)據(jù)包來傳輸,分段钝荡,編號(hào)街立,流量控制,擁塞避免埠通,可靠傳輸赎离,客戶端和服務(wù)端需要建立TCP連接(協(xié)商參數(shù):選擇性確認(rèn),最大報(bào)文)端辱,通信結(jié)束需要釋放連接梁剔。(例如下載一部1GB電影,訪問網(wǎng)頁舞蔽、發(fā)郵件荣病,訪問FTP上傳或下載文件)
UDP 要傳輸?shù)膬?nèi)容一個(gè)數(shù)據(jù)就能全部發(fā)送,不需要分段渗柿,不需要流量控制个盆,傳輸成功與否由應(yīng)用層判斷,客戶端與服務(wù)器之間不用建立連接朵栖,節(jié)省服務(wù)器資源颊亮。(例如實(shí)時(shí)的語音和視頻使用UDP協(xié)議,因?yàn)樗鼈儾辉试S傳輸?shù)臄?shù)據(jù)顛倒順序陨溅,還有多播也是使用UDP協(xié)議)
7终惑、應(yīng)用層(Application layer)
應(yīng)用層由來:用戶使用的都是應(yīng)用程序,均工作于應(yīng)用層门扇,互聯(lián)網(wǎng)是開發(fā)的狠鸳,大家都可以開發(fā)自己的應(yīng)用程序,數(shù)據(jù)多種多樣悯嗓,必須規(guī)定好數(shù)據(jù)的組織形式 。
應(yīng)用層功能:規(guī)定應(yīng)用程序的數(shù)據(jù)格式卸察。
例:TCP協(xié)議可以為各種各樣的程序傳遞數(shù)據(jù)脯厨,比如Email、WWW坑质、FTP等等合武。那么,必須有不同協(xié)議規(guī)定電子郵件涡扼、網(wǎng)頁稼跳、FTP數(shù)據(jù)的格式,這些應(yīng)用程序協(xié)議就構(gòu)成了”應(yīng)用層”吃沪。
參考文章:
https://blog.csdn.net/taotongning/article/details/81352985
https://blog.csdn.net/taotongning/article/details/81450159
https://blog.csdn.net/taotongning/article/details/81390979
https://www.imooc.com/read/54#new_header
da