來源:22j.co/cPaX
作者:JonesYang
前言
計算機網(wǎng)絡(luò)是一門基礎(chǔ)課程器联,但是老師所講的東西無非起到一個拋磚引玉的作用。然而對于需要自學(xué)的人來說婿崭,無疑是更難的拨拓。前路漫漫~~
計算機網(wǎng)絡(luò)本來就是比較枯燥的,文章內(nèi)容較多氓栈,建議讀者耐心看完這篇文章渣磷,希望大家看完后都能有所收獲。先把這篇文章的大致結(jié)構(gòu)放上來颤绕。
預(yù)備知識
謝希仁的那本《計算機網(wǎng)絡(luò)》是很多大學(xué)選擇的計網(wǎng)教材幸海,在第一章是一個概論,大致講了計算機網(wǎng)絡(luò)的發(fā)展奥务,也可以說是每個人都必須了解的小常識物独。在這里,我就做一個總結(jié)概括氯葬,把它作為學(xué)習(xí)計網(wǎng)預(yù)備知識挡篓。
互聯(lián)網(wǎng)簡史
- 第一階段: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ǎng)絡(luò)、移動互聯(lián)網(wǎng)與網(wǎng)絡(luò)安全技術(shù)發(fā)展
互聯(lián)網(wǎng)的發(fā)展
「計算機網(wǎng)絡(luò)的發(fā)展主要經(jīng)歷了下面的七個階段楼吃∈蓟ǎ」
-
「批處理」:為了讓更多的人使用計算機,出現(xiàn)了批處理系統(tǒng)孩锡。所謂的批處理酷宵,是指事先把用戶數(shù)程序數(shù)據(jù)裝入卡帶或者磁帶,并由計算機按照一定順序讀取躬窜。
-
「分時系統(tǒng)」:批處理系統(tǒng)之后浇垦,又出現(xiàn)分時系統(tǒng)。它是指多個終端同時與計算機連接荣挨,允許多個用戶同時使用計算機男韧。
「計算機通信技術(shù)」:在分時系統(tǒng)中朴摊,我們看到了終端和計算機的連接,但這并不意味著計算機與計算機之間也已互聯(lián)連接煌抒。隨著計算機的數(shù)量普及仍劈,計算機之間的數(shù)據(jù)交互的便捷性越來越受到重視,最開始兩個主機之間交互數(shù)據(jù)過程相當(dāng)繁瑣寡壮,因此計算機通信技術(shù)(計算機與計算機之間由通信線路連接)應(yīng)運而生贩疙。人們可以很輕松的即時讀取另一臺計算機中的數(shù)據(jù),從而極大地縮短了傳輸數(shù)據(jù)的時間况既。
「計算機網(wǎng)絡(luò)的產(chǎn)生」:20世紀(jì)70年代这溅,人們開始實驗基于分組交換技術(shù)的計算機網(wǎng)絡(luò),并著手研究不同廠商的計算機之間相互通信的技術(shù)棒仍。到了80年代悲靴,一種能夠互聯(lián)多種計算機的網(wǎng)絡(luò)應(yīng)運而生。網(wǎng)絡(luò)通信技術(shù)進入了發(fā)展的高速公路莫其。
「互聯(lián)網(wǎng)的普及」:進入20世紀(jì)90年代癞尚,隨著計算機的價格降低、性能增強乱陡、各類應(yīng)用紛紛冒頭浇揩,計算機普及程度越來越高。面對這一趨勢憨颠,各家廠商不僅要保證生產(chǎn)產(chǎn)品的自身互聯(lián)性胳徽,還著力于讓自己的網(wǎng)絡(luò)技術(shù)不斷與互聯(lián)網(wǎng)技術(shù)(TCP/IP)兼容。
「互聯(lián)網(wǎng)時代」:隨著互聯(lián)網(wǎng)的普及爽彤,現(xiàn)在养盗,人們越來越離不開互聯(lián)網(wǎng)了。生活适篙、學(xué)習(xí)工作也都得依靠網(wǎng)絡(luò)信息往核,萬物互聯(lián)的時代早就已經(jīng)到來了。
「網(wǎng)絡(luò)安全時代」:互聯(lián)網(wǎng)給世界帶來了顛覆性的改變嚷节,給人們?nèi)粘I顜砹藰O大的便利铆铆,互聯(lián)網(wǎng)呈現(xiàn)給現(xiàn)代人一個高度便捷的信息網(wǎng)絡(luò)環(huán)境,在國家面前丹喻,猶如水電煤氣一樣,成為了國家必不可少的重要資源翁都,隨著萬物互聯(lián)碍论,網(wǎng)絡(luò)安全必定是國家安全最重要的一環(huán)。在互聯(lián)網(wǎng)普及的初期柄慰,人們更關(guān)注單純的連接性鳍悠,注重不受任何限制的建立連接税娜。但現(xiàn)在,人們不再滿足與“單純的連接”而是更為追求“安全的連接”藏研。
網(wǎng)絡(luò)的性能指標(biāo)
「比特」:比特(bit)是計算機中數(shù)據(jù)量的單位敬矩,也是信息論中使用的信息量的單位。英文單詞bit來源于binary digit蠢挡,意思是一個“二進制數(shù)字”弧岳。網(wǎng)絡(luò)技術(shù)中的速率指的是連接在計算機網(wǎng)絡(luò)上的主機在數(shù)字信道上傳送數(shù)據(jù)的速率,它也稱為數(shù)據(jù)率(data rate)或比特率(bit rate)业踏。
「帶寬」:在計算機網(wǎng)絡(luò)中禽炬,帶寬用來表示網(wǎng)絡(luò)的通信線路傳送數(shù)據(jù)的能力,因此網(wǎng)絡(luò)帶寬表示單位時間內(nèi)從網(wǎng)絡(luò)中的某一點到另一點所能通過的“最高數(shù)據(jù)率”勤家。這種意義的帶寬的單位是比特/秒腹尖。
「吞吐量」:吞吐量(throughput)表示在單位時間內(nèi)通過某個網(wǎng)絡(luò)(或信道、接口)的數(shù)據(jù)量伐脖,他表示當(dāng)前網(wǎng)絡(luò)傳輸數(shù)據(jù)的能力热幔。
時延:
1、「發(fā)送時延」:指主機或路由器發(fā)送數(shù)據(jù)幀所需要的時間讼庇,也就是從發(fā)送數(shù)據(jù)幀的第一個比特算起绎巨,到該幀的最后一個比特發(fā)送完畢所需要的時間。
2巫俺、「傳播時延」:指電磁波在信道中傳播一定距離需要花費的時間认烁。
「時延帶寬積」:時延帶寬積表示鏈路可容納的比特數(shù),因此介汹,鏈路的時延帶寬積又稱為以比特為單位的鏈路長度却嗡。
「往返時間RTT」:往返時間RTT,表示從發(fā)送方發(fā)送數(shù)據(jù)開始嘹承,到發(fā)送方收到來自接收方的確認(接收方收到數(shù)據(jù)后便立即發(fā)送確認)窗价,總共經(jīng)歷的時間。往返時間一般就會包括分組在網(wǎng)絡(luò)中的各種時延叹卷。
「利用率」:利用率可以分為信道利用率和網(wǎng)絡(luò)利用率兩種撼港。信道利用率指出某信道有百分之幾的時間是被利用的(有數(shù)據(jù)通過)。完全空閑的信道的利用率是零骤竹。網(wǎng)絡(luò)的利用率則是全網(wǎng)絡(luò)的信道利用率的加權(quán)平均值帝牡。信道利用率并非越高越好,這是因為蒙揣,根據(jù)排隊論的理論靶溜,當(dāng)某信道的利用率增大時,該信道引起的時延也會迅速增加。信道或網(wǎng)絡(luò)的利用率過高會產(chǎn)生非常大的時延罩息。
不能不知道的小常識
計算機網(wǎng)絡(luò)的分類
按照「地理覆蓋范圍」來分類的話嗤详,計算機網(wǎng)絡(luò)可以被分為一下三個部分:
- 「局域網(wǎng)」(Local Area NetWork,LAN)瓷炮,常見的辦公室葱色、宿舍或網(wǎng)吧中的網(wǎng)絡(luò)就是局域網(wǎng)幾米到10km以內(nèi)。其特點是:連接范圍窄娘香,用戶少苍狰,配置容易,連接速率高茅主。
- 「城域網(wǎng)」(Metropolitan Area NetWork舞痰,MAN),用于將一個城市诀姚、一個地區(qū)的企業(yè)响牛、機關(guān)或?qū)W校的局域網(wǎng)連接起來,實現(xiàn)區(qū)域內(nèi)的資源共享
- 「廣域網(wǎng)」:廣域網(wǎng)(Wide Area Network赫段,WAN)呀打,也稱為遠程網(wǎng),不同城市間的LAN或者MAN網(wǎng)絡(luò)互連糯笙,因為距離遠贬丛,信息衰減比較嚴(yán)重,所以這種網(wǎng)絡(luò)一般要租用專線给涕,通過特殊協(xié)議進行連接豺憔,構(gòu)成網(wǎng)狀結(jié)構(gòu),廣域網(wǎng)因為所連接的用戶多够庙,所以每個用戶的連接速率一般較低恭应。
計算機網(wǎng)絡(luò)的拓撲結(jié)構(gòu)
-
總線結(jié)構(gòu)
:
優(yōu)點:費用較低,易于擴展耘眨,線路的利用率高昼榛;
-
缺點:可靠性不高,維護困難剔难,傳輸效率低胆屿。
-
環(huán)形結(jié)構(gòu)
:
優(yōu)點:令牌控制,沒有線路競爭偶宫,實時性強非迹,傳輸控制容易;
缺點:維護困難纯趋,可靠性不高
星型結(jié)構(gòu)
優(yōu)點:可靠性高彻秆,方便管理,易于擴展,傳輸效率高.
缺點:線路利用率低唇兑,中心節(jié)點需要很高的可靠性和冗余度。
計算機有哪些結(jié)構(gòu)
有三種不同的計算機網(wǎng)絡(luò)分層模型:
-
「OSI七層模型」
- 「五層結(jié)構(gòu)模型」
- 「TCP/IP分層結(jié)構(gòu)模型」
TCP/IP協(xié)議是當(dāng)前互聯(lián)網(wǎng)所遵循的協(xié)議桦锄,它并不是單純地由TCP或者IP組成扎附,而是由各層的協(xié)議一起組成的,構(gòu)成我們通常說說的TCP/IP協(xié)議棧结耀。但是為了更好的理解留夜,后面文章也是按照五層協(xié)議來寫的。
物理層
這邊先給一個建議图甜,大家在學(xué)習(xí)計算機網(wǎng)絡(luò)的時候不應(yīng)該把每個網(wǎng)絡(luò)協(xié)議單獨拿出來學(xué)習(xí)碍粥,應(yīng)該明白它的產(chǎn)生原因以及在整個計算機網(wǎng)絡(luò)的作用。
數(shù)字信號與模擬信號
它的作用是:屏蔽不同的傳輸媒體和通信手段的差異黑毅。我們都知道嚼摩,自然界的信號無非就是兩種,一種是數(shù)字信號矿瘦,另一種就是模擬信號枕面。那么是什么模擬信號?什么又是數(shù)字信號呢缚去?
說白了潮秘,所謂的模擬信號就是連續(xù)變化的物理量,模擬信號其特點是幅度連續(xù)(連續(xù)的含義是在某一取值范圍內(nèi)可以取無限多個數(shù)值)易结。模擬信號枕荞,其信號波形在時間上也是連續(xù)的,因此它又是連續(xù)信號搞动。我們對連續(xù)信號進行抽樣躏精,就會得到抽樣信號,但抽象信號就是離散的(說著說著就說到了信號系統(tǒng)滋尉,看來補考對我的影響還是有的)玉控。但數(shù)字信號是不同于模擬信號的,他在時間域上是離散的狮惜,它有兩種不同狀態(tài)的物理量高诺,分別用“0”,“1”來表示碾篡。這就好像電燈開關(guān)一樣虱而,也有兩種不同的狀態(tài)。
當(dāng)然开泽,數(shù)字信號與模擬信號是可以相互轉(zhuǎn)換的牡拇,模擬信號通常使用PCM(脈沖編碼調(diào)制)方法量化并轉(zhuǎn)換為數(shù)字信號,PCM方法是使不同范圍的模擬信號對應(yīng)不同的二進制值。通常惠呼,數(shù)字信號通過載波相移得到模擬信號导俘。
物理層的傳輸媒介
我們大家都知道,數(shù)據(jù)在物理層傳輸?shù)拿浇槭遣灰粯拥奶尢#ぷ髟谖锢韺拥氖?strong>「集線器」旅薄。不過,大致可以為一下兩類:
- 「引導(dǎo)型傳輸媒介」:引導(dǎo)型傳輸媒體中又有不同的類別泣崩,比如同軸電纜少梁、光纜、雙絞線矫付,其中雙絞線根據(jù)是否屏蔽又可以繼續(xù)細分凯沪。
- 「非引導(dǎo)型傳輸媒介」:非引導(dǎo)型傳輸媒介指的是無線電波在空間中的傳播,利用不同的頻段可以傳輸不同的信號买优。
信道
說起信道妨马,前面的基礎(chǔ)篇提到過信道的利用率,但至于信道更詳細的介紹而叼,就沒有提到身笤,現(xiàn)在就來仔細看看。按照傳輸媒介可以分為三類:
- 「有線信道」:有線信道以導(dǎo)線為傳輸媒質(zhì)葵陵,信號沿導(dǎo)線進行傳輸液荸,信號的能量集中在導(dǎo)線附近,因此傳輸效率高脱篙,但是部署不夠靈活娇钱。這一類信道使用的傳輸媒質(zhì)包括用電線傳輸電信號的架空明線、電話線绊困、雙絞線文搂、對稱電纜和同軸電纜等等,還有傳輸經(jīng)過調(diào)制的光脈沖信號的光導(dǎo)纖維秤朗。
- 「無線信道」:無線信道主要有以輻射無線電波為傳輸方式的無線電信道和在水下傳播聲波的水聲信道等煤蹭。無線電信號由發(fā)射機的天線輻射到整個自由空間上進行傳播。不同頻段的無線電波有不同的傳播方式取视。
- 「存儲信道」:在某種意義上硝皂,磁帶、光盤作谭、磁盤等數(shù)據(jù)存儲媒質(zhì)也可以被看作是一種通信信道稽物。將數(shù)據(jù)寫入存儲媒質(zhì)的過程即等效于發(fā)射機將信號傳輸?shù)叫诺赖倪^程,將數(shù)據(jù)從存儲媒質(zhì)讀出的過程即等效于接收機從信道接收信號的過程折欠。
信道是傳輸信息的信道贝或,信道容量描述了信道無差錯地傳輸信息的最大能力吼过,可以用來衡量信道的好壞。
關(guān)于信道咪奖,還有一個重要的參數(shù)盗忱,那就是信噪比,信噪比越大赡艰,信道的容量也越大售淡,這里的話給出著名的香農(nóng)公式:
其中,C為信道容量慷垮,B為帶寬,S/N為信噪比揍堕。
信道復(fù)用
我們知道料身,當(dāng)沒有數(shù)據(jù)進行傳輸?shù)臅r候,信道是十分空閑的衩茸。但是在網(wǎng)絡(luò)數(shù)據(jù)請求量大的時候芹血,比如說最近的618,信息的傳播速度就會受阻楞慈。那什么是信道的復(fù)用幔烛,復(fù)用就是重復(fù)使用的意思。信道的復(fù)用可以分為以下幾個方面:
- 「時分復(fù)用」:所謂的時分復(fù)用囊蓝,就是把做整個信道分為不同的時間饿悬。當(dāng)采用時分復(fù)用時,所有用戶在不同的時間占用同樣的頻帶寬度(分時不分頻)聚霜。時分復(fù)用可能會造成線路資源的浪費
- 「頻分復(fù)用」:頻分復(fù)用就是把信號分成不同的頻率狡恬,當(dāng)采用頻分復(fù)用技術(shù)時,所有用戶在同樣的時間占用不同的帶寬資源蝎宇。當(dāng)采用頻分復(fù)用技術(shù)時弟劲,所有用戶在同樣的時間占用不同的帶寬資源。
- 「統(tǒng)計時分復(fù)用」:所謂的統(tǒng)計時分復(fù)用系統(tǒng)姥芥,我們也可以稱為異步的時分復(fù)用系統(tǒng)兔乞。它有一個類似緩沖的機制,當(dāng)數(shù)據(jù)到達一定量的時候凉唐,才會轉(zhuǎn)發(fā)庸追,這大大提高了信道的利用率。
數(shù)據(jù)鏈路層
以太網(wǎng)幀
數(shù)據(jù)鏈路層接收來自網(wǎng)絡(luò)層的IP數(shù)據(jù)報熊榛,通過一定的封裝锚国,讓IP數(shù)據(jù)報能在數(shù)據(jù)鏈路層上傳輸。像這樣玄坦,裝好了的IP數(shù)據(jù)報血筑,我們稱之為以太網(wǎng)幀绘沉,也叫MAC幀。MAC幀由以下幾個重要的部分組成:
- 「目的MAC地址」:MAC幀的目的地址占據(jù)6個字節(jié)豺总,它標(biāo)志了目標(biāo)主機的地址车伞。
- 「源MAC地址」:和目的地址一樣,源地址也占據(jù)6個字節(jié)喻喳,它標(biāo)志的源主機的地址另玖。
- 「類型」:類型占據(jù)2個字節(jié),它記錄上層使用的協(xié)議0X0800表示IP協(xié)議表伦。
- 「數(shù)據(jù)部分」:數(shù)據(jù)部分自然是來自上層的IP數(shù)據(jù)報谦去。
- 「FCS」:FCS占據(jù)4個字節(jié),它是用來進行差錯檢測的蹦哼,如果一個MAC幀發(fā)生了錯誤鳄哭,則不能發(fā)送到目的主機上。
差錯檢測
為什么要進行差錯檢測纲熏?
現(xiàn)實的通信鏈路都不會是理想的妆丘。這就是說,比特在傳輸?shù)倪^程中可能會產(chǎn)生差錯:1可能會變成0局劲,0可能會變成1勺拣,這就叫做比特差錯。在一段是時間內(nèi)鱼填,傳輸錯誤的比特占所傳輸比特總數(shù)的比率成為誤碼率BER(Bit Error Rate)药有。誤碼率與信噪比有很大的關(guān)系,在實際通信中不可能使誤碼率下降到零剔氏。因此塑猖,為了保證數(shù)據(jù)傳輸?shù)目煽啃裕谟嬎銠C網(wǎng)絡(luò)傳輸數(shù)據(jù)時谈跛,必須采用各種差錯檢測措施羊苟。
MAC幀在傳播的過程中會產(chǎn)生差錯,差錯的產(chǎn)生是不可避免的感憾。前面在以太網(wǎng)幀部分我們提到過差錯檢測序列FCS蜡励,根據(jù)FCS我們就可以知道這個MAC幀在傳輸?shù)倪^程中是否出現(xiàn)了錯誤或者丟失。
后面講到傳輸層的時候我們也會提到差錯檢測阻桅,那么這兩者到底有啥區(qū)別了凉倚?總結(jié)起來,可以用一句話概括:
- 數(shù)據(jù)鏈路層的差錯檢測的目的是做到"無比特差錯"嫂沉。
- 傳輸層的差錯檢測的目的是做到"無傳輸差錯"稽寒。即彌補幀丟失、幀重復(fù)趟章、幀失序杏糙。
差錯檢測的方法主要有兩種:奇偶校驗法(PCC)和循環(huán)冗余校驗CRC爽待,PCC非常簡單器仗,不是這篇文章的重點,下面主要講一下CRC循環(huán)冗余校驗疤坝。
循環(huán)冗余校驗是一種根據(jù)傳輸或保存的數(shù)據(jù)而產(chǎn)生固定位數(shù)校驗碼的方法伶贰,主要用來檢測或校驗數(shù)據(jù)傳輸或者保存后可能出現(xiàn)的錯誤涩馆。生成的數(shù)字在傳輸或者儲存之前計算出來并且附加到數(shù)據(jù)后面铡买,然后接收端進行檢驗確定數(shù)據(jù)是否發(fā)生變化叶骨。
通過CRC,我們可以計算出FCS冗余校驗碼绷耍,F(xiàn)CS位于MAC幀的尾部吐限。通過FCS,我們就可以知道這個MAC幀是否發(fā)送了錯誤褂始。
適配器
說到適配器毯盈,其實完全可聯(lián)想一下生活中的適配器。比如我們給手機充電的時候需要有電源適配器病袄,電源適配器無非就是轉(zhuǎn)換的作用,或者作為一個載體赘阀,實現(xiàn)能量的轉(zhuǎn)移益缠。實際上,電腦里的適配器也是一樣基公。結(jié)合下面這張圖來理解:
我們都知道幅慌,數(shù)據(jù)在外部媒介中的傳輸方式是串行傳輸,然而計算機處理內(nèi)部指令的時候轰豆,用的是并行的方式胰伍。怎樣把串行傳輸?shù)臄?shù)據(jù)轉(zhuǎn)換成并行傳輸呢?這就需要適配器了酸休。適配器就像是起到了橋梁的作用骂租,通過它,就可以輕松實現(xiàn)數(shù)據(jù)傳輸方式的轉(zhuǎn)換斑司。
CAM表
我們都知道交換機渗饮,交換機是一種多端口的網(wǎng)橋,在數(shù)據(jù)鏈路層使用MAC地址轉(zhuǎn)發(fā)數(shù)據(jù)宿刮。在交換機類不實際存儲以一張表互站,叫做CAM表。這張表記錄了主機的MAC地址以及對應(yīng)的接口僵缺,看看下面的這張圖:
有三臺主機A胡桃,B,C和交換機連接在一起磕潮,最開始翠胰,CAM里沒有存儲任何信息容贝。
突然有一天,主機A(源MAC)想要給主機B(目的MAC)發(fā)送消息亡容。這個時候嗤疯,交換機就會檢查自己的CAM表里是否存儲了主機A的信息,交換機一看沒有A的信息闺兢,就把A的信息寫進自己的CAM表里∶浚現(xiàn)在,交換機的CAM表變成了這樣:
這個時候屋谭,交換機的CAM表里已經(jīng)存儲了主機A的信息脚囊,但是主機A卻想要給主機B發(fā)送信息。這可怎么辦呢桐磁?「首先」悔耘,交換機會檢查自己的CAM表里是否存在B的信息,「如果存在」我擂,就直接把信息轉(zhuǎn)發(fā)給B衬以。「如果不存在」,那又怎么辦呢校摩?猶豫了一下看峻,交換機又有了一個想法,它把主機A發(fā)給主機B的消息以廣播的形式發(fā)給了所有連在它身上的主機衙吩。主機C也收到了這條消息互妓,但是主機C檢查了一下目的地址,不是發(fā)給自己的坤塞,就果斷丟棄了這條消息冯勉。主機B收到了這條消息后,同樣也檢查了收件人(目的地址)摹芙,發(fā)現(xiàn)是給自己的消息灼狰,于是就收下了這條消息。之后瘫辩,交換機就更新了自己的CAM表伏嗜,上面增加了一條信息:
就這樣,CAM表里存儲了主機A伐厌,和主機B的信息承绸。下一次,主機A想要給主機B發(fā)送信息的時候挣轨,交換機就不需要廣播了军熏。
CSMA/CD協(xié)議
到目前為止CSMA/CD的使用已經(jīng)相當(dāng)少了,它的使用在下面兩個地方:
- 使用的是有線網(wǎng)絡(luò)
- 應(yīng)用在10M/100M的半雙工有線網(wǎng)絡(luò)中
「使用CSMA/CD協(xié)議的的網(wǎng)絡(luò)有以下三個特點:」
- 「該網(wǎng)絡(luò)是總線結(jié)構(gòu)」卷扮,所有的計算機接在同一總線上荡澎,同一時間內(nèi)均践,只允許一臺計算機發(fā)送(或接收)消息,也就是采用半雙工通信摩幔。
- 「載波監(jiān)聽」:在發(fā)送前彤委、發(fā)送中都要不停地對信道進行監(jiān)聽,只有在信道是空閑的時候才能發(fā)送消息或衡。
- 「碰撞檢測」:主機會在發(fā)送消息前焦影,發(fā)信息的過程中不斷對進行信道檢測,如果有兩臺主機同時發(fā)送消息封断,則消息傳輸立即停止斯辰。隨機等待一段時間再進行發(fā)送消息,這就是退避算法坡疼。
「補充一下退避算法的特點:」
- 「非堅持的CSMA」:線路忙彬呻,則等待一段時間,再監(jiān)聽柄瑰;不忙時闸氮,立即發(fā)送;減少沖突教沾,信道利用率降低
- 「1堅持的CSMA」:線路忙湖苞,繼續(xù)偵聽;不忙時详囤,立即發(fā)送;信道利用率提高镐作,沖突增大藏姐。
- 「P堅持的CSMA」:線路忙,繼續(xù)偵聽该贾;不忙時羔杨,根據(jù)p概率進行發(fā)送,另外的1-p概率為繼續(xù)偵聽(p是一個指定概率值)杨蛋。
網(wǎng)絡(luò)層
IP協(xié)議
IP的概述
IP協(xié)議對應(yīng)的是IP地址兜材,那么什么是IP地址呢?
維基百科上是這樣解釋的:
?
IP地址(英語:IP Address, 全稱:Internet Protocol Address)逞力,又譯為網(wǎng)際協(xié)議地址曙寡、互聯(lián)網(wǎng)協(xié)議地址。當(dāng)設(shè)備連接網(wǎng)絡(luò)寇荧,設(shè)備將被分配一個IP地址举庶,用作標(biāo)識。通過IP地址揩抡,設(shè)備間可以互相通訊户侥,如果沒有IP地址镀琉,我們將無法知道哪個設(shè)備是發(fā)送方,無法知道哪個是接收方蕊唐。[2] IP地址有兩個主要功能:標(biāo)識設(shè)備或網(wǎng)絡(luò) 和 尋址(英語:location addressing)屋摔。
?
上面的一堆文字其實無非解釋了兩個點,總結(jié)如下:
- IP地址是用來標(biāo)記主機的地址替梨,沒有IP地址就無法識別主機钓试。(標(biāo)志主機)
- 因為唯一標(biāo)記主機,所以可以用來在網(wǎng)絡(luò)中查找主機耙替。(尋址)
現(xiàn)在想一下前面我們說到的MAC地址亚侠,MAC地址是一臺主機的身份象征。一臺主機從出廠以后俗扇,MAC地址就唯一確定了硝烂,無法更改(當(dāng)然也可以通過軟件修改,但是必須得確保同一局域網(wǎng)下不能有兩臺MAC地址相同的主機)铜幽。
「那么滞谢,為什么有了MAC地址,還需要IP地址除抛?或者說是有了IP地址狮杨,還需要MAC地址?」
這其實也算是一個經(jīng)典的問題了到忽,網(wǎng)上也有不少答案橄教,這里推薦兩篇文章:
- 有了 IP 地址,為什么還要用 MAC 地址喘漏?
- 為什么有MAC地址护蝶,還要有IP地址?翩迈?
看完上面兩篇文章持灰,我總結(jié)如下:
- 「歷史原因:」 以太網(wǎng)誕生于因特網(wǎng)之前,在IP地址之前MAC地址就已經(jīng)在使用了负饲。兩者結(jié)合使用堤魁,是為了不影響已存在的協(xié)議
- 「分層實現(xiàn):」 對網(wǎng)路協(xié)議進行分層以后,數(shù)據(jù)鏈路層的實現(xiàn)不需要考慮數(shù)據(jù)之間的轉(zhuǎn)發(fā)返十,網(wǎng)絡(luò)層的實現(xiàn)不需要考數(shù)據(jù)鏈路層的影響妥泉。
- 「分工合作:」 IP地址是會隨著主機接入網(wǎng)絡(luò)的不同而發(fā)生改變的,而MAC一般不會改變洞坑。這樣的話涛漂,我們可以使用IP地址進行尋址,當(dāng)數(shù)據(jù)報和目的主機處于同一網(wǎng)絡(luò)時,就使用MAC地址進行數(shù)據(jù)交付匈仗。
IP數(shù)據(jù)報
IP數(shù)據(jù)的樣子是這樣的:
有幾個重要的東西必須得進行說明一下:
- 「版本號」:占用4位二進制數(shù)瓢剿,表示該IP數(shù)據(jù)報使用的IP協(xié)議版本。目前Internet中使用的主要是TCP/IP協(xié)議族中版本號為4的IP協(xié)議悠轩。
- 「頭長度」:占用4位二進制位间狂,此域指出整個報頭的長度(包括選項),該長度是以32位二進制數(shù)為一個計數(shù)單位的火架,接收端通過此域可以計算出報頭在何處結(jié)束及從何處開始讀數(shù)據(jù)鉴象。普通IP數(shù)據(jù)報(沒有任何選項)該字段的值是5(即20個字節(jié)的長度)。
- 「服務(wù)類型」:服務(wù)類型(TOS何鸡、type of service):占用8位二進制位纺弊,用于規(guī)定本數(shù)據(jù)報的處理方式。
- 「生存時間(TTL骡男,Time To Live)」:占用8位二進制位淆游,它指定了數(shù)據(jù)報可以在網(wǎng)絡(luò)中傳輸?shù)淖铋L時間。實際應(yīng)用中把生存時間字段設(shè)置成了數(shù)據(jù)報可以經(jīng)過的最大路由器數(shù)隔盛。TTL的初始值由源主機設(shè)置(通常為32犹菱、64、128或256)吮炕,一旦經(jīng)過一個處理它的路由器腊脱,它的值就減1。當(dāng)該字段為0時龙亲,數(shù)據(jù)報就丟棄陕凹,并發(fā)送ICMP報文通知源主機,因此可以防止進入一個循環(huán)回路時鳄炉,數(shù)據(jù)報無休止地傳輸下去捆姜。
- 「上層協(xié)議標(biāo)識」:占用8位二進制位,IP協(xié)議可以承載各種上層協(xié)議迎膜,目標(biāo)端根據(jù)協(xié)議標(biāo)識就可以把收到的IP數(shù)據(jù)報送到TCP或UDP等處理此報文的上層協(xié)議了。
關(guān)于IP數(shù)據(jù)報相對詳細的文章可以看看這篇文章:IP數(shù)據(jù)報格式詳解
子網(wǎng)掩碼與IP地址
前面說到IP地址的組成的時候浆兰,說到過網(wǎng)絡(luò)號磕仅。常見的IP地址無非就是由網(wǎng)絡(luò)地址和主機地址組成。那么什么是網(wǎng)絡(luò)號簸呈?網(wǎng)絡(luò)號就是計算機當(dāng)前所在網(wǎng)絡(luò)的名字榕订,在這個網(wǎng)絡(luò)下,又由許多的主機構(gòu)成蜕便。那又該怎么計算網(wǎng)絡(luò)號了劫恒?這時候,子網(wǎng)掩碼派上了用場。
通常两嘴,計算機的IP地址和子網(wǎng)掩碼是成對出現(xiàn)的丛楚,通過子網(wǎng)掩碼和IP地址進行對照就可以知道主機號和網(wǎng)絡(luò)號。為了方便表示憔辫,子網(wǎng)掩碼前面通常是連續(xù)的1趣些,后面部分是連續(xù)的0,不能出現(xiàn)0和1交替的情況贰您。
請看下面的例子坏平。
現(xiàn)在已經(jīng)知道了主機A的IP地址和子網(wǎng)掩碼,把它們轉(zhuǎn)化成二進制的形式锦亦。通過二進制對應(yīng)子網(wǎng)掩碼的1的部分對應(yīng)IP地址的網(wǎng)絡(luò)號舶替,子網(wǎng)掩碼為0的部分對應(yīng)主機號。下面的這張圖畫的很清楚:
ICMP協(xié)議
我們知道杠园,IP協(xié)議是不可靠的傳輸協(xié)議顾瞪,網(wǎng)絡(luò)中進行可靠傳輸?shù)氖荰CP協(xié)議,這個后面在講傳輸層的時候會說到返劲。那么玲昧,如果在消息沒有送達的情況下,網(wǎng)絡(luò)層是怎么解決的了篮绿?這個時候孵延,就需要用到ICMP協(xié)議。什么是ICMP協(xié)議了亲配?ICMP是網(wǎng)絡(luò)控制報文協(xié)議(Internet Control Message Protocol, ICMP)尘应。
它的作用:更加有效地轉(zhuǎn)發(fā)IP數(shù)據(jù)報作為IP數(shù)據(jù)報的數(shù)據(jù)部分,可以分為ICMP差錯報文吼虎,和ICMP查詢報文犬钢。差錯報文是用來簡單的報告錯誤的, 至于對于錯誤怎么處理是高層協(xié)議的職責(zé)。同時, 差錯報文總是發(fā)送給最初的數(shù)據(jù)源(這是因為在ICMP數(shù)據(jù)報中唯一可以使用的就是源IP和目的IP)思灰,查詢報文總是成對出現(xiàn)玷犹。
ARP協(xié)議
前面說到IP地址用來尋址,當(dāng)目的地址和數(shù)據(jù)報處于同一網(wǎng)絡(luò)時洒疚,MAC地址用來交付數(shù)據(jù)報〈跬牵現(xiàn)在有一個問題,主機A要給主機B發(fā)送消息油湖,消息經(jīng)過一系列地轉(zhuǎn)發(fā)巍扛,終于找到了主機B的IP地址。但是乏德,我們都知道撤奸,數(shù)據(jù)在鏈路層的傳輸是需要MAC地址的吠昭,僅僅知道B的IP地址是無法進行通信的。請看下面這張圖:
這個時候胧瓜,ARP協(xié)議就派上用場了矢棚。ARP全稱是地址解析協(xié)議(Address Resolution Protocol),其基本功能為透過目標(biāo)設(shè)備的IP地址贷痪,查詢目標(biāo)設(shè)備的MAC地址幻妓,以保證通信的順利進行,它是IPv4中網(wǎng)絡(luò)層必不可少的協(xié)議劫拢。
「如同交換機工作在數(shù)據(jù)鏈路層一樣肉津,路由器是工作在網(wǎng)絡(luò)層的。交換機有CAM表舱沧,路由器也有路由表妹沙。」
現(xiàn)在路由器要給主機B發(fā)送一條消息熟吏,必須得知道主機B的MAC地址才能進行通信距糖。這個時候路由器會發(fā)送一個ARP請求,該請求是以廣播的形式發(fā)送的牵寺,每一臺連接到該路由器的主機都收到得到這條消息悍引。但是只有主機B檢查到自己的IP地址符合要求。于是主機B發(fā)送給路由器一條ARP響應(yīng)帽氓,把自己的MAC的地址告訴了路由器趣斤。就像下面圖示的那樣:
每次路由器發(fā)送一個ARP請求的時候,就會增加一條數(shù)據(jù)黎休,這一條數(shù)據(jù)記錄了IP地址對應(yīng)的MAC地址浓领,這樣路由器下次再給該主機發(fā)送消息的時候就不用廣播了。當(dāng)然如同交換機的CAM表中的數(shù)據(jù)有生存了時間一樣势腮,路由表中的數(shù)據(jù)也有生存時間联贩。試想一下,如果數(shù)據(jù)一直存在捎拯,那么路由器豈不是需要花大量的存儲空間來緩存已經(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)點就是實現(xiàn)簡單拓萌,開銷較小岁钓。
- 基本算法:矢量距離算法(簡稱V-D算法)的思想是:網(wǎng)關(guān)周期性地向外廣播路徑刷新報文,主要內(nèi)容是由若干(V,D)序偶組成的序偶表屡限;(V品嚣,D)序偶中的V代表“向量”,標(biāo)識網(wǎng)關(guān)可到達的信宿(網(wǎng)關(guān)或主機)钧大,D代表距離翰撑,指出該網(wǎng)關(guān)去往信宿V的距離;距離D按驛站的個數(shù)計啊央。其他網(wǎng)關(guān)收到某網(wǎng)關(guān)的(V眶诈,D)報文后,據(jù)此按照最短路徑原則對各自的路由表進行刷新瓜饥。
- 它只適用于小型的網(wǎng)絡(luò)(15跳就達到極限)逝撬,如果網(wǎng)絡(luò)過于龐大,當(dāng)網(wǎng)絡(luò)出現(xiàn)故障時乓土,要經(jīng)過比較長的時間才能將此信息傳送到所有的路由器宪潮。
「接下來說說什么是OSPF:」
- 基本定義:OSPF(Open Shortest Path First開放式最短路徑優(yōu)先)是一個內(nèi)部網(wǎng)關(guān)協(xié)議(Interior Gateway Protocol,簡稱IGP)趣苏,用于在單一自治系統(tǒng)(autonomous system,AS)內(nèi)決策路由狡相。
- 基本算法:迪克斯加算法。主要是通過向鄰居發(fā)送HELLO包來建立鄰居關(guān)系食磕,選取DR等尽棕。
參考文章:計算機網(wǎng)絡(luò)原理之RIP以及OSPF對比
NAT協(xié)議
NAT技術(shù)其非常簡單,那么NAT它的作用是什么呢芬为?
NAT(Network Address Translation萄金,網(wǎng)絡(luò)地址轉(zhuǎn)換)是1994年提出的。當(dāng)在專用網(wǎng)內(nèi)部的一些主機本來已經(jīng)分配到了本地IP地址(即僅在本專用網(wǎng)內(nèi)使用的專用地址)媚朦,但現(xiàn)在又想和因特網(wǎng)上的主機通信(并不需要加密)時氧敢,可使用NAT方法。
這種方法需要在專用網(wǎng)連接到因特網(wǎng)的路由器上安裝NAT軟件询张。裝有NAT軟件的路由器叫做「NAT路由器」孙乖,「它至少有一個有效的外部全球IP地址」。這樣份氧,所有使用本地地址的主機在和外界通信時唯袄,都要在NAT路由器上將其本地地址轉(zhuǎn)換成全球IP地址,才能和因特網(wǎng)連接蜗帜。另外恋拷,這種通過使用少量的公有IP 地址代表較多的私有IP 地址的方式,「將有助于減緩可用的IP地址空間的枯竭」厅缺。
「簡單來說蔬顾,NAT技術(shù)就是實現(xiàn)局域網(wǎng)與互聯(lián)網(wǎng)通信的一項協(xié)議宴偿。」 NAT又可以分為三種不同的類型:
- 「靜態(tài)NAT(Static NAT):」 靜態(tài)NAT設(shè)置起來最為簡單和最容易實現(xiàn)的一種诀豁,內(nèi)部網(wǎng)絡(luò)中的每個主機都被永久映射成外部網(wǎng)絡(luò)中的某個合法的地址窄刘。當(dāng)一個內(nèi)部主機必須被作為一個固定的外部地址訪問時,通過靜態(tài)NAT實現(xiàn)舷胜。
- 「動態(tài)地址NAT(Pooled NAT):」 動態(tài)NAT則是在外部網(wǎng)絡(luò)中定 義了一系列的合法地址(地址池)娩践,采用動態(tài)分配的方法映射到內(nèi)部網(wǎng)絡(luò)。動態(tài)NAT轉(zhuǎn)換的工作過程是這樣的烹骨,當(dāng)有一個內(nèi)部主機需要訪問外網(wǎng)時翻伺,從公用IP地址池中取出一個可用的地址分配給該主機使用。當(dāng)通信完成后展氓,所獲取的公用IP地址也被釋放回地址池中穆趴。外部公用IP在被分配給一個內(nèi)部主機通信使用時,該地址不能不能再次被分配給其他內(nèi)部主機使用遇汞。
- 「網(wǎng)絡(luò)地址端口轉(zhuǎn)換NAPT(Port-Level NAT):」 NAPT是把內(nèi)部地址映射到外部網(wǎng)絡(luò)的一個IP地址的不同端口上未妹。NAPT(Network Address Port Translation),即網(wǎng)絡(luò)端口地址轉(zhuǎn)換空入,可將多個內(nèi)部地址映射為一個合法公網(wǎng)地址络它,但以不同的協(xié)議端口號與不同的內(nèi)部地址相對應(yīng),也就是<內(nèi)部地址+內(nèi)部端口>與<外部地址+外部端口>之間的轉(zhuǎn)換歪赢。
參考文章【計算機網(wǎng)絡(luò)】NAT:網(wǎng)絡(luò)地址轉(zhuǎn)換
IPV6協(xié)議
我們前面說的IP地址其實是IPV4化戳,那么,為什么已經(jīng)有IPIV4了埋凯,還要來一個IPV4呢点楼?原來是這樣的,早在上個世紀(jì)白对,人們就預(yù)料到IPV4地址枯竭的一天掠廓,為了解決這個問題,開始了IPV6的研發(fā)甩恼。
「IPv6 (IP version 6)是為了根本解決IPv4地址耗盡的問題而被標(biāo)準(zhǔn)化的網(wǎng)際協(xié)議蟀瞧。」 IPv4的地址長度為4個8位字節(jié),即32比特条摸。而IPv6的地址長度則是原來的4倍,即128比特,一般寫成8個16位字節(jié)悦污。可以看到钉蒲,IPV6的地址是取之不盡切端,用之不竭的,那么現(xiàn)在為什么不把IPV4全部換成IPV6呢顷啼?
從IPV4切換到IPV6極其耗時,需要將網(wǎng)絡(luò)中所有主機和路由器的IP地址進行重新設(shè)置踏枣。當(dāng)互聯(lián)網(wǎng)廣泛普及后,替換所有IP地址會是更為艱巨的任務(wù)小压。
在現(xiàn)存的網(wǎng)絡(luò)中,既有IPV4又有IPV6椰于,那么它們之間是怎么通信的呢?有兩種技術(shù):「雙協(xié)議椧巧Γ」瘾婿、「隧道技術(shù)」,下面分別進行介紹:
- 「雙協(xié)議椏具郑」:改變IP地址的首部偏陪,在首部進行轉(zhuǎn)換的過程中,IPV6的首部的部分信息會丟失煮嫌,而且這種轉(zhuǎn)換的損失不可避免笛谦。
- 「隧道技術(shù)」:何謂隧道技術(shù)了?其實完全可以通過字面的意思理解昌阿。下面還是以畫圖的方式幫助大家理解饥脑。隧道技術(shù)說白了就是數(shù)據(jù)在傳輸?shù)臅r候進行了另一種的封裝與解封,如圖數(shù)據(jù)由IPV6網(wǎng)絡(luò)進入到IPV4的網(wǎng)絡(luò)懦冰,需要把IPV6的數(shù)據(jù)包封裝在IPV4的數(shù)據(jù)包里灶轰。
傳輸層
停止等待協(xié)議
什么是停止等待協(xié)議了?看完下面一張圖你可能就懂了
停止等待協(xié)議可以由以下三個部分組成:
- 「無差錯情況」:就像上面那個圖一樣刷钢,為了保證無差錯的情況笋颤,主機A還要繼續(xù)向主機B發(fā)送消息,就必須得到主機B的回復(fù)内地。
- 「出現(xiàn)差錯」:如果出現(xiàn)差錯伴澄,比如主機A一直沒有收到主機B的回復(fù),那么就會有一種機制阱缓,使得主機A把這條消息再一次發(fā)送給主機B淋硝。這中間涉及到一個「重傳時間」的選擇,這里得話漾肮,這個重傳時間應(yīng)該不小于RTT(主機A給主機B發(fā)送消息竟终,主機B再給主機A發(fā)送消息的時間和)。
- 「確認丟失和確認遲到」:確認遲到和確認丟失祭犯,看看下面的這張圖你可能就明白了
數(shù)據(jù)在傳輸過程中可能會出現(xiàn)丟失和遲到的情況秸妥,對于丟失的數(shù)據(jù)進行重傳,對于遲到的數(shù)據(jù)不做處理沃粗。既然說到了停止等待協(xié)議粥惧,那我就不得不補充一下ARQ協(xié)議。是什么ARQ協(xié)議了最盅?
ARQ協(xié)議就是發(fā)送方不必收到對上一條消息的確認突雪,一次可以發(fā)出多個分組起惕,這樣就提高了信道的利用,可以在某一時間內(nèi)傳送足夠的數(shù)據(jù)量咏删。
UDP
UDP協(xié)議相對與TCP協(xié)議來說是相當(dāng)簡單的惹想,傳輸層的重點自然也是TCP協(xié)議。下面先簡單解釋一下UDP協(xié)議督函。
「UDP具有以下特點:」
- 面向無連接的協(xié)議嘀粱,進行不可靠的傳輸
- 面向數(shù)據(jù)報
- 沒有擁塞控制
- UDP數(shù)據(jù)報首部開銷小
- 支持一對一,一對多辰狡,多對多锋叨,多對一的數(shù)據(jù)傳輸
TCP
TCP概述
「TCP是傳輸層的另一個協(xié)議,它具有以下特點:」
- TCP協(xié)議是面向連接的傳輸層協(xié)議
- 提供可靠交付
- 使用全雙工通信
- 面向字節(jié)流
TCP數(shù)據(jù)報
請看下面的這張圖片(圖片來源于網(wǎng)絡(luò))宛篇。
這里的話對數(shù)據(jù)報的某些字段作一下解釋:
- 「源端口」:發(fā)送主機的端口號
- 「目的端口」:接收主機的端口號
- 「序號」:在一個TCP連接中傳送的字節(jié)流中的每一個字節(jié)都按順序編號娃磺。字節(jié)流的起始序號必須在連接建立時設(shè)置。TCP數(shù)據(jù)報首部中的序號字段值則指的是本報文段所發(fā)送的數(shù)據(jù)的第一個字節(jié)的序號叫倍。
- 「確認號」:即期望收到對方下一個報文段的第一個數(shù)據(jù)字節(jié)的序號偷卧。若確認號為N,則表明:到序號N-1為止的所有數(shù)據(jù)都已正確收到吆倦。
- 「數(shù)據(jù)偏移」:它指出TCP報文段的數(shù)據(jù)起始處距離TCP報文段的起始處有多遠涯冠。
- 「窗口」:窗口字段明確指出了現(xiàn)在允許對方發(fā)送的數(shù)據(jù)量。窗口值經(jīng)常在動態(tài)變化著 窗口指的是發(fā)送本報文段的一方的接收窗口(而不是自己的發(fā)送窗口)逼庞。
- 「校驗和」:檢驗和字段檢驗的范圍包括首部和數(shù)據(jù)這兩部分 在計算檢驗和時蛇更,要在TCP報文段的前面加上12字節(jié)的偽首部(同UDP)
- 「確認ACK」:僅當(dāng)ACK=1時確認號字段才有效。當(dāng)ACK=0時赛糟,確認號無效派任。TCP規(guī)定,在連接建立后所有傳送的報文段都必須把ACK置1璧南。
- 「推送PUSH」:當(dāng)兩個應(yīng)用進程進行交互式的通信時掌逛,有時在一端的應(yīng)用進程希望在鍵入一個命令后立即就能夠收到對方的響應(yīng),而不再等到整個緩存都填滿了后再向上交付司倚。這時豆混,發(fā)送方TCP把PSH置1,并立即創(chuàng)建一個報文段發(fā)送出去动知。接收方TCP收到PSH=1的報文段皿伺,就盡快地(即“推送”向前)交付接收應(yīng)用進程。
- 「復(fù)位RST」 :當(dāng)RST=1時盒粮,表明TCP連接中出現(xiàn)嚴(yán)重差錯(如由于主機崩潰或其他原因)鸵鸥,必須釋放連接,然后再重新建立運輸連接。
- 「SNY」:在連接建立時用來同步序號 當(dāng)SYN=1而ACK=0時妒穴,表明這是一個連接請求報文段宋税。
- 「FIN」:用來釋放一個連接。
滑動窗口
TCP進行數(shù)據(jù)發(fā)送讼油,為了提高數(shù)據(jù)傳輸?shù)男式苋捎昧艘环N叫做滑動窗口的機制來進行數(shù)據(jù)發(fā)送。
下面是發(fā)送端滑動窗口的示意圖矮台,滑動窗口的大小是綠色部分和紅色部分的序列長度淆攻。它工作的機制是這樣的,一旦發(fā)送端收到一個確認嘿架,滑動窗口就會向右移動。
流量控制
關(guān)于流量控制啸箫,用一句簡短的話就可以概括耸彪。
?
接收端會給發(fā)送端一個負反饋,通過這個負反饋可以控制發(fā)送端的滑動窗口的大小忘苛。
?
下面可以看一下知乎上是怎么說的蝉娜,我找了一條講的最形象,可以結(jié)合著理解一下扎唾。
知乎:TCP協(xié)議的滑動窗口具體是怎樣控制流量的召川?
擁塞控制
「慢啟動:」 慢啟動值得就是一條TCP鏈接剛建立時不要一下發(fā)送大量數(shù)據(jù)導(dǎo)致網(wǎng)絡(luò)擁塞激增,而是由小到大根據(jù)反饋逐漸增大擁塞窗口胸遇。
「擁塞避免:」 擁塞避免就是讓滑動窗口緩慢增大荧呐,而不是像慢開始那樣成倍增長。
「快重傳:」 發(fā)送方只要一連收到三個重復(fù)確認就應(yīng)當(dāng)立即重傳對方尚未收到的報文段纸镊,而不必繼續(xù)等待設(shè)置的重傳計時器到期倍阐。
「快恢復(fù):」 快恢復(fù)具有下面兩個特點
當(dāng)發(fā)送方連續(xù)收到三個重復(fù)確認時,就執(zhí)行 “乘法減小” 算法逗威,把慢開始門限減半峰搪。這是為了預(yù)防網(wǎng)絡(luò)發(fā)生擁塞。注意凯旭,接下去不執(zhí)行慢開始算法概耻。
執(zhí)行快恢復(fù)算法時,改變滑動窗口的值罐呼,然后開始執(zhí)行擁塞避免算法鞠柄,使得擁塞窗口緩慢性增大。
三次握手
三次握手與四次揮手可以說是面試臣挡瘢考的知識點了春锋,不過在介紹三次握手之前,我覺得有必要了解一下「理想傳輸條件的共性」:
- 傳輸信道不產(chǎn)生差錯
- 不管發(fā)送方以多快的速度發(fā)送數(shù)據(jù)差凹,接收方總是能夠及時接收數(shù)據(jù)期奔。
理想的情況終究是理想的侧馅,上述兩種情況在實際環(huán)境是不可能發(fā)生的。那么呐萌,我們就來說說怎樣使得我們的實際情況更加接近理想馁痴,這就是我們接下來要講的三次握手。
首先肺孤,三次握手和后面要講的四次揮手都是針對TCP來說的罗晕,UDP是面向無連接的協(xié)議,不可能存在的三次握手與四次揮手赠堵。三次握手與四次揮手是為了更好進行可靠的傳輸小渊,下面先看下面三次握手的流程圖。
既然是為了進行可靠的傳輸茫叭,無非是要保證客戶端與服務(wù)器之間的數(shù)據(jù)發(fā)送和接收的正常進行酬屉。
- 「第一次握手」:Client 什么都不能確認;Server 確認了Client發(fā)送正常揍愁。
- 「第二次握手」:Client 確認了:自己發(fā)送呐萨、接收正常,對方發(fā)送莽囤、接收正常谬擦;Server 確認了:自己接收正常,Client發(fā)送正常朽缎。
- 「第三次握手」:Client 確認了:自己發(fā)送惨远、接收正常,對方發(fā)送话肖、接收正常锨络;Server 確認了:自己發(fā)送、接收正常狼牺,對方發(fā)送接收正常羡儿。
為什么需要進行第三次握手了?一句話是钥,主要防止已經(jīng)失效的連接請求報文突然又傳送到了服務(wù)器掠归,從而產(chǎn)生錯誤。
通過上面的三個步驟悄泥,Client和Server能夠進行可靠的傳輸虏冻,缺一不可。
四次揮手
既然理解了三次握手弹囚,想必四次揮手也沒有啥難度厨相,先把流程圖附上。
如同三次揮手一樣,四次揮手也是為了可靠的傳輸蛮穿。四次揮手就是Client和Server斷開連接的過程庶骄,那么你可能會覺得,建立連接的過程需要三次到還可以理解践磅,為啥連斷開連接都需要四次单刁。難道一次或者兩次就不可以了嗎?
是這樣的府适,既然三次握手的需要發(fā)送方和接收方確認羔飞,那么四次揮手也要得到發(fā)送方和接收方的確認。
- 「第一次揮手」:Client向Server發(fā)送斷開的連接的請求檐春。
- 「第二次揮手」:Server向Client發(fā)送斷開連接的確認逻淌。Client收到以后,這個時候TCP進入了半連接的狀態(tài)疟暖,從Client向Server發(fā)送數(shù)據(jù)的通道被關(guān)閉了卡儒。
- 「第三次揮手」:Server向Client發(fā)送一個斷開連接的請求。
- 「第四次揮手」:Client向Server發(fā)送斷開連接的確認誓篱。Server收到以后,這個時候TCP連接就完全斷開了凯楔。
也可以這樣考慮窜骄,上面提到的問題。假如在第二次揮手的時候摆屯,Server在給Client發(fā)送ACK的同時邻遏,也發(fā)送了FIN的請求。那么如果虐骑,Server還在接收從Client傳輸過來的數(shù)據(jù)准验,則會因為Client的下一個ACK而關(guān)閉接收數(shù)據(jù)的通道,數(shù)據(jù)就會接收失敗就像下面的這個圖那樣廷没。
這里推薦一篇文章糊饱,幫助大家更好理解TCP連接地建立和斷開的過程:兩張動圖-徹底明白TCP的三次握手與四次揮手
TCP與UDP的應(yīng)用場景
至于TCP與UDP的關(guān)系,看完下面的這張圖你可能就懂了(圖片來源于網(wǎng)絡(luò)):
TCP是可靠的傳輸颠黎,UDP是不可靠的傳輸另锋,那為什么我們還需要使用不可靠的UDP進行數(shù)據(jù)傳輸呢?
我們知道狭归,UDP 在傳送數(shù)據(jù)之前不需要先建立連接夭坪,遠地主機在收到 UDP 報文后,不需要給出任何確認过椎。雖然 UDP 不提供可靠交付室梅,但在某些情況下 UDP 確是一種最有效的工作方式(一般用于即時通信),比如:QQ 語音、 QQ 視頻 亡鼠、直播等等赏殃。
TCP 提供面向連接的服務(wù)。在傳送數(shù)據(jù)之前必須先建立連接拆宛,數(shù)據(jù)傳送結(jié)束后要釋放連接嗓奢。TCP 不提供廣播或多播服務(wù)。由于 TCP 要提供可靠的浑厚,面向連接的運輸服務(wù)(TCP的可靠體現(xiàn)在TCP在傳遞數(shù)據(jù)之前股耽,會有三次握手來建立連接,而且在數(shù)據(jù)傳遞時钳幅,有確認物蝙、窗口、重傳敢艰、擁塞控制機制诬乞,在數(shù)據(jù)傳完后,還會斷開連接用來節(jié)約系統(tǒng)資源)钠导,這一難以避免增加了許多開銷震嫉,如確認,流量控制牡属,計時器以及連接管理等票堵。這不僅使協(xié)議數(shù)據(jù)單元的首部增大很多,還要占用許多處理機資源逮栅。TCP 一般用于文件傳輸悴势、發(fā)送和接收郵件、遠程登錄等場景措伐。
應(yīng)用層
HTTP協(xié)議
關(guān)于HTTP的定義特纤,可以看一下維基百科上是怎么說的:
?
在網(wǎng)頁瀏覽器的地址欄上顯示HTTP網(wǎng)絡(luò)協(xié)議的插圖 HTTP是一個客戶端(用戶)和服務(wù)端(網(wǎng)站)之間請求和應(yīng)答的標(biāo)準(zhǔn),通常使用TCP協(xié)議侥加。通過使用網(wǎng)頁瀏覽器捧存、網(wǎng)絡(luò)爬蟲或者其它的工具,客戶端發(fā)起一個HTTP請求到服務(wù)器上指定端口(默認端口為80)担败。我們稱這個客戶端為用戶代理程序(user agent)矗蕊。應(yīng)答的服務(wù)器上存儲著一些資源,比如HTML文件和圖像氢架。我們稱這個應(yīng)答服務(wù)器為源服務(wù)器(origin server)傻咖。
?
http協(xié)議現(xiàn)在已經(jīng)廣泛用于萬維網(wǎng),關(guān)于http岖研,后面單獨那個文章出來講卿操,不過現(xiàn)在得先說一下https警检。
其實http和https是一種協(xié)議,只不過https經(jīng)過了SSL(Secure Socket Layer害淤,安全套接字層)或TLS(Transport Layer Security扇雕,傳輸層安全)的封裝。單從這兩個協(xié)議就可以知道窥摄,https安全的镶奉,而http是不安全的。
FTP協(xié)議
FTP(File Transfer Protocol)文件傳輸協(xié)議崭放,在TCP/IP協(xié)議族中屬于應(yīng)用層協(xié)議運行于TCP協(xié)議之上是一種可靠的傳輸協(xié)議哨苛,主要功能用于實現(xiàn)用戶間文件分發(fā)共享,以及網(wǎng)絡(luò)管理者在進行設(shè)備版本升級币砂、日志下載和配置保存等業(yè)務(wù)操作時建峭,均會使用到FTP功能。
DNS協(xié)議
前面說到IP地址是用來定位主機的决摧,但是我們在生活中是很難記住這些沒有規(guī)律的IP地址亿蒸,我們只知道網(wǎng)站的域名。那現(xiàn)在要怎么辦了掌桩?
于是DNS協(xié)議出現(xiàn)了边锁。
DNS是域名解析協(xié)議,假如我們知道了域名波岛,但是不知道服務(wù)器的IP地址茅坛,就需要用到DNS協(xié)議。
DHCP協(xié)議
什么是DHCP協(xié)議了盆色?還是看看維基上的定義
?
動態(tài)主機設(shè)置協(xié)議(DHCP)是一種使網(wǎng)絡(luò)管理員能夠集中管理和自動分配IP網(wǎng)絡(luò)地址的通信協(xié)議灰蛙。在IP網(wǎng)絡(luò)中祟剔,每個連接Internet的設(shè)備都需要分配唯一的IP地址隔躲。DHCP使網(wǎng)絡(luò)管理員能從中心結(jié)點監(jiān)控和分配IP地址。當(dāng)某臺計算機移到網(wǎng)絡(luò)中的其它位置時物延,能自動收到新的IP地址宣旱。
?
維基上已經(jīng)解釋的非常清楚了,DHCP的作用就是動態(tài)地給主機分配IP地址叛薯,大大減少了網(wǎng)絡(luò)管理員的工作負擔(dān)浑吟。