前言
計(jì)算機(jī)網(wǎng)絡(luò)是一門基礎(chǔ)課程,但是老師所講的東西無(wú)非起到一個(gè)拋磚引玉的作用。然而對(duì)于需要自學(xué)的人來(lái)說(shuō),無(wú)疑是更難的。前路漫漫~~
計(jì)算機(jī)網(wǎng)絡(luò)本來(lái)就是比較枯燥的,文章內(nèi)容較多,建議讀者耐心看完這篇文章,希望大家看完后都能有所收獲。先把這篇文章的大致結(jié)構(gòu)放上來(lái)。
預(yù)備知識(shí)
謝希仁的那本《計(jì)算機(jī)網(wǎng)絡(luò)》是很多大學(xué)選擇的計(jì)網(wǎng)教材,在第一章是一個(gè)概論,大致講了計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,也可以說(shuō)是每個(gè)人都必須了解的小常識(shí)。在這里,我就做一個(gè)總結(jié)概括,把它作為學(xué)習(xí)計(jì)網(wǎng)預(yù)備知識(shí)。
互聯(lián)網(wǎng)簡(jiǎn)史
-
第一階段:20世紀(jì)50年代,數(shù)據(jù)通信技術(shù)與網(wǎng)絡(luò)理論基礎(chǔ)研究
-
第二階段:20世紀(jì)60年代,ARPANET與分組交換技術(shù)
-
第三階段:20世紀(jì)70年代中期,網(wǎng)絡(luò)體系結(jié)構(gòu)與網(wǎng)絡(luò)協(xié)議的標(biāo)準(zhǔn)化
-
第四階段:20世紀(jì)90年代,互聯(lián)網(wǎng)、高速網(wǎng)絡(luò)、無(wú)線網(wǎng)絡(luò)、移動(dòng)互聯(lián)網(wǎng)與網(wǎng)絡(luò)安全技術(shù)發(fā)展
互聯(lián)網(wǎng)的發(fā)展
「計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展主要經(jīng)歷了下面的七個(gè)階段。」
「批處理」:為了讓更多的人使用計(jì)算機(jī),出現(xiàn)了批處理系統(tǒng)。所謂的批處理,是指事先把用戶數(shù)程序數(shù)據(jù)裝入卡帶或者磁帶,并由計(jì)算機(jī)按照一定順序讀取。
「分時(shí)系統(tǒng)」:批處理系統(tǒng)之后,又出現(xiàn)分時(shí)系統(tǒng)。它是指多個(gè)終端同時(shí)與計(jì)算機(jī)連接,允許多個(gè)用戶同時(shí)使用計(jì)算機(jī)。
-
「計(jì)算機(jī)通信技術(shù)」:在分時(shí)系統(tǒng)中,我們看到了終端和計(jì)算機(jī)的連接,但這并不意味著計(jì)算機(jī)與計(jì)算機(jī)之間也已互聯(lián)連接。隨著計(jì)算機(jī)的數(shù)量普及,計(jì)算機(jī)之間的數(shù)據(jù)交互的便捷性越來(lái)越受到重視,最開(kāi)始兩個(gè)主機(jī)之間交互數(shù)據(jù)過(guò)程相當(dāng)繁瑣,因此計(jì)算機(jī)通信技術(shù)(計(jì)算機(jī)與計(jì)算機(jī)之間由通信線路連接)應(yīng)運(yùn)而生。人們可以很輕松的即時(shí)讀取另一臺(tái)計(jì)算機(jī)中的數(shù)據(jù),從而極大地縮短了傳輸數(shù)據(jù)的時(shí)間。
-
「計(jì)算機(jī)網(wǎng)絡(luò)的產(chǎn)生」:20世紀(jì)70年代,人們開(kāi)始實(shí)驗(yàn)基于分組交換技術(shù)的計(jì)算機(jī)網(wǎng)絡(luò),并著手研究不同廠商的計(jì)算機(jī)之間相互通信的技術(shù)。到了80年代,一種能夠互聯(lián)多種計(jì)算機(jī)的網(wǎng)絡(luò)應(yīng)運(yùn)而生。網(wǎng)絡(luò)通信技術(shù)進(jìn)入了發(fā)展的高速公路。
-
「互聯(lián)網(wǎng)的普及」:進(jìn)入20世紀(jì)90年代,隨著計(jì)算機(jī)的價(jià)格降低、性能增強(qiáng)、各類應(yīng)用紛紛冒頭,計(jì)算機(jī)普及程度越來(lái)越高。面對(duì)這一趨勢(shì),各家廠商不僅要保證生產(chǎn)產(chǎn)品的自身互聯(lián)性,還著力于讓自己的網(wǎng)絡(luò)技術(shù)不斷與互聯(lián)網(wǎng)技術(shù)(TCP/IP)兼容。
-
「互聯(lián)網(wǎng)時(shí)代」:隨著互聯(lián)網(wǎng)的普及,現(xiàn)在,人們?cè)絹?lái)越離不開(kāi)互聯(lián)網(wǎng)了。生活、學(xué)習(xí)工作也都得依靠網(wǎng)絡(luò)信息,萬(wàn)物互聯(lián)的時(shí)代早就已經(jīng)到來(lái)了。
-
「網(wǎng)絡(luò)安全時(shí)代」:互聯(lián)網(wǎng)給世界帶來(lái)了顛覆性的改變,給人們?nèi)粘I顜?lái)了極大的便利,互聯(lián)網(wǎng)呈現(xiàn)給現(xiàn)代人一個(gè)高度便捷的信息網(wǎng)絡(luò)環(huán)境,在國(guó)家面前,猶如水電煤氣一樣,成為了國(guó)家必不可少的重要資源,隨著萬(wàn)物互聯(lián),網(wǎng)絡(luò)安全必定是國(guó)家安全最重要的一環(huán)。在互聯(lián)網(wǎng)普及的初期,人們更關(guān)注單純的連接性,注重不受任何限制的建立連接。但現(xiàn)在,人們不再滿足與“單純的連接”而是更為追求“安全的連接”。
網(wǎng)絡(luò)的性能指標(biāo)
-
「比特」:比特(bit)是計(jì)算機(jī)中數(shù)據(jù)量的單位,也是信息論中使用的信息量的單位。英文單詞bit來(lái)源于binary
digit,意思是一個(gè)“二進(jìn)制數(shù)字”。網(wǎng)絡(luò)技術(shù)中的速率指的是連接在計(jì)算機(jī)網(wǎng)絡(luò)上的主機(jī)在數(shù)字信道上傳送數(shù)據(jù)的速率,它也稱為數(shù)據(jù)率(data
rate)或比特率(bit rate)。
-
「帶寬」:在計(jì)算機(jī)網(wǎng)絡(luò)中,帶寬用來(lái)表示網(wǎng)絡(luò)的通信線路傳送數(shù)據(jù)的能力,因此網(wǎng)絡(luò)帶寬表示單位時(shí)間內(nèi)從網(wǎng)絡(luò)中的某一點(diǎn)到另一點(diǎn)所能通過(guò)的“最高數(shù)據(jù)率”。這種意義的帶寬的單位是比特/秒。
-
「吞吐量」:吞吐量(throughput)表示在單位時(shí)間內(nèi)通過(guò)某個(gè)網(wǎng)絡(luò)(或信道、接口)的數(shù)據(jù)量,他表示當(dāng)前網(wǎng)絡(luò)傳輸數(shù)據(jù)的能力。
-
-
1、
「發(fā)送時(shí)延」:指主機(jī)或路由器發(fā)送數(shù)據(jù)幀所需要的時(shí)間,也就是從發(fā)送數(shù)據(jù)幀的第一個(gè)比特算起,到該幀的最后一個(gè)比特發(fā)送完畢所需要的時(shí)間。
-
2、
「?jìng)鞑r(shí)延」:指電磁波在信道中傳播一定距離需要花費(fèi)的時(shí)間。
-
「時(shí)延帶寬積」:時(shí)延帶寬積表示鏈路可容納的比特?cái)?shù),因此,鏈路的時(shí)延帶寬積又稱為以比特為單位的鏈路長(zhǎng)度。
-
「往返時(shí)間RTT」:往返時(shí)間RTT,表示從發(fā)送方發(fā)送數(shù)據(jù)開(kāi)始,到發(fā)送方收到來(lái)自接收方的確認(rèn)(接收方收到數(shù)據(jù)后便立即發(fā)送確認(rèn)),總共經(jīng)歷的時(shí)間。往返時(shí)間一般就會(huì)包括分組在網(wǎng)絡(luò)中的各種時(shí)延。
-
「利用率」:利用率可以分為信道利用率和網(wǎng)絡(luò)利用率兩種。信道利用率指出某信道有百分之幾的時(shí)間是被利用的(有數(shù)據(jù)通過(guò))。完全空閑的信道的利用率是零。網(wǎng)絡(luò)的利用率則是全網(wǎng)絡(luò)的信道利用率的加權(quán)平均值。信道利用率并非越高越好,這是因?yàn)椋鶕?jù)排隊(duì)論的理論,當(dāng)某信道的利用率增大時(shí),該信道引起的時(shí)延也會(huì)迅速增加。信道或網(wǎng)絡(luò)的利用率過(guò)高會(huì)產(chǎn)生非常大的時(shí)延。
不能不知道的小常識(shí)
計(jì)算機(jī)網(wǎng)絡(luò)的分類
按照「地理覆蓋范圍」來(lái)分類的話,計(jì)算機(jī)網(wǎng)絡(luò)可以被分為一下三個(gè)部分:
-
「局域網(wǎng)」(Local Area NetWork,LAN),常見(jiàn)的辦公室、宿舍或網(wǎng)吧中的網(wǎng)絡(luò)就是局域網(wǎng)幾米到10km以內(nèi)。其特點(diǎn)是:連接范圍窄,用戶少,配置容易,連接速率高。
-
「城域網(wǎng)」(Metropolitan Area NetWork,MAN),用于將一個(gè)城市、一個(gè)地區(qū)的企業(yè)、機(jī)關(guān)或?qū)W校的局域網(wǎng)連接起來(lái),實(shí)現(xiàn)區(qū)域內(nèi)的資源共享
-
「廣域網(wǎng)」:廣域網(wǎng)(Wide
Area
Network,WAN),也稱為遠(yuǎn)程網(wǎng),不同城市間的LAN或者M(jìn)AN網(wǎng)絡(luò)互連,因?yàn)榫嚯x遠(yuǎn),信息衰減比較嚴(yán)重,所以這種網(wǎng)絡(luò)一般要租用專線,通過(guò)特殊協(xié)議進(jìn)行連接,構(gòu)成網(wǎng)狀結(jié)構(gòu),廣域網(wǎng)因?yàn)樗B接的用戶多,所以每個(gè)用戶的連接速率一般較低。
計(jì)算機(jī)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)
-
-
優(yōu)點(diǎn):費(fèi)用較低,易于擴(kuò)展,線路的利用率高;
缺點(diǎn):可靠性不高,維護(hù)困難,傳輸效率低。
-
-
優(yōu)點(diǎn):令牌控制,沒(méi)有線路競(jìng)爭(zhēng),實(shí)時(shí)性強(qiáng),傳輸控制容易;
-
-
-
優(yōu)點(diǎn):可靠性高,方便管理,易于擴(kuò)展,傳輸效率高.
-
缺點(diǎn):線路利用率低,中心節(jié)點(diǎn)需要很高的可靠性和冗余度。
計(jì)算機(jī)有哪些結(jié)構(gòu)
有三種不同的計(jì)算機(jī)網(wǎng)絡(luò)分層模型:
TCP/IP協(xié)議是當(dāng)前互聯(lián)網(wǎng)所遵循的協(xié)議,它并不是單純地由TCP或者IP組成,而是由各層的協(xié)議一起組成的,構(gòu)成我們通常說(shuō)說(shuō)的TCP/IP協(xié)議棧。但是為了更好的理解,后面文章也是按照五層協(xié)議來(lái)寫(xiě)的。
物理層
這邊先給一個(gè)建議,大家在學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的時(shí)候不應(yīng)該把每個(gè)網(wǎng)絡(luò)協(xié)議單獨(dú)拿出來(lái)學(xué)習(xí),應(yīng)該明白它的產(chǎn)生原因以及在整個(gè)計(jì)算機(jī)網(wǎng)絡(luò)的作用。
數(shù)字信號(hào)與模擬信號(hào)
它的作用是:屏蔽不同的傳輸媒體和通信手段的差異。我們都知道,自然界的信號(hào)無(wú)非就是兩種,一種是數(shù)字信號(hào),另一種就是模擬信號(hào)。那么是什么模擬信號(hào)?什么又是數(shù)字信號(hào)呢?
說(shuō)白了,所謂的模擬信號(hào)就是連續(xù)變化的物理量,模擬信號(hào)其特點(diǎn)是幅度連續(xù)(連續(xù)的含義是在某一取值范圍內(nèi)可以取無(wú)限多個(gè)數(shù)值)。模擬信號(hào),其信號(hào)波形在時(shí)間上也是連續(xù)的,因此它又是連續(xù)信號(hào)。我們對(duì)連續(xù)信號(hào)進(jìn)行抽樣,就會(huì)得到抽樣信號(hào),但抽象信號(hào)就是離散的(說(shuō)著說(shuō)著就說(shuō)到了信號(hào)系統(tǒng),看來(lái)補(bǔ)考對(duì)我的影響還是有的)。但數(shù)字信號(hào)是不同于模擬信號(hào)的,他在時(shí)間域上是離散的,它有兩種不同狀態(tài)的物理量,分別用“0”,“1”來(lái)表示。這就好像電燈開(kāi)關(guān)一樣,也有兩種不同的狀態(tài)。
當(dāng)然,數(shù)字信號(hào)與模擬信號(hào)是可以相互轉(zhuǎn)換的,模擬信號(hào)通常使用PCM(脈沖編碼調(diào)制)方法量化并轉(zhuǎn)換為數(shù)字信號(hào),PCM方法是使不同范圍的模擬信號(hào)對(duì)應(yīng)不同的二進(jìn)制值。通常,數(shù)字信號(hào)通過(guò)載波相移得到模擬信號(hào)。
物理層的傳輸媒介
我們大家都知道,數(shù)據(jù)在物理層傳輸?shù)拿浇槭遣灰粯拥模ぷ髟谖锢韺拥氖恰讣€器」。不過(guò),大致可以為一下兩類:
-
「引導(dǎo)型傳輸媒介」:引導(dǎo)型傳輸媒體中又有不同的類別,比如同軸電纜、光纜、雙絞線,其中雙絞線根據(jù)是否屏蔽又可以繼續(xù)細(xì)分。
-
「非引導(dǎo)型傳輸媒介」:非引導(dǎo)型傳輸媒介指的是無(wú)線電波在空間中的傳播,利用不同的頻段可以傳輸不同的信號(hào)。
信道
說(shuō)起信道,前面的基礎(chǔ)篇提到過(guò)信道的利用率,但至于信道更詳細(xì)的介紹,就沒(méi)有提到,現(xiàn)在就來(lái)仔細(xì)看看。按照傳輸媒介可以分為三類:
-
「有線信道」:有線信道以導(dǎo)線為傳輸媒質(zhì),信號(hào)沿導(dǎo)線進(jìn)行傳輸,信號(hào)的能量集中在導(dǎo)線附近,因此傳輸效率高,但是部署不夠靈活。這一類信道使用的傳輸媒質(zhì)包括用電線傳輸電信號(hào)的架空明線、電話線、雙絞線、對(duì)稱電纜和同軸電纜等等,還有傳輸經(jīng)過(guò)調(diào)制的光脈沖信號(hào)的光導(dǎo)纖維。
-
「無(wú)線信道」:無(wú)線信道主要有以輻射無(wú)線電波為傳輸方式的無(wú)線電信道和在水下傳播聲波的水聲信道等。無(wú)線電信號(hào)由發(fā)射機(jī)的天線輻射到整個(gè)自由空間上進(jìn)行傳播。不同頻段的無(wú)線電波有不同的傳播方式。
-
「存儲(chǔ)信道」:在某種意義上,磁帶、光盤(pán)、磁盤(pán)等數(shù)據(jù)存儲(chǔ)媒質(zhì)也可以被看作是一種通信信道。將數(shù)據(jù)寫(xiě)入存儲(chǔ)媒質(zhì)的過(guò)程即等效于發(fā)射機(jī)將信號(hào)傳輸?shù)叫诺赖倪^(guò)程,將數(shù)據(jù)從存儲(chǔ)媒質(zhì)讀出的過(guò)程即等效于接收機(jī)從信道接收信號(hào)的過(guò)程。
信道是傳輸信息的信道,信道容量描述了信道無(wú)差錯(cuò)地傳輸信息的最大能力,可以用來(lái)衡量信道的好壞。
關(guān)于信道,還有一個(gè)重要的參數(shù),那就是信噪比,信噪比越大,信道的容量也越大,這里的話給出著名的香農(nóng)公式:
其中,C為信道容量,B為帶寬,S/N為信噪比。
信道復(fù)用
我們知道,當(dāng)沒(méi)有數(shù)據(jù)進(jìn)行傳輸?shù)臅r(shí)候,信道是十分空閑的。但是在網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求量大的時(shí)候,比如說(shuō)最近的618,信息的傳播速度就會(huì)受阻。那什么是信道的復(fù)用,復(fù)用就是重復(fù)使用的意思。信道的復(fù)用可以分為以下幾個(gè)方面:
-
「時(shí)分復(fù)用」:所謂的時(shí)分復(fù)用,就是把做整個(gè)信道分為不同的時(shí)間。當(dāng)采用時(shí)分復(fù)用時(shí),所有用戶在不同的時(shí)間占用同樣的頻帶寬度(分時(shí)不分頻)。時(shí)分復(fù)用可能會(huì)造成線路資源的浪費(fèi)
-
「頻分復(fù)用」:頻分復(fù)用就是把信號(hào)分成不同的頻率,當(dāng)采用頻分復(fù)用技術(shù)時(shí),所有用戶在同樣的時(shí)間占用不同的帶寬資源。當(dāng)采用頻分復(fù)用技術(shù)時(shí),所有用戶在同樣的時(shí)間占用不同的帶寬資源。
-
「統(tǒng)計(jì)時(shí)分復(fù)用」:所謂的統(tǒng)計(jì)時(shí)分復(fù)用系統(tǒng),我們也可以稱為異步的時(shí)分復(fù)用系統(tǒng)。它有一個(gè)類似緩沖的機(jī)制,當(dāng)數(shù)據(jù)到達(dá)一定量的時(shí)候,才會(huì)轉(zhuǎn)發(fā),這大大提高了信道的利用率。
數(shù)據(jù)鏈路層
以太網(wǎng)幀
數(shù)據(jù)鏈路層接收來(lái)自網(wǎng)絡(luò)層的IP數(shù)據(jù)報(bào),通過(guò)一定的封裝,讓IP數(shù)據(jù)報(bào)能在數(shù)據(jù)鏈路層上傳輸。像這樣,裝好了的IP數(shù)據(jù)報(bào),我們稱之為以太網(wǎng)幀,也叫MAC幀。MAC幀由以下幾個(gè)重要的部分組成:
-
「目的MAC地址」:MAC幀的目的地址占據(jù)6個(gè)字節(jié),它標(biāo)志了目標(biāo)主機(jī)的地址。
-
「源MAC地址」:和目的地址一樣,源地址也占據(jù)6個(gè)字節(jié),它標(biāo)志的源主機(jī)的地址。
-
「類型」:類型占據(jù)2個(gè)字節(jié),它記錄上層使用的協(xié)議0X0800表示IP協(xié)議。
-
「數(shù)據(jù)部分」:數(shù)據(jù)部分自然是來(lái)自上層的IP數(shù)據(jù)報(bào)。
-
「FCS」:FCS占據(jù)4個(gè)字節(jié),它是用來(lái)進(jìn)行差錯(cuò)檢測(cè)的,如果一個(gè)MAC幀發(fā)生了錯(cuò)誤,則不能發(fā)送到目的主機(jī)上。
差錯(cuò)檢測(cè)
為什么要進(jìn)行差錯(cuò)檢測(cè)?
現(xiàn)實(shí)的通信鏈路都不會(huì)是理想的。這就是說(shuō),比特在傳輸?shù)倪^(guò)程中可能會(huì)產(chǎn)生差錯(cuò):1可能會(huì)變成0,0可能會(huì)變成1,這就叫做比特差錯(cuò)。在一段是時(shí)間內(nèi),傳輸錯(cuò)誤的比特占所傳輸比特總數(shù)的比率成為誤碼率BER(Bit
Error
Rate)。誤碼率與信噪比有很大的關(guān)系,在實(shí)際通信中不可能使誤碼率下降到零。因此,為了保證數(shù)據(jù)傳輸?shù)目煽啃裕谟?jì)算機(jī)網(wǎng)絡(luò)傳輸數(shù)據(jù)時(shí),必須采用各種差錯(cuò)檢測(cè)措施。
MAC幀在傳播的過(guò)程中會(huì)產(chǎn)生差錯(cuò),差錯(cuò)的產(chǎn)生是不可避免的。前面在以太網(wǎng)幀部分我們提到過(guò)差錯(cuò)檢測(cè)序列FCS,根據(jù)FCS我們就可以知道這個(gè)MAC幀在傳輸?shù)倪^(guò)程中是否出現(xiàn)了錯(cuò)誤或者丟失。
后面講到傳輸層的時(shí)候我們也會(huì)提到差錯(cuò)檢測(cè),那么這兩者到底有啥區(qū)別了?總結(jié)起來(lái),可以用一句話概括:
-
數(shù)據(jù)鏈路層的差錯(cuò)檢測(cè)的目的是做到"無(wú)比特差錯(cuò)"。
-
傳輸層的差錯(cuò)檢測(cè)的目的是做到"無(wú)傳輸差錯(cuò)"。即彌補(bǔ)幀丟失、幀重復(fù)、幀失序。
差錯(cuò)檢測(cè)的方法主要有兩種:奇偶校驗(yàn)法(PCC)和循環(huán)冗余校驗(yàn)CRC,PCC非常簡(jiǎn)單,不是這篇文章的重點(diǎn),下面主要講一下CRC循環(huán)冗余校驗(yàn)。
循環(huán)冗余校驗(yàn)是一種根據(jù)傳輸或保存的數(shù)據(jù)而產(chǎn)生固定位數(shù)校驗(yàn)碼的方法,主要用來(lái)檢測(cè)或校驗(yàn)數(shù)據(jù)傳輸或者保存后可能出現(xiàn)的錯(cuò)誤。生成的數(shù)字在傳輸或者儲(chǔ)存之前計(jì)算出來(lái)并且附加到數(shù)據(jù)后面,然后接收端進(jìn)行檢驗(yàn)確定數(shù)據(jù)是否發(fā)生變化。
通過(guò)CRC,我們可以計(jì)算出FCS冗余校驗(yàn)碼,F(xiàn)CS位于MAC幀的尾部。通過(guò)FCS,我們就可以知道這個(gè)MAC幀是否發(fā)送了錯(cuò)誤。
適配器
說(shuō)到適配器,其實(shí)完全可聯(lián)想一下生活中的適配器。比如我們給手機(jī)充電的時(shí)候需要有電源適配器,電源適配器無(wú)非就是轉(zhuǎn)換的作用,或者作為一個(gè)載體,實(shí)現(xiàn)能量的轉(zhuǎn)移。實(shí)際上,電腦里的適配器也是一樣。結(jié)合下面這張圖來(lái)理解:
我們都知道,數(shù)據(jù)在外部媒介中的傳輸方式是串行傳輸,然而計(jì)算機(jī)處理內(nèi)部指令的時(shí)候,用的是并行的方式。怎樣把串行傳輸?shù)臄?shù)據(jù)轉(zhuǎn)換成并行傳輸呢?這就需要適配器了。適配器就像是起到了橋梁的作用,通過(guò)它,就可以輕松實(shí)現(xiàn)數(shù)據(jù)傳輸方式的轉(zhuǎn)換。
CAM表
我們都知道交換機(jī),交換機(jī)是一種多端口的網(wǎng)橋,在數(shù)據(jù)鏈路層使用MAC地址轉(zhuǎn)發(fā)數(shù)據(jù)。在交換機(jī)類不實(shí)際存儲(chǔ)以一張表,叫做CAM表。這張表記錄了主機(jī)的MAC地址以及對(duì)應(yīng)的接口,看看下面的這張圖:
有三臺(tái)主機(jī)A,B,C和交換機(jī)連接在一起,最開(kāi)始,CAM里沒(méi)有存儲(chǔ)任何信息。
突然有一天,主機(jī)A(源MAC)想要給主機(jī)B(目的MAC)發(fā)送消息。這個(gè)時(shí)候,交換機(jī)就會(huì)檢查自己的CAM表里是否存儲(chǔ)了主機(jī)A的信息,交換機(jī)一看沒(méi)有A的信息,就把A的信息寫(xiě)進(jìn)自己的CAM表里。現(xiàn)在,交換機(jī)的CAM表變成了這樣:
這個(gè)時(shí)候,交換機(jī)的CAM表里已經(jīng)存儲(chǔ)了主機(jī)A的信息,但是主機(jī)A卻想要給主機(jī)B發(fā)送信息。這可怎么辦呢?「首先」,交換機(jī)會(huì)檢查自己的CAM表里是否存在B的信息,「如果存在」,就直接把信息轉(zhuǎn)發(fā)給B。「如果不存在」,那又怎么辦呢?猶豫了一下,交換機(jī)又有了一個(gè)想法,它把主機(jī)A發(fā)給主機(jī)B的消息以廣播的形式發(fā)給了所有連在它身上的主機(jī)。主機(jī)C也收到了這條消息,但是主機(jī)C檢查了一下目的地址,不是發(fā)給自己的,就果斷丟棄了這條消息。主機(jī)B收到了這條消息后,同樣也檢查了收件人(目的地址),發(fā)現(xiàn)是給自己的消息,于是就收下了這條消息。之后,交換機(jī)就更新了自己的CAM表,上面增加了一條信息:
就這樣,CAM表里存儲(chǔ)了主機(jī)A,和主機(jī)B的信息。下一次,主機(jī)A想要給主機(jī)B發(fā)送信息的時(shí)候,交換機(jī)就不需要廣播了。
CSMA/CD協(xié)議
到目前為止CSMA/CD的使用已經(jīng)相當(dāng)少了,它的使用在下面兩個(gè)地方:
-
-
應(yīng)用在10M/100M的半雙工有線網(wǎng)絡(luò)中
「使用CSMA/CD協(xié)議的的網(wǎng)絡(luò)有以下三個(gè)特點(diǎn):」
-
「該網(wǎng)絡(luò)是總線結(jié)構(gòu)」,所有的計(jì)算機(jī)接在同一總線上,同一時(shí)間內(nèi),只允許一臺(tái)計(jì)算機(jī)發(fā)送(或接收)消息,也就是采用半雙工通信。
-
「載波監(jiān)聽(tīng)」:在發(fā)送前、發(fā)送中都要不停地對(duì)信道進(jìn)行監(jiān)聽(tīng),只有在信道是空閑的時(shí)候才能發(fā)送消息。
-
「碰撞檢測(cè)」:主機(jī)會(huì)在發(fā)送消息前,發(fā)信息的過(guò)程中不斷對(duì)進(jìn)行信道檢測(cè),如果有兩臺(tái)主機(jī)同時(shí)發(fā)送消息,則消息傳輸立即停止。隨機(jī)等待一段時(shí)間再進(jìn)行發(fā)送消息,這就是退避算法。
「補(bǔ)充一下退避算法的特點(diǎn):」
-
「非堅(jiān)持的CSMA」:線路忙,則等待一段時(shí)間,再監(jiān)聽(tīng);不忙時(shí),立即發(fā)送;減少?zèng)_突,信道利用率降低
-
「1堅(jiān)持的CSMA」:線路忙,繼續(xù)偵聽(tīng);不忙時(shí),立即發(fā)送;信道利用率提高,沖突增大。
-
「P堅(jiān)持的CSMA」:線路忙,繼續(xù)偵聽(tīng);不忙時(shí),根據(jù)p概率進(jìn)行發(fā)送,另外的1-p概率為繼續(xù)偵聽(tīng)(p是一個(gè)指定概率值)。
網(wǎng)絡(luò)層
IP協(xié)議
IP的概述
IP協(xié)議對(duì)應(yīng)的是IP地址,那么什么是IP地址呢?
維基百科上是這樣解釋的:
?
IP地址(英語(yǔ):IP
Address, 全稱:Internet Protocol
Address),又譯為網(wǎng)際協(xié)議地址、互聯(lián)網(wǎng)協(xié)議地址。當(dāng)設(shè)備連接網(wǎng)絡(luò),設(shè)備將被分配一個(gè)IP地址,用作標(biāo)識(shí)。通過(guò)IP地址,設(shè)備間可以互相通訊,如果沒(méi)有IP地址,我們將無(wú)法知道哪個(gè)設(shè)備是發(fā)送方,無(wú)法知道哪個(gè)是接收方。[2]
IP地址有兩個(gè)主要功能:標(biāo)識(shí)設(shè)備或網(wǎng)絡(luò) 和 尋址(英語(yǔ):location addressing)。
?
上面的一堆文字其實(shí)無(wú)非解釋了兩個(gè)點(diǎn),總結(jié)如下:
-
IP地址是用來(lái)標(biāo)記主機(jī)的地址,沒(méi)有IP地址就無(wú)法識(shí)別主機(jī)。(標(biāo)志主機(jī))
-
因?yàn)槲ㄒ粯?biāo)記主機(jī),所以可以用來(lái)在網(wǎng)絡(luò)中查找主機(jī)。(尋址)
現(xiàn)在想一下前面我們說(shuō)到的MAC地址,MAC地址是一臺(tái)主機(jī)的身份象征。一臺(tái)主機(jī)從出廠以后,MAC地址就唯一確定了,無(wú)法更改(當(dāng)然也可以通過(guò)軟件修改,但是必須得確保同一局域網(wǎng)下不能有兩臺(tái)MAC地址相同的主機(jī))。
「那么,為什么有了MAC地址,還需要IP地址?或者說(shuō)是有了IP地址,還需要MAC地址?」
這其實(shí)也算是一個(gè)經(jīng)典的問(wèn)題了,網(wǎng)上也有不少答案,這里推薦兩篇文章:
看完上面兩篇文章,我總結(jié)如下:
-
「歷史原因:」
以太網(wǎng)誕生于因特網(wǎng)之前,在IP地址之前MAC地址就已經(jīng)在使用了。兩者結(jié)合使用,是為了不影響已存在的協(xié)議
-
「分層實(shí)現(xiàn):」
對(duì)網(wǎng)路協(xié)議進(jìn)行分層以后,數(shù)據(jù)鏈路層的實(shí)現(xiàn)不需要考慮數(shù)據(jù)之間的轉(zhuǎn)發(fā),網(wǎng)絡(luò)層的實(shí)現(xiàn)不需要考數(shù)據(jù)鏈路層的影響。
-
「分工合作:」
IP地址是會(huì)隨著主機(jī)接入網(wǎng)絡(luò)的不同而發(fā)生改變的,而MAC一般不會(huì)改變。這樣的話,我們可以使用IP地址進(jìn)行尋址,當(dāng)數(shù)據(jù)報(bào)和目的主機(jī)處于同一網(wǎng)絡(luò)時(shí),就使用MAC地址進(jìn)行數(shù)據(jù)交付。
IP數(shù)據(jù)報(bào)
IP數(shù)據(jù)的樣子是這樣的:
有幾個(gè)重要的東西必須得進(jìn)行說(shuō)明一下:
-
「版本號(hào)」:占用4位二進(jìn)制數(shù),表示該IP數(shù)據(jù)報(bào)使用的IP協(xié)議版本。目前Internet中使用的主要是TCP/IP協(xié)議族中版本號(hào)為4的IP協(xié)議。
-
「頭長(zhǎng)度」:占用4位二進(jìn)制位,此域指出整個(gè)報(bào)頭的長(zhǎng)度(包括選項(xiàng)),該長(zhǎng)度是以32位二進(jìn)制數(shù)為一個(gè)計(jì)數(shù)單位的,接收端通過(guò)此域可以計(jì)算出報(bào)頭在何處結(jié)束及從何處開(kāi)始讀數(shù)據(jù)。普通IP數(shù)據(jù)報(bào)(沒(méi)有任何選項(xiàng))該字段的值是5(即20個(gè)字節(jié)的長(zhǎng)度)。
-
「服務(wù)類型」:服務(wù)類型(TOS、type of service):占用8位二進(jìn)制位,用于規(guī)定本數(shù)據(jù)報(bào)的處理方式。
-
「生存時(shí)間(TTL,Time To Live)」:占用8位二進(jìn)制位,它指定了數(shù)據(jù)報(bào)可以在網(wǎng)絡(luò)中傳輸?shù)淖铋L(zhǎng)時(shí)間。實(shí)際應(yīng)用中把生存時(shí)間字段設(shè)置成了數(shù)據(jù)報(bào)可以經(jīng)過(guò)的最大路由器數(shù)。TTL的初始值由源主機(jī)設(shè)置(通常為32、64、128或256),一旦經(jīng)過(guò)一個(gè)處理它的路由器,它的值就減1。當(dāng)該字段為0時(shí),數(shù)據(jù)報(bào)就丟棄,并發(fā)送ICMP報(bào)文通知源主機(jī),因此可以防止進(jìn)入一個(gè)循環(huán)回路時(shí),數(shù)據(jù)報(bào)無(wú)休止地傳輸下去。
-
「上層協(xié)議標(biāo)識(shí)」:占用8位二進(jìn)制位,IP協(xié)議可以承載各種上層協(xié)議,目標(biāo)端根據(jù)協(xié)議標(biāo)識(shí)就可以把收到的IP數(shù)據(jù)報(bào)送到TCP或UDP等處理此報(bào)文的上層協(xié)議了。
關(guān)于IP數(shù)據(jù)報(bào)相對(duì)詳細(xì)的文章可以看看這篇文章:IP數(shù)據(jù)報(bào)格式詳解
子網(wǎng)掩碼與IP地址
前面說(shuō)到IP地址的組成的時(shí)候,說(shuō)到過(guò)網(wǎng)絡(luò)號(hào)。常見(jiàn)的IP地址無(wú)非就是由網(wǎng)絡(luò)地址和主機(jī)地址組成。那么什么是網(wǎng)絡(luò)號(hào)?網(wǎng)絡(luò)號(hào)就是計(jì)算機(jī)當(dāng)前所在網(wǎng)絡(luò)的名字,在這個(gè)網(wǎng)絡(luò)下,又由許多的主機(jī)構(gòu)成。那又該怎么計(jì)算網(wǎng)絡(luò)號(hào)了?這時(shí)候,子網(wǎng)掩碼派上了用場(chǎng)。
通常,計(jì)算機(jī)的IP地址和子網(wǎng)掩碼是成對(duì)出現(xiàn)的,通過(guò)子網(wǎng)掩碼和IP地址進(jìn)行對(duì)照就可以知道主機(jī)號(hào)和網(wǎng)絡(luò)號(hào)。為了方便表示,子網(wǎng)掩碼前面通常是連續(xù)的1,后面部分是連續(xù)的0,不能出現(xiàn)0和1交替的情況。
請(qǐng)看下面的例子。
現(xiàn)在已經(jīng)知道了主機(jī)A的IP地址和子網(wǎng)掩碼,把它們轉(zhuǎn)化成二進(jìn)制的形式。通過(guò)二進(jìn)制對(duì)應(yīng)子網(wǎng)掩碼的1的部分對(duì)應(yīng)IP地址的網(wǎng)絡(luò)號(hào),子網(wǎng)掩碼為0的部分對(duì)應(yīng)主機(jī)號(hào)。下面的這張圖畫(huà)的很清楚:
ICMP協(xié)議
我們知道,IP協(xié)議是不可靠的傳輸協(xié)議,網(wǎng)絡(luò)中進(jìn)行可靠傳輸?shù)氖荰CP協(xié)議,這個(gè)后面在講傳輸層的時(shí)候會(huì)說(shuō)到。那么,如果在消息沒(méi)有送達(dá)的情況下,網(wǎng)絡(luò)層是怎么解決的了?這個(gè)時(shí)候,就需要用到ICMP協(xié)議。什么是ICMP協(xié)議了?ICMP是網(wǎng)絡(luò)控制報(bào)文協(xié)議(Internet
Control Message Protocol, ICMP)。
它的作用:更加有效地轉(zhuǎn)發(fā)IP數(shù)據(jù)報(bào)作為IP數(shù)據(jù)報(bào)的數(shù)據(jù)部分,可以分為ICMP差錯(cuò)報(bào)文,和ICMP查詢報(bào)文。差錯(cuò)報(bào)文是用來(lái)簡(jiǎn)單的報(bào)告錯(cuò)誤的,
至于對(duì)于錯(cuò)誤怎么處理是高層協(xié)議的職責(zé)。同時(shí),
差錯(cuò)報(bào)文總是發(fā)送給最初的數(shù)據(jù)源(這是因?yàn)樵贗CMP數(shù)據(jù)報(bào)中唯一可以使用的就是源IP和目的IP),查詢報(bào)文總是成對(duì)出現(xiàn)。
ARP協(xié)議
前面說(shuō)到IP地址用來(lái)尋址,當(dāng)目的地址和數(shù)據(jù)報(bào)處于同一網(wǎng)絡(luò)時(shí),MAC地址用來(lái)交付數(shù)據(jù)報(bào)。現(xiàn)在有一個(gè)問(wèn)題,主機(jī)A要給主機(jī)B發(fā)送消息,消息經(jīng)過(guò)一系列地轉(zhuǎn)發(fā),終于找到了主機(jī)B的IP地址。但是,我們都知道,數(shù)據(jù)在鏈路層的傳輸是需要MAC地址的,僅僅知道B的IP地址是無(wú)法進(jìn)行通信的。請(qǐng)看下面這張圖:
這個(gè)時(shí)候,ARP協(xié)議就派上用場(chǎng)了。ARP全稱是地址解析協(xié)議(Address Resolution Protocol),其基本功能為透過(guò)目標(biāo)設(shè)備的IP地址,查詢目標(biāo)設(shè)備的MAC地址,以保證通信的順利進(jìn)行,它是IPv4中網(wǎng)絡(luò)層必不可少的協(xié)議。
「如同交換機(jī)工作在數(shù)據(jù)鏈路層一樣,路由器是工作在網(wǎng)絡(luò)層的。交換機(jī)有CAM表,路由器也有路由表。」
現(xiàn)在路由器要給主機(jī)B發(fā)送一條消息,必須得知道主機(jī)B的MAC地址才能進(jìn)行通信。這個(gè)時(shí)候路由器會(huì)發(fā)送一個(gè)ARP請(qǐng)求,該請(qǐng)求是以廣播的形式發(fā)送的,每一臺(tái)連接到該路由器的主機(jī)都收到得到這條消息。但是只有主機(jī)B檢查到自己的IP地址符合要求。于是主機(jī)B發(fā)送給路由器一條ARP響應(yīng),把自己的MAC的地址告訴了路由器。就像下面圖示的那樣:
每次路由器發(fā)送一個(gè)ARP請(qǐng)求的時(shí)候,就會(huì)增加一條數(shù)據(jù),這一條數(shù)據(jù)記錄了IP地址對(duì)應(yīng)的MAC地址,這樣路由器下次再給該主機(jī)發(fā)送消息的時(shí)候就不用廣播了。當(dāng)然如同交換機(jī)的CAM表中的數(shù)據(jù)有生存了時(shí)間一樣,路由表中的數(shù)據(jù)也有生存時(shí)間。試想一下,如果數(shù)據(jù)一直存在,那么路由器豈不是需要花大量的存儲(chǔ)空間來(lái)緩存已經(jīng)失效的數(shù)據(jù)。
內(nèi)部網(wǎng)關(guān)協(xié)議
互聯(lián)網(wǎng)的路由選擇協(xié)議主要有兩種,分別是RIP和OSPF。下面具體介紹這兩種協(xié)議。
「先介紹RIP協(xié)議」:
-
路由信息協(xié)議(RIP) 是內(nèi)部網(wǎng)關(guān)協(xié)議IGP中最先得到廣泛使用的協(xié)議。RIP是一種分布式的基于距離矢量的路由選擇協(xié)議,是因特網(wǎng)的標(biāo)準(zhǔn)協(xié)議,其最大優(yōu)點(diǎn)就是實(shí)現(xiàn)簡(jiǎn)單,開(kāi)銷較小。
-
基本算法:矢量距離算法(簡(jiǎn)稱V-D算法)的思想是:網(wǎng)關(guān)周期性地向外廣播路徑刷新報(bào)文,主要內(nèi)容是由若干(V,D)序偶組成的序偶表;(V,D)序偶中的V代表“向量”,標(biāo)識(shí)網(wǎng)關(guān)可到達(dá)的信宿(網(wǎng)關(guān)或主機(jī)),D代表距離,指出該網(wǎng)關(guān)去往信宿V的距離;距離D按驛站的個(gè)數(shù)計(jì)。其他網(wǎng)關(guān)收到某網(wǎng)關(guān)的(V,D)報(bào)文后,據(jù)此按照最短路徑原則對(duì)各自的路由表進(jìn)行刷新。
-
它只適用于小型的網(wǎng)絡(luò)(15跳就達(dá)到極限),如果網(wǎng)絡(luò)過(guò)于龐大,當(dāng)網(wǎng)絡(luò)出現(xiàn)故障時(shí),要經(jīng)過(guò)比較長(zhǎng)的時(shí)間才能將此信息傳送到所有的路由器。
「接下來(lái)說(shuō)說(shuō)什么是OSPF:」
-
基本定義:OSPF(Open Shortest Path First開(kāi)放式最短路徑優(yōu)先)是一個(gè)內(nèi)部網(wǎng)關(guān)協(xié)議(Interior Gateway Protocol,簡(jiǎn)稱IGP),用于在單一自治系統(tǒng)(autonomous system,AS)內(nèi)決策路由。
-
基本算法:迪克斯加算法。主要是通過(guò)向鄰居發(fā)送HELLO包來(lái)建立鄰居關(guān)系,選取DR等。
參考文章:計(jì)算機(jī)網(wǎng)絡(luò)原理之RIP以及OSPF對(duì)比
NAT協(xié)議
NAT技術(shù)其非常簡(jiǎn)單,那么NAT它的作用是什么呢?
NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)是1994年提出的。當(dāng)在專用網(wǎng)內(nèi)部的一些主機(jī)本來(lái)已經(jīng)分配到了本地IP地址(即僅在本專用網(wǎng)內(nèi)使用的專用地址),但現(xiàn)在又想和因特網(wǎng)上的主機(jī)通信(并不需要加密)時(shí),可使用NAT方法。
這種方法需要在專用網(wǎng)連接到因特網(wǎng)的路由器上安裝NAT軟件。裝有NAT軟件的路由器叫做「NAT路由器」,「它至少有一個(gè)有效的外部全球IP地址」。這樣,所有使用本地地址的主機(jī)在和外界通信時(shí),都要在NAT路由器上將其本地地址轉(zhuǎn)換成全球IP地址,才能和因特網(wǎng)連接。另外,這種通過(guò)使用少量的公有IP 地址代表較多的私有IP 地址的方式,「將有助于減緩可用的IP地址空間的枯竭」。
「簡(jiǎn)單來(lái)說(shuō),NAT技術(shù)就是實(shí)現(xiàn)局域網(wǎng)與互聯(lián)網(wǎng)通信的一項(xiàng)協(xié)議。」 NAT又可以分為三種不同的類型:
-
「靜態(tài)NAT(Static NAT):」
靜態(tài)NAT設(shè)置起來(lái)最為簡(jiǎn)單和最容易實(shí)現(xiàn)的一種,內(nèi)部網(wǎng)絡(luò)中的每個(gè)主機(jī)都被永久映射成外部網(wǎng)絡(luò)中的某個(gè)合法的地址。當(dāng)一個(gè)內(nèi)部主機(jī)必須被作為一個(gè)固定的外部地址訪問(wèn)時(shí),通過(guò)靜態(tài)NAT實(shí)現(xiàn)。
-
「動(dòng)態(tài)地址NAT(Pooled NAT):」
動(dòng)態(tài)NAT則是在外部網(wǎng)絡(luò)中定
義了一系列的合法地址(地址池),采用動(dòng)態(tài)分配的方法映射到內(nèi)部網(wǎng)絡(luò)。動(dòng)態(tài)NAT轉(zhuǎn)換的工作過(guò)程是這樣的,當(dāng)有一個(gè)內(nèi)部主機(jī)需要訪問(wèn)外網(wǎng)時(shí),從公用IP地址池中取出一個(gè)可用的地址分配給該主機(jī)使用。當(dāng)通信完成后,所獲取的公用IP地址也被釋放回地址池中。外部公用IP在被分配給一個(gè)內(nèi)部主機(jī)通信使用時(shí),該地址不能不能再次被分配給其他內(nèi)部主機(jī)使用。
-
「網(wǎng)絡(luò)地址端口轉(zhuǎn)換NAPT(Port-Level NAT):」
NAPT是把內(nèi)部地址映射到外部網(wǎng)絡(luò)的一個(gè)IP地址的不同端口上。NAPT(Network
Address Port
Translation),即網(wǎng)絡(luò)端口地址轉(zhuǎn)換,可將多個(gè)內(nèi)部地址映射為一個(gè)合法公網(wǎng)地址,但以不同的協(xié)議端口號(hào)與不同的內(nèi)部地址相對(duì)應(yīng),也就是<內(nèi)部地址+內(nèi)部端口>與<外部地址+外部端口>之間的轉(zhuǎn)換。
參考文章【計(jì)算機(jī)網(wǎng)絡(luò)】NAT:網(wǎng)絡(luò)地址轉(zhuǎn)換
IPV6協(xié)議
我們前面說(shuō)的IP地址其實(shí)是IPV4,那么,為什么已經(jīng)有IPIV4了,還要來(lái)一個(gè)IPV4呢?原來(lái)是這樣的,早在上個(gè)世紀(jì),人們就預(yù)料到IPV4地址枯竭的一天,為了解決這個(gè)問(wèn)題,開(kāi)始了IPV6的研發(fā)。
「IPv6 (IP version 6)是為了根本解決IPv4地址耗盡的問(wèn)題而被標(biāo)準(zhǔn)化的網(wǎng)際協(xié)議。」 IPv4的地址長(zhǎng)度為4個(gè)8位字節(jié),即32比特。而IPv6的地址長(zhǎng)度則是原來(lái)的4倍,即128比特,一般寫(xiě)成8個(gè)16位字節(jié)。可以看到,IPV6的地址是取之不盡,用之不竭的,那么現(xiàn)在為什么不把IPV4全部換成IPV6呢?
從IPV4切換到IPV6極其耗時(shí),需要將網(wǎng)絡(luò)中所有主機(jī)和路由器的IP地址進(jìn)行重新設(shè)置。當(dāng)互聯(lián)網(wǎng)廣泛普及后,替換所有IP地址會(huì)是更為艱巨的任務(wù)。
在現(xiàn)存的網(wǎng)絡(luò)中,既有IPV4又有IPV6,那么它們之間是怎么通信的呢?有兩種技術(shù):「雙協(xié)議棧」、「隧道技術(shù)」,下面分別進(jìn)行介紹:
-
「雙協(xié)議棧」:改變IP地址的首部,在首部進(jìn)行轉(zhuǎn)換的過(guò)程中,IPV6的首部的部分信息會(huì)丟失,而且這種轉(zhuǎn)換的損失不可避免。
-
「隧道技術(shù)」:何謂隧道技術(shù)了?其實(shí)完全可以通過(guò)字面的意思理解。下面還是以畫(huà)圖的方式幫助大家理解。隧道技術(shù)說(shuō)白了就是數(shù)據(jù)在傳輸?shù)臅r(shí)候進(jìn)行了另一種的封裝與解封,如圖數(shù)據(jù)由IPV6網(wǎng)絡(luò)進(jìn)入到IPV4的網(wǎng)絡(luò),需要把IPV6的數(shù)據(jù)包封裝在IPV4的數(shù)據(jù)包里。
傳輸層
停止等待協(xié)議
什么是停止等待協(xié)議了?看完下面一張圖你可能就懂了
停止等待協(xié)議可以由以下三個(gè)部分組成:
-
「無(wú)差錯(cuò)情況」:就像上面那個(gè)圖一樣,為了保證無(wú)差錯(cuò)的情況,主機(jī)A還要繼續(xù)向主機(jī)B發(fā)送消息,就必須得到主機(jī)B的回復(fù)。
-
「出現(xiàn)差錯(cuò)」:如果出現(xiàn)差錯(cuò),比如主機(jī)A一直沒(méi)有收到主機(jī)B的回復(fù),那么就會(huì)有一種機(jī)制,使得主機(jī)A把這條消息再一次發(fā)送給主機(jī)B。這中間涉及到一個(gè)
「重傳時(shí)間」的選擇,這里得話,這個(gè)重傳時(shí)間應(yīng)該不小于RTT(主機(jī)A給主機(jī)B發(fā)送消息,主機(jī)B再給主機(jī)A發(fā)送消息的時(shí)間和)。
-
「確認(rèn)丟失和確認(rèn)遲到」:確認(rèn)遲到和確認(rèn)丟失,看看下面的這張圖你可能就明白了
數(shù)據(jù)在傳輸過(guò)程中可能會(huì)出現(xiàn)丟失和遲到的情況,對(duì)于丟失的數(shù)據(jù)進(jìn)行重傳,對(duì)于遲到的數(shù)據(jù)不做處理。既然說(shuō)到了停止等待協(xié)議,那我就不得不補(bǔ)充一下ARQ協(xié)議。是什么ARQ協(xié)議了?
ARQ協(xié)議就是發(fā)送方不必收到對(duì)上一條消息的確認(rèn),一次可以發(fā)出多個(gè)分組,這樣就提高了信道的利用,可以在某一時(shí)間內(nèi)傳送足夠的數(shù)據(jù)量。
UDP
UDP協(xié)議相對(duì)與TCP協(xié)議來(lái)說(shuō)是相當(dāng)簡(jiǎn)單的,傳輸層的重點(diǎn)自然也是TCP協(xié)議。下面先簡(jiǎn)單解釋一下UDP協(xié)議。
「UDP具有以下特點(diǎn):」
-
面向無(wú)連接的協(xié)議,進(jìn)行不可靠的傳輸
-
-
-
UDP數(shù)據(jù)報(bào)首部開(kāi)銷小
-
支持一對(duì)一,一對(duì)多,多對(duì)多,多對(duì)一的數(shù)據(jù)傳輸
TCP
TCP概述
「TCP是傳輸層的另一個(gè)協(xié)議,它具有以下特點(diǎn):」
-
TCP協(xié)議是面向連接的傳輸層協(xié)議
-
-
-
TCP數(shù)據(jù)報(bào)
請(qǐng)看下面的這張圖片(圖片來(lái)源于網(wǎng)絡(luò))。
這里的話對(duì)數(shù)據(jù)報(bào)的某些字段作一下解釋:
-
「源端口」:發(fā)送主機(jī)的端口號(hào)
-
-
「序號(hào)」:在一個(gè)TCP連接中傳送的字節(jié)流中的每一個(gè)字節(jié)都按順序編號(hào)。字節(jié)流的起始序號(hào)必須在連接建立時(shí)設(shè)置。TCP數(shù)據(jù)報(bào)首部中的序號(hào)字段值則指的是本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。
-
「確認(rèn)號(hào)」:即期望收到對(duì)方下一個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)。若確認(rèn)號(hào)為N,則表明:到序號(hào)N-1為止的所有數(shù)據(jù)都已正確收到。
-
「數(shù)據(jù)偏移」:它指出TCP報(bào)文段的數(shù)據(jù)起始處距離TCP報(bào)文段的起始處有多遠(yuǎn)。
-
「窗口」:窗口字段明確指出了現(xiàn)在允許對(duì)方發(fā)送的數(shù)據(jù)量。窗口值經(jīng)常在動(dòng)態(tài)變化著 窗口指的是發(fā)送本報(bào)文段的一方的接收窗口(而不是自己的發(fā)送窗口)。
-
「校驗(yàn)和」:檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分 在計(jì)算檢驗(yàn)和時(shí),要在TCP報(bào)文段的前面加上12字節(jié)的偽首部(同UDP)
-
「確認(rèn)ACK」:僅當(dāng)ACK=1時(shí)確認(rèn)號(hào)字段才有效。當(dāng)ACK=0時(shí),確認(rèn)號(hào)無(wú)效。TCP規(guī)定,在連接建立后所有傳送的報(bào)文段都必須把ACK置1。
-
「推送PUSH」:當(dāng)兩個(gè)應(yīng)用進(jìn)程進(jìn)行交互式的通信時(shí),有時(shí)在一端的應(yīng)用進(jìn)程希望在鍵入一個(gè)命令后立即就能夠收到對(duì)方的響應(yīng),而不再等到整個(gè)緩存都填滿了后再向上交付。這時(shí),發(fā)送方TCP把PSH置1,并立即創(chuàng)建一個(gè)報(bào)文段發(fā)送出去。接收方TCP收到PSH=1的報(bào)文段,就盡快地(即“推送”向前)交付接收應(yīng)用進(jìn)程。
-
「復(fù)位RST」
:當(dāng)RST=1時(shí),表明TCP連接中出現(xiàn)嚴(yán)重差錯(cuò)(如由于主機(jī)崩潰或其他原因),必須釋放連接,然后再重新建立運(yùn)輸連接。
-
「SNY」:在連接建立時(shí)用來(lái)同步序號(hào) 當(dāng)SYN=1而ACK=0時(shí),表明這是一個(gè)連接請(qǐng)求報(bào)文段。
-
滑動(dòng)窗口
TCP進(jìn)行數(shù)據(jù)發(fā)送,為了提高數(shù)據(jù)傳輸?shù)男剩捎昧艘环N叫做滑動(dòng)窗口的機(jī)制來(lái)進(jìn)行數(shù)據(jù)發(fā)送。
下面是發(fā)送端滑動(dòng)窗口的示意圖,滑動(dòng)窗口的大小是綠色部分和紅色部分的序列長(zhǎng)度。它工作的機(jī)制是這樣的,一旦發(fā)送端收到一個(gè)確認(rèn),滑動(dòng)窗口就會(huì)向右移動(dòng)。
流量控制
關(guān)于流量控制,用一句簡(jiǎn)短的話就可以概括。
?
接收端會(huì)給發(fā)送端一個(gè)負(fù)反饋,通過(guò)這個(gè)負(fù)反饋可以控制發(fā)送端的滑動(dòng)窗口的大小。
?
下面可以看一下知乎上是怎么說(shuō)的,我找了一條講的最形象,可以結(jié)合著理解一下。
知乎:TCP協(xié)議的滑動(dòng)窗口具體是怎樣控制流量的?
擁塞控制
-
「慢啟動(dòng):」
慢啟動(dòng)值得就是一條TCP鏈接剛建立時(shí)不要一下發(fā)送大量數(shù)據(jù)導(dǎo)致網(wǎng)絡(luò)擁塞激增,而是由小到大根據(jù)反饋逐漸增大擁塞窗口。
-
「擁塞避免:」
擁塞避免就是讓滑動(dòng)窗口緩慢增大,而不是像慢開(kāi)始那樣成倍增長(zhǎng)。
-
「快重傳:」
發(fā)送方只要一連收到三個(gè)重復(fù)確認(rèn)就應(yīng)當(dāng)立即重傳對(duì)方尚未收到的報(bào)文段,而不必繼續(xù)等待設(shè)置的重傳計(jì)時(shí)器到期。
-
「快恢復(fù):」
快恢復(fù)具有下面兩個(gè)特點(diǎn)
-
當(dāng)發(fā)送方連續(xù)收到三個(gè)重復(fù)確認(rèn)時(shí),就執(zhí)行 “乘法減小” 算法,把慢開(kāi)始門限減半。這是為了預(yù)防網(wǎng)絡(luò)發(fā)生擁塞。注意,接下去不執(zhí)行慢開(kāi)始算法。
-
執(zhí)行快恢復(fù)算法時(shí),改變滑動(dòng)窗口的值,然后開(kāi)始執(zhí)行擁塞避免算法,使得擁塞窗口緩慢性增大。
三次握手
三次握手與四次揮手可以說(shuō)是面試常考的知識(shí)點(diǎn)了,不過(guò)在介紹三次握手之前,我覺(jué)得有必要了解一下「理想傳輸條件的共性」:
-
-
不管發(fā)送方以多快的速度發(fā)送數(shù)據(jù),接收方總是能夠及時(shí)接收數(shù)據(jù)。
理想的情況終究是理想的,上述兩種情況在實(shí)際環(huán)境是不可能發(fā)生的。那么,我們就來(lái)說(shuō)說(shuō)怎樣使得我們的實(shí)際情況更加接近理想,這就是我們接下來(lái)要講的三次握手。
首先,三次握手和后面要講的四次揮手都是針對(duì)TCP來(lái)說(shuō)的,UDP是面向無(wú)連接的協(xié)議,不可能存在的三次握手與四次揮手。三次握手與四次揮手是為了更好進(jìn)行可靠的傳輸,下面先看下面三次握手的流程圖。
既然是為了進(jìn)行可靠的傳輸,無(wú)非是要保證客戶端與服務(wù)器之間的數(shù)據(jù)發(fā)送和接收的正常進(jìn)行。
-
「第一次握手」:Client 什么都不能確認(rèn);Server 確認(rèn)了Client發(fā)送正常。
-
「第二次握手」:Client 確認(rèn)了:自己發(fā)送、接收正常,對(duì)方發(fā)送、接收正常;Server 確認(rèn)了:自己接收正常,Client發(fā)送正常。
-
「第三次握手」:Client 確認(rèn)了:自己發(fā)送、接收正常,對(duì)方發(fā)送、接收正常;Server 確認(rèn)了:自己發(fā)送、接收正常,對(duì)方發(fā)送接收正常。
為什么需要進(jìn)行第三次握手了?一句話,主要防止已經(jīng)失效的連接請(qǐng)求報(bào)文突然又傳送到了服務(wù)器,從而產(chǎn)生錯(cuò)誤。
通過(guò)上面的三個(gè)步驟,Client和Server能夠進(jìn)行可靠的傳輸,缺一不可。
四次揮手
既然理解了三次握手,想必四次揮手也沒(méi)有啥難度,先把流程圖附上。
如同三次揮手一樣,四次揮手也是為了可靠的傳輸。四次揮手就是Client和Server斷開(kāi)連接的過(guò)程,那么你可能會(huì)覺(jué)得,建立連接的過(guò)程需要三次到還可以理解,為啥連斷開(kāi)連接都需要四次。難道一次或者兩次就不可以了嗎?
是這樣的,既然三次握手的需要發(fā)送方和接收方確認(rèn),那么四次揮手也要得到發(fā)送方和接收方的確認(rèn)。
-
「第一次揮手」:Client向Server發(fā)送斷開(kāi)的連接的請(qǐng)求。
-
「第二次揮手」:Server向Client發(fā)送斷開(kāi)連接的確認(rèn)。Client收到以后,這個(gè)時(shí)候TCP進(jìn)入了半連接的狀態(tài),從Client向Server發(fā)送數(shù)據(jù)的通道被關(guān)閉了。
-
「第三次揮手」:Server向Client發(fā)送一個(gè)斷開(kāi)連接的請(qǐng)求。
-
「第四次揮手」:Client向Server發(fā)送斷開(kāi)連接的確認(rèn)。Server收到以后,這個(gè)時(shí)候TCP連接就完全斷開(kāi)了。
也可以這樣考慮,上面提到的問(wèn)題。假如在第二次揮手的時(shí)候,Server在給Client發(fā)送ACK的同時(shí),也發(fā)送了FIN的請(qǐng)求。那么如果,Server還在接收從Client傳輸過(guò)來(lái)的數(shù)據(jù),則會(huì)因?yàn)镃lient的下一個(gè)ACK而關(guān)閉接收數(shù)據(jù)的通道,數(shù)據(jù)就會(huì)接收失敗就像下面的這個(gè)圖那樣。
這里推薦一篇文章,幫助大家更好理解TCP連接地建立和斷開(kāi)的過(guò)程:兩張動(dòng)圖-徹底明白TCP的三次握手與四次揮手
TCP與UDP的應(yīng)用場(chǎng)景
至于TCP與UDP的關(guān)系,看完下面的這張圖你可能就懂了(圖片來(lái)源于網(wǎng)絡(luò)):
TCP是可靠的傳輸,UDP是不可靠的傳輸,那為什么我們還需要使用不可靠的UDP進(jìn)行數(shù)據(jù)傳輸呢?
我們知道,UDP 在傳送數(shù)據(jù)之前不需要先建立連接,遠(yuǎn)地主機(jī)在收到 UDP 報(bào)文后,不需要給出任何確認(rèn)。雖然 UDP 不提供可靠交付,但在某些情況下 UDP 確是一種最有效的工作方式(一般用于即時(shí)通信),比如:QQ 語(yǔ)音、 QQ 視頻 、直播等等。
TCP
提供面向連接的服務(wù)。在傳送數(shù)據(jù)之前必須先建立連接,數(shù)據(jù)傳送結(jié)束后要釋放連接。TCP 不提供廣播或多播服務(wù)。由于 TCP
要提供可靠的,面向連接的運(yùn)輸服務(wù)(TCP的可靠體現(xiàn)在TCP在傳遞數(shù)據(jù)之前,會(huì)有三次握手來(lái)建立連接,而且在數(shù)據(jù)傳遞時(shí),有確認(rèn)、窗口、重傳、擁塞控制機(jī)制,在數(shù)據(jù)傳完后,還會(huì)斷開(kāi)連接用來(lái)節(jié)約系統(tǒng)資源),這一難以避免增加了許多開(kāi)銷,如確認(rèn),流量控制,計(jì)時(shí)器以及連接管理等。這不僅使協(xié)議數(shù)據(jù)單元的首部增大很多,還要占用許多處理機(jī)資源。TCP
一般用于文件傳輸、發(fā)送和接收郵件、遠(yuǎn)程登錄等場(chǎng)景。
應(yīng)用層
HTTP協(xié)議
關(guān)于HTTP的定義,可以看一下維基百科上是怎么說(shuō)的:
?
在網(wǎng)頁(yè)瀏覽器的地址欄上顯示HTTP網(wǎng)絡(luò)協(xié)議的插圖
HTTP是一個(gè)客戶端(用戶)和服務(wù)端(網(wǎng)站)之間請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn),通常使用TCP協(xié)議。通過(guò)使用網(wǎng)頁(yè)瀏覽器、網(wǎng)絡(luò)爬蟲(chóng)或者其它的工具,客戶端發(fā)起一個(gè)HTTP請(qǐng)求到服務(wù)器上指定端口(默認(rèn)端口為80)。我們稱這個(gè)客戶端為用戶代理程序(user
agent)。應(yīng)答的服務(wù)器上存儲(chǔ)著一些資源,比如HTML文件和圖像。我們稱這個(gè)應(yīng)答服務(wù)器為源服務(wù)器(origin server)。
?
http協(xié)議現(xiàn)在已經(jīng)廣泛用于萬(wàn)維網(wǎng),關(guān)于http,后面單獨(dú)那個(gè)文章出來(lái)講,不過(guò)現(xiàn)在得先說(shuō)一下https。
其實(shí)http和https是一種協(xié)議,只不過(guò)https經(jīng)過(guò)了SSL(Secure
Socket Layer,安全套接字層)或TLS(Transport Layer
Security,傳輸層安全)的封裝。單從這兩個(gè)協(xié)議就可以知道,https安全的,而http是不安全的。
FTP協(xié)議
FTP(File
Transfer
Protocol)文件傳輸協(xié)議,在TCP/IP協(xié)議族中屬于應(yīng)用層協(xié)議運(yùn)行于TCP協(xié)議之上是一種可靠的傳輸協(xié)議,主要功能用于實(shí)現(xiàn)用戶間文件分發(fā)共享,以及網(wǎng)絡(luò)管理者在進(jìn)行設(shè)備版本升級(jí)、日志下載和配置保存等業(yè)務(wù)操作時(shí),均會(huì)使用到FTP功能。
DNS協(xié)議
前面說(shuō)到IP地址是用來(lái)定位主機(jī)的,但是我們?cè)谏钪惺呛茈y記住這些沒(méi)有規(guī)律的IP地址,我們只知道網(wǎng)站的域名。那現(xiàn)在要怎么辦了?
于是DNS協(xié)議出現(xiàn)了。
DNS是域名解析協(xié)議,假如我們知道了域名,但是不知道服務(wù)器的IP地址,就需要用到DNS協(xié)議。
DHCP協(xié)議
什么是DHCP協(xié)議了?還是看看維基上的定義
?
動(dòng)態(tài)主機(jī)設(shè)置協(xié)議(DHCP)是一種使網(wǎng)絡(luò)管理員能夠集中管理和自動(dòng)分配IP網(wǎng)絡(luò)地址的通信協(xié)議。在IP網(wǎng)絡(luò)中,每個(gè)連接Internet的設(shè)備都需要分配唯一的IP地址。DHCP使網(wǎng)絡(luò)管理員能從中心結(jié)點(diǎn)監(jiān)控和分配IP地址。當(dāng)某臺(tái)計(jì)算機(jī)移到網(wǎng)絡(luò)中的其它位置時(shí),能自動(dòng)收到新的IP地址。
?
維基上已經(jīng)解釋的非常清楚了,DHCP的作用就是動(dòng)態(tài)地給主機(jī)分配IP地址,大大減少了網(wǎng)絡(luò)管理員的工作負(fù)擔(dān)。
/files/mtg/article_image/20210630_092527_972534.png
/files/mtg/article_image/20210630_092527_972534.png/files/mtg/article_image/20210630_092527_972534.png/files/mtg/article_image/20210630_092527_972534.png/files/mtg/article_image/20210630_092527_972534.png