堅(jiān)持原創(chuàng)輸出,點(diǎn)擊藍(lán)字關(guān)注我吧
圖片來自網(wǎng)絡(luò)
目錄
一、初識(shí)網(wǎng)絡(luò)基礎(chǔ)
其實(shí)網(wǎng)絡(luò)剛剛開始發(fā)展的時(shí)候,它并沒有這么一個(gè)復(fù)雜的模型,它最開始只有一層。隨著網(wǎng)絡(luò)的發(fā)展,網(wǎng)絡(luò)上的功能越來越復(fù)雜,單一的網(wǎng)絡(luò)結(jié)構(gòu)就不能再滿足人們的需求了。
所以呢,人們就開始對(duì)網(wǎng)絡(luò)進(jìn)行分層。讓每一層都執(zhí)行工作,各司其職,來實(shí)現(xiàn)網(wǎng)絡(luò)上復(fù)雜的工作流程。
發(fā)展下來就出現(xiàn)了2個(gè)非常重要的模型:OSI七層模型、TCP/IP四層協(xié)議棧。這兩個(gè)模型所定義出來的層級(jí),工作都差不太多。
「OSI七層模型:」 是ISO組織在1985年研究的網(wǎng)絡(luò)互聯(lián)模型。
「目的:」 剛開始提出來只是為了實(shí)現(xiàn)2臺(tái)機(jī)器的互聯(lián),怎么實(shí)現(xiàn)互聯(lián)?
提出了一個(gè)統(tǒng)一的規(guī)范,兩臺(tái)機(jī)器使用統(tǒng)一的一個(gè)規(guī)范標(biāo)準(zhǔn)進(jìn)行通信。可以把范圍擴(kuò)大,可以實(shí)現(xiàn)很多臺(tái)機(jī)器的「互聯(lián)」。
形成了互聯(lián)網(wǎng)最早的形態(tài)。「互聯(lián)網(wǎng)」的形態(tài)其實(shí)就是這個(gè)時(shí)候提出來的。所有的網(wǎng)絡(luò)活動(dòng)基本上都在這七層中間來實(shí)現(xiàn)的。
在瀏覽器里輸入百度的網(wǎng)址,按下回車就返回了百度的頁面,這個(gè)過程就基本都可以在OSI七層模型中找到每一層的實(shí)現(xiàn)歷程。
為了詳細(xì)知道,輸入百度網(wǎng)址返回一個(gè)頁面,這個(gè)過程具體怎么實(shí)現(xiàn)的,就需要詳細(xì)了解下這七層分別做什么樣的工作。
二、網(wǎng)絡(luò)七層模型詳解
1.物理層
1.1實(shí)現(xiàn)兩臺(tái)機(jī)器互聯(lián),機(jī)器和機(jī)器之間如何通信?
最開始的需求是把兩臺(tái)機(jī)器聯(lián)接起來,讓它們通信。物理層就根據(jù)這個(gè)需求運(yùn)用而生。
物理層實(shí)現(xiàn)了什么功能呢?
它提供了肉眼可見的物理介質(zhì),比如網(wǎng)線(雙膠線)、光纖、無線電波,這些都可以實(shí)現(xiàn)機(jī)器之間的基本連接。
1.2機(jī)器間的通信是以什么樣的形式存在呢?
像這樣的一個(gè)信息在物理介質(zhì)里面其實(shí)就是一個(gè)計(jì)算機(jī)語言,比如說:0101二進(jìn)制的一個(gè)形式存在。
在專業(yè)名詞里這個(gè)二進(jìn)制也叫做電信號(hào)(比特流)。物理層的出現(xiàn)能夠讓兩臺(tái)電腦通過物理介質(zhì)發(fā)送比特流了。
比特流還是0101這樣一個(gè)機(jī)器的語言,這種0101的比特流其實(shí)是一個(gè)沒有什么意義的一個(gè)數(shù)據(jù)。怎么讓它變成一個(gè)有意義的數(shù)據(jù)呢?
2.數(shù)據(jù)鏈路層
針對(duì)這個(gè)需求,就產(chǎn)生了數(shù)據(jù)鏈路層。對(duì)無意義的比特流進(jìn)行分組,這些0101的二進(jìn)制的電信號(hào),對(duì)這些二進(jìn)制以8個(gè)為一組。8位一組形成了一個(gè)字節(jié),這樣的一個(gè)數(shù)據(jù)被它進(jìn)行分組之后,然后根據(jù)這個(gè)分組,依次按順序發(fā)送數(shù)據(jù)。
2.1這樣的數(shù)據(jù)就會(huì)變成一個(gè)有特殊意義,上面層級(jí)能夠認(rèn)識(shí)的數(shù)據(jù),這就是數(shù)據(jù)鏈路層實(shí)現(xiàn)的第一個(gè)需求。
雖然數(shù)據(jù)變成機(jī)器間可以認(rèn)識(shí)的一個(gè)有意義的數(shù)據(jù),但是機(jī)器收到這個(gè)數(shù)據(jù)怎么知道這個(gè)數(shù)據(jù)是發(fā)給我的呢?
2.2怎么確認(rèn)這個(gè)數(shù)據(jù)是發(fā)給我的呢?網(wǎng)絡(luò)中是怎么去定義這個(gè)事情?
數(shù)據(jù)鏈路層定義了mac地址。機(jī)器都有一個(gè)網(wǎng)卡,(電腦-以太網(wǎng)-適配器-詳細(xì)信息,可以看到無線網(wǎng)卡的物理地址,其實(shí)就是每一塊網(wǎng)卡的獨(dú)有的地址,理解成這個(gè)網(wǎng)卡的身份證)。mac地址是唯一的,mac地址就是標(biāo)識(shí)這臺(tái)機(jī)器的物理地址,現(xiàn)在如果電腦a發(fā)給電腦b一個(gè)信息,需要帶上mac地址。
就像寄信,寄信的時(shí)候需要寫寄件人的地址和收件人的地址。
對(duì)應(yīng)物理網(wǎng)卡,物理網(wǎng)卡其實(shí)也有個(gè)原mac地址,把自己mac地址帶上,也會(huì)帶上收件人的地址(目的地址),就知道我要發(fā)給誰并告訴對(duì)方是誰發(fā)的,方便對(duì)方給我回信。
那它就知道應(yīng)該向誰去回復(fù)。這個(gè)就是通過mac地址解決的。
2.3數(shù)據(jù)鏈路層的數(shù)據(jù)格式:幀。
通過數(shù)據(jù)鏈路層,計(jì)算機(jī)之間可以正常傳數(shù)據(jù)包,但是現(xiàn)在有2個(gè)主機(jī),一個(gè)主機(jī)a,主機(jī)f,兩臺(tái)主機(jī)間通信,但是中間隔著bcde主機(jī),它們兩個(gè)不是直接連接的機(jī)器,它們兩個(gè)怎么實(shí)現(xiàn)直接通信呢?
如果兩個(gè)主機(jī)離得特別遠(yuǎn),中間可以實(shí)現(xiàn)通信的路徑有很多條,怎么選擇最近的路徑通信呢?
數(shù)據(jù)鏈路層通過mac地址識(shí)別對(duì)方主機(jī)和自身的主機(jī),怎么知道對(duì)方的mac地址?
3.網(wǎng)絡(luò)層
3.1第一個(gè)解決怎么知道對(duì)方的mac地址?
定義了一個(gè)協(xié)議:arp的協(xié)議 ,實(shí)現(xiàn)的功能就是做地址解析,通過ip地址去知曉對(duì)方的mac地址。
3.2第二個(gè)需求:主機(jī)a和主機(jī)f之間隔著很多別的主機(jī),兩個(gè)主機(jī)可能不在一個(gè)子網(wǎng)里面,就沒辦法直接通信。去判斷它們兩個(gè)是否在一個(gè)子網(wǎng),怎么判斷?
定義了一個(gè)協(xié)議:ip協(xié)議 去判斷發(fā)送者和接收者是否在同一個(gè)子網(wǎng),怎么發(fā)送數(shù)據(jù)。
3.3路徑很多,怎么選擇最優(yōu)的路徑?
網(wǎng)絡(luò)層同樣定義了一組協(xié)議,就是路由協(xié)議 。
一組路由協(xié)議:靜態(tài)路由協(xié)議,動(dòng)態(tài)路由協(xié)議(rip,ospf,bgp協(xié)議)。這些都是常用的動(dòng)態(tài)路由協(xié)議。
這三個(gè)需求都是網(wǎng)絡(luò)層給大家解決的問題。網(wǎng)絡(luò)層是最關(guān)鍵的一層,實(shí)現(xiàn)的功能特別多。
數(shù)據(jù)包在網(wǎng)絡(luò)里可以正常發(fā)送了,如果發(fā)送的數(shù)據(jù)特別的多或者單個(gè)數(shù)據(jù)包特別大,在網(wǎng)絡(luò)中傳輸需要很長(zhǎng)的時(shí)間,中間的網(wǎng)絡(luò)中斷了,怎么才能保證重傳?
如果重傳,怎么確定數(shù)據(jù)包完整且正確?
4.傳輸層
實(shí)現(xiàn)的第一個(gè)功能,對(duì)發(fā)送的數(shù)據(jù)進(jìn)行一個(gè)封裝。
通過tcp協(xié)議 和udp協(xié)議 封裝的。這2個(gè)協(xié)議對(duì)數(shù)據(jù)包進(jìn)行封裝后,讓數(shù)據(jù)包一個(gè)一個(gè)按順序依次發(fā)送。
這樣封裝能夠保證數(shù)據(jù)包是完整且準(zhǔn)確的。還有一個(gè)功能,就是兩臺(tái)主機(jī),都是用兩個(gè)應(yīng)用進(jìn)行通信(例如兩個(gè)人qq聊天)。
所以,怎么判斷我的電腦上的qq發(fā)送給你的,你就是用qq回應(yīng)的呢?
我的電腦上不止一個(gè)應(yīng)用程序,那我怎么判斷你是用qq接收數(shù)據(jù)而不是用別的呢?
也是通過傳輸層實(shí)現(xiàn),定義了端口的概念,實(shí)現(xiàn)應(yīng)用程序的尋找。
當(dāng)數(shù)據(jù)包到達(dá)傳輸層后,會(huì)有一個(gè)端口,然后呢,我們的應(yīng)用程序通過端口尋找到對(duì)應(yīng)的程序,就去發(fā)給對(duì)應(yīng)程序進(jìn)行數(shù)據(jù)處理。
5.會(huì)話層
如果數(shù)據(jù)特別大,中斷需要重傳,是不是不應(yīng)該重頭開始傳,應(yīng)該斷點(diǎn)續(xù)傳,就由會(huì)話層實(shí)現(xiàn)的。
會(huì)話層:從校驗(yàn)點(diǎn)繼續(xù)恢復(fù)數(shù)據(jù)進(jìn)行重傳。這個(gè)功能對(duì)網(wǎng)絡(luò)上的數(shù)據(jù)傳輸很重要(大文件傳輸)。
實(shí)現(xiàn)了自動(dòng)收發(fā)包的功能以及自動(dòng)尋址的功能。
6.表示層
計(jì)算機(jī)有很多的操作系統(tǒng):windows/mac/linux系統(tǒng) 。
各種系統(tǒng)間的語法不一樣的。不同系統(tǒng)間進(jìn)行通信的話,這個(gè)就是表示層的工作了。
其實(shí)就是一個(gè)翻譯的工作 ,提供一種公共語言,讓不同系統(tǒng)間可以進(jìn)行通信。
表示層和會(huì)話層沒有定義協(xié)議的功能,所以沒有定義協(xié)議。
7.應(yīng)用層
有了6個(gè)層級(jí)的工作,都是為了應(yīng)用層服務(wù)的。
用戶在瀏覽器訪問百度界面,屬于應(yīng)用層的操作。
數(shù)據(jù)已經(jīng)從一個(gè)主機(jī)上的應(yīng)用傳到另一個(gè)主機(jī)上的應(yīng)用了,這樣一個(gè)基本的功能是可以實(shí)現(xiàn)的。
但是數(shù)據(jù)包從底層傳上來,只有物理層的時(shí)候進(jìn)行了一個(gè)組裝,在數(shù)據(jù)鏈路層形成了一個(gè)字節(jié)流。
上面層級(jí)并沒有重新進(jìn)行一個(gè)數(shù)據(jù)的組裝,到了上面依然是一個(gè)字節(jié)流的格式,不好被應(yīng)用識(shí)別和操作。
所以應(yīng)用層通過定義了各種應(yīng)用協(xié)議來規(guī)范一個(gè)數(shù)據(jù)的格式。
比如最熟悉的http協(xié)議,https協(xié)議,ftp協(xié)議,dns協(xié)議,tftp協(xié)議,smtp協(xié)議 。這些都是應(yīng)用層定義來規(guī)范數(shù)據(jù)的格式,方便系統(tǒng)、軟件、程序進(jìn)行識(shí)別和操作。
以上就是七層模型的工作流程。
三、總結(jié)
掌握網(wǎng)絡(luò)基礎(chǔ)知識(shí)是為了應(yīng)對(duì)面試、進(jìn)入公司遇到搭建測(cè)試環(huán)境或調(diào)試測(cè)試環(huán)境的時(shí)候需要用到網(wǎng)絡(luò)基礎(chǔ)知識(shí)。這是測(cè)試工程師需要掌握的必備技能。
|