「前言」文章是關(guān)于網(wǎng)絡(luò)編程方面的,今天內(nèi)容大致是網(wǎng)絡(luò)基礎(chǔ),講解下面開(kāi)始!
「歸屬專(zhuān)欄」網(wǎng)絡(luò)編程
「主頁(yè)鏈接」個(gè)人主頁(yè)
「筆者」楓葉先生(fy)
目錄
一、計(jì)算機(jī)網(wǎng)絡(luò)背景
1.1?網(wǎng)絡(luò)發(fā)展
1.2?認(rèn)識(shí) "協(xié)議"
二、網(wǎng)絡(luò)協(xié)議初識(shí)
2.1 協(xié)議分層
2.2 OSI七層模型
2.3?TCP/IP五層(或四層)模型
三、網(wǎng)絡(luò)傳輸基本流程
3.1?局域網(wǎng)的兩臺(tái)主機(jī)通信
3.2?跨網(wǎng)絡(luò)的兩臺(tái)主機(jī)通信
四、網(wǎng)絡(luò)中的地址管理
4.1?認(rèn)識(shí)IP地址
4.2?認(rèn)識(shí)MAC地址
一、計(jì)算機(jī)網(wǎng)絡(luò)背景
1.1?網(wǎng)絡(luò)發(fā)展
獨(dú)立模式:計(jì)算機(jī)之間相互獨(dú)立
在早期的時(shí)候,計(jì)算機(jī)之間是相互獨(dú)立的,此時(shí)如果多個(gè)計(jì)算機(jī)要協(xié)同完成某種業(yè)務(wù),那么就只能等一臺(tái)計(jì)算機(jī)處理完后再將數(shù)據(jù)傳遞給下一臺(tái)計(jì)算機(jī),然后下一臺(tái)計(jì)算機(jī)再進(jìn)行相應(yīng)的業(yè)務(wù)處理,效率非常低下。
比如:
- 小松負(fù)責(zé)終端A:小松正在運(yùn)行業(yè)務(wù)①,完成后把數(shù)據(jù)送到運(yùn)行業(yè)務(wù)②時(shí)移動(dòng)到B主機(jī)前
- 小竹負(fù)責(zé)終端B:在小松處理完之前處于等待狀態(tài)
- 小梅負(fù)責(zé)終端C:在小松、小竹都處理完前處于等待狀態(tài)
這種計(jì)算機(jī)之間相互獨(dú)立會(huì)導(dǎo)致:數(shù)據(jù)不一致、協(xié)作困難等問(wèn)題
網(wǎng)絡(luò)互聯(lián):多臺(tái)計(jì)算機(jī)連接在一起,完成數(shù)據(jù)共享
這時(shí)就有人設(shè)法將這些計(jì)算機(jī)連接在一起,當(dāng)某個(gè)業(yè)務(wù)需要多臺(tái)計(jì)算機(jī)協(xié)同完成時(shí),就可以將共享的數(shù)據(jù)放到服務(wù)器中進(jìn)行集中管理,此時(shí)各個(gè)計(jì)算機(jī)就都能獲取到這些共享的數(shù)據(jù),所以各個(gè)業(yè)務(wù)在處理就能隨時(shí)進(jìn)行切換了?
隨著計(jì)算機(jī)的增多,便產(chǎn)生了局域網(wǎng)和廣域網(wǎng)
局域網(wǎng)LAN(local area network?): 計(jì)算機(jī)數(shù)量更多了, 通過(guò)交換機(jī)和路由器連接在一起
- 后來(lái)這樣的網(wǎng)絡(luò)雛形逐漸發(fā)展,連入這個(gè)網(wǎng)絡(luò)中的機(jī)器變得越來(lái)越多,于是就出現(xiàn)了局域網(wǎng)的概念
- 在局域網(wǎng)中有一種設(shè)備叫做交換機(jī),交換機(jī)主要完成局域網(wǎng)內(nèi)數(shù)據(jù)的轉(zhuǎn)發(fā)工作,也就是在局域網(wǎng)內(nèi)將數(shù)據(jù)從一臺(tái)主機(jī)轉(zhuǎn)發(fā)給另一臺(tái)主機(jī)
- 各個(gè)局域網(wǎng)之間通過(guò)路由器連接起來(lái),路由器主要完成數(shù)據(jù)的路由轉(zhuǎn)發(fā)工作
廣域網(wǎng)WAN(Wide area network):將遠(yuǎn)隔千里的計(jì)算機(jī)都連在一起
各個(gè)局域網(wǎng)之間通過(guò)路由器相互連接在一起,便組成了一個(gè)更大的網(wǎng)絡(luò)結(jié)構(gòu),我們將其稱(chēng)之為廣域網(wǎng)。實(shí)際局域網(wǎng)和廣域網(wǎng)是一種相對(duì)的概念,我們也可以將廣域網(wǎng)看作一個(gè)比較大的局域網(wǎng)
一臺(tái)計(jì)算機(jī)內(nèi)部本質(zhì)也是一個(gè)小型的網(wǎng)絡(luò)結(jié)構(gòu)
計(jì)算機(jī)體系結(jié)構(gòu)中有網(wǎng)絡(luò),二網(wǎng)絡(luò)也有自己的體系結(jié)構(gòu)?
1.2?認(rèn)識(shí) "協(xié)議"
什么是協(xié)議??
"協(xié)議" 是一種約定,,通信雙方只要曾經(jīng)做過(guò)某種約定,之后就可以使用這種約定來(lái)完成某種事情。而網(wǎng)絡(luò)協(xié)議是通信計(jì)算機(jī)雙方必須共同遵從的一組約定,因此我們一定要將這種約定用計(jì)算機(jī)語(yǔ)言表達(dá)出來(lái),此時(shí)雙方計(jì)算機(jī)才能識(shí)別約定的相關(guān)內(nèi)容
比如:
在零幾年的時(shí)候,家庭里面經(jīng)常用的電話(huà)是座機(jī)電話(huà),?零幾年的時(shí)候花費(fèi)還很貴
- 假設(shè)張三在上初中,學(xué)校離家里比較近,每個(gè)星期都可以回家,可以當(dāng)面詢(xún)問(wèn)下一周的零花錢(qián),這個(gè)過(guò)程是面對(duì)面很方便
- 假設(shè)在零幾年,張三在上大學(xué),距離家里面很遠(yuǎn),每個(gè)月只能打電話(huà)向家里面要生活費(fèi),打電話(huà)的過(guò)程就是很浪費(fèi)錢(qián)的過(guò)程,于是張三跟家里面做了一個(gè)約定:電話(huà)零響兩聲代表沒(méi)錢(qián)了,需要打錢(qián)給我了;電話(huà)鈴響三聲才代表有事找家里面...
- 這個(gè)電話(huà)鈴聲代表著不同的含義,而這個(gè)含義雙方不用解釋?zhuān)p方早就已經(jīng)有共識(shí)了,這個(gè)約定可以錢(qián)少“通話(huà)”的成本
對(duì)比到計(jì)算機(jī):
- 張三上初中:兩臺(tái)相近的計(jì)算機(jī)通信成本不是很高
- 張三上大學(xué):兩臺(tái)計(jì)算機(jī)的相距距離很遠(yuǎn),比如一個(gè)在云南,一個(gè)在北京,這時(shí)就會(huì)引入了新的問(wèn)題:通信的距離變長(zhǎng)了,代表著通信的成本提高了。
- 為了減少通信成本,計(jì)算機(jī)定制了協(xié)議
注:所有的網(wǎng)絡(luò)問(wèn)題:本質(zhì)都是傳輸距離變長(zhǎng)了
協(xié)議應(yīng)該由誰(shuí)來(lái)定制?
- 在當(dāng)前這個(gè)互聯(lián)網(wǎng)時(shí)代,計(jì)算機(jī)生產(chǎn)商有很多,計(jì)算機(jī)操作系統(tǒng)也有很多,計(jì)算機(jī)網(wǎng)絡(luò)硬件設(shè)備更是多種多樣,那我們是如何讓這些不同廠商之間生產(chǎn)的計(jì)算機(jī)能夠相互順暢的通信的呢?這時(shí)候就需要有人站出來(lái),約定一個(gè)共同的標(biāo)準(zhǔn),并且讓大家都來(lái)遵守這個(gè)標(biāo)準(zhǔn),這就是網(wǎng)絡(luò)協(xié)議。
- 而那個(gè)站出來(lái)的人一定是該領(lǐng)域當(dāng)中的佼佼者,因?yàn)榫W(wǎng)絡(luò)協(xié)議的定制本質(zhì)就是規(guī)則的定制,你要站出來(lái)制定規(guī)則那么一定要同行業(yè)的其他人都認(rèn)可你。比如5G標(biāo)準(zhǔn)的定義,華為就是那個(gè)站出來(lái)的人,華為在通信領(lǐng)域已經(jīng)具備很強(qiáng)的通信能力了,在這個(gè)行業(yè)里它就是所謂的佼佼者。
- 正所謂“一流的企業(yè)做標(biāo)準(zhǔn),二流的企業(yè)做品牌,三流的企業(yè)做產(chǎn)品”。但是標(biāo)準(zhǔn)的定制有一部分是公益性、開(kāi)源性的,它制定標(biāo)準(zhǔn)的目的是為了讓我們的世界變得更好;而標(biāo)準(zhǔn)的定制還有一部分是具有一定盈利性質(zhì)的,當(dāng)你需要使用這項(xiàng)技術(shù)時(shí)就會(huì)收取部分專(zhuān)利費(fèi),此時(shí)就能將曾經(jīng)做的技術(shù)投入進(jìn)行變現(xiàn)
計(jì)算機(jī)之間的傳輸媒介是光信號(hào)和電信號(hào)。通過(guò) "頻率" 和 "強(qiáng)弱" 來(lái)表示 0 和 1 這樣的信息. 要想傳遞各種不同的信息, 就需要約定好雙方的數(shù)據(jù)格式
通信的兩臺(tái)主機(jī), 約定好協(xié)議就可以了么??
不可以,你有你定制的協(xié)議,我有我定制的協(xié)議,大家的協(xié)議都互不相同,依舊是無(wú)法正常通信,這些計(jì)算機(jī)都應(yīng)該要遵守同一個(gè)標(biāo)準(zhǔn)?
二、網(wǎng)絡(luò)協(xié)議初識(shí)
- 計(jì)算機(jī)生產(chǎn)廠商有很多;
- 計(jì)算機(jī)操作系統(tǒng), 也有很多;
- 計(jì)算機(jī)網(wǎng)絡(luò)硬件設(shè)備, 還是有很多;
- 如何讓這些不同廠商之間生產(chǎn)的計(jì)算機(jī)能夠相互順暢的通信?? 就需要有人站出來(lái),約定一個(gè)共同的標(biāo)準(zhǔn),大家都來(lái)遵守,這就是 網(wǎng)絡(luò)協(xié)議
2.1 協(xié)議分層
理解分層
- 分層設(shè)計(jì)方面的優(yōu)勢(shì):每一層都有自己特定的功能 -- 低耦合
- 一般我們的分層依據(jù):功能比較集中,耦合度比較高的模塊,分為一層 -- 高內(nèi)聚
比如在打電話(huà),人與人之間通信使用的是漢語(yǔ),我們可以將其稱(chēng)為語(yǔ)言層;而電話(huà)和電話(huà)之間通信使用的是電話(huà)協(xié)議,我們可以將其稱(chēng)之為通信設(shè)備層?
?后來(lái)隨著科技的發(fā)展,我們都用上了智能手機(jī),此時(shí)我們下層使用的通信設(shè)備變了,或是這部電話(huà)賣(mài)到了其他國(guó)家,此時(shí)上層使用的通信語(yǔ)言變了,但我們?nèi)匀豢梢哉贤?/p>
在這個(gè)例子中, 我們的協(xié)議只有兩層; 但是實(shí)際的網(wǎng)絡(luò)通信會(huì)更加復(fù)雜, 需要分更多的層次
分層最大的好處在于“封裝”,在分層情況下,將某層的協(xié)議進(jìn)行替換后,通信雙方之間是不會(huì)受到影響的?
兩臺(tái)主機(jī)要通信,必須要解決一下的幾個(gè)問(wèn)題:
1、把數(shù)據(jù)包交付給自己直接相連的下一臺(tái)主機(jī)
比如:張三北京到云南騎自行車(chē)旅游,首先張三得具備到下一站的能力,誰(shuí)提供這個(gè)能力:自行車(chē);同理數(shù)據(jù)包想要交付到下一臺(tái)直接相連的主機(jī),首先要具備交付這個(gè)能力
2、要有路徑選擇的能力
?張三目標(biāo)是云南,路途中會(huì)經(jīng)過(guò)許許多多個(gè)站,如何選擇下一個(gè)站,這是一個(gè)問(wèn)題,只有具備了選擇這個(gè)能力,張三才能一站站往下跳,張三才會(huì)有可能到云南(不考慮導(dǎo)航),數(shù)據(jù)包也是如此
3、容錯(cuò)糾錯(cuò)能力
數(shù)據(jù)包傳輸?shù)较乱徽疽灿锌赡茏咤e(cuò), 或者數(shù)據(jù)包丟了,就需要重新發(fā)送該數(shù)據(jù)包,所以需要有一定的容錯(cuò)糾錯(cuò)能力
4、解決應(yīng)用方面的問(wèn)題
結(jié)合1、2、3 點(diǎn)的能力,數(shù)據(jù)包已經(jīng)具備到達(dá)另一臺(tái)千里之外的主機(jī)的能力。張三去云南是手段,不是目的,玩才是張三的目的;數(shù)據(jù)包也是如此,從一臺(tái)主機(jī)送到另一臺(tái)主機(jī)是手段,數(shù)據(jù)表解決自己應(yīng)用方面的問(wèn)題才是數(shù)據(jù)包的目的
這四個(gè)問(wèn)題就是網(wǎng)絡(luò)要解決的問(wèn)題,每一個(gè)問(wèn)題都以高內(nèi)聚低耦合的方式進(jìn)行分層,一層狀的形式劃分成諾干層。
這也是為什么網(wǎng)絡(luò)會(huì)劃分成諾干層次的原因,每一層都有自己匹配的協(xié)議,每一層的協(xié)議都是解決自己的問(wèn)題
2.2 OSI七層模型
- OSI(Open System Interconnection,開(kāi)放系統(tǒng)互連)七層網(wǎng)絡(luò)模型稱(chēng)為開(kāi)放式系統(tǒng)互聯(lián)參考模型,是一個(gè)邏輯上的定義和規(guī)范;
- 把網(wǎng)絡(luò)從邏輯上分為了7層。每一層都有相關(guān)、相對(duì)應(yīng)的物理設(shè)備,比如路由器,交換機(jī);
- OSI 七層模型是一種框架性的設(shè)計(jì)方法,其最主要的功能使就是幫助不同類(lèi)型的主機(jī)實(shí)現(xiàn)數(shù)據(jù)傳輸;
- 它的最大優(yōu)點(diǎn)是將服務(wù)、接口和協(xié)議這三個(gè)概念明確地區(qū)分開(kāi)來(lái),概念清楚,理論也比較完整. 通過(guò)七個(gè)層次化的結(jié)構(gòu)模型使不同的系統(tǒng)不同的網(wǎng)絡(luò)之間實(shí)現(xiàn)可靠的通訊;
- 但是,它既復(fù)雜又不實(shí)用,所以下面按照TCP/IP四層模型來(lái)講解
分層名稱(chēng) | 功能 | 每層功能概覽 | |
---|---|---|---|
7 | 應(yīng)用層 | 針對(duì)特定應(yīng)用的協(xié)議 | ![]() |
6 | 表示層 | 設(shè)備固有數(shù)據(jù)格式和網(wǎng)絡(luò)標(biāo)準(zhǔn)數(shù)據(jù)格式的轉(zhuǎn)換 | ![]() |
5 | 會(huì)話(huà)層 | 通信管理、負(fù)責(zé)建立和斷開(kāi)通信連接(數(shù)據(jù)流動(dòng)的邏輯通路)、管理傳輸層以下的分層 | ![]() |
4 | 傳輸層 | 管理兩個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)傳輸、負(fù)責(zé)可靠性傳輸(確保數(shù)據(jù)被可靠地傳送到目標(biāo)地址) | ![]() |
3 | 網(wǎng)絡(luò)層 | 地址管理與路由選擇 | ![]() |
2 | 數(shù)據(jù)鏈路層 | 互聯(lián)設(shè)備之間傳送和識(shí)別數(shù)據(jù)幀 | ![]() |
1 | 物理層 | 以0/1代表電壓的高低以及燈光的閃滅、界定連接器和網(wǎng)線(xiàn)的規(guī)格 | ![]() |
?實(shí)際上再工程實(shí)踐中,發(fā)現(xiàn)根本用不到這么多的層,所以把 5、6、7層合并成了一層:應(yīng)用層
- 數(shù)據(jù)鏈路層解決的是第一個(gè)問(wèn)題:把數(shù)據(jù)包交付給自己直接相連的下一臺(tái)主機(jī)的問(wèn)題
- 網(wǎng)絡(luò)層解決的是第二個(gè)問(wèn)題:要有路徑選擇的能力
- 傳輸層解決的是第三個(gè)問(wèn)題:容錯(cuò)糾錯(cuò)能力
- 應(yīng)用層解決的是第四個(gè)問(wèn)題:解決應(yīng)用方面的問(wèn)題
應(yīng)用層(三層)一般是由用戶(hù)決定的,比如微信,它默認(rèn)提供了數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層;而應(yīng)用層由用戶(hù)決定,加微信好友是會(huì)話(huà)層,用什么語(yǔ)言交流是表示層。
因?yàn)楣こ虒?shí)踐中發(fā)現(xiàn)的問(wèn)題,所以重新對(duì)層數(shù)進(jìn)行了劃分
2.3?TCP/IP五層(或四層)模型
TCP/IP通訊協(xié)議采用了5層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來(lái)完成自己的需求
如果是TCP/IP四層模型則去掉物理層,一般都叫TCP/IP四層模型
注:TCP/IP是一組協(xié)議的代名詞,它還包括許多協(xié)議,組成了TCP/IP協(xié)議簇
- 物理層: 負(fù)責(zé)光/電信號(hào)的傳遞方式. 比如現(xiàn)在以太網(wǎng)通用的網(wǎng)線(xiàn)(雙絞 線(xiàn))、早期以太網(wǎng)采用的的同軸電纜(現(xiàn)在主要用于有線(xiàn)電視)、光纖, 現(xiàn)在的wifi無(wú)線(xiàn)網(wǎng)使用電磁波等都屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等. 集線(xiàn)器(Hub)工作在物理層
- 數(shù)據(jù)鏈路層: 負(fù)責(zé)設(shè)備之間的數(shù)據(jù)幀的傳送和識(shí)別. 例如網(wǎng)卡設(shè)備的驅(qū)動(dòng)、幀同步(就是說(shuō)從網(wǎng)線(xiàn)上檢測(cè)到什么信號(hào)算作新幀的開(kāi)始)、沖突檢測(cè)(如果檢測(cè)到?jīng)_突就自動(dòng)重發(fā))、數(shù)據(jù)差錯(cuò)校驗(yàn)等工作. 有以太網(wǎng)、令牌環(huán)網(wǎng), 無(wú)線(xiàn)LAN等標(biāo)準(zhǔn). 交換機(jī)(Switch)工作在數(shù)據(jù)鏈路層
- 網(wǎng)絡(luò)層: 負(fù)責(zé)地址管理和路由選擇。例如在IP協(xié)議中,通過(guò)IP地址來(lái)標(biāo)識(shí)一臺(tái)主機(jī),并通過(guò)路由表的方式規(guī)劃出兩臺(tái)主機(jī)之間的數(shù)據(jù)傳輸?shù)木€(xiàn)路(路由)。?路由器(Router)工作在網(wǎng)路層
- 傳輸層: 負(fù)責(zé)兩臺(tái)主機(jī)之間的數(shù)據(jù)傳輸。如傳輸控制協(xié)議 (TCP),能夠確保數(shù)據(jù)可靠的從源主機(jī)發(fā)送到目標(biāo)主機(jī)
- 應(yīng)用層: 負(fù)責(zé)應(yīng)用程序間溝通,如簡(jiǎn)單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠(yuǎn)程訪(fǎng)問(wèn)協(xié)議(Telnet)等。網(wǎng)絡(luò)編程主要就是針對(duì)應(yīng)用層
物理層補(bǔ)充
光電信號(hào)分兩種:
- 數(shù)字信號(hào):比較適合家庭使用,方便家庭的電子設(shè)備進(jìn)行解釋?zhuān)酚善鬟M(jìn)行二進(jìn)制解釋
- 模擬信號(hào):比較適合網(wǎng)絡(luò)傳輸,遠(yuǎn)距離傳輸
光電信號(hào)是會(huì)衰減的,衰減到一定層度就沒(méi)有了?
?集線(xiàn)器:該硬件的作用是,對(duì)光電信號(hào)進(jìn)行放大,有了這個(gè)集線(xiàn)器光電信號(hào)就可以進(jìn)行遠(yuǎn)距離傳輸了。交換機(jī)后面談
在物理層上工作的還有調(diào)試解調(diào)器
調(diào)試解調(diào)器:就是我們?nèi)粘Kf(shuō)的“貓”,“光貓”
不是真貓哈
?
補(bǔ)充其他一些知識(shí):
光纖:是一種用于傳輸光信號(hào)的電信傳輸媒介,白色的是玻璃絲,非常細(xì),很容易斷(圖中放大了玻璃絲)
光纖直接連的就是我們所說(shuō)的“光貓”
貓的功能就是把數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào),或者是把模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)
貓連接的就是路由器,路由器真正識(shí)別的才是0 1序列,路由器幫我們構(gòu)建局域網(wǎng)
網(wǎng)線(xiàn)(雙絞線(xiàn)):常用于傳輸信號(hào),白色的是雙絞線(xiàn)水晶頭
每個(gè)硬件設(shè)備自身內(nèi)部都存在大量的寄存器
從數(shù)據(jù)鏈路層開(kāi)始就是已經(jīng)屬于軟件了
TCP/IP與OSI七層模型各層的對(duì)比:
- 下面幾層幾乎是沒(méi)有區(qū)別的(紅色),操作系統(tǒng)對(duì)應(yīng)的是傳輸層和網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層和物理層都是對(duì)應(yīng)在驅(qū)動(dòng)層的,而TCP/IP協(xié)議當(dāng)中的應(yīng)用層就對(duì)應(yīng)到OSI七層協(xié)議當(dāng)中的應(yīng)用層、表示層和會(huì)話(huà)層?
- 傳輸層和網(wǎng)絡(luò)層是OS自己內(nèi)部實(shí)現(xiàn)的,所有的OS都要遵守這兩層,只要是聯(lián)網(wǎng)的一定是遵守這兩層
- 傳輸層往上會(huì)提供一批網(wǎng)絡(luò)的系統(tǒng)調(diào)用接口,以便應(yīng)用層的調(diào)用(OS不相信任何人),而這些網(wǎng)絡(luò)的系統(tǒng)調(diào)用接口全部被整合進(jìn)了文件系統(tǒng)里面,也就是說(shuō)未來(lái)使用的網(wǎng)絡(luò)系統(tǒng)調(diào)用接口一定是跟文件的系統(tǒng)調(diào)用接口一起使用的。以后我所寫(xiě)的網(wǎng)絡(luò)代碼都是在應(yīng)用層中
為什么叫TCP/IP四層模型?
- 傳輸層最具有代表性的協(xié)議就是:TCP協(xié)議,網(wǎng)絡(luò)層最具有代表性的協(xié)議就是:IP協(xié)議,這兩個(gè)協(xié)議是重中之重,這種地位是OS給的,每一個(gè)OS里面這兩層必須是TCP/IP,后面也要重點(diǎn)學(xué)這兩個(gè)協(xié)議
物理層我們考慮的比較少. 因此很多時(shí)候也可以稱(chēng)為 TCP/IP四層模型
一般而言
- 對(duì)于一臺(tái)主機(jī), 它的操作系統(tǒng)內(nèi)核實(shí)現(xiàn)了從傳輸層到物理層的內(nèi)容;
- 對(duì)于一臺(tái)路由器, 它實(shí)現(xiàn)了從網(wǎng)絡(luò)層到物理層;
- 對(duì)于一臺(tái)交換機(jī), 它實(shí)現(xiàn)了從數(shù)據(jù)鏈路層到物理層;
- 對(duì)于集線(xiàn)器, 它只實(shí)現(xiàn)了物理層
但是并不絕對(duì). 很多交換機(jī)也實(shí)現(xiàn)了網(wǎng)絡(luò)層的轉(zhuǎn)發(fā); 很多路由器也實(shí)現(xiàn)了部分傳輸層的內(nèi)容(比如端口轉(zhuǎn)發(fā))
注:現(xiàn)在的路由器已經(jīng)干到了應(yīng)用層,但是工作主要還是在網(wǎng)絡(luò)層
三、網(wǎng)絡(luò)傳輸基本流程
協(xié)議報(bào)頭
- 協(xié)議每一層都有報(bào)頭,協(xié)議通常是通過(guò)協(xié)議報(bào)頭來(lái)進(jìn)行表達(dá);每一份數(shù)據(jù)最終在被發(fā)送或者在不同的協(xié)議層中,都要有自己的報(bào)頭
什么是報(bào)頭?
- 報(bào)頭本質(zhì)也是一種數(shù)據(jù)。
- 比如,你在淘寶上買(mǎi)一個(gè)水杯,但實(shí)際到了的時(shí)候,會(huì)多出一個(gè)快遞盒子和快遞單,這兩個(gè)并不是你想要的,多出的快遞盒子和快遞單就是一個(gè)報(bào)頭,也就是說(shuō),往網(wǎng)絡(luò)發(fā)送數(shù)據(jù)包,實(shí)際上會(huì)多一點(diǎn)點(diǎn)東西,這些東西就是報(bào)頭,每一層協(xié)議都有自己的報(bào)頭
局域網(wǎng)通信
- 兩臺(tái)局域網(wǎng)的主機(jī)能夠直接進(jìn)行通信
- 每一臺(tái)主機(jī)都有自己的“名字”:每一臺(tái)主機(jī)都有網(wǎng)卡,每一張網(wǎng)卡都有自己的地址,這個(gè)地址稱(chēng)為MAC地址,表明自己在局域網(wǎng)中的唯一性?
局域網(wǎng)通信原理(以太網(wǎng))
主機(jī)Mac1,向Mac7發(fā)送 “hello”,在這個(gè)局域網(wǎng)上的主機(jī)都能收到 “hello” 這個(gè)數(shù)據(jù)包,但是 “數(shù)據(jù)包” 只有與匹配的MAC地址才會(huì)真正收到這個(gè)數(shù)據(jù)包,其他主機(jī)進(jìn)行匹配MAC地址失敗,失敗則直接丟棄數(shù)據(jù)包
3.1?局域網(wǎng)的兩臺(tái)主機(jī)通信
兩臺(tái)計(jì)算機(jī)通過(guò)TCP/IP協(xié)議通訊的過(guò)程如下所示:
數(shù)據(jù)包封裝和分用?
- 不同的協(xié)議層對(duì)數(shù)據(jù)包有不同的稱(chēng)謂,在傳輸層叫做段(segment),在網(wǎng)絡(luò)層叫做數(shù)據(jù)報(bào) (datagram),在鏈路層叫做幀(frame).
- 應(yīng)用層數(shù)據(jù)通過(guò)協(xié)議棧發(fā)到網(wǎng)絡(luò)上時(shí),每層協(xié)議都要加上一個(gè)數(shù)據(jù)首部(header),稱(chēng)為封裝(Encapsulation).
- 首部信息中包含了一些類(lèi)似于首部有多長(zhǎng), 載荷(payload)有多長(zhǎng), 上層協(xié)議是什么等信息.
- 數(shù)據(jù)封裝成幀后發(fā)到傳輸介質(zhì)上,到達(dá)目的主機(jī)后每層協(xié)議再剝掉相應(yīng)的首部,根據(jù)首部中的 "上層協(xié)議字段" 將數(shù)據(jù)交給對(duì)應(yīng)的上層協(xié)議處理?
- 報(bào)文 = 報(bào)頭 + 有效載荷
當(dāng)用戶(hù)A要將數(shù)據(jù) “hello” 發(fā)送給另一臺(tái)主機(jī)B,該數(shù)據(jù)需要先通過(guò)網(wǎng)絡(luò)協(xié)議棧進(jìn)行封裝:(自頂向下)
- 數(shù)據(jù)包報(bào)先交給應(yīng)用層,應(yīng)用層添加上對(duì)應(yīng)應(yīng)用層協(xié)議的報(bào)頭信息后,將數(shù)據(jù)再交給傳輸層
- 傳輸層收到數(shù)據(jù)包后,再添加上對(duì)應(yīng)傳輸層協(xié)議的報(bào)頭信息,并將數(shù)據(jù)繼續(xù)向下進(jìn)行交付
- 網(wǎng)絡(luò)層收到數(shù)據(jù)包后,再添加上對(duì)應(yīng)網(wǎng)絡(luò)層協(xié)議的報(bào)頭信息,接著將數(shù)據(jù)包再交給鏈路層
- 鏈路層收到數(shù)據(jù)包后,最后再添加上對(duì)應(yīng)鏈路層協(xié)議的報(bào)頭信息,至此數(shù)據(jù)封裝完畢
下圖為數(shù)據(jù)封裝的過(guò)程:
注:用戶(hù)數(shù)據(jù)就是用戶(hù)發(fā)送的數(shù)據(jù)
數(shù)據(jù)封裝完畢后就可以通過(guò)局域網(wǎng)將其發(fā)送給對(duì)端主機(jī)了(上圖中是以太網(wǎng)),而當(dāng)對(duì)端主機(jī)收到數(shù)據(jù)后,對(duì)應(yīng)也需要通過(guò)網(wǎng)絡(luò)協(xié)議棧對(duì)該數(shù)據(jù)進(jìn)行解包與分用:(自底向上)
注:只有B主機(jī)會(huì)受到數(shù)據(jù)包,其他主機(jī)全部丟棄?
- 鏈路層收到數(shù)據(jù)包后,先將數(shù)據(jù)包中對(duì)應(yīng)鏈路層協(xié)議的報(bào)頭信息提取出來(lái),然后將剩下的數(shù)據(jù)包交給網(wǎng)絡(luò)層
- 網(wǎng)絡(luò)層收到該數(shù)據(jù)包后,再將數(shù)據(jù)包中對(duì)應(yīng)網(wǎng)絡(luò)層協(xié)議的報(bào)頭信息提取出來(lái),然后將剩下的數(shù)據(jù)包繼續(xù)向上進(jìn)行交付
- 傳輸層收到該數(shù)據(jù)包后,再將數(shù)據(jù)包中對(duì)應(yīng)傳輸層協(xié)議的報(bào)頭信息提取出來(lái),然后將剩下的數(shù)據(jù)包再交付給應(yīng)用層
- 應(yīng)用層收到數(shù)據(jù)包后,最后將數(shù)據(jù)包中對(duì)應(yīng)應(yīng)用層協(xié)議的報(bào)頭信息提取出來(lái),至此便完成了數(shù)據(jù)包的解包與分用
下圖為數(shù)據(jù)分用的過(guò)程:
或者
任何一臺(tái)主機(jī)在發(fā)送數(shù)據(jù)之前,該數(shù)據(jù)包都要先自頂向下貫穿協(xié)議棧來(lái)完成數(shù)據(jù)包的封裝,在這個(gè)過(guò)程中,每一層協(xié)議都會(huì)添加上對(duì)應(yīng)的報(bào)頭信息;而任何一臺(tái)主機(jī)收到數(shù)據(jù)包后,都要先自底向上貫穿協(xié)議棧來(lái)完成數(shù)據(jù)包的解包和分用,在這個(gè)過(guò)程中,每一層協(xié)議都會(huì)將對(duì)應(yīng)的報(bào)頭信息提取出來(lái)
報(bào)文 = 報(bào)頭 + 有效載荷
在網(wǎng)絡(luò)協(xié)議中,我們可以認(rèn)為同層協(xié)議在直接通信,也可以理解成為向下交付,這是兩種不同的認(rèn)知。比如,A和B在QQ聊天,A和B都認(rèn)為他們?cè)谥苯油ㄐ?
如何識(shí)別報(bào)頭和有效載荷??
別人發(fā)過(guò)來(lái)的數(shù)據(jù)包,自己主機(jī)接收后就是一坨字符串01序列,如何如何識(shí)別報(bào)頭和有效載荷
獲取報(bào)頭大小的方法通常有兩種:
- 定長(zhǎng)報(bào)頭。顧名思義就是報(bào)頭的大小是固定的。
- 自描述字段。報(bào)頭當(dāng)中提供了一個(gè)字段,用來(lái)表示報(bào)頭的長(zhǎng)度
實(shí)際上每個(gè)協(xié)議都要提供一種方法,讓我們獲取到報(bào)頭的大小,這樣我們才能在解包時(shí)將報(bào)頭與有效載荷進(jìn)行分離
如何判斷有效載荷交付給上層的哪個(gè)協(xié)議?
網(wǎng)絡(luò)協(xié)議棧的每一層都可能會(huì)對(duì)應(yīng)多種協(xié)議,即便將報(bào)頭與有效載荷分離了,那當(dāng)前層應(yīng)該將有效載荷交付給上層對(duì)應(yīng)的哪個(gè)協(xié)議呢?
實(shí)際在每種協(xié)議的報(bào)頭當(dāng)中,幾乎都會(huì)包含一個(gè)字段,表明我們應(yīng)該把分離出來(lái)的有效載荷交付給上層的哪個(gè)協(xié)議,這就是分用的過(guò)程
協(xié)議共性
- 提供一個(gè)將報(bào)頭與有效載荷分離的方法。
- 協(xié)議當(dāng)中必須包含一個(gè)字段,表明應(yīng)該將有效載荷交付給上層的哪個(gè)協(xié)議。
實(shí)際當(dāng)我們要學(xué)習(xí)一種協(xié)議的時(shí)候,首先就應(yīng)該明確這兩點(diǎn),因?yàn)楫?dāng)我們?cè)诮獍臅r(shí)候必須將報(bào)頭與有效載荷分離,而當(dāng)我們?cè)诜钟玫臅r(shí)候必須知道應(yīng)該將有效載荷交付給上層的哪個(gè)協(xié)議
常見(jiàn)的局域網(wǎng):以太網(wǎng)、令牌環(huán)網(wǎng)、無(wú)線(xiàn)LAN
注:無(wú)線(xiàn)LAN是以太網(wǎng)的變種,但是沒(méi)有以太網(wǎng)使用廣泛?
在任意時(shí)刻只允許一臺(tái)主機(jī)在局域網(wǎng)中發(fā)送消息,否則發(fā)生碰撞
什么是碰撞??
當(dāng)主機(jī)A在向主機(jī)B發(fā)送數(shù)據(jù)時(shí),其他主機(jī)彼此之間可能也正在進(jìn)行通信,比如主機(jī)A跟主機(jī)B在通信,主機(jī)B與主機(jī)C也在通信...
同一局域網(wǎng)中的所有主機(jī)在通信時(shí),使用的都是一個(gè)共同的網(wǎng)絡(luò)資源,因此如果局域網(wǎng)內(nèi)的多臺(tái)主機(jī)同時(shí)進(jìn)行通信,此時(shí)這些數(shù)據(jù)之間就可能會(huì)相互干擾。
每一個(gè)局域網(wǎng)都可以看作是一個(gè)碰撞域,如果某個(gè)主機(jī)發(fā)送出去的數(shù)據(jù)與其他主機(jī)發(fā)送的數(shù)據(jù)之間產(chǎn)生了干擾,我們就稱(chēng)這兩臺(tái)主機(jī)在該碰撞域中發(fā)生了碰撞
如何看待局域網(wǎng)中的網(wǎng)絡(luò)資源??
站在系統(tǒng)的角度,網(wǎng)絡(luò)資源就是共享資源,臨界資源?
發(fā)生碰撞后是如何處理的?
重傳數(shù)據(jù):如果發(fā)生了碰撞,數(shù)據(jù)包將被丟失或損壞,發(fā)送方將需要重新發(fā)送數(shù)據(jù)包,以確保接收方正確地收到數(shù)據(jù),等等
什么是令牌環(huán)網(wǎng)??
令牌環(huán)網(wǎng)是使用一個(gè)令牌在網(wǎng)絡(luò)上流轉(zhuǎn)以控制網(wǎng)絡(luò)中節(jié)點(diǎn)的訪(fǎng)問(wèn)權(quán)限(令牌是一個(gè)特殊的數(shù)據(jù)包)。在令牌環(huán)網(wǎng)中,節(jié)點(diǎn)被連接成一個(gè)環(huán)形,每個(gè)節(jié)點(diǎn)都可以發(fā)送數(shù)據(jù),但只有擁有令牌的節(jié)點(diǎn)可以發(fā)送數(shù)據(jù)(相當(dāng)于互斥鎖)。當(dāng)一個(gè)節(jié)點(diǎn)擁有令牌時(shí),它可以發(fā)送數(shù)據(jù)到相鄰的節(jié)點(diǎn),然后傳遞令牌給下一個(gè)節(jié)點(diǎn)。這種方式可以有效地控制網(wǎng)絡(luò)中各節(jié)點(diǎn)的訪(fǎng)問(wèn)和通信,同時(shí)避免了數(shù)據(jù)沖突和重復(fù)發(fā)送的問(wèn)題。
以太網(wǎng)名字的由來(lái)(簡(jiǎn)述)
“以太網(wǎng)”這個(gè)名字實(shí)際來(lái)源于物理學(xué),在早期的時(shí)候,很多科學(xué)家都認(rèn)為任何信息的傳播都是需要媒介的,因此物理學(xué)家們就認(rèn)為光的傳播也是需要媒介的。這時(shí)物理學(xué)家們就發(fā)現(xiàn)了一個(gè)問(wèn)題:既然光能夠從太陽(yáng)傳播到地球上,那么在這個(gè)傳播的過(guò)程中一定需要某種媒介,但太陽(yáng)和地球之間不是絕對(duì)真空的狀態(tài)嗎?
此時(shí)物理學(xué)家們就提出了一個(gè)“以太假說(shuō)”,認(rèn)為宇宙空間并不是真空的,而是填充滿(mǎn)了一種叫做“以太”的物質(zhì)的,此時(shí)“以太”就可以作為光傳播的媒介。但后來(lái)經(jīng)過(guò)實(shí)驗(yàn)后發(fā)現(xiàn),“以太”這種物質(zhì)實(shí)際上是不存在的。
其中在這個(gè)故事線(xiàn)當(dāng)中有兩個(gè)人是與計(jì)算機(jī)學(xué)科相關(guān)的,一個(gè)人叫做圖靈,另一個(gè)叫做馮諾依曼,這兩個(gè)人當(dāng)時(shí)也是參與了這場(chǎng)討論的,因?yàn)樗麄儾粌H是計(jì)算機(jī)科學(xué)家,同時(shí)也是數(shù)學(xué)家。
經(jīng)過(guò)后來(lái)的發(fā)展,在局域網(wǎng)產(chǎn)生之后就需要對(duì)局域網(wǎng)進(jìn)行命名,而在局域網(wǎng)命名的時(shí)候人們就將其命名為“以太網(wǎng)”。因?yàn)槲覀冊(cè)?jīng)在物理學(xué)上認(rèn)為“以太”就是傳送物質(zhì)的介質(zhì),也就是說(shuō)“以太”是具有某種通信能力的,雖然“以太”在物理學(xué)上驗(yàn)證是不存在的,但現(xiàn)在在計(jì)算機(jī)領(lǐng)域我們做出來(lái)了這樣一種東西,它也是能夠傳播物質(zhì)(信息)的,同時(shí)也為了紀(jì)念之前的“以太假說(shuō)”,于是早期的局域網(wǎng)標(biāo)準(zhǔn)就被命名為了“以太網(wǎng)”,有點(diǎn)嘲諷的意味...
3.2?跨網(wǎng)絡(luò)的兩臺(tái)主機(jī)通信
跨局域網(wǎng)的兩臺(tái)主機(jī)之間是如何進(jìn)行通信(同一種類(lèi)型的局域網(wǎng)通信)
局域網(wǎng)之間都是通過(guò)路由器連接起來(lái)的,因此一個(gè)路由器至少能夠橫跨兩個(gè)局域網(wǎng)。而這些被路由器級(jí)聯(lián)局域網(wǎng)都認(rèn)為,該路由器就是本局域網(wǎng)內(nèi)的一臺(tái)主機(jī),因此路由器可以和這些局域網(wǎng)內(nèi)的任意一臺(tái)主機(jī)進(jìn)行直接通信
比如局域網(wǎng)1當(dāng)中的主機(jī)A想要和局域網(wǎng)2當(dāng)中的主機(jī)B進(jìn)行通信,那么主機(jī)A可以先將數(shù)據(jù)發(fā)送給路由器,然后路由器再將數(shù)據(jù)轉(zhuǎn)發(fā)給局域網(wǎng)2當(dāng)中的主機(jī)B,其中封裝,解包分用與同一個(gè)局域網(wǎng)內(nèi)的兩臺(tái)主機(jī)相似,也就是上面所談的
跨局域網(wǎng)的兩臺(tái)主機(jī)之間是如何進(jìn)行通信(不同類(lèi)型的局域網(wǎng)通信)
局域網(wǎng)可能采用的是不同的通信標(biāo)準(zhǔn),比如局域網(wǎng)1采用的是以太網(wǎng),而局域網(wǎng)2采用的卻是令牌環(huán)網(wǎng),如何進(jìn)行通信??
由于以太網(wǎng)和令牌環(huán)網(wǎng)是不同的通信標(biāo)準(zhǔn),它們給數(shù)據(jù)添加的報(bào)頭也是不一樣的,因此令牌環(huán)網(wǎng)當(dāng)中的主機(jī)無(wú)法對(duì)以太網(wǎng)當(dāng)中的數(shù)據(jù)幀進(jìn)行解包,反過(guò)來(lái)也是如此。
這種情況實(shí)際是由路由器來(lái)處理的,路由器是工作在網(wǎng)絡(luò)層的一個(gè)設(shè)備(路由器必須要有兩個(gè)網(wǎng)絡(luò)接口,因?yàn)槁酚善髦辽贆M跨兩個(gè)網(wǎng)絡(luò))
數(shù)據(jù)要從局域網(wǎng)1發(fā)送到局域網(wǎng)2時(shí),路由器收到局域網(wǎng)1的數(shù)據(jù)后,會(huì)先將以太網(wǎng)對(duì)應(yīng)的報(bào)頭進(jìn)行解包,然后將剩下的有效載荷向上交付給網(wǎng)絡(luò)層,在網(wǎng)絡(luò)層進(jìn)行一系列數(shù)據(jù)分析后,再將數(shù)據(jù)包進(jìn)行再一次封裝,再交付給鏈路層,此時(shí)在鏈路層當(dāng)中就會(huì)給該數(shù)據(jù)包添加上令牌環(huán)對(duì)應(yīng)的報(bào)頭信息,然后再將該數(shù)據(jù)發(fā)送到局域網(wǎng)2當(dāng)中,此時(shí)該數(shù)據(jù)就能夠在令牌環(huán)網(wǎng)當(dāng)中傳輸了
這種方式能夠屏蔽底層的差異,這就是 “IP” 的第一個(gè)優(yōu)勢(shì)。對(duì)于通信主機(jī)雙方的IP層及其往上的協(xié)議來(lái)說(shuō),它們并不需要關(guān)心底層采用的是以太網(wǎng)還是令牌環(huán)網(wǎng),它們認(rèn)為只要填寫(xiě)了源IP地址和目的IP地址就能夠?qū)?shù)據(jù)發(fā)送出去,因此現(xiàn)在主流的網(wǎng)絡(luò)也叫做“IP網(wǎng)絡(luò)”
??
四、網(wǎng)絡(luò)中的地址管理
在網(wǎng)絡(luò)中有兩個(gè)常用的地址:IP地址和MAC地址
4.1?認(rèn)識(shí)IP地址
IP協(xié)議有兩個(gè)版本, IPv4和IPv6.后序凡是提到IP協(xié)議, 沒(méi)有特殊說(shuō)明的, 默認(rèn)都是指IPv4
- IP地址是在IP協(xié)議中, 用來(lái)標(biāo)識(shí)網(wǎng)絡(luò)中不同主機(jī)的地址;
- 對(duì)于IPv4來(lái)說(shuō), IP地址是一個(gè)4字節(jié), 32位的整數(shù);
- 我們通常也使用 "點(diǎn)分十進(jìn)制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用點(diǎn)分割的每一個(gè)數(shù)字表示一個(gè)字節(jié), 范圍是 0 - 255
- IP地址通常在廣域網(wǎng)中使用,準(zhǔn)確來(lái)說(shuō),IP地址既可以在局域網(wǎng)中使用也可以在廣域網(wǎng)中使用
還有另一個(gè)版本的IPv6的原因是:IPv4的IP地址不夠用了,IPv6用128個(gè)比特位來(lái)標(biāo)識(shí)IP地址,16字節(jié)
注:IPv4和IPv6不兼容
4.2?認(rèn)識(shí)MAC地址
- MAC地址用來(lái)識(shí)別數(shù)據(jù)鏈路層中相連的節(jié)點(diǎn);
- 長(zhǎng)度為48位, 6個(gè)字節(jié). 一般用16進(jìn)制數(shù)字加上冒號(hào)的形式來(lái)表示(例如: 08:00:27:03:fb:19)
- 在網(wǎng)卡出廠時(shí)就確定了, 不能修改. mac地址通常是唯一的(虛擬機(jī)中的mac地址不是真實(shí)的mac地址, 可能會(huì)沖突; 也有些網(wǎng)卡支持用戶(hù)配置mac地址)
- MAC地址通常在局域網(wǎng)中使用
ifconfig
ifconfig 是Linux中的一個(gè)命令,它用于顯示和配置網(wǎng)絡(luò)接口的信息
我們用到的大部分局域網(wǎng)都是以太網(wǎng)標(biāo)準(zhǔn),其中 ether 對(duì)應(yīng)就有”以太“的意思,而 ether 后面的這個(gè)地址就是當(dāng)前云服務(wù)器所對(duì)應(yīng)的MAC地址。但實(shí)際云服務(wù)器上的MAC地址可能不是真正的MAC地址,該MAC地址可能虛擬技術(shù)模擬模擬出來(lái)的
inet 的地址暫且理解為IP地址
注:以上所有知識(shí)只為搭建起網(wǎng)絡(luò)框架,幫助理解網(wǎng)絡(luò)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-481728.html
--------------------- END ----------------------文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-481728.html
「 作者 」 楓葉先生
「 更新 」 2023.6.13
「 聲明 」 余之才疏學(xué)淺,故所撰文疏漏難免,
或有謬誤或不準(zhǔn)確之處,敬請(qǐng)讀者批評(píng)指正。
到了這里,關(guān)于「網(wǎng)絡(luò)編程」第一講:初識(shí)網(wǎng)絡(luò)_網(wǎng)絡(luò)基礎(chǔ)1的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!