石家莊市網(wǎng)站建設(shè)培訓(xùn)班網(wǎng)絡(luò)營(yíng)銷方法有哪些?
文章目錄
- 說(shuō)明
- 第一章 計(jì)算機(jī)網(wǎng)絡(luò)概述
- 計(jì)算機(jī)網(wǎng)絡(luò)和互聯(lián)網(wǎng)
- 網(wǎng)絡(luò)邊緣
- 網(wǎng)絡(luò)核心
- 分組交換網(wǎng)的性能
- 網(wǎng)絡(luò)體系結(jié)構(gòu)
- 控制平面和數(shù)據(jù)平面
- 第二章 IP地址
- 分類編址
- 子網(wǎng)劃分
- 無(wú)分類編址
- 特殊用途的IP地址
- IP地址規(guī)劃和分配
- 第三章 應(yīng)用層
- 應(yīng)用層協(xié)議原理
- 萬(wàn)維網(wǎng)【URL / HTML / HTTP】
- 域名系統(tǒng)DNS
- 動(dòng)態(tài)主機(jī)配置協(xié)議DHCP
- 電子郵件【SMTP / POP3 / IMAP】
- 第四章 運(yùn)輸層
- 運(yùn)輸層概述
- 用戶數(shù)據(jù)報(bào)協(xié)議UDP
- 可靠傳輸原理
- 傳輸控制協(xié)議TCP
- TCP的連接管理
- TCP的可靠傳輸
- TCP的流量控制
- TCP的擁塞控制
- 第五章 網(wǎng)絡(luò)層
- 網(wǎng)絡(luò)層概述
- 網(wǎng)際協(xié)議IP
- IP分組轉(zhuǎn)發(fā)
- 網(wǎng)際控制報(bào)文協(xié)議ICMP
- 路由選擇協(xié)議
- 專用網(wǎng)相關(guān)概念
- 多協(xié)議標(biāo)記交換MPLS
- 第六章 數(shù)據(jù)鏈路層
- 數(shù)據(jù)鏈路層概述
- 以太網(wǎng)
- 地址解析協(xié)議ARP
- 無(wú)線局域網(wǎng)
- 點(diǎn)對(duì)點(diǎn)協(xié)議PPP
- 思維導(dǎo)圖總結(jié)
- 第一章
- 第二章
- 第三章
- 第四章
- 第五章
- 第六章
- 術(shù)語(yǔ)詞典
說(shuō)明
本博客僅供個(gè)人復(fù)習(xí)參考,知識(shí)點(diǎn)比較混雜,可作為查閱知識(shí)點(diǎn)的參考。
搜索 : Ctrl+F
參考書:
《計(jì)算機(jī)網(wǎng)絡(luò)(第7版)》 謝希仁著
鏈接:https://pan.baidu.com/s/1WLF5CVDIlqRycrAjORxoKQ
提取碼:kuoe
《計(jì)算機(jī)網(wǎng)絡(luò)——自頂向下方法》 機(jī)械工業(yè)出版社
文字出現(xiàn)的參考鏈接是補(bǔ)充信息,用來(lái)代替部分知識(shí)點(diǎn)的介紹,請(qǐng)自行瀏覽參考博客。、
末尾的思維導(dǎo)圖來(lái)源于老師的PPT,非常有用!!!!
最后一章是術(shù)語(yǔ)縮寫詞典,正在更新中。
文章中發(fā)現(xiàn)問(wèn)題煩請(qǐng)指出。
第一章 計(jì)算機(jī)網(wǎng)絡(luò)概述
計(jì)算機(jī)網(wǎng)絡(luò)和互聯(lián)網(wǎng)
計(jì)算機(jī)網(wǎng)絡(luò)
:是由一些通用的、可編程的硬件互連而成。
互聯(lián)網(wǎng)
:是全球最大的、由眾多異構(gòu)網(wǎng)絡(luò)相互連接而成的計(jì)算機(jī)網(wǎng)絡(luò),是網(wǎng)絡(luò)的網(wǎng)絡(luò)。
特點(diǎn):
連通性
:將用戶終端彼此相連。
資源共享
:信息共享、軟件共享、硬件共享等
TCP/IP協(xié)議
逐漸成為了網(wǎng)絡(luò)互聯(lián)的事實(shí)標(biāo)準(zhǔn)
制定互聯(lián)網(wǎng)的正式標(biāo)準(zhǔn)需要經(jīng)過(guò)兩個(gè)階段:建議標(biāo)準(zhǔn)
和互聯(lián)網(wǎng)標(biāo)準(zhǔn)
網(wǎng)絡(luò)邊緣
網(wǎng)絡(luò)邊緣部分由所有連接在互聯(lián)網(wǎng)上的主機(jī)
以及接入網(wǎng)
構(gòu)成。
主機(jī)
包括:個(gè)人計(jì)算機(jī)、服務(wù)器、超級(jí)計(jì)算機(jī)、智能手機(jī)、智能家電、智能可穿戴裝備、網(wǎng)絡(luò)攝像頭、汽車以及各種網(wǎng)絡(luò)傳感器等。
接入網(wǎng)
指將主機(jī)連接到其邊緣路由器的網(wǎng)絡(luò),邊緣路由器指進(jìn)入互聯(lián)網(wǎng)核心部分后的第一臺(tái)路由器。
接入網(wǎng)
包括:ADSL接入、光纖同軸混合網(wǎng)、FTTH接入、以太網(wǎng)接入、WiFi接入以及蜂窩移動(dòng)接入等。
不同的接入網(wǎng)中使用了不同的傳輸媒體。
傳輸媒體
包括:雙絞線、同軸電纜、光纖以及自由空間等。
接入網(wǎng)
ADSL接入
ADSL指非對(duì)稱數(shù)字用戶線:
采用頻分復(fù)用技術(shù)把用戶線分成了電話
、上行數(shù)據(jù)
和下行數(shù)據(jù)
三個(gè)相對(duì)獨(dú)立的信道。用戶可以邊打電話邊上網(wǎng)。
光纖同軸混合網(wǎng)HFC是利用有線電視網(wǎng)現(xiàn)有的基礎(chǔ)設(shè)施,提供的一種寬帶接入網(wǎng)。
光纖到戶FTTH是FTT技術(shù)的一種。最常用的FTTH實(shí)現(xiàn)方案是無(wú)源光網(wǎng)絡(luò)PON
。
PON分為:窄帶PON、APON(ATM PON)、EERON (EthernetPON)GPON (Gigabit PON)等。
通過(guò)以太網(wǎng)將主機(jī)連接到邊緣路由器的方法,稱為以太網(wǎng)接入。通過(guò)無(wú)線局域網(wǎng)的接入,稱為WiFi接入。
通過(guò)蜂窩移動(dòng)網(wǎng)絡(luò),將主機(jī)連接到互聯(lián)網(wǎng)的方法稱為蜂窩移動(dòng)接入。
蜂窩移動(dòng)技術(shù)的發(fā)展已經(jīng)經(jīng)歷了4代,俗稱:1G、2G、3G和4G,第5代(5G)標(biāo)準(zhǔn)正在制定中。
傳輸媒體
網(wǎng)絡(luò)核心
網(wǎng)絡(luò)核心部分由各種網(wǎng)絡(luò)
以及連接這些網(wǎng)絡(luò)的路由器
組成。
網(wǎng)絡(luò)核心部分為網(wǎng)絡(luò)邊緣部分的主機(jī)提供通信服務(wù)。
計(jì)算機(jī)網(wǎng)絡(luò)采用分組交換
方式,路由器
是網(wǎng)絡(luò)核心部分最重要的設(shè)備,是實(shí)現(xiàn)分組交換的關(guān)鍵構(gòu)件,其作用是將收到的分組轉(zhuǎn)發(fā)到另一個(gè)網(wǎng)絡(luò)。
在端系統(tǒng)數(shù)量很少時(shí),可以采用全互連方法實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信。但全互連方式中,需要
N(N-1)/2條互連線。當(dāng)增加第N+1個(gè)端系統(tǒng)時(shí),必須增設(shè)N條線路。
因此,引入交換設(shè)備稱為交換機(jī)
或交換結(jié)點(diǎn)
。
所有端系統(tǒng)通過(guò)用戶線連接到交換結(jié)點(diǎn)上,由交換結(jié)點(diǎn)控制端系統(tǒng)間的連接。
當(dāng)端系統(tǒng)分布的區(qū)域較廣時(shí),需設(shè)置多個(gè)交換結(jié)點(diǎn),交換結(jié)點(diǎn)之間用中繼線相連。
當(dāng)交換的范圍更大時(shí),需要再次引交換結(jié)點(diǎn),由此形成交換網(wǎng)。
實(shí)現(xiàn)通信必須要有3個(gè)要素,即端系統(tǒng)、傳輸和交換。
在通信網(wǎng)絡(luò)中有多種交換方式,電路交換
、分組交換
和報(bào)文交換
是其中最典型的三種。
· 傳統(tǒng)的電話網(wǎng)絡(luò)采用電路交換方式;
· 計(jì)算機(jī)網(wǎng)絡(luò)采用分組交換方式;
· 早期的電報(bào)網(wǎng)絡(luò)采用報(bào)文交換方式。
從通信資源分配的角度來(lái)看,交換就是按照某種方式分配傳輸線路的資源。
電路交換
電路交換屬于通信資源的預(yù)分配系統(tǒng)。
電路交換方式是面向連接
的交換方式。必須經(jīng)過(guò)
建立連接:例如打電話撥號(hào);
數(shù)據(jù)傳輸:例如通話:
釋放連接:例如掛斷電話。
中繼線中多路電話信號(hào)可以通過(guò)頻分復(fù)用
、時(shí)分復(fù)用
等信道復(fù)用技術(shù)共享通信線路資源。
特點(diǎn):
固定分配資源
:通信資源在建立連接階段已經(jīng)預(yù)先分配給通話的雙方了,在通話的全部時(shí)間內(nèi),通話的兩個(gè)終端始終占用端到端的通信資源。
分組交換
計(jì)算機(jī)網(wǎng)絡(luò)數(shù)據(jù)具有突發(fā)特性,如果使用電路交換方式,通信資源的利用率將極低。
因此,計(jì)算機(jī)網(wǎng)絡(luò)采用分組交換
方式。分組交換技術(shù)的出現(xiàn)奠定了互聯(lián)網(wǎng)發(fā)展的基礎(chǔ)。
分組交換屬于通信資源的動(dòng)態(tài)分配系統(tǒng)。
特點(diǎn):
分組;
存儲(chǔ)轉(zhuǎn)發(fā);
逐段占用通信鏈路資源;虛電路或數(shù)據(jù)報(bào)。
分組
是互聯(lián)網(wǎng)中傳輸?shù)臄?shù)據(jù)單元。
待發(fā)送的完整數(shù)據(jù)塊稱為報(bào)文(message)。
將報(bào)文分成較小的數(shù)據(jù)段,在每個(gè)數(shù)據(jù)段前面增加控制信息,構(gòu)成分組(packet)
。分組也稱為包
。
增加的控制信息稱為首部(header)
,也稱為包頭
。
存儲(chǔ)轉(zhuǎn)發(fā)
在互聯(lián)網(wǎng)中,分組交換結(jié)點(diǎn)也稱為路由器
。路由器收到一個(gè)分組后,
- 先暫時(shí)存儲(chǔ)起來(lái);
- 然后根據(jù)首部中的控制信息,找到合適的接口將分組轉(zhuǎn)發(fā)出去。
這種工作方式稱為存儲(chǔ)轉(zhuǎn)發(fā)
。
每臺(tái)路由器都以存儲(chǔ)轉(zhuǎn)發(fā)的方式,逐跳(hop)
處理,最終將分組交付目的主機(jī)。
目的主機(jī)將分組重新還原成報(bào)文。
在分組從H1向H4轉(zhuǎn)發(fā)的過(guò)程中當(dāng)分組在鏈路A-F上傳輸時(shí),其它通信鏈路資源并不被當(dāng)前通信的雙方所占用,即分組交換是逐段占用通信資源的。
假定在主機(jī)H1向主機(jī)H4發(fā)送分組的同時(shí),主機(jī)H7也在向主機(jī)H5發(fā)送分組,兩次通信所發(fā)送的分組都會(huì)通過(guò)鏈路F-C。鏈路F-C上的帶寬資源并不會(huì)預(yù)先分配給某次通信,而是可以為多次通信所共享,其通信資源的利用率較高.
虛電路方式
分組交換包括兩種方式:虛電路(Virtual Circuit,VC)方式
和數(shù)據(jù)報(bào)(datagram)方式
。
虛電路方式是面向連接
的,虛電路中連接,不是物理連接,只是一條邏輯連接。
建立虛電路后,在數(shù)據(jù)通信階段,路由器根據(jù)虛電路標(biāo)識(shí)轉(zhuǎn)發(fā)分組,屬于相同虛電路的數(shù)據(jù)分組將沿著相同的路徑、按序通過(guò)網(wǎng)絡(luò),到達(dá)目的結(jié)點(diǎn)。
數(shù)據(jù)報(bào)方式
數(shù)據(jù)報(bào)方式是無(wú)連接的,即發(fā)送數(shù)據(jù)之前不需要先建立連接。
數(shù)據(jù)報(bào)方式中,路由器為每個(gè)分組獨(dú)立選擇轉(zhuǎn)發(fā)接口,從相同源結(jié)點(diǎn)發(fā)往相同目的結(jié)點(diǎn)的數(shù)據(jù)分組,有可能沿著不同的路徑,也有可能失序通過(guò)網(wǎng)絡(luò),到達(dá)目的結(jié)點(diǎn)。
目前,互聯(lián)網(wǎng)采用的交換方式就是數(shù)據(jù)報(bào)方式的分組交換
。
分組交換的問(wèn)題
分組交換雖然提高了資源利用率,但也帶來(lái)如下問(wèn)題:
增大了時(shí)延:分組在各路由器中存儲(chǔ)轉(zhuǎn)發(fā)時(shí),需要在隊(duì)列中排隊(duì),這會(huì)增加些時(shí)延。
增大了開銷:每一個(gè)分組的首部中都包含一些控制信息,這會(huì)增加一定的開銷。
報(bào)文交換
報(bào)文交換方式也采用存儲(chǔ)轉(zhuǎn)發(fā)
方式。
報(bào)文交換與分組交換的區(qū)別在于:
報(bào)文交換傳輸?shù)臄?shù)據(jù)單元是一個(gè)完整的報(bào)文,而分組交換傳輸?shù)臄?shù)據(jù)單元是較小的分組。
三種交換方式的比較
當(dāng)跨越的結(jié)點(diǎn)數(shù)較多時(shí),報(bào)文交換的時(shí)延會(huì)顯著增大。而分組交換是報(bào)文交換的流水線方式,顯著減小了時(shí)延。
分組交換網(wǎng)的性能
可以用如下指標(biāo)衡量分組交換的性能:
帶寬;
吞吐量;
時(shí)延:處理時(shí)延、排隊(duì)時(shí)延、傳輸時(shí)延(發(fā)送時(shí)延)、傳播時(shí)延;
丟包率;
利用率:信道利用率、網(wǎng)絡(luò)利用率。
帶寬
帶寬是頻帶寬度
的簡(jiǎn)稱,單位是赫茲(Hz)。
·信號(hào)的帶寬指該信號(hào)所包含的各種不同頻率成分所占據(jù)的頻率范圍;
·信道的帶寬指該信道允許通過(guò)的信號(hào)的頻帶范圍。
如:傳統(tǒng)的電話信號(hào)的標(biāo)準(zhǔn)帶寬是3.1kHz(從300Hz到3.4kHz),傳統(tǒng)的電話信道的標(biāo)準(zhǔn)帶寬是4kHz(從0Hz到4kHz)。
在計(jì)算機(jī)網(wǎng)絡(luò)中,帶寬是指在單位時(shí)間內(nèi)能傳輸?shù)淖畲髷?shù)據(jù)量,也稱為最高數(shù)據(jù)率
,用來(lái)表示網(wǎng)絡(luò)中某信道的數(shù)據(jù)傳送能力
,單位是比特每秒(bt/s
)。
·如:傳統(tǒng)以太網(wǎng)的帶寬是10Mbit/s。
在帶寬的兩種表述中,其本質(zhì)是相同的,前者是其頻域稱謂
,后者是其時(shí)域稱謂
。
吞吐量
吞吐量表示在單位時(shí)間內(nèi)通過(guò)某個(gè)網(wǎng)絡(luò)或接口的實(shí)際數(shù)據(jù)量,單位是比特每秒(bit/s)
以文件傳輸應(yīng)用為例,主機(jī)在任何瞬間接收到該文件的速率稱為瞬時(shí)吞吐量
,主機(jī)收到完整文件后計(jì)算的平均速率稱為平均吞吐量
。
端到端吞吐量是衡量計(jì)算機(jī)網(wǎng)絡(luò)性能的一個(gè)重要指標(biāo)。
端到端吞吐量受到網(wǎng)絡(luò)帶寬的限制。
端到端吞吐量也會(huì)受到網(wǎng)絡(luò)中其它通信量的影響。
時(shí)延
分組從源主機(jī)出發(fā),經(jīng)過(guò)一系列路由器,最終到達(dá)目的主機(jī),在這個(gè)過(guò)程中所花費(fèi)的時(shí)間稱為端到端時(shí)延
。端到端時(shí)延由處理時(shí)延(processingdelay)
、排隊(duì)時(shí)延(queuing delay)
、傳輸時(shí)延(transmission delay)
和傳播時(shí)延(propagation delay)
等幾個(gè)部分組成。
處理時(shí)延
:結(jié)點(diǎn)在收到分組后,結(jié)點(diǎn)處理分組所花費(fèi)的時(shí)間,稱為處理時(shí)延
排隊(duì)時(shí)誕
:分組進(jìn)入路由器后,在輸入隊(duì)列或輸出隊(duì)列中排隊(duì)所產(chǎn)生的時(shí)延稱為排隊(duì)時(shí)延
。
傳輸時(shí)延
:結(jié)點(diǎn)將分組傳輸?shù)芥溌飞纤枰臅r(shí)間,也稱為發(fā)送時(shí)延
。
發(fā)送時(shí)延=分組長(zhǎng)度(bit) / 發(fā)送速率(bit/s)
傳播時(shí)延
:電磁波在信道中傳播一定的距離所花費(fèi)的時(shí)間稱為傳播時(shí)延
。
傳播時(shí)延=信道長(zhǎng)度(m) / 電磁波在信道上的傳播速率(m/s)
端到端時(shí)延=處理時(shí)延+排隊(duì)時(shí)延+發(fā)送時(shí)延+傳播時(shí)延
往返的端到端時(shí)延通常稱為往返時(shí)間(Round-Trip Time,RTT)
丟包率
當(dāng)分組到達(dá)路由器的速率超過(guò)路由器發(fā)送分組的速率時(shí),路由器有可能丟棄到達(dá)的分組,這種現(xiàn)象稱為丟包
。
丟包代表網(wǎng)絡(luò)出現(xiàn)了擁塞。丟包率在很大程度上反映網(wǎng)絡(luò)的阻塞程度,常被用于評(píng)價(jià)和衡量網(wǎng)絡(luò)性能。
丟包率=(Ns-Nr) / Ns
其中N代表發(fā)送的分組總數(shù),Nr代表收到的分組總數(shù),Ns - Nr 代表丟失的分組總數(shù)。
利用率
利用率包括信道利用率
和網(wǎng)絡(luò)利用率
兩種。
信道利用率指出某信道有百分之幾的時(shí)間是被利用的(有數(shù)據(jù)通過(guò))。網(wǎng)絡(luò)利用率側(cè)是全網(wǎng)絡(luò)的信道利用率的加權(quán)平均值。
信道利用率并非越高越好。當(dāng)某信道的利用率增大時(shí),該信道引起的時(shí)延也就迅速增加。
在適當(dāng)?shù)募俣l件下,時(shí)延和網(wǎng)絡(luò)利用率之間的關(guān)系如下式:
D = D0 / (1-U)
其中,D表示網(wǎng)絡(luò)當(dāng)前的時(shí)延,D0表示網(wǎng)絡(luò)空閑時(shí)的時(shí)延,U是網(wǎng)絡(luò)的利用率
信道或網(wǎng)絡(luò)的利用率過(guò)高會(huì)產(chǎn)生非常大的時(shí)延。
網(wǎng)絡(luò)體系結(jié)構(gòu)
分層、協(xié)議和服務(wù)
為了降低網(wǎng)絡(luò)設(shè)計(jì)的復(fù)雜性,絕大多數(shù)網(wǎng)絡(luò)都按照分層
的方法進(jìn)行設(shè)計(jì)。在分層設(shè)計(jì)思想中,每一層都建立在下一層的基礎(chǔ)之上,下層向上一層提供特定的服務(wù)。
對(duì)等層的雙方之間的約定稱為協(xié)議
。
每層協(xié)議都完全獨(dú)立于其它層的協(xié)議,完成本層的功能。
分層的設(shè)計(jì)方式具有靈活性好
、耦合性低
等優(yōu)點(diǎn),并且易于開發(fā)和維護(hù)
,方便進(jìn)行標(biāo)準(zhǔn)化工作
。
在互聯(lián)網(wǎng)中,為進(jìn)行網(wǎng)絡(luò)中的數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)和約定稱為網(wǎng)絡(luò)協(xié)議
,簡(jiǎn)稱為協(xié)議
。
網(wǎng)絡(luò)協(xié)議主要由以下三個(gè)要素組成:
①語(yǔ)法:即數(shù)據(jù)與控制信息的格式:
②語(yǔ)義:即控制信息的含義;
③同步:即事件順序的詳細(xì)說(shuō)明。
各層所有協(xié)議的集合被稱為協(xié)議棧
或協(xié)議族
。
任何發(fā)送或接收消息的硬件或軟件進(jìn)程稱為實(shí)體
。在不同主機(jī)上,相對(duì)應(yīng)層次上的實(shí)體稱為對(duì)等實(shí)體。
每層協(xié)議的實(shí)現(xiàn)都保證了向上層實(shí)體提供服務(wù)。
協(xié)議是水平方向的,控制著對(duì)等實(shí)體之間的信息交換;
服務(wù)是垂直方向的,控制著相鄰層次實(shí)體之間的信息交換;
對(duì)等實(shí)體之間交換的數(shù)據(jù)單位通常稱為協(xié)議數(shù)據(jù)單元PDU
;
相鄰層次實(shí)體之間交換的數(shù)據(jù)單位通常稱為服務(wù)數(shù)據(jù)單元SDU
。
層和協(xié)議的集合成為網(wǎng)絡(luò)體系結(jié)構(gòu)。
TCP/IP協(xié)議是互聯(lián)網(wǎng)上事實(shí)的國(guó)際標(biāo)準(zhǔn),定義了四層協(xié)議棧
。
OSI參考模型定義了七層協(xié)議棧
。
互聯(lián)網(wǎng)體系結(jié)構(gòu)實(shí)際采用了五層協(xié)議棧
。
對(duì)于互聯(lián)網(wǎng)的五層協(xié)議
應(yīng)用層:
主要任務(wù)
:通過(guò)進(jìn)程間的通信解決某一類應(yīng)用問(wèn)題。
常見(jiàn)協(xié)議
:
域名系統(tǒng)DNS;超文本傳送協(xié)HTTP;動(dòng)態(tài)主機(jī)配置協(xié)議DHCP;簡(jiǎn)單郵件傳送協(xié)議SMTP等。
協(xié)議數(shù)據(jù)單元
:報(bào)文。
運(yùn)輸層:
主要任務(wù)
:向應(yīng)用進(jìn)程提供端到端的通信服務(wù)。
常見(jiàn)協(xié)議
:
傳輸控制協(xié)議TCP:面向連接、可靠;
用戶數(shù)據(jù)報(bào)協(xié)UDP:無(wú)連接、不可靠。
協(xié)議數(shù)據(jù)單元
:TCP:報(bào)文段;UDP:用戶數(shù)據(jù)報(bào)。
網(wǎng)絡(luò)層:
主要任務(wù)
:向上層提供主機(jī)到主機(jī)的通信服務(wù),包括路由選擇和分組轉(zhuǎn)發(fā)。
常見(jiàn)協(xié)議
:
網(wǎng)際協(xié)議IP;;網(wǎng)際控制報(bào)文協(xié)議ICMP;網(wǎng)際組管理協(xié)議IGMP;地址解析協(xié)議ARP等。
協(xié)議數(shù)據(jù)單元
:
IP協(xié)議:IP分組或P數(shù)據(jù)報(bào)。
數(shù)據(jù)鏈路層:
主要任務(wù)
:
向上層提供相鄰結(jié)點(diǎn)間的通信服務(wù),包括封裝成幀、尋址、差錯(cuò)控制和媒體訪問(wèn)控制等。
常見(jiàn)協(xié)議
:
以太網(wǎng)Ethernet協(xié)議、點(diǎn)對(duì)點(diǎn)PPP協(xié)議、無(wú)線局域網(wǎng)WLAN協(xié)議等。
協(xié)議數(shù)據(jù)單元
:幀。
物理層:
主要任務(wù)
:透明的傳輸比特流。
常見(jiàn)協(xié)議
:與實(shí)際的傳輸媒體相關(guān),在不同的傳輸媒體上定義了不同的物理層協(xié)議。
協(xié)議數(shù)據(jù)單元
:
碼元 : 一個(gè)碼元可以理解為一個(gè)脈沖信號(hào),一個(gè)碼元可以攜帶一比特信息,也可以攜帶多比特信息,也允許多個(gè)碼元一起攜帶一比特信息。
封裝和解封
逐層封裝的過(guò)程發(fā)生在發(fā)送數(shù)據(jù)時(shí),逐層解封的過(guò)程發(fā)生在接收數(shù)據(jù)時(shí)。
復(fù)用和分用
復(fù)用可以發(fā)生在多個(gè)層次,在每層都有不同類型的標(biāo)識(shí)符,用于指明封裝的信息屬于上層哪一個(gè)協(xié)議。復(fù)用的過(guò)程發(fā)生在封裝時(shí)。分用的過(guò)程發(fā)生在解封時(shí)。
控制平面和數(shù)據(jù)平面
分組交換網(wǎng)絡(luò)的操作涉及兩種分組的處理:控制分組
和數(shù)據(jù)分組
。
控制分組攜帶的信息用來(lái)指導(dǎo)結(jié)點(diǎn)如何轉(zhuǎn)發(fā)數(shù)據(jù),而數(shù)據(jù)分組則包括用戶程序要發(fā)送的數(shù)據(jù)。
控制平面最重要的功能是路由選擇
。此外還包括差錯(cuò)報(bào)告、系統(tǒng)配置和管理以及資源的分配等。
數(shù)據(jù)平面最重要的功能是分組轉(zhuǎn)發(fā)
。
傳統(tǒng)的計(jì)算機(jī)網(wǎng)絡(luò)中,每臺(tái)分組交換設(shè)備都包括一個(gè)數(shù)據(jù)平面和一個(gè)控制平面。因此,其控制平面是分布式
的。
軟件定義網(wǎng)絡(luò)SDN中的控制平面與數(shù)據(jù)平面是分離的。即分組交換設(shè)備上僅具有數(shù)據(jù)平面,而控制平面位于一個(gè)邏輯上的集中式控制器中。因此,其控制平面是集中式
的。
第二章 IP地址
在TCP/IP體系結(jié)構(gòu)中,IP地址是一個(gè)最基本的概念。連接到互聯(lián)網(wǎng)的每臺(tái)設(shè)備至少具有一個(gè)IP地址。
IP地址是互聯(lián)網(wǎng)中使用的網(wǎng)絡(luò)層地址
,用來(lái)標(biāo)識(shí)一臺(tái)主機(jī)。嚴(yán)格來(lái)說(shuō),IP地址用來(lái)標(biāo)識(shí)主機(jī)上的網(wǎng)絡(luò)接口。
IP地址現(xiàn)在由互聯(lián)網(wǎng)名字和數(shù)字分配機(jī)構(gòu)ICANN負(fù)責(zé)分配和管理
IP地址是一個(gè)32位的二進(jìn)制數(shù),為了便于書寫和記憶,IP地址采用點(diǎn)分十進(jìn)制記法表示。
把32位的IP地址分為4組,每組8位,然后將每組數(shù)字用十進(jìn)制表示,并且在這些數(shù)字之間加上一個(gè)點(diǎn),就稱為IP地址的點(diǎn)分十進(jìn)制記法。
分層結(jié)構(gòu)
IP地址采用了分層(hierarchical)結(jié)構(gòu),即IP地址由對(duì)應(yīng)互聯(lián)網(wǎng)某種層次結(jié)構(gòu)的幾個(gè)部分構(gòu)成。
IP地址包括兩部分:網(wǎng)絡(luò)部分
和主機(jī)部分
。
IP地址的網(wǎng)絡(luò)部分指明主機(jī)連接到哪個(gè)網(wǎng)絡(luò),所有連到同一網(wǎng)絡(luò)上的主機(jī),其IP地址的網(wǎng)絡(luò)部分相同。
IP地址的主機(jī)部分唯一標(biāo)識(shí)了特定網(wǎng)絡(luò)中的一臺(tái)主機(jī)。
采用分層結(jié)構(gòu)的IP地址后,路由器可以僅根據(jù)IP地址的網(wǎng)絡(luò)部分來(lái)轉(zhuǎn)發(fā)分組,而無(wú)需考慮IP地址的主機(jī)部分。
編址方案的演變
IP地址的編址方案經(jīng)歷了三個(gè)歷史階段:
①分類編址
。將IP地址分為A、B、C、D、E五類,是最基本的編址方案,在1981年通過(guò)的RFC790中就包含了A、B、C類地址的相關(guān)規(guī)定。
②子網(wǎng)劃分
。是在分類編址的基礎(chǔ)上所作的改進(jìn),1985年通過(guò)的RFC950中包含了相關(guān)的規(guī)定。
③無(wú)分類編址
?;跓o(wú)類域間路由(Classless Inter-Domain Routing,(CDR)的編址方案,是目前正在使用的編址方案。在1993年通過(guò)的RFC1519中提出后,很快就得到推廣應(yīng)用。2006年,RFC1519被RFC4632替換。
分類編址
在分類編址方案中,采用兩級(jí)編址
方案,每個(gè)單播IP地址都由兩個(gè)字段組成。
IP地址 ::= {<網(wǎng)絡(luò)號(hào)>,<主機(jī)號(hào)>}
其中,網(wǎng)絡(luò)部分是網(wǎng)絡(luò)號(hào)
;主機(jī)部分是主機(jī)號(hào)
。
由于不同網(wǎng)絡(luò)中可能包含不同數(shù)量的主機(jī),一種簡(jiǎn)單的劃分方法是依據(jù)預(yù)計(jì)的主機(jī)數(shù)量,分類編址方案中將不同大小的IP地址空間分配給不同的網(wǎng)絡(luò)。
路由器根據(jù)IP地址的網(wǎng)絡(luò)部分
來(lái)轉(zhuǎn)發(fā)分組。
五類IP地址
IP地址空間被劃分為五類,命名為A、B、C、D和E。
A、B、C類地址空間用于單播地址;
D類地址用于多播地址;
E類地址為保留地址。
A、B、C類IP地址
A類、B類和C類地址屬于單播地址,由網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)兩部分組成。在單播地址空間中,有部分地址被用作特殊用途,不作為單播地址使用。
特殊地址中,主機(jī)號(hào)部分全為1的地址都稱為廣播地址
。
網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)全1的地址用于本網(wǎng)絡(luò)上的廣播,也稱為受限廣播
,其傳播范圍僅限發(fā)送方所屬網(wǎng)絡(luò),路由器不轉(zhuǎn)發(fā)受限廣播。
網(wǎng)絡(luò)號(hào)為指定網(wǎng)絡(luò),主機(jī)號(hào)全1的地址用于向指定網(wǎng)絡(luò)發(fā)送廣播數(shù)據(jù)報(bào),這種廣播也稱為定向廣播。
最初互聯(lián)網(wǎng)建議支持路由器轉(zhuǎn)發(fā)定向廣播,而且默認(rèn)啟用。但RFC2644變更了該策略,要求路由器默認(rèn)禁止轉(zhuǎn)發(fā)定向廣播。
本地環(huán)回測(cè)試地址
用于本主機(jī)的進(jìn)程間通信使用,通常僅使用127.0.0.1
。
排除以上特殊地址后,剩余的地址屬于A、B、C類網(wǎng)絡(luò)的可指派地址
每個(gè)網(wǎng)絡(luò)中主機(jī)號(hào)全1和主機(jī)號(hào)全0的不能指派
A類網(wǎng)絡(luò)中,網(wǎng)絡(luò)號(hào)0和127不能指派
路由器和主機(jī)的IP地址
同一個(gè)網(wǎng)絡(luò)上的主機(jī)其IP地址中的網(wǎng)絡(luò)號(hào)都相同;
不同網(wǎng)絡(luò)上的主機(jī)其IP地址中的網(wǎng)絡(luò)號(hào)不同。
路由器總是具有多個(gè)IP地址,路由器的每一個(gè)接口,其IP地址的網(wǎng)絡(luò)號(hào)都不同。
子網(wǎng)劃分
當(dāng)一些較大的單位或組織內(nèi)部組建了多個(gè)局域網(wǎng),在IP地址的兩級(jí)編址方案下,為這些局域網(wǎng)分配IP地址有困難。
RFC950提出了子網(wǎng)劃分
,來(lái)解決這樣的問(wèn)題
子網(wǎng)劃分將IP地址從兩級(jí)編址方案擴(kuò)展為三級(jí)編址方案,包括兩種方式:
- 定長(zhǎng)子網(wǎng)劃分
- 變長(zhǎng)子網(wǎng)劃分
定長(zhǎng)子網(wǎng)劃分
子網(wǎng)劃分的方法是從IP地址的主機(jī)號(hào)部分借用若干位作為子網(wǎng)號(hào),這樣,兩級(jí)IP地址在本單位內(nèi)部就變?yōu)槿?jí)IP地址。
IP地址:={<網(wǎng)絡(luò)號(hào)>,<子網(wǎng)號(hào)>,<主機(jī)號(hào)>}
互聯(lián)網(wǎng)上的路由器仍然將網(wǎng)絡(luò)號(hào)看作IP地址的網(wǎng)絡(luò)部分;
單位的邊界路由器和內(nèi)部路由器將網(wǎng)絡(luò)號(hào)+子網(wǎng)號(hào)
記作網(wǎng)絡(luò)地址,將網(wǎng)絡(luò)地址看作IP地址的網(wǎng)絡(luò)部分。
路由器根據(jù)IP地址的網(wǎng)絡(luò)部分來(lái)轉(zhuǎn)發(fā)分組。
例子:
以一個(gè)B類網(wǎng)絡(luò)139.9.0.0為例討論子網(wǎng)劃分。假設(shè)申請(qǐng)到該B類地址的單位,從主機(jī)號(hào)部分借用8位作為子網(wǎng)號(hào),則劃分子網(wǎng)后的P地址結(jié)構(gòu)如圖所示。
本例中,支持最多配置28=256個(gè)子網(wǎng),每個(gè)子網(wǎng)最多可包含28-2=254臺(tái)主機(jī)。
劃分子網(wǎng)后,主機(jī)號(hào)為全0和全1的P地址仍然不能指派給主機(jī)。
本例中所有子網(wǎng)的子網(wǎng)號(hào)長(zhǎng)度相等
,這種子網(wǎng)劃分方式稱為定長(zhǎng)子網(wǎng)劃分
。
假設(shè)該單位已經(jīng)組建了3個(gè)局域網(wǎng),網(wǎng)絡(luò)管理員為它們分配了子網(wǎng)號(hào)5、10和15,其余的子網(wǎng)號(hào)暫時(shí)保留。
劃分子網(wǎng)后,B類網(wǎng)絡(luò)139.9.0.0對(duì)外部仍表現(xiàn)為一個(gè)網(wǎng)絡(luò),當(dāng)邊界路由器和內(nèi)部路由器收到P數(shù)據(jù)報(bào)后按照網(wǎng)絡(luò)地址轉(zhuǎn)發(fā)分組。
子網(wǎng)掩碼
劃分子網(wǎng)后,網(wǎng)絡(luò)內(nèi)部的路由器必須能夠區(qū)分發(fā)往不同子網(wǎng)的分組。
RFC950中定義了子網(wǎng)掩碼
,用以從IP地址中獲取網(wǎng)絡(luò)地址。
子網(wǎng)掩碼中的1對(duì)應(yīng)于引P地址中的網(wǎng)絡(luò)號(hào)和子網(wǎng)號(hào),而子網(wǎng)掩碼中的0對(duì)應(yīng)于
子網(wǎng)劃分后的P地址中的主機(jī)號(hào)。
子網(wǎng)掩碼可以采用點(diǎn)分十進(jìn)制記法表示,也可以用掩碼中1的位數(shù)表示,稱為前綴長(zhǎng)度
。
上例中,三個(gè)子網(wǎng)的子網(wǎng)掩碼均為255.255.255.0
,前綴長(zhǎng)度為24。
常見(jiàn)的子網(wǎng)掩碼:
默認(rèn)子網(wǎng)掩碼:
A類地址的默認(rèn)子網(wǎng)掩碼為255.0.0.0;
B類地址的默認(rèn)子網(wǎng)掩碼為255.255.0.0;
C類地址的默認(rèn)子網(wǎng)掩碼為255.255.255.0
子網(wǎng)掩碼的按位與操作
將IP地址與其子網(wǎng)掩碼做按位與操作(AND),即可得到相應(yīng)的網(wǎng)絡(luò)地址。
如上例中,邊界路由器收到目的IP地址為139.9.10.11的IP數(shù)據(jù)報(bào),將該IP地址與子網(wǎng)掩碼255.255.255.0做按位與操作的過(guò)程如下。
計(jì)算得出網(wǎng)絡(luò)地址為139.9.10.0
變長(zhǎng)子網(wǎng)劃分
如果將一個(gè)網(wǎng)絡(luò)劃分為多個(gè)大小不同的子網(wǎng),以適應(yīng)多個(gè)子網(wǎng)具有不同數(shù)量主機(jī)的需求。這種子網(wǎng)劃分方式稱為變長(zhǎng)子網(wǎng)劃分
。
在變長(zhǎng)子網(wǎng)劃分中,各子網(wǎng)的子網(wǎng)號(hào)部分長(zhǎng)度不同,因此其子網(wǎng)掩碼的前綴長(zhǎng)度不同,這種子網(wǎng)掩碼稱為變長(zhǎng)子網(wǎng)掩碼VLSM
。
在上小節(jié)定長(zhǎng)子網(wǎng)劃分的例子中,如果將子網(wǎng)1進(jìn)一步劃分為兩個(gè)子網(wǎng),將它們的子網(wǎng)掩碼配置為255.255.255.128即子網(wǎng)掩碼前綴長(zhǎng)度為25,就得到一個(gè)變長(zhǎng)子網(wǎng)劃分的實(shí)例。
進(jìn)行了變長(zhǎng)子網(wǎng)劃分后,整個(gè)網(wǎng)絡(luò)對(duì)外部仍表現(xiàn)為一個(gè)網(wǎng)絡(luò)。
無(wú)分類編址
無(wú)分類編址方案是為了緩解IPV4的分配壓力。
ETF在VLSM的基礎(chǔ)上,研究出了無(wú)分類編址方案,它的正式名字是無(wú)分類域間路由選擇(Classless Inter-Domain Routing,ClDR)
CIDR消除了傳統(tǒng)的A類、B類和C類地址以及劃分子網(wǎng)的概念,可以更加有效地分配IPv4地址空間。
CIDR將P地址從三級(jí)編址改回兩級(jí)編址,但這已經(jīng)是無(wú)分類的兩級(jí)編址。
IP地址:={<網(wǎng)絡(luò)前綴>,<主機(jī)號(hào)>}
其中,網(wǎng)絡(luò)部分是網(wǎng)絡(luò)前綴;主機(jī)部分是主機(jī)號(hào)。
路由器根據(jù)P地址的網(wǎng)絡(luò)部分來(lái)轉(zhuǎn)發(fā)分組。
CIDR采用斜線記法,也稱為CIDR記法,即在IP地址后面加上斜線 /
,然后寫上網(wǎng)絡(luò)前綴所占的位數(shù)。
如IP地址:
222.22.65.10/20
的網(wǎng)絡(luò)前綴為20位。
網(wǎng)絡(luò)前綴消除了一個(gè)IP地址中網(wǎng)絡(luò)和主機(jī)號(hào)的預(yù)定義分隔,使更細(xì)粒度的IP地址分配成為可能。
網(wǎng)絡(luò)前綴都相同的連續(xù)的IP地址組成一個(gè)CIDR地址塊。
已知CIDR地址塊中的任何一個(gè)地址,就可以求出這個(gè)地址塊的起始地址(即最小地址)和最大地址,以及地址塊中的地址數(shù),
該地址塊共有212=4096個(gè)地址,最大允許指派的主機(jī)數(shù)為212一2=4094個(gè)。
通常用地址塊中的最小地址和網(wǎng)絡(luò)前綴的位數(shù)標(biāo)識(shí)地址塊,上述地址塊可記為222.22.64.0/20
。
CIDR掩碼
在CIDR中,使用地址掩碼從IP地址中獲取網(wǎng)絡(luò)前綴。地址掩碼由一串1和一串0組成,而1的個(gè)數(shù)就是網(wǎng)絡(luò)前綴的長(zhǎng)度。地址掩碼也稱為CIDR掩碼
,或簡(jiǎn)稱為掩碼
。
IP地址與CIDR掩碼做按位與操作,可以獲得網(wǎng)絡(luò)前綴。
雖然CIDR不再使用子網(wǎng)的概念和子網(wǎng)號(hào),但申請(qǐng)到一個(gè)CIDR地址塊的單位仍然可以在本單位內(nèi)根據(jù)需要?jiǎng)澐殖鲆恍┳泳W(wǎng)。這些子網(wǎng)的網(wǎng)絡(luò)前綴比整個(gè)單位的網(wǎng)絡(luò)前綴要長(zhǎng)些。
路由聚合
CIDR不僅可以提高IPv4地址空間的分配效率,也可以用來(lái)減少路由器中路由表的項(xiàng)目數(shù),改善路由器的性能,這個(gè)功能可以通過(guò)路由聚合
來(lái)實(shí)現(xiàn)。
路由聚合是指將相鄰CIDR地址塊的網(wǎng)絡(luò)前綴合并成一個(gè)較短的網(wǎng)絡(luò)前綴,聚合后的一條路由信息可以覆蓋更多地址空間。
由于有些聚合后的CIDR地址塊包含了多個(gè)C類地址,路由聚合也被稱為構(gòu)成超網(wǎng)
。
兩個(gè)CIDR地址塊能夠聚合需要滿足以下條件:
①兩個(gè)地址塊相鄰且大小一致;
②兩個(gè)地址塊的前n位相同:
③聚合前后,CIDR地址塊包含的IP地址相同。
在CIDR的應(yīng)用中,有一種特殊的情況,主機(jī)號(hào)全0和全1的P地址可以使用。
當(dāng)路由器之間被一條點(diǎn)到點(diǎn)鏈路連接,則每個(gè)端點(diǎn)都需要分配一個(gè)IP地址,且兩臺(tái)路由器之間的網(wǎng)絡(luò)僅包含兩個(gè)IP地址,為了節(jié)省IP地址,RFC3021建議將/31地址塊
中包含的兩個(gè)地址分配給兩臺(tái)路由器。
相應(yīng)的,在IPv6中,對(duì)于這種特殊情況,RFC6164中也建議使用/127地址塊
。
特殊用途的IP地址
常見(jiàn)的特殊用途地址包括:
專用網(wǎng)絡(luò)地址
"鏈路本地”地址
運(yùn)營(yíng)商級(jí)NAT共享地址
用于文檔的測(cè)試網(wǎng)絡(luò)地址
環(huán)回測(cè)試地址
受限廣播地址
專用網(wǎng)絡(luò)地址
專用網(wǎng)是指企業(yè)或機(jī)構(gòu)內(nèi)部專用的網(wǎng)絡(luò),也稱為私有網(wǎng)絡(luò)。
專用網(wǎng)絡(luò)內(nèi)的IP地址不需要向ICANN申請(qǐng),RFC1918和RFC6890規(guī)定了三塊IP地址空間作為專用網(wǎng)絡(luò)地址,它們也稱為專有地址,僅用于專用網(wǎng)絡(luò)內(nèi)部的主機(jī)和路由器之間的通信。
①10.0.0.0-10.255.255.255(10.0.0.0/8);
②172.16.0.0~172.31.255.255(172.16.0.0/12);
③192.168.0.0~192.168.255.255(192.168.0.0/16)。
在專用網(wǎng)絡(luò)內(nèi)分配P地址,只需要保證在專用網(wǎng)絡(luò)內(nèi)唯一即可。
當(dāng)專用網(wǎng)絡(luò)內(nèi)的主機(jī)需要和互聯(lián)網(wǎng)上的主機(jī)通信時(shí),需要利用網(wǎng)絡(luò)地址轉(zhuǎn)換NAT
。
鏈路本地地址
為主機(jī)配置IP地址,可以采用手動(dòng)方式
或自動(dòng)方式
。
手動(dòng)配置的方式稱為靜態(tài)IP地址配置,自動(dòng)配置方式利用動(dòng)態(tài)主機(jī)配置協(xié)議DHCP進(jìn)行配置。
在選擇自動(dòng)配置P地址后,如果主機(jī)獲取P地址失敗,則操作系統(tǒng)會(huì)自動(dòng)分配一個(gè)鏈路本地地址(Link-Local address)給主機(jī)。
鏈路本地地址由RFC3927規(guī)定,包含一個(gè)/16地址塊:169.254.0.0/16。
鏈路本地地址僅用于同一個(gè)物理網(wǎng)絡(luò)上的、都配置了鏈路本地地址的主機(jī)之間的通信。
運(yùn)營(yíng)商級(jí)NAT共享地址
ISP
也被稱為運(yùn)營(yíng)商。由于能用于互聯(lián)網(wǎng)通信的公網(wǎng)地址
非常緊缺,運(yùn)營(yíng)商也不能夠再獲得新的公網(wǎng)IP地址。
為了滿足新用戶接入互聯(lián)網(wǎng)的需求,RFC6598規(guī)定了一個(gè)/10地址塊
:100.64.0.0/10
,用作運(yùn)營(yíng)商級(jí)NAT(Carrier-Grade NAT,CGN)共享地址,記作CGN地址。
CGN地址只能用于ISP的內(nèi)部網(wǎng)絡(luò),每個(gè)ISP都可以使用CGN地址。
用戶通過(guò)ISP訪問(wèn)互聯(lián)網(wǎng)需要經(jīng)過(guò)兩次NAT
。
用于文檔的測(cè)試網(wǎng)絡(luò)地址
在各種技術(shù)規(guī)范或者技術(shù)文檔中,經(jīng)常需要使用某些網(wǎng)絡(luò)示例。為了避免使用已分配給他人的地址而引起沖突的可能,RFC5737保留了3個(gè)地址塊,專用于在文檔中做測(cè)試網(wǎng)絡(luò)地址。
①TEST-NET-1:192.0.2.0~192.0.2.255(192.0.2.0/24);
②TEST-NET-2:198.51.100.0-198.51.100.255(198.51.100.0/24);
③TEST-NET-3:203.0.113.0~203.0.113.255(203.0.113.0/24)。
用于文檔的測(cè)試網(wǎng)絡(luò)地址也不會(huì)出現(xiàn)在公共互聯(lián)網(wǎng)中
IP地址規(guī)劃和分配
利用CIDR進(jìn)行IP地址規(guī)劃與分配主要考慮以下三個(gè)步驟:
(1)確定需要的CIDR地址塊的數(shù)量和大小。
綜合考慮建筑物的分布位置以及部門的數(shù)量,確定需要的CIDR地址塊的數(shù)量
根據(jù)建筑物內(nèi)或部門中的信息點(diǎn)數(shù)量,確定每個(gè)CIDR地址塊包括的IP地址數(shù)目
每個(gè)CIDR地址塊包括的IP地址數(shù)目是2的整數(shù)次冪,且其中的最小地址和最大地址不能分配給主機(jī)。
(2)確定掩碼。
根據(jù)CIDR地址塊的大小,計(jì)算并確定掩碼。
(3)CIDR地址塊分配。
進(jìn)行CIDR地址塊的分配,需要遵循以下規(guī)則:
①應(yīng)先為較大的地址塊分配網(wǎng)絡(luò)前綴;
②在相同路徑上的地址塊應(yīng)具有相同的前綴,便于進(jìn)行路由聚合;
③應(yīng)保留部分地址塊,以備將來(lái)擴(kuò)展使用。
舉例
某校園網(wǎng)信息點(diǎn)分布情況
第三章 應(yīng)用層
應(yīng)用層協(xié)議原理
網(wǎng)絡(luò)應(yīng)用程序的核心是能夠運(yùn)行在不同的端系統(tǒng)并通過(guò)網(wǎng)絡(luò)相互通信的程序。
“主機(jī)A和主機(jī)B進(jìn)行網(wǎng)絡(luò)通信”,實(shí)際上是指:運(yùn)行在主機(jī)A上的某個(gè)網(wǎng)絡(luò)應(yīng)用程序和運(yùn)行在主機(jī)B上的某個(gè)網(wǎng)絡(luò)應(yīng)用程序進(jìn)行通信
在計(jì)算機(jī)網(wǎng)絡(luò)中,我們并不特別關(guān)注同一臺(tái)主機(jī)上的進(jìn)程間的通信,而關(guān)注運(yùn)行在不同端系統(tǒng)(可能具有不同的操作系統(tǒng))上的應(yīng)用進(jìn)程之間如何通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行通信。
在互聯(lián)網(wǎng)的應(yīng)用層,應(yīng)用進(jìn)程之間的通信方式分為兩種:
- 客戶-服務(wù)器(Client-Server,C/S)方式
- 對(duì)等連接(Peer-to-Peer,P2P)方式
客戶-服務(wù)器方式
客戶和服務(wù)器都是指通信中所涉及的應(yīng)用進(jìn)程
。
客戶-服務(wù)器方式所描述的是進(jìn)程之間服務(wù)和被服務(wù)的關(guān)系。
客戶是服務(wù)的請(qǐng)求方
。
服務(wù)器是服務(wù)的提供方
。
特點(diǎn)
客戶進(jìn)程:
①被用戶調(diào)用后開始運(yùn)行,需要通信時(shí)主動(dòng)向服務(wù)器發(fā)起通信,請(qǐng)求對(duì)方提供服務(wù)。因此,客戶進(jìn)程必須知道服務(wù)器進(jìn)程的地址。這里的地址由主機(jī)的IP地址和進(jìn)程綁定的端口
組成。
②不需要特殊的硬件和很復(fù)雜的操作系統(tǒng)的支持。
服務(wù)器進(jìn)程:
①專門用來(lái)提供某種服務(wù)的進(jìn)程,可以同時(shí)處理一個(gè)或多個(gè)遠(yuǎn)程或本地客戶的請(qǐng)求。
②當(dāng)服務(wù)器進(jìn)程被啟動(dòng)后即自動(dòng)調(diào)用并一直不斷地運(yùn)行著,被動(dòng)地等待并接受來(lái)自多個(gè)客戶進(jìn)程的通信請(qǐng)求,因此,服務(wù)器進(jìn)程不需要知道客戶進(jìn)程的地址。
③一般需要性能好的硬件和功能強(qiáng)大的操作系統(tǒng)支持。
對(duì)等連接方式
對(duì)等連接方式的思想是整個(gè)網(wǎng)絡(luò)中共享的內(nèi)容不再被保存在中心服務(wù)器上,各個(gè)終端結(jié)點(diǎn)不明確區(qū)分哪一個(gè)是服務(wù)請(qǐng)求方哪一個(gè)是服務(wù)提供方
。
對(duì)等連接中的每個(gè)結(jié)點(diǎn)既作為客戶訪問(wèn)其它結(jié)點(diǎn)的資源,也作為服務(wù)器提供資源給其它結(jié)點(diǎn)訪問(wèn)。從本質(zhì)上看,對(duì)等連接方式仍然是客戶-服務(wù)器方式。
進(jìn)程通信
在一對(duì)進(jìn)程之間的通信會(huì)話場(chǎng)景中,發(fā)起通信的進(jìn)程叫做客戶進(jìn)程,在會(huì)話開始時(shí)等待通信請(qǐng)求的進(jìn)程叫做服務(wù)器進(jìn)程。
應(yīng)用進(jìn)程通過(guò)稱為套接字(socket)
的軟件接口向網(wǎng)絡(luò)發(fā)送報(bào)文和從網(wǎng)絡(luò)接收?qǐng)?bào)文。
套接字就是應(yīng)用程序進(jìn)程和運(yùn)輸層協(xié)議之間的接口。
套接字也是應(yīng)用進(jìn)程為了獲得網(wǎng)絡(luò)通信服務(wù)而與操作系統(tǒng)進(jìn)行交互時(shí)使用的一種機(jī)制。
套接字的另外一種含義就是"IP地址+端口”,它也可以理解為進(jìn)程地址。
萬(wàn)維網(wǎng)【URL / HTML / HTTP】
萬(wàn)維網(wǎng)(Vorld Wide Web,WWW)
簡(jiǎn)稱為Web,是一個(gè)大規(guī)模的、聯(lián)機(jī)式的信息儲(chǔ)藏所。
萬(wàn)維網(wǎng)是一個(gè)分布式的超媒體系統(tǒng),它是超文本系統(tǒng)的擴(kuò)展。
萬(wàn)維網(wǎng)應(yīng)用通過(guò)統(tǒng)一資源定位符URL
定位信息資源,通過(guò)超文本標(biāo)記語(yǔ)言HTML
描述信息資源,通過(guò)超文本傳輸協(xié)議HTTP
傳遞信息資源。
URL、HTML和HTTP三個(gè)規(guī)范構(gòu)成了萬(wàn)維網(wǎng)的核心構(gòu)建技術(shù),是支撐著萬(wàn)維網(wǎng)運(yùn)行的基石。
HTTP的請(qǐng)求和響應(yīng)過(guò)程
瀏覽器將URL封裝入HTTP請(qǐng)求,發(fā)給萬(wàn)維網(wǎng)服務(wù)器;
萬(wàn)維網(wǎng)服務(wù)器收到請(qǐng)求后,利用URL找到資源,將該資源封裝入HTTP響應(yīng)發(fā)回給瀏覽器;
瀏覽器解析HTML文件,渲染后展示給用戶。
URL HTML HTTP
URL、HTML和HTTP三個(gè)規(guī)范解決了萬(wàn)維網(wǎng)應(yīng)用面對(duì)的三個(gè)關(guān)鍵問(wèn)題:
-
用URL解決了如何標(biāo)識(shí)分布在整個(gè)互聯(lián)網(wǎng)上的資源的問(wèn)題。
-
用HTML解決了萬(wàn)維網(wǎng)文檔以及超鏈接的標(biāo)準(zhǔn)化問(wèn)題,使不同人員創(chuàng)作的不同風(fēng)格的萬(wàn)維網(wǎng)文檔,都能以統(tǒng)一的形式在各種主機(jī)上顯示出來(lái),同時(shí)使跨越站點(diǎn)的資源訪問(wèn)更加方便。
-
用HTTP協(xié)議解決了萬(wàn)維網(wǎng)上的信息資源的傳遞問(wèn)題。
URL
統(tǒng)一資源定位符URL
用來(lái)表示互聯(lián)網(wǎng)上資源的位置和訪問(wèn)這些資源的方法。
URL的一般形式由以下三個(gè)部分組成:
<協(xié)議>://<主機(jī)><端口號(hào)/<路徑>
“<協(xié)議>://”:指出訪問(wèn)該資源所使用的協(xié)議,或稱為服務(wù)方式。
“<主機(jī)>:<端口>”:指出保存該資源的主機(jī)和處理該URL的服務(wù)器進(jìn)程。
如果服務(wù)器上采用的端口是該協(xié)議注冊(cè)過(guò)的熟知端口,則“:<端口>”可以省略?!?lt;路徑>”:指出資源在該主機(jī)中的具體位置。
如果在服務(wù)器上設(shè)置了某目錄下的默認(rèn)資源,則“<路徑>”中可以省略文件名;如果服務(wù)器上設(shè)置了根目錄下的默認(rèn)資源,則“”/<路徑>”部分都可以省略。
HTML文檔
超文本標(biāo)記語(yǔ)言HTML
是制作萬(wàn)維網(wǎng)頁(yè)面的標(biāo)準(zhǔn)語(yǔ)言。目前版本HTML5.0。
HTML使用標(biāo)簽來(lái)描述網(wǎng)頁(yè)文檔,HTML標(biāo)簽是由尖括號(hào)包圍的關(guān)鍵詞,通常是成對(duì)出現(xiàn)的,例如<body>
和</body>
。其中第一個(gè)標(biāo)簽是開始標(biāo)簽,第二個(gè)標(biāo)簽是結(jié)束標(biāo)簽。HTML標(biāo)簽的組成如下:
<tag-name[[attribute-name[=attribute-value]]……]>(文本內(nèi)容)<tag-name>
從開始標(biāo)簽到結(jié)束標(biāo)簽的所有代碼稱為HTML元素
。
HTML文檔由一組嵌套的元素組成。
HTML定義了幾十種元素,用來(lái)定義不同的對(duì)象,如<img>
元素用來(lái)定義圖像,<p>
元素用來(lái)定義段落,<a>
元素用來(lái)定義超鏈接等。
HTML的目標(biāo)是指定文檔的結(jié)構(gòu),而不是文檔的外觀。
為了控制文檔的呈現(xiàn)方式,通常會(huì)使用層疊樣式表CSS
。
HTML文檔分為靜態(tài)文檔
、動(dòng)態(tài)文檔
和活動(dòng)文檔
三種:
- 靜態(tài)HTML文檔:靜態(tài)HTML文檔在創(chuàng)作完畢后就存放在萬(wàn)維網(wǎng)服務(wù)器中,它的內(nèi)容不會(huì)根據(jù)瀏覽器發(fā)來(lái)的數(shù)據(jù)而改變。
- 動(dòng)態(tài)HTML文檔:動(dòng)態(tài)HTML文檔在瀏覽器訪問(wèn)服務(wù)器時(shí)才得以創(chuàng)建。當(dāng)瀏覽器的請(qǐng)求到達(dá)時(shí),服務(wù)器將URL映射到一個(gè)應(yīng)用程序,由應(yīng)用程序根據(jù)請(qǐng)求中的數(shù)據(jù)創(chuàng)建一個(gè)HTML文檔。
- 活動(dòng)HTML文檔:活動(dòng)HTML文檔把創(chuàng)建文檔的工作移到瀏覽器進(jìn)行。服務(wù)器發(fā)回給瀏覽器的文檔中包含腳本程序,瀏覽器執(zhí)行腳本后,得到完整的活動(dòng)HTML文檔。
超文本傳送協(xié)議HTTP
超文本傳送協(xié)議HTTP是萬(wàn)維網(wǎng)的核心。
目前,HTTP/1.1
和HTTP/2
是互聯(lián)網(wǎng)建議標(biāo)準(zhǔn)。
HTTP客戶程序通常是瀏覽器,HTTP服務(wù)器程序通常是萬(wàn)維網(wǎng)服務(wù)器。瀏覽器和萬(wàn)維網(wǎng)服務(wù)器,通過(guò)交換HTTP報(bào)文進(jìn)行會(huì)話。
HTTP定義了這些報(bào)文的結(jié)構(gòu)以及客戶和服務(wù)器進(jìn)行報(bào)文交換的方式。
HTTP協(xié)議的目的是實(shí)現(xiàn)瀏覽器從萬(wàn)維網(wǎng)服務(wù)器獲取資源。資源包括文本、聲音、圖像等各種多媒體文件。
HTTP協(xié)議工作過(guò)程
- 客戶瀏覽器進(jìn)程分析URL;
- 瀏覽器向DNS服務(wù)器請(qǐng)求將URL中的主機(jī)域名解析為IP地址:
- DNS服務(wù)器解析出IP地址;
- 瀏覽器用IP地址和端口與萬(wàn)維網(wǎng)服務(wù)器建立TCP連接;
- 瀏覽器發(fā)出HTTP請(qǐng)求報(bào)文;
- 服務(wù)器進(jìn)程返回HTTP響應(yīng)報(bào)文,
- 由瀏覽器進(jìn)行解釋顯示;
- 釋放TCP連接。
注意:HTTP協(xié)議是無(wú)狀態(tài)協(xié)議
持續(xù)連接和非持續(xù)連接
運(yùn)輸層的TCP協(xié)議是面向連接的。如果客戶-服務(wù)器應(yīng)用選用TCP作為運(yùn)輸層協(xié)議,則應(yīng)用程序的設(shè)計(jì)有兩種方式
- 每個(gè)請(qǐng)求/響應(yīng)對(duì)都需要經(jīng)過(guò)一個(gè)單獨(dú)的TCP連接發(fā)送,這種設(shè)計(jì)方法稱為非持續(xù)連接
- 一系列的請(qǐng)求及其響應(yīng)都經(jīng)過(guò)相同的TCP連接發(fā)送,這種設(shè)計(jì)方法被稱為持續(xù)連接。
HTTP/1.0僅支持非持續(xù)連接;
HTTP/1.1既支持非持續(xù)連接,也支持持續(xù)連接。
非持續(xù)連接工作方式下,每獲取一個(gè)文件就要有兩倍RTT的開銷,
效率很低
。
持續(xù)連接的兩種工作方式
HTTP/1.1
在默認(rèn)情況下使用持續(xù)連接,其持續(xù)連接支持兩種工作方式:
- 非流水線方式:客戶在收到前一個(gè)HTTP響應(yīng)報(bào)文后才能發(fā)出下一個(gè)HTTP請(qǐng)求報(bào)文。
- 流水線方式:客戶在收到服務(wù)器發(fā)回的HTTP的響應(yīng)報(bào)文之前就能夠接著發(fā)送新的HTTP請(qǐng)求報(bào)文。一個(gè)接一個(gè)的請(qǐng)求報(bào)文到達(dá)服務(wù)器后,服務(wù)器就可連續(xù)發(fā)回響應(yīng)報(bào)文。
HTTP/1.1
的流水線方式依然要求服務(wù)器按順序發(fā)回響應(yīng)報(bào)文,如果某一個(gè)請(qǐng)求需要的處理時(shí)間很長(zhǎng),即使服務(wù)器采用多線程的方式已經(jīng)完成了后續(xù)請(qǐng)求的處理,也必須等待這個(gè)請(qǐng)求處理完成,在其響應(yīng)報(bào)文發(fā)出后,才能夠發(fā)送后續(xù)的響應(yīng)報(bào)文。
HTTP/2
針對(duì)該問(wèn)題做了改進(jìn),允許在相同連接中交錯(cuò)發(fā)送多個(gè)HTTP請(qǐng)求報(bào)文和HTTP應(yīng)答報(bào)文。
HTTP報(bào)文格式
HTTP有兩類報(bào)文:請(qǐng)求報(bào)文
和響應(yīng)報(bào)文
。
HTTP是面向文本的,在報(bào)文中的每一個(gè)字段都是一些ASCII碼串。
HTTP請(qǐng)求報(bào)文和響應(yīng)報(bào)文都是由三個(gè)部分組成的。
- 開始行:在請(qǐng)求報(bào)文中的開始行叫做請(qǐng)求行,而在響應(yīng)報(bào)文中的開始行叫做狀態(tài)行。
- 首部行:用來(lái)說(shuō)明瀏覽器、服務(wù)器或報(bào)文主體的一些信息。首部可以包含多行,也可以不使用。每一個(gè)首部行中都包含首部字段名和它的值。
- 實(shí)體主體:在請(qǐng)求報(bào)文中稱為
請(qǐng)求主體
,HTTP請(qǐng)求中一般不使用這個(gè)字段。在響應(yīng)報(bào)文中稱為響應(yīng)主體
。
HTTP請(qǐng)求報(bào)文
HTTP響應(yīng)報(bào)文
Cookie
HTTP協(xié)議是無(wú)狀態(tài)協(xié)議,每次請(qǐng)求之間是相互獨(dú)立的。
當(dāng)業(yè)務(wù)邏輯需要了解多次請(qǐng)求之間的關(guān)聯(lián)時(shí),可以使用Cookie,用來(lái)彌補(bǔ)HTTP協(xié)議無(wú)狀態(tài)的不足。
Cookie包含有四個(gè)組件:
①在HTTP響應(yīng)報(bào)文中的一個(gè)Set-Cookie首部行;
②在HTTP請(qǐng)求報(bào)文中的一個(gè)Cookie首部行;
③在用戶系統(tǒng)中保存的Cookie,Cookie可以保存在內(nèi)存中或磁盤上,由用戶瀏覽器進(jìn)行管理;
④位于萬(wàn)維網(wǎng)服務(wù)器的一個(gè)后端數(shù)據(jù)庫(kù)。
代理服務(wù)器
代理服務(wù)器也稱為萬(wàn)維網(wǎng)緩存
。
代理服務(wù)器把最近請(qǐng)求過(guò)的資源的副本保存在自己的存儲(chǔ)空間,當(dāng)收到新請(qǐng)求時(shí),如果代理服務(wù)器發(fā)現(xiàn)新請(qǐng)求的資源與緩存的資源相同,就返回緩存的資源,而不需要按URL再次訪問(wèn)該資源。
部署并使用代理服務(wù)器
具有以下兩個(gè)優(yōu)勢(shì):
- 代理服務(wù)器從整體上降低了萬(wàn)維網(wǎng)上的通信流量,從而改善網(wǎng)絡(luò)性能。
- 代理服務(wù)器可以降低瀏覽器請(qǐng)求的響應(yīng)時(shí)間。
內(nèi)容分發(fā)網(wǎng)絡(luò)
內(nèi)容分發(fā)網(wǎng)絡(luò)CDN是也是一種Web緩存。
提供內(nèi)容分發(fā)服務(wù)的公司簡(jiǎn)稱為CDN公司,他們?cè)诨ヂ?lián)網(wǎng)上部署了許多代理服務(wù)器,因而使大量流量實(shí)現(xiàn)了本地化。
CDN公司部署的代理服務(wù)器也稱為CDN集群
。
一旦CDN集群部署完成,CDN公司就可以動(dòng)態(tài)地將客戶的HTTP請(qǐng)求定向到CDN中的某個(gè)代理服務(wù)器上。
CDN不依賴客戶在瀏覽器中配置代理服務(wù)器,而是依賴DNS將不同的客戶定向到不同的代理服務(wù)器上。
舉例
- 客戶瀏覽器向DNS系統(tǒng)發(fā)起查詢,查找www.abc.cn的P地址。
- DNS系統(tǒng)依據(jù)發(fā)起查詢的客戶端不同,返回不同的結(jié)果。
例如對(duì)于中國(guó)聯(lián)通的用戶A,DNS系統(tǒng)返回部署在中國(guó)聯(lián)通的CDN集群的IP地址P1。 - 客戶端瀏覽器依據(jù)DNS查詢結(jié)果,向CDN集群發(fā)起HTTP請(qǐng)求。
- CDN集群根據(jù)代理服務(wù)器的工作流程,直接返回資源給客戶瀏覽器,或者向源服務(wù)器請(qǐng)求資源
HTTP/1.X存在的問(wèn)題
隨著互聯(lián)網(wǎng)的發(fā)展,HTTP/1.x
已經(jīng)無(wú)法滿足現(xiàn)代萬(wàn)維網(wǎng)的需求了,這主要體現(xiàn)在:
- 線頭阻塞問(wèn)題:服務(wù)器按序處理請(qǐng)求和返回響應(yīng)報(bào)文,需要緩存多個(gè)請(qǐng)求,從而占用更多資源;
- TCP并發(fā)連接數(shù)限制:利用多個(gè)TCP連接,并發(fā)訪問(wèn)萬(wàn)維網(wǎng)服務(wù)器,會(huì)大量消耗服務(wù)器的資源;因此,瀏覽器與服務(wù)器之間通常最多建立5~10個(gè)TCP并發(fā)連接;
- 沒(méi)有報(bào)文首部壓縮方案:HTTP報(bào)文首部?jī)?nèi)容很多,但每次請(qǐng)求首部的變化并不大;
- 明文傳輸不安全:HTTP依賴運(yùn)輸層安全TLS協(xié)議,才能實(shí)現(xiàn)加密傳輸。
HTTP/2的新特性
二進(jìn)制格式的幀
:HTTP/1.1的報(bào)文格式是基于文本的,而HTTP/2采用了新的二進(jìn)制格式;
基于流的多路復(fù)用
:HTTP/2中引入了流的概念,每一對(duì)HTTP請(qǐng)求報(bào)文和響應(yīng)報(bào)文被視為同一個(gè)流,在同一個(gè)TCP連接上實(shí)現(xiàn)了基于流的多路復(fù)用,不同流中的幀可以交錯(cuò)地發(fā)送給對(duì)方;
服務(wù)端推送
:HTTP2允許服務(wù)器為客戶的單個(gè)請(qǐng)求發(fā)送多個(gè)響應(yīng),也就是說(shuō),服務(wù)器可以向客戶推送額外的資源;
首部壓縮
:HTTP/2采用了HPACK壓縮格式來(lái)壓縮請(qǐng)求和響應(yīng)中的首部信息;
增強(qiáng)的安全性
:主流瀏覽器Chrome、.Firefox等都公開宣布只支持加密的HTTP/2,并且HTTP/2對(duì)TLS的安全性做了進(jìn)一步加強(qiáng)。
詳細(xì)介紹:HTTP/2的新特性
HTTP/2解決了很多舊版本HTTP的問(wèn)題,但是它還是存在以下兩個(gè)待解決問(wèn)題
:
- TCP建立連接的時(shí)延問(wèn)題:HTTP基于TCP協(xié)議實(shí)現(xiàn),發(fā)送HTTP請(qǐng)求報(bào)文前需要先建立TCP連接,TCP連接建立時(shí)的三報(bào)文握手機(jī)制有較大時(shí)延;
- 線頭阻塞問(wèn)題未完全解決:HTTP2改進(jìn)了由應(yīng)用層“先進(jìn)先出”引起的線頭阻塞問(wèn)題,但是由TCP“丟失重傳“機(jī)制引起的線頭阻塞問(wèn)題,HTTP2不能解決。
上述兩個(gè)問(wèn)題,都是運(yùn)輸層協(xié)議TCP引起的,如果要從根本上解決,需要替換TCP協(xié)議。
HTTP/3的改進(jìn)
與HTTP/2相比,HTTP3有以下幾點(diǎn)改進(jìn):
- HTTP/3不再基于TCP協(xié)議進(jìn)行數(shù)據(jù)傳輸,而是基于UDP上的QUIC協(xié)議
實(shí)現(xiàn)的。沒(méi)有建立TCP連接時(shí)的時(shí)延。 - QUIC在UDP的基礎(chǔ)之上增加了功能,實(shí)現(xiàn)了類似TCP的流量控制、可靠
傳輸?shù)裙δ堋?/li> - QUIC集成了TLS的加密功能,進(jìn)行密鑰協(xié)商時(shí)也可以降低時(shí)延。
- QUIC實(shí)現(xiàn)了在一條連接上傳輸多個(gè)獨(dú)立的邏輯數(shù)據(jù)流,解決了TCP中線頭阻塞的問(wèn)題。
- TCP是在內(nèi)核空間實(shí)現(xiàn)的擁塞控制,而HTTP3通過(guò)用戶空間來(lái)實(shí)現(xiàn)擁塞
控制。 - HTTP/3將采用兼容HPACKI的QPACK壓縮方案。
域名系統(tǒng)DNS
32位IP地址很難記憶,為了方便記憶和使用,人們引入了主機(jī)名hostname
。
在ARPANET時(shí)代,計(jì)算機(jī)網(wǎng)絡(luò)規(guī)模比較小,主機(jī)名和IP地址的對(duì)應(yīng)關(guān)系保存在一個(gè)名為hosts的文件中。
自1983年起,互聯(lián)網(wǎng)開始采用層次樹型結(jié)構(gòu)的命名方法,任何一個(gè)連接在互聯(lián)網(wǎng)上的主機(jī)或由器,都可以擁有一個(gè)唯一的層次結(jié)構(gòu)的名字,稱為域名(domain name)
分布式的域名系統(tǒng)DNS能夠進(jìn)行域名到IP地址的解析。
域名系統(tǒng)是互聯(lián)網(wǎng)中的核心服務(wù),為互聯(lián)網(wǎng)上的各種網(wǎng)絡(luò)應(yīng)用提供域名解析服務(wù)。
域名服務(wù)器運(yùn)行在UDP的53號(hào)端口
上。
域名空間
DNS中使用的名字集合構(gòu)成了域名空間。早期的互聯(lián)網(wǎng)使用了非等級(jí)的域名空間;目前,互聯(lián)網(wǎng)采用層次樹狀結(jié)構(gòu)的域名空間。
域(domain)
是域名空間中一個(gè)可被管理的劃分。域可以劃分為子域,而子域還可繼續(xù)劃分為子域的子域,這樣就形成了頂級(jí)域、二級(jí)域、三級(jí)域等。
從語(yǔ)法上講,每一個(gè)域名都由標(biāo)號(hào)序列組成,各標(biāo)號(hào)之間用點(diǎn)隔開。
能夠唯一地標(biāo)識(shí)互聯(lián)網(wǎng)上某臺(tái)主機(jī)的域名稱為完全限定域名FQDN,其格式如下:
[hostname].[domain].[tld]
其中
hostname
是主機(jī)名,domain
可以是任意的子域,tld
是頂級(jí)域
例如域名www.zzu.edu.cn是鄭州大學(xué)Web服務(wù)器的完全域名
用域名樹來(lái)表示域名空間的結(jié)構(gòu)是比較直觀的。
頂級(jí)域名由ICANN進(jìn)行管理,其它各級(jí)域名由其上一級(jí)的域名管理機(jī)構(gòu)管理。
域名服務(wù)器
DNS系統(tǒng)使用了大量的域名服務(wù)器,它們以層次方式
組織,每一個(gè)域名服務(wù)器都只對(duì)域名體系中的一部分進(jìn)行管轄。
根據(jù)域名服務(wù)器所起的作用,可以把域名服務(wù)器劃分為四種類型:
·根域名服務(wù)器
·頂級(jí)域名服務(wù)器
·授權(quán)域名服務(wù)器
·本地域名服務(wù)器
根域名服務(wù)器
最高層次的域名服務(wù)器
根域名服務(wù)器都知道所有的頂級(jí)域名服務(wù)器的域名和對(duì)應(yīng)的P地址。
目前,根域名服務(wù)器使用了13個(gè)不同P地址的域名,即(a~m).rootservers.net。由12個(gè)獨(dú)立的機(jī)構(gòu)負(fù)責(zé)運(yùn)營(yíng)。
所有根域名服務(wù)器都是采用任播部署的。使用任播后,DNS解析器不再需要知道DNS服務(wù)器的真正IP地址,只需要知道任播地址就可以在世界各地與當(dāng)?shù)氐淖顑?yōu)實(shí)例通信了。
每個(gè)根服務(wù)器的運(yùn)營(yíng)者獨(dú)立負(fù)責(zé)管理自己的任播實(shí)例,不同根服務(wù)器的任播實(shí)例數(shù)量有很大差異,例如B根域名服務(wù)器只有4個(gè)任播實(shí)例,而E根卻有308個(gè)實(shí)例。
到2021年6月,全世界已經(jīng)安裝了1380個(gè)根域名服務(wù)器的實(shí)例,在我國(guó)有37個(gè)根域名服務(wù)器實(shí)例。
頂級(jí)域名服務(wù)器:負(fù)責(zé)管理在該頂級(jí)域注冊(cè)的所有二級(jí)域名
·收到DNS查詢請(qǐng)求時(shí),頂級(jí)域名服務(wù)器會(huì)給出相應(yīng)的回答。
·回答可能是最終的IP地址,也可能是下一步應(yīng)當(dāng)找的域名服務(wù)器的IP地址。
授權(quán)域名服務(wù)器:負(fù)責(zé)管理某個(gè)區(qū)域的域名服務(wù)器
·授權(quán)域名服務(wù)器有權(quán)限管理的范圍稱為區(qū)域(Zone),區(qū)域的邊界劃分由各單位負(fù)責(zé)。
·區(qū)域可能等于域或者小于域。
·在授權(quán)域名服務(wù)器中保存了該區(qū)域中的所有主機(jī)的域名到P地址的映射。
本地域名服務(wù)器:直接為用戶提供域名解析服務(wù)的域名服務(wù)器
·當(dāng)一臺(tái)主機(jī)發(fā)出DNS查詢請(qǐng)求時(shí),這個(gè)查詢請(qǐng)求報(bào)文被發(fā)送給本地域名服務(wù)器
·每一個(gè)互聯(lián)網(wǎng)服務(wù)提供者ISP,都可以擁有一個(gè)本地域名服務(wù)器,這種域名服務(wù)器有時(shí)也稱為默認(rèn)域名服務(wù)器
資源記錄
域名服務(wù)器中保存的每一個(gè)條目稱作為一個(gè)資源記錄,保存資源記錄的文件被稱為區(qū)域文件
。
所有域名服務(wù)器中的保存的資源記錄共同構(gòu)成了分布式的DNS數(shù)據(jù)庫(kù)。
DNS的資源記錄分為很多種類型,常見(jiàn)的資源記錄類型如下:
- A記錄:指
地址(Address)記錄
,也稱為主機(jī)記錄,作用是將域名映射到主機(jī)的IPv4地址。 - AAAA記錄:與A記錄的作用類似,它將域名映射到主機(jī)的IPv6地址。
- SOA記錄:指
起始授權(quán)(Start Of Authority,SOA)記錄
。SOA記錄是所有區(qū)域文件中
的強(qiáng)制性記錄,它必須是一個(gè)區(qū)域文件中的第一條記錄。SO記錄描述區(qū)域文件所屬區(qū)
域、該區(qū)域的主域名服務(wù)器的完全域名FQDN等必要參數(shù)。 - NS記錄:指
域名服務(wù)器記錄
,用來(lái)指明該域名由哪一個(gè)DNS服務(wù)器來(lái)進(jìn)行解析。NS記
錄的作用是將域名映射為管理該域名的DNS服務(wù)器的完全域名FQDN。 - MX記錄:指
郵件交換記錄
,用來(lái)指明該域的郵件服務(wù)器。MX記錄的作用是將域名映射
為該域的郵件服務(wù)器的完全域名FQDN。 - CNAME記錄:指
別名記錄
,用于將多個(gè)域名映射到同一臺(tái)主機(jī) - PTR記錄:PTR記錄指
指針
記錄,也成為反向記錄
。PTR記錄的作用是將P地址反向映
射為域名。
當(dāng)解析器把一個(gè)域名發(fā)送給DNS服務(wù)器請(qǐng)求解析時(shí),它能獲得的DNS服務(wù)器的應(yīng)答就是與該域名相關(guān)聯(lián)的資源記錄,每個(gè)DNS應(yīng)答報(bào)文都包含了一條或多條資源記錄。
例如:
域edu.cn
的授權(quán)域名服務(wù)器收到了一條解析域名www.zzu.edu.cn
的請(qǐng)求,由于該域名服務(wù)器不是主機(jī)www.zzu.edu.cn
的授權(quán)域名服務(wù)器,因此,它返回的應(yīng)答中包含一條NS記錄和包含一條A記錄,
其中,NS記錄
指明管理www.zzu.edu.cn的授權(quán)域名服務(wù)器為dns.zzu.edu.cn。
A記錄
指明dns.zzu.edu.cn的IP地址。
因此,這條DNS應(yīng)答指引DNS解析器向dns.zzu.edu.cn發(fā)起下一步的查詢。
DNS域名解析可以采用遞歸查詢
和迭代查詢
兩種方法。
遞歸查詢
如果DNS客戶所詢問(wèn)的域名服務(wù)器不知道被查詢域名的IP地址,那么該域名服務(wù)器就代替該DNS客戶,繼續(xù)向其他域名服務(wù)器發(fā)出查詢請(qǐng)求報(bào)文,直至得到結(jié)果。
通常主機(jī)向本地域名服務(wù)器發(fā)起的查詢是遞歸查詢
迭代查詢
當(dāng)域名服務(wù)器收到迭代查詢請(qǐng)求報(bào)文時(shí),要么給出所要查詢的主機(jī)的IP地址,要么告知DNS客戶下一步應(yīng)當(dāng)向哪一個(gè)域名服務(wù)器進(jìn)行查詢而不會(huì)代替DNS客戶進(jìn)行下一步查詢。
本地域名服務(wù)器向其它域名服務(wù)器發(fā)起的查詢是迭代查詢
DNS高速緩存
為了提高DNS查詢效率,并減輕根域名服務(wù)器的負(fù)荷和減少互聯(lián)網(wǎng)上的DNS查詢報(bào)文數(shù)量,在域名服務(wù)器中廣泛地使用了高速緩存。
高速緩存用來(lái)存放最近查詢過(guò)的域名以及從何處獲得域名映射信息的記錄。為保持高速緩存中的內(nèi)容正確,域名服務(wù)器為每項(xiàng)內(nèi)容設(shè)置計(jì)時(shí)器并刪除超過(guò)合理時(shí)間的項(xiàng)。
本地DNS服務(wù)器不僅緩存最終的查詢結(jié)果,也能夠緩存頂級(jí)域名服務(wù)器的IP地址,因而本地DNS服務(wù)器可以繞過(guò)查詢鏈中的根DNS服務(wù)器。
動(dòng)態(tài)主機(jī)配置協(xié)議DHCP
互聯(lián)網(wǎng)上廣泛使用動(dòng)態(tài)主機(jī)配置協(xié)議(Dynamic Host Configuration Protocol,DHCP
)自動(dòng)配置網(wǎng)絡(luò)參數(shù)。
配置信息一般包括0IP地址
、子網(wǎng)掩碼
、默認(rèn)路由器的IP地址
和本地域名服務(wù)器的IP地址
。
DHCP服務(wù)器分配給DHCP客戶的IP地址等網(wǎng)絡(luò)參數(shù)是臨時(shí)的,只能在一段有限的時(shí)間內(nèi)使用,這段時(shí)間稱為租用期
。
DHCP客戶使用UDP的68號(hào)端口,DHCP服務(wù)器使用UDP的67號(hào)端口。
DHCP客戶啟動(dòng)時(shí),需要利用廣播報(bào)文
尋找DHCP服務(wù)器,該廣播報(bào)文屬于本地網(wǎng)絡(luò)廣播
,不能被路由器轉(zhuǎn)發(fā)。
因此,要求每個(gè)網(wǎng)絡(luò)上都有一臺(tái)DHCP服務(wù)器。
為了避免DHCP服務(wù)器過(guò)多,DHCP利用DHCP中繼代理
解決該問(wèn)題
- DHCP中繼代理配置了DHCP服務(wù)器的P地址信息。
- DHCP中繼代理收到DHCP客戶以廣播形式發(fā)送的發(fā)現(xiàn)報(bào)文后,就以單播方式向DHCP服務(wù)器轉(zhuǎn)發(fā)此報(bào)文,并等待其回答。
- 收到DHCP服務(wù)器的回答報(bào)文后,DHCP中繼代理再把此回答報(bào)文發(fā)回給DHCP客戶。
例子
-
DHCP客戶從UDP端口68以廣播方式發(fā)送
DHCP Discover報(bào)文
。目的IP地址:255.255.255.255 源IP地址:0.0.0.0 -
DHCP服務(wù)器廣播發(fā)送DHCP,Offer報(bào)文給予響應(yīng)
3. DHCP客戶從收到的Offer報(bào)文中中選擇一個(gè)服務(wù)器,向所選擇的DHCP服務(wù)器廣播發(fā)送DHCP
Request報(bào)文
4. DHCP服務(wù)器收到Request報(bào)文后,向DHCP客戶廣播發(fā)送DHCP ACK
報(bào)文
收到DHCP ACK報(bào)文時(shí),DHCP客戶真正獲得、并能夠使用分配的IP地址
5. 將租期記為T,當(dāng)?shù)竭_(dá)0.5T時(shí)DHCP客戶單播發(fā)送DHCP Request報(bào)文請(qǐng)求續(xù)租,如果沒(méi)有收到DHCP ACK報(bào)文,則在到達(dá)0.875T時(shí),會(huì)再次單播發(fā)送DHCP Request報(bào)文請(qǐng)求續(xù)租。
DHCP服務(wù)器收到單播
DHCP Request報(bào)文,向DHCP客戶單播
發(fā)送DHCP ACK報(bào)文或DHCP
NAK報(bào)文。
如果DHCP客戶收到DHCP ACK報(bào)文,則更新租用期,重新設(shè)置計(jì)時(shí)器
如果DHCP客戶收到DHCP NAK報(bào)文,則停止使用原來(lái)的IP地址,發(fā)送DHCP Discover報(bào)文重新請(qǐng)求
DHCP報(bào)文詳細(xì)格式請(qǐng)參考博客:DHCP報(bào)文格式
電子郵件【SMTP / POP3 / IMAP】
①發(fā)送方使用用戶代理撰寫好一封郵件,通過(guò)SMTP發(fā)送到發(fā)送方的郵件服務(wù)器,暫存在發(fā)送方郵件服務(wù)器的緩存中。
②發(fā)送方郵件服務(wù)器定期掃描郵件緩存,發(fā)現(xiàn)郵件后,通過(guò)SMTP將郵件發(fā)送到接收方郵件服務(wù)器,接收方郵件服務(wù)器將郵件存儲(chǔ)在用戶B的郵箱中。
若投遞失敗,則發(fā)送方郵件服務(wù)器將郵件保存在一個(gè)隊(duì)列中,稍后嘗試再次發(fā)送。
若在規(guī)定期限內(nèi)投遞不成功,則刪除郵件,并通知發(fā)送方投遞失敗。
③當(dāng)接收方訪問(wèn)他的郵件時(shí),郵件服務(wù)器對(duì)接收方的身份進(jìn)行驗(yàn)證。接收方訪問(wèn)郵件可以使用POP3協(xié)議
或者IMAP協(xié)議
。
簡(jiǎn)單郵件傳送協(xié)議SMTP
SMTP最初由RFC821規(guī)定,目前由RFC5321規(guī)定。
SMTP使用客戶-服務(wù)器方式
工作,它工作在TCP的25端口
上。
每個(gè)郵件服務(wù)器都既能充當(dāng)SMTP客戶,也能充當(dāng)SMTP服務(wù)器。
負(fù)責(zé)發(fā)送郵件的SMTP進(jìn)程就是SMTP客戶,而負(fù)責(zé)接收郵件的SMTP進(jìn)程就是SMTP服務(wù)器。
SMTP規(guī)定了14條命令和21種應(yīng)答信息。
每條命令用幾個(gè)字母組成,而每一種應(yīng)答信息一般只有一行信息,由一個(gè)3位數(shù)字的代碼開始,后面附上(也可不附上)很簡(jiǎn)單的文字說(shuō)明。
早期版本的SMTP存在著一些缺點(diǎn):
- 發(fā)送電子郵件不需要經(jīng)過(guò)鑒別,造成互聯(lián)網(wǎng)上垃圾郵件非常多。
·解決:
1、利用POP協(xié)議的賬號(hào)進(jìn)行身份鑒別
2、RFC5321定義了擴(kuò)展的SMTP(ESMTP),增加了客戶端身
份鑒別功能。
- SMTP僅支持傳送ASCII碼,而不支持傳送二進(jìn)制數(shù)據(jù)。
·解決:
定義了多用途互聯(lián)網(wǎng)郵件擴(kuò)展MME,支持傳送二進(jìn)制數(shù)據(jù)
郵局協(xié)議POP3
由RFC1939規(guī)定的版本3,記為POP3
POP3使用客戶-服務(wù)器
的工作方式,它的服務(wù)器工作在TCP的110端口
上
郵局協(xié)議POP是一個(gè)非常簡(jiǎn)單、但功能有限的郵件讀取協(xié)議
POP有兩種工作模式:“下載并保留”和“下載并刪除”
互聯(lián)網(wǎng)報(bào)文存取協(xié)議IMAP
由RFC3501規(guī)定的MAP協(xié)議的第4版
IMAP使用客戶-服務(wù)器
的工作方式,它的服務(wù)器工作在TCP的143端口
上
IMAP也是一個(gè)郵件讀取協(xié)議,它是一個(gè)聯(lián)機(jī)協(xié)議
在用戶未發(fā)出刪除郵件的命令之前,MAP服務(wù)器郵箱中的郵件一直保存著
IMAP允許用戶代理僅讀取郵件中某些部分,如只讀取一個(gè)郵件的首部
IMAP為用戶提供了創(chuàng)建文件夾,以及將郵件從一個(gè)文件夾移動(dòng)到另一個(gè)文件夾的命令
電子郵件格式部分略。
第四章 運(yùn)輸層
運(yùn)輸層概述
運(yùn)輸層的主要任務(wù)是向應(yīng)用進(jìn)程提供端到端的邏輯通信服務(wù)。
運(yùn)輸層協(xié)議是在網(wǎng)絡(luò)邊緣部分的主機(jī)中實(shí)現(xiàn)的,只有主機(jī)的協(xié)議棧
才有運(yùn)輸層。
路由器在轉(zhuǎn)發(fā)分組時(shí)只用到協(xié)議棧的下三層
。
運(yùn)輸層協(xié)議的作用范圍是發(fā)送方進(jìn)程到接收方進(jìn)程。
- 在發(fā)送方,運(yùn)輸層協(xié)議實(shí)體從發(fā)送方應(yīng)用進(jìn)程接收數(shù)據(jù),并依據(jù)運(yùn)輸層協(xié)議約定的方法,將數(shù)據(jù)封裝到運(yùn)輸層數(shù)據(jù)單元內(nèi),交給下層實(shí)體處理;
- 在接收方,運(yùn)輸層實(shí)體從下層實(shí)體收到運(yùn)輸層數(shù)據(jù)單元,解封后將數(shù)據(jù)取出交給接收方應(yīng)用進(jìn)程。
運(yùn)輸層的兩個(gè)重要協(xié)議
運(yùn)輸層中最重要的協(xié)議是傳輸控制協(xié)議TCP和用戶數(shù)據(jù)報(bào)協(xié)議UDP。
運(yùn)輸層復(fù)用和端口
運(yùn)輸層復(fù)用
是指將多種應(yīng)用數(shù)據(jù)封裝在同一種運(yùn)輸層協(xié)議數(shù)據(jù)單元中。
運(yùn)輸層分用
是指將封裝在同一種運(yùn)輸層協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)分發(fā)給不同的應(yīng)用進(jìn)程。
實(shí)現(xiàn)運(yùn)輸層的復(fù)用和分用,需要一個(gè)標(biāo)識(shí)符來(lái)標(biāo)識(shí)不同的應(yīng)用進(jìn)程。
在計(jì)算機(jī)的操作系統(tǒng)中,一般采用進(jìn)程標(biāo)識(shí)符來(lái)標(biāo)識(shí)進(jìn)程。但不同的操作系統(tǒng),其進(jìn)程標(biāo)識(shí)符格式不同。
為了使不同操作系統(tǒng)上的進(jìn)程能夠互相通信,就必須選擇與操作系統(tǒng)無(wú)關(guān)的、統(tǒng)一的標(biāo)識(shí)符來(lái)標(biāo)識(shí)通信中的進(jìn)程。
運(yùn)輸層協(xié)議使用端口號(hào)
來(lái)標(biāo)識(shí)應(yīng)用進(jìn)程,端口號(hào)也簡(jiǎn)稱為端口
TCP
和UDP
的首部中均包含源端口字段
和目的端口字段
源端口字段
用來(lái)標(biāo)識(shí)發(fā)送方進(jìn)程目的端口字段用來(lái)標(biāo)識(shí)接收方進(jìn)程
在接收方進(jìn)行處理時(shí),源端口通常用作“返回地址”的一部分。
端口字段長(zhǎng)度為16比特
,其取值范圍在0~65535之間
運(yùn)輸層的端口僅具有本地意義,即它所標(biāo)識(shí)的是本計(jì)算機(jī)中的應(yīng)用進(jìn)程。
端口種類
IANA將端口分為三類:系統(tǒng)端口
、用戶端口
、動(dòng)態(tài)端口
。
常見(jiàn)的服務(wù)程序及系統(tǒng)端口
用戶數(shù)據(jù)報(bào)協(xié)議UDP
UDP提供運(yùn)輸層最小服務(wù),包括復(fù)用分用功能和差錯(cuò)檢測(cè)功能。
無(wú)連接:
發(fā)送前不需要建立連接
面向報(bào)文:
- UDP保留應(yīng)用層報(bào)文邊界。
·將應(yīng)用進(jìn)程傳遞來(lái)的報(bào)文作為UDP的數(shù)據(jù)部分直接封裝進(jìn)UDP用戶數(shù)據(jù)報(bào)。 - UDP對(duì)應(yīng)用層報(bào)文,既不拆分,也不合并,一次發(fā)送一個(gè)報(bào)文。
UDP報(bào)文長(zhǎng)度
UDP報(bào)文的長(zhǎng)度是由應(yīng)用進(jìn)程決定的
過(guò)長(zhǎng)和過(guò)短的UDP報(bào)文都會(huì)影響通信效率
報(bào)文過(guò)長(zhǎng),則下層的IP協(xié)議在傳送時(shí)有可能需要分片,這會(huì)造成傳輸效率的下降
報(bào)文過(guò)短,則逐層封裝所增加的各層首部所占比例會(huì)較大,也會(huì)造成效率的下降
典型的UDP應(yīng)用進(jìn)程,將報(bào)文長(zhǎng)度控制在512字節(jié)以內(nèi)。如DNS
、DHCP
。
盡最大努力交付
盡最大努力交付的實(shí)質(zhì)是不可靠交付
。
但UDP不會(huì)隨意的丟棄用戶數(shù)據(jù)報(bào);
UDP提供從發(fā)送方到接收方的、端到端的差錯(cuò)檢測(cè)功能,提供無(wú)差錯(cuò)接受服務(wù)。
對(duì)于可能出現(xiàn)的用戶數(shù)據(jù)報(bào)的丟失、重復(fù)或者失序,UDP都不進(jìn)行處理,因此UDP不提供可靠交付服務(wù)。
使用UDP的應(yīng)用進(jìn)程,如果需要可靠交付,需要自己實(shí)現(xiàn)。
UDP不提供流量控制功能
UDP也不提供擁塞控制功能
也就是說(shuō):UDP發(fā)送用戶數(shù)據(jù)報(bào)時(shí),既不考慮接收方當(dāng)前的狀態(tài)和處理能力
;也不考慮網(wǎng)絡(luò)當(dāng)前的擁塞情況和承載能力
。
一旦應(yīng)用進(jìn)程將數(shù)據(jù)傳遞給UDP,UDP立即將用戶數(shù)據(jù)封裝并發(fā)送出去。
因此,UDP發(fā)送用戶數(shù)據(jù)報(bào)的時(shí)機(jī)是由應(yīng)用進(jìn)程控制的。
UDP用戶數(shù)據(jù)報(bào)格式
在Linux虛擬網(wǎng)絡(luò)環(huán)境中,構(gòu)建UDP通信實(shí)例網(wǎng)絡(luò)拓?fù)洹?br /> 利用Linux的nc指令,進(jìn)行UDP通信
截獲的UDP報(bào)文
·
源端口
源端口是發(fā)送方的端口號(hào),占16位
。
源端口號(hào)是可選的,如果UDP的發(fā)送方不需要對(duì)方回復(fù),該字段允許置為全0。
UDP通信實(shí)例截獲的用戶數(shù)據(jù)報(bào)中,源端口值為0xc15e
,即49502
。該端口為短暫端口
目的端口
目的端口是接收方的端口號(hào),占16位
。
接收方UDP向應(yīng)用層交付報(bào)文時(shí)需要使用該字段。
UDP通信實(shí)例截獲的用戶數(shù)據(jù)報(bào)中,目的端口值為0x1193
,即4499
。該端口為登記端口
長(zhǎng)度
長(zhǎng)度指UDP首部和UDP數(shù)據(jù)部分的總長(zhǎng)度,占16位
。
長(zhǎng)度的最小取值是8字節(jié)。
UDP通信實(shí)例截獲的用戶數(shù)據(jù)報(bào)中,長(zhǎng)度字段的值為0x0013
,即19
。本例中,UDP數(shù)據(jù)部分長(zhǎng)度11字節(jié)、UDP首部長(zhǎng)度8字節(jié)。
校驗(yàn)和
UDP校驗(yàn)和是一個(gè)端到端的校驗(yàn)和,占16位
。
UDP校驗(yàn)和由初始發(fā)送方計(jì)算得到,由最終接收方進(jìn)行校驗(yàn),用于校驗(yàn)端到端的傳輸過(guò)程中,是杏出現(xiàn)了比特差錯(cuò)。
對(duì)于不能通過(guò)校驗(yàn)的用戶數(shù)據(jù)報(bào),UDP僅做丟棄處理
UDP通信實(shí)例截獲的用戶數(shù)據(jù)報(bào)中,校驗(yàn)和字段的值為0x92be
,校驗(yàn)通過(guò)。
UDP校驗(yàn)和的計(jì)算范圍覆蓋UDP首部
、UDP數(shù)據(jù)部分
和一個(gè)偽首部
。
偽首部衍生自IP首部和UDP首部中的某些字段,共12字節(jié)
長(zhǎng)。
偽首部并不是用戶數(shù)據(jù)報(bào)真正的首部,只是在計(jì)算機(jī)校驗(yàn)和時(shí),臨時(shí)添加到UDP用戶數(shù)據(jù)報(bào)前面,參加UDP校驗(yàn)和的計(jì)算。
偽首部既不向下層傳送,也不向上層提交,更不會(huì)被封裝傳輸。
在運(yùn)輸層的TCP協(xié)議中,TCP校驗(yàn)和
的計(jì)算也采用了相似的偽首部。
偽首部
源IP地址和目的IP地址均來(lái)源于IP首部。
協(xié)議號(hào)字段也來(lái)源于IP首部,對(duì)于IP-UDP數(shù)據(jù)報(bào)來(lái)說(shuō),該字段值為17
UDP長(zhǎng)度字段來(lái)源于UDP首部.
UDP校驗(yàn)和的計(jì)算方法是求16位字的反碼和的反碼,
這種校驗(yàn)和計(jì)算方法在P協(xié)議、TCP協(xié)議中都有應(yīng)用。
UDP校驗(yàn)和的計(jì)算方法要求16位對(duì)齊,即必須是偶數(shù)個(gè)字節(jié),但UDP用戶數(shù)據(jù)報(bào)的長(zhǎng)度允許是奇數(shù)個(gè)字節(jié)。
因此,對(duì)于奇數(shù)長(zhǎng)度
的用戶數(shù)據(jù)報(bào),UDP在尾部追加一個(gè)全0的填充字節(jié)。
這個(gè)填充字節(jié)也僅僅是為了校驗(yàn)和的計(jì)算和驗(yàn)證,實(shí)際上不會(huì)被傳送出去
可靠傳輸原理
所謂可靠傳輸服務(wù)
是指為上層實(shí)體提供一條可靠的邏輯信道,通過(guò)該信道傳輸?shù)臄?shù)據(jù),不會(huì)發(fā)生比特差錯(cuò)
或者丟失
,并且所有數(shù)據(jù)都按照其發(fā)送順序
進(jìn)行交付。
提供可靠傳輸服務(wù)的協(xié)議稱為可靠傳輸協(xié)議。理想的可靠信道,滿足以下兩個(gè)假定:
(1)傳輸?shù)臄?shù)據(jù)不會(huì)產(chǎn)生比特差錯(cuò)、丟包或延遲;
(2)接收方的接收速率能夠與發(fā)送方的發(fā)送速率一樣快。
本節(jié)從理想的可靠信道開始,逐步去除假定條件,討論在不可靠信道上如何實(shí)現(xiàn)可靠傳輸。
本節(jié)討論的可靠傳輸原理協(xié)議,僅考慮單向數(shù)據(jù)通信
的情況,對(duì)于全雙工數(shù)據(jù)通信
的情況,在可靠傳輸?shù)膶?shí)現(xiàn)方法上,與本節(jié)所述原理一致
為方便描述,我們將發(fā)送方稱為A(Alice)
,將接收方稱為B(Bob)
。
本節(jié)討論的可靠傳輸原理適用于一般的計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議,因此本節(jié)采用術(shù)語(yǔ)協(xié)議數(shù)據(jù)單元PDU
進(jìn)行后續(xù)的討論
停止等待協(xié)議
在理想的可靠信道上傳輸數(shù)據(jù),顯然不需要任何協(xié)議就可以實(shí)現(xiàn)可靠傳輸。
我們?nèi)コ硐胄诺赖?code>第(2)個(gè)假定,保留第(1)個(gè)假定,即信道是無(wú)比特差錯(cuò)
、丟包
或延遲
的。
為了保證接收方B能夠正確的接收和處理收到的數(shù)據(jù),我們?cè)黾恿髁靠刂茩C(jī)制:
當(dāng)B收到一個(gè)PDU,處理完畢,做好接收下一個(gè)PDU的準(zhǔn)備時(shí),B發(fā)送給A一個(gè)確認(rèn)PDU,記為
ACK(Acknowledgment)
。
A每次發(fā)送完一個(gè)PDU就必須停止發(fā)送,等待B發(fā)來(lái)的ACK。在收到ACK后,A才能夠發(fā)送下一個(gè)PDU。
這種具有流量控制的,每發(fā)一個(gè)PDU就停下來(lái)等待的協(xié)議稱為停止等待協(xié)議
,簡(jiǎn)稱為停等協(xié)議
,SW協(xié)議
。
僅具有流量控制功能的停等協(xié)議記為SW1.0協(xié)議
。
我們?nèi)コ硐胄诺赖?code>第(1)個(gè)假定,那么信道中傳輸?shù)臄?shù)據(jù)有可能出現(xiàn)比特差錯(cuò)、丟包或延遲。
分別考慮三個(gè)情況:
數(shù)據(jù)PDU出錯(cuò)或丟失
在SW1.0基礎(chǔ)上,增加如下措施,得到SW2.0協(xié)議:
- B在接收PDU時(shí),可以通過(guò)
校驗(yàn)和計(jì)算
等措施檢測(cè)到差錯(cuò)。對(duì)于出錯(cuò)的PDU,B直接丟棄,不發(fā)送ACK。 - 為發(fā)送方增加超時(shí)重傳機(jī)制:A每發(fā)送一個(gè)PDU后,設(shè)定一個(gè)超時(shí)計(jì)時(shí)器,如果超時(shí)計(jì)時(shí)器到期仍然沒(méi)有收到B發(fā)送的ACK,A就重傳前面發(fā)過(guò)的PDU。
- 如果超時(shí)計(jì)時(shí)器到期之前收到了B發(fā)送的ACK,則撤銷超時(shí)計(jì)時(shí)器。
- 顯然,如果A發(fā)送的數(shù)據(jù)PDU在傳輸過(guò)程中丟失,B將收不到PDU,也就不會(huì)發(fā)送ACK,超時(shí)計(jì)時(shí)器到期后,A也會(huì)重發(fā)丟失的PDU。
具有超時(shí)重傳機(jī)制
,不需要接收方的請(qǐng)求就能自動(dòng)重傳出錯(cuò)或丟失的PDU
,這種協(xié)議稱為自動(dòng)重傳請(qǐng)求ARQ協(xié)議
ACK出錯(cuò)或丟失
如果B發(fā)送給A的確認(rèn)ACK在傳輸過(guò)程中出現(xiàn)差錯(cuò)或丟失,由于A收不到正確的ACK,當(dāng)超時(shí)計(jì)時(shí)器到期后,A將重發(fā)前面發(fā)過(guò)的PDU。
但是B曾經(jīng)正確接收到該P(yáng)DU,為了避免B將重復(fù)的PDU交給上層議實(shí)體,在SW2.0基礎(chǔ)上,為數(shù)據(jù)PDU增加序號(hào),得到SW3.0協(xié)議。
- A每發(fā)送一個(gè)PDU,將序號(hào)加1,寫入新PDU的序號(hào)字段。
- 超時(shí)重傳的PDU與出錯(cuò)或丟失的PDU具有相同的序號(hào)。
- B可以根據(jù)序號(hào)判斷收到的PDU是否是重復(fù)的,如果是重復(fù)的PDU,說(shuō)明B發(fā)給A的ACK沒(méi)有正確送達(dá),于是B丟棄重復(fù)的PDU,并重傳ACK。
ACK延遲
B發(fā)給A的ACK在信道中傳輸時(shí),有可能會(huì)延遲到達(dá)A。
如果A曾經(jīng)重傳過(guò)某個(gè)PDU,當(dāng)遲到的ACK到達(dá)時(shí),A不能判斷該ACK是對(duì)哪一個(gè)數(shù)據(jù)PDU的確認(rèn),SW3.0將失效。
在SW3.0基礎(chǔ)上,為ACK增加序號(hào)
,得到SW4.0協(xié)議。
- B每收到一個(gè)數(shù)據(jù)PDU,取出該P(yáng)DU的序號(hào),在發(fā)送ACK時(shí),將序號(hào)寫入ACK的確認(rèn)號(hào)字段,以此說(shuō)明該ACK確認(rèn)哪個(gè)數(shù)據(jù)PDU。
- A可以根據(jù)確認(rèn)號(hào)判斷收到的ACK是否是重復(fù)的,如果是重復(fù)的ACK,則A丟棄該重復(fù)的ACK,不做任何其它處理。
停止等待協(xié)議的控制措施
停等協(xié)議增加如下幾條控制措施,在不可靠信道上實(shí)現(xiàn)了可靠傳輸。
1. 基于確認(rèn)反饋的流量控制機(jī)制;
2. 基于超時(shí)計(jì)時(shí)器的自動(dòng)重傳機(jī)制;
3. 基于序號(hào)和確認(rèn)號(hào)的重復(fù)PDU識(shí)別機(jī)制。
停止等待協(xié)議的信道利用率
例題:
考慮相距約3000公里的兩臺(tái)主機(jī)A和B用停等協(xié)議進(jìn)行通信。假定主機(jī)A和B通過(guò)一條發(fā)送速率為1Gbit/s(10bit/s)的信道,相連數(shù)據(jù)PDU的長(zhǎng)度為1500字節(jié),忽略從A到B途中經(jīng)過(guò)的所有結(jié)點(diǎn)的處理時(shí)延和排隊(duì)時(shí)延,也忽略B主機(jī)處理數(shù)據(jù)PDU的時(shí)延和發(fā)送ACK的時(shí)延。
計(jì)算發(fā)送方A的信道利用率
停等協(xié)議信道利用率低,造成了通信資源的極大浪費(fèi)。
連續(xù)ARQ協(xié)議
為了提高傳輸效率,可以采用流水線傳輸?shù)姆绞健?br /> 流水線傳輸方式使信道上不斷有數(shù)據(jù)在傳送,可以獲得較高的信道利用率。
采用流水線傳輸方式
的可靠傳輸協(xié)議稱為連續(xù)ARQ協(xié)議,也稱為滑動(dòng)窗口協(xié)議
根據(jù)差錯(cuò)恢復(fù)方式的不同,連續(xù)ARQ協(xié)議分為兩種:回退N步(GBN)的連續(xù)ARQ協(xié)議
和選擇重傳(SR)的連續(xù)ARQ協(xié)議
。
滑動(dòng)窗口
執(zhí)行滑動(dòng)窗口協(xié)議的通信雙方根據(jù)自己的緩存空間,各自維護(hù)一個(gè)窗口。
發(fā)送方維持發(fā)送窗口swnd
,接收方維持接收窗口rwnd
。
對(duì)于發(fā)送窗口:
指針P1指向最早未確認(rèn)的PDU,
指針P2指向下一個(gè)待發(fā)送的PDU,
指針P3指向發(fā)送窗口外的第一個(gè)PDU。
[0,P-1]區(qū)間
內(nèi)對(duì)應(yīng)已經(jīng)發(fā)送并收到確認(rèn)的PDU,
[P1,P2-1]區(qū)間
內(nèi)對(duì)應(yīng)已經(jīng)發(fā)送但尚未收到確認(rèn)的PDU,
[P2,P3-1]區(qū)間
內(nèi)對(duì)應(yīng)允許發(fā)送但尚未發(fā)送的PDU,
大于等于P3區(qū)間
內(nèi)對(duì)應(yīng)不允許發(fā)送的PDU
[P1,P3-1]區(qū)間
稱為發(fā)送窗口
發(fā)送窗口長(zhǎng)度N=P3-P1
本例中,發(fā)送窗口長(zhǎng)度為固定值10
當(dāng)發(fā)送方收到對(duì)3號(hào)和4號(hào)PDU的確認(rèn)ACK后,發(fā)送窗口將向前滑動(dòng),如圖(b)所示。P1指針
滑動(dòng)后指向5號(hào)PDU,由于本例中窗口長(zhǎng)度是固定值,所以P3指針也隨之向前滑動(dòng),保持發(fā)送窗口長(zhǎng)度值10不變。
習(xí)慣上,“向前”指向時(shí)間增大的方向,“向后”指向時(shí)間減少的方向。
對(duì)于接收窗口:
指針P4指向下一個(gè)待接收的PDU
指針P5指向接收窗口外的第一個(gè)PDU
[0,P4-1]區(qū)間
內(nèi)對(duì)應(yīng)已經(jīng)收到,并且已經(jīng)發(fā)送確認(rèn)的PDU,
[P4,P5-1]區(qū)間
內(nèi)對(duì)應(yīng)允許接收的PDU
大于等于P5區(qū)間
內(nèi)對(duì)應(yīng)不允許接收的PDU。
[P4,P5-1]區(qū)間
為接收窗口,接收窗口長(zhǎng)度N’=P5-P4
在本例中,接收窗口長(zhǎng)度為固定值10。
當(dāng)接收方收到3號(hào)PDU后,由于之前接收方已經(jīng)緩存了4號(hào)PDU,接收方可以連續(xù)發(fā)送對(duì)3號(hào)和4號(hào)PDU的確認(rèn)ACK。
發(fā)送4號(hào)ACK后,接收窗口將向前滑動(dòng),如圖(b)所示。P指針滑動(dòng)后指向5號(hào)PDU,
由于本例中窗口長(zhǎng)度是固定值,所以P指針也隨之向前滑動(dòng),保持接收窗口長(zhǎng)度值10不變
累積確認(rèn)
接收方允許采用累積確認(rèn)
的方式發(fā)送確認(rèn)ACK。
累積確認(rèn)指接收方不必對(duì)收到的分組逐個(gè)發(fā)送ACK,而是在收到幾個(gè)分組后,對(duì)按序到達(dá)的最后一個(gè)PDU
發(fā)送ACK,該ACK表示到這個(gè)分組為止的所有分組都已經(jīng)正確收到了。
回退N步GBN協(xié)議
對(duì)比停等協(xié)議
和滑動(dòng)窗口協(xié)議
的基本概念,不難發(fā)現(xiàn),停等協(xié)議實(shí)質(zhì)上是發(fā)送窗口長(zhǎng)度為1,接收窗口長(zhǎng)度也為1的滑動(dòng)窗口協(xié)議。
GBN協(xié)議是發(fā)送窗口長(zhǎng)度大于1,接收窗口長(zhǎng)度等于1的滑動(dòng)窗口協(xié)議。
我們觀察一個(gè)發(fā)送窗口長(zhǎng)度為4,接收窗口長(zhǎng)度為1的GBN協(xié)議運(yùn)行的例子
GBN協(xié)議中的發(fā)送方行為
- 若發(fā)送窗口未滿,則用發(fā)送緩存中的數(shù)據(jù)組裝一個(gè)PDU,發(fā)送出去,登記超時(shí)計(jì)時(shí)器;若發(fā)送窗口已滿,則等待發(fā)送窗口滑動(dòng)。
- 若收到確認(rèn)ACK,則取消該ACK確認(rèn)的PDU以及之前的PDU的超時(shí)計(jì)時(shí)器。然后根據(jù)ACK的確認(rèn)序號(hào)和發(fā)送窗口長(zhǎng)度,計(jì)算并滑動(dòng)當(dāng)前發(fā)送窗口。
- 若檢測(cè)到超時(shí)事件,則重傳超時(shí)的PDU。
GBN協(xié)議中的接收方行為
- 若收到的PDU落在接收窗口內(nèi),則接收該P(yáng)DU,發(fā)送對(duì)該P(yáng)DU的確認(rèn)ACK,并滑動(dòng)接收窗口。
- 若收到的PDU未落在接收窗口內(nèi),則丟棄該P(yáng)DU,發(fā)送對(duì)最后一個(gè)正確PDU的確認(rèn)ACK。
GBN的信道利用率
觀察GBN協(xié)議的運(yùn)行過(guò)程,可以發(fā)現(xiàn)流水線方式的傳輸使信道中不斷有數(shù)據(jù)在傳送,確實(shí)可以提高信道利用率。
但由于接收窗口僅為1,造成丟失或差錯(cuò)的PDU之后到達(dá)的所有PDU均被發(fā)送方重傳,即使這些失序到達(dá)的PDU都是正確的。這種處理方式造成了信道資源的浪費(fèi)。
從發(fā)送方角度來(lái)看,一旦發(fā)生超時(shí)重傳事件,則需要回退N步,從超時(shí)的PDU開始重新發(fā)送所有后續(xù)PDU。
選擇重傳SR協(xié)議
停等協(xié)議
是發(fā)送窗口長(zhǎng)度為1,接收窗口長(zhǎng)度也為1的滑動(dòng)窗口協(xié)議。
GBN協(xié)議
是發(fā)送窗口長(zhǎng)度大于1,接收窗口長(zhǎng)度等于1的滑動(dòng)窗口協(xié)議。
SR協(xié)議
是發(fā)送窗口長(zhǎng)度大于1,接收窗口長(zhǎng)度也大于1的滑動(dòng)窗口協(xié)議。
SR協(xié)議中,接收方使用按序到達(dá)的最后一個(gè)PDU序號(hào)對(duì)所有按序到達(dá)的PDU進(jìn)行累積確認(rèn)
,同時(shí)使用選擇確認(rèn)(Selective Acknowledgement,SACK)
對(duì)失序到達(dá)的PDU進(jìn)行單獨(dú)確認(rèn)。
此處的SACK是選擇重傳SR協(xié)議的選擇確認(rèn),與本書后面章節(jié)介紹的TCP的選擇確認(rèn)選項(xiàng)不同。
我們觀察一個(gè)發(fā)送窗口長(zhǎng)度為4,接收窗口長(zhǎng)度也為4的SR協(xié)議運(yùn)行的例子
SR協(xié)議中的發(fā)送方行為
- 若發(fā)送窗口未滿,則用發(fā)送緩存中的數(shù)據(jù)組裝一個(gè)PDU,發(fā)送出去,登記超時(shí)計(jì)時(shí)器;若發(fā)送窗口已滿,則等待發(fā)送窗口滑動(dòng)。
- 若收到確認(rèn)ACK,則取消該ACK確認(rèn)的PDU以及之前的PDU的超時(shí)計(jì)時(shí)器。然后根據(jù)ACK的確認(rèn)序號(hào)和發(fā)送窗口長(zhǎng)度,計(jì)算并滑動(dòng)當(dāng)前發(fā)送窗口。
- 若收到選擇確認(rèn)SACK,則取消該SACK確認(rèn)的PDU的超時(shí)計(jì)時(shí)器。
- 若檢測(cè)到超時(shí)事件,則重傳超時(shí)的PDU。
SR協(xié)議中的接收方行為
- 若收到的PDU落在接收窗口內(nèi),且該P(yáng)DU是按序到達(dá)的PDU,則接收該P(yáng)DU,對(duì)所有按序到達(dá)的正確PDU發(fā)送累積確認(rèn)ACK,并滑動(dòng)接收窗口。
- 若收到的PDU落在接收窗口內(nèi),但該P(yáng)DU是失序到達(dá)的PDU,則緩存該P(yáng)DU,發(fā)送對(duì)該P(yáng)DU的選擇確認(rèn)SACK,并重新發(fā)送對(duì)最后一個(gè)正確PDU的確認(rèn)ACK。
否定確認(rèn)NAK的概念
選擇重傳$R協(xié)議可以跟否定策略結(jié)合在一起使用,即當(dāng)接收方檢測(cè)到錯(cuò)誤的PDU時(shí),它就發(fā)送一個(gè)否定確認(rèn)(Negative Acknowledgement,NAK)
在發(fā)送方,收到NAK可以觸發(fā)該P(yáng)DU的重傳操作,而不需要等到對(duì)應(yīng)的超時(shí)計(jì)時(shí)器超時(shí),因此可以提高協(xié)議性能。
傳輸控制協(xié)議TCP
TCP協(xié)議是面向連接的可靠傳輸協(xié)議,提供連接管理
、可靠傳輸
、流量控制
和擁塞控制
等功能。
TCP連接是邏輯連接,TCP把連接
作為最基本的抽象。
TCP連接的端點(diǎn)稱為套接字(socket)
RFC793中定義套接字由端口號(hào)拼接到P地址構(gòu)成:
套接字=(IP地址:端口號(hào))
每一條TCP連接有且僅有兩個(gè)端點(diǎn),每一條TCP連接唯一地被通信兩端的兩個(gè)套接字確定。
TCP連接兩端的主機(jī)需要維護(hù)TCP連接狀態(tài)
一旦建立連接,主機(jī)中的TCP進(jìn)程將設(shè)置并維護(hù)發(fā)送緩存和接收緩存
面向連接
通信之前需要建立連接
面向字節(jié)流
TCP不保留應(yīng)用層報(bào)文邊界
應(yīng)用進(jìn)程和TCP進(jìn)程的交互是每次一個(gè)數(shù)據(jù)塊,但TCP進(jìn)程把這些數(shù)據(jù)塊看成一串無(wú)結(jié)構(gòu)的字節(jié)流
TCP在合適的時(shí)候從發(fā)送緩存中取出字節(jié)流封裝成報(bào)文段發(fā)送出去
TCP報(bào)文長(zhǎng)度
TCP報(bào)文段長(zhǎng)度由TCP進(jìn)程決定
TCP進(jìn)程 從 發(fā)送緩存中取出并放入報(bào)文段的字節(jié)流長(zhǎng)度
受 最大報(bào)文段長(zhǎng)度(Maximum Segment Size,MSS)
限制,與應(yīng)用層報(bào)文籩界無(wú)關(guān)。
MSS
指TCP報(bào)文段中數(shù)據(jù)部分的最大長(zhǎng)度,不包含TCP首部
TCP在建立連接時(shí),通過(guò)協(xié)商確定MSS值。
其他特點(diǎn)
TCP采用以字節(jié)為單位的滑動(dòng)窗口協(xié)議實(shí)現(xiàn)可靠交付服務(wù)。
通過(guò)TCP連接傳送的數(shù)據(jù),可以保證無(wú)差錯(cuò)、不丟失、不重復(fù),按序到達(dá)。
TCP采用基于窗口的流量控制機(jī)制,接收方將接收窗口值發(fā)給發(fā)送方,發(fā)送方根據(jù)該值調(diào)整發(fā)送窗口長(zhǎng)度,并以此控制發(fā)送速率。
TCP可以根據(jù)超時(shí)重傳事件和快速重傳事件檢測(cè)網(wǎng)絡(luò)的擁塞情況,減緩發(fā)送速度,進(jìn)行擁塞控制。
TCP也支持用**顯式擁塞通知(Explicit Congestion Notification,ECN)**的方式進(jìn)行擁塞控制。
TCP發(fā)送報(bào)文段的發(fā)送時(shí)機(jī)是由TCP進(jìn)程控制的。
TCP報(bào)文格式
在主機(jī)ns57C
上,制作一個(gè)3500字節(jié)的文本文件,命名為3500.0。
從主機(jī)ns56A
向主機(jī)ns57C
發(fā)起TCP通信,并讀取3500.0文件。在ns57C上截獲TCP報(bào)文段。
以下部分較多圖片,文字可參考博客:
http://c.biancheng.net/view/6441.html
https://blog.csdn.net/a19881029/article/details/29557837
保留位
CWR:擁塞窗口縮減。
當(dāng)CWR=1時(shí),表明根據(jù)ECN回顯,發(fā)送方已經(jīng)降低發(fā)送速率。
ECE: ECN回顯。
ECE=1的報(bào)文段是一個(gè)來(lái)自接收方的顯示擁塞通知,表明發(fā)送方之前發(fā)送的報(bào)文段曾經(jīng)遇到了網(wǎng)絡(luò)擁塞。
CWR和ECE用于TCP的顯式擁塞控制,將在后續(xù)中介紹。
URG:緊急數(shù)據(jù)標(biāo)志。
當(dāng)URG=1時(shí),緊急指針字段生效表明報(bào)文段中包含緊急數(shù)據(jù),緊急數(shù)據(jù)的位置由緊急指針字段指明。
2011年RFC6093建議不再使用緊急數(shù)據(jù)。
ACK:確認(rèn)標(biāo)志。
當(dāng)ACK=1時(shí),確認(rèn)號(hào)字段生效,表明報(bào)文段中包含確認(rèn)信息。
TCP規(guī)定,連接建立后的所有報(bào)文段都必須把ACK置1。
PSH:推送標(biāo)志。
當(dāng)PSH=1時(shí),表明發(fā)送方要求接收方盡快將報(bào)文段中的數(shù)據(jù)交付給上層。在包括Berkeley Socket在內(nèi)的多數(shù)TCP/IP實(shí)現(xiàn)中PSH標(biāo)志置1代表發(fā)送方緩存中已經(jīng)沒(méi)有待發(fā)送數(shù)據(jù)。在處理telnet等交互模式的連接時(shí),該標(biāo)志總是置1的。
RST:重置連接。
當(dāng)RST=1時(shí),表明TCP連接中出現(xiàn)了錯(cuò)誤,需要取消連接。
RST=1的報(bào)文段通常稱為RST報(bào)文段
。
SYN:同步連接
當(dāng)SYN=1時(shí),表明報(bào)文段是一個(gè)TCP建立連接請(qǐng)求。
SYN=1的報(bào)文段通常稱為SYN報(bào)文段
。
FIN:終止連接。
當(dāng)FN=1時(shí),表明發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢,并請(qǐng)求釋放TCP連接。
FN=1的報(bào)文段通常稱為FN報(bào)文段。
選項(xiàng)
發(fā)送方有效最大報(bào)文段長(zhǎng)度的計(jì)算
TCP
發(fā)送方在封裝報(bào)文段時(shí),需要計(jì)算有效最大報(bào)文段長(zhǎng)度EMSS。
EMSS受到對(duì)方發(fā)來(lái)的RMSS的限制,也受到發(fā)送方自己的MTU值、TCP選項(xiàng)長(zhǎng)度以及P選項(xiàng)長(zhǎng)度的限制。
RFC1122規(guī)定EMSS的計(jì)算公式如下:
EMSS = min(RMSS + 20,MSS_S) - TCPhdrsize - IPoptionsize
其中:
RMSS
為對(duì)方發(fā)來(lái)的MSS選項(xiàng)中的MSS值;
MSS_S
為發(fā)送方能夠發(fā)送的包含TCP首部的報(bào)文段的最大值,計(jì)算公式為:
MSS.S = 發(fā)送方的MTU-20;
TCPhdrsize
為包含選項(xiàng)的TCP首部長(zhǎng)度;
IPoptionsize
為lP選項(xiàng)長(zhǎng)度。
將RFC1122規(guī)定的EMSS的計(jì)算公式,做一個(gè)簡(jiǎn)單的變換,可以得到:
EMSS=min(RMTU,SMTU)-TCPhdrsize-IPhdrsize
即EMSS值為:發(fā)送方和接收方MTU中的較小值
減去TCP首部長(zhǎng)度
和IP首部長(zhǎng)度
在TCP的具體實(shí)現(xiàn)中,有效最大報(bào)文段長(zhǎng)度EMSS
的計(jì)算還需要考慮路徑MTU(PMTU)
的限制。PMTU指整個(gè)網(wǎng)絡(luò)路徑上的所有鏈路中最小的MTU。
TCP發(fā)送方發(fā)送數(shù)據(jù)時(shí),為提高傳輸效率,會(huì)盡可能按照EMSS值封裝TCP報(bào)文段,
按照EMSS值封裝的報(bào)文段稱為全長(zhǎng)報(bào)文段(Full-sized Segment)
。
RMSS
RFC1122中規(guī)定,RMSS的默認(rèn)值為536字節(jié)
。
如果在SYN報(bào)文段中未包含MSS選項(xiàng),則TCP將RMSS設(shè)置為536字節(jié)。
在早期的計(jì)算機(jī)網(wǎng)絡(luò)中,X.25協(xié)議應(yīng)用廣泛,它的MTU值是576字節(jié)。該MTU值減去20字節(jié)的P固定首部長(zhǎng)度和20字節(jié)的TCP固定首部長(zhǎng)度,剛好得到536字節(jié)。
當(dāng)前的網(wǎng)絡(luò)環(huán)境中,最典型的RMSS值是1460字節(jié)
。
WS
SACK-P和SACK
TCP的確認(rèn)號(hào)具有累積確認(rèn)
功能。因此,對(duì)于失序到達(dá)的報(bào)文段,TCP接收方不能用確認(rèn)號(hào)字段進(jìn)行確認(rèn)。
RFC2018定義的選擇確認(rèn)SACK選項(xiàng)
,用以確認(rèn)失序到達(dá)的報(bào)文段。
如果TCP通信方希望使用SACK選項(xiàng),需要在初始的SYN報(bào)文段中增加允許選擇確認(rèn)(SACK Permitted,SACK-P)
選項(xiàng)。
TS
TCP的連接管理
可參考視頻:
TCP的三次握手和四次揮手
主動(dòng)建立連接的一端稱為客戶
被動(dòng)等待連接建立的一端稱為服務(wù)器。
TCP建立連接的過(guò)程中需要在客戶和服務(wù)器之間進(jìn)行三次報(bào)文段交換,稱為三次握手
或三報(bào)文握手
。
首先,服務(wù)器進(jìn)程B被動(dòng)打開連接,從CLOSED狀態(tài)
進(jìn)入LISTEN狀態(tài)
,等待來(lái)自客戶的建立連接請(qǐng)求。
第1次握手
客戶進(jìn)程A將SYN標(biāo)志置1,選擇初始序號(hào)ISN(A)
,以服務(wù)器B的IP地址和端口號(hào)作為參數(shù),構(gòu)造TCP報(bào)文段,發(fā)送給B。
該報(bào)文段稱為SYN報(bào)文段
。
雖然SYN報(bào)文段的數(shù)據(jù)部分長(zhǎng)度為0,但是占用1字節(jié)編號(hào),以方便服務(wù)器對(duì)SYN請(qǐng)求進(jìn)行確認(rèn)。
客戶從CLOSED
的狀態(tài)進(jìn)入SYN-SENT
狀態(tài)。
第2次握手
收到客戶A的SYN報(bào)文段后,服務(wù)器進(jìn)程B發(fā)送自己的SYN報(bào)文段作為響應(yīng)。
報(bào)文段中,將SYN標(biāo)志置1,選擇初始序號(hào)ISN(B);并將ACK標(biāo)志置1,將ISN(A)+1作為確認(rèn)號(hào)。
該報(bào)文段稱為SYN-ACK報(bào)文段
。
SYN-ACK報(bào)文段也占用1字節(jié)編號(hào)。以方便客戶對(duì)該SYN請(qǐng)求進(jìn)行確認(rèn)。
服務(wù)器從LISTEN
狀態(tài)進(jìn)入SYN-RCVD
狀態(tài)。
第3次握手
收到服務(wù)器B的SYN-ACK報(bào)文段后,客戶進(jìn)程A發(fā)送確認(rèn)報(bào)文段。
報(bào)文段中,將ACK標(biāo)志置1,將ISN(B)+1
作為確認(rèn)號(hào)。序號(hào)字段為ISN(A)+1
。
該報(bào)文段稱為ACK報(bào)文段。
ACK報(bào)文段可以攜帶數(shù)據(jù),也可以不攜帶數(shù)據(jù)。如果不攜帶數(shù)據(jù),則不占用序號(hào),客戶A隨后發(fā)送的數(shù)據(jù)報(bào)文段中序號(hào)字段任然是ISN(A)+1。
連接建立
發(fā)完ACK后,客戶A從SYN-SENT
狀態(tài)進(jìn)入ESTABLISHED
狀態(tài)。
此時(shí),對(duì)于客戶進(jìn)程A,TCP連接已經(jīng)建立,可以開始進(jìn)行數(shù)據(jù)傳輸了。
服務(wù)器B收到客戶A的ACK報(bào)文段后,從SYN-RCVD
狀態(tài)進(jìn)入ESTABLISHED
狀態(tài)。
此時(shí),服務(wù)器進(jìn)程B也可以開始進(jìn)行數(shù)據(jù)傳輸了。
發(fā)完ACK后,客戶A從SYN-SENT
狀態(tài)進(jìn)入ESTABLISHED
狀態(tài)。
此時(shí),對(duì)于客戶進(jìn)程A,TCP連接已經(jīng)建立,可以開始進(jìn)行數(shù)據(jù)傳輸了。
服務(wù)器B收到客戶A的ACK報(bào)文段后,從SYN-RCVD狀態(tài)進(jìn)入ESTABLISHED
狀態(tài)。
此時(shí),服務(wù)器進(jìn)程B也可以開始進(jìn)行數(shù)據(jù)傳輸了。
RST重置連接
如果客戶進(jìn)程向某Socket發(fā)送SYN報(bào)文段請(qǐng)求建立TCP連接,
但該Socket指向的端口并沒(méi)有綁定服務(wù)器應(yīng)用進(jìn)程,即該端口上沒(méi)有服務(wù)進(jìn)程處于LISTEN狀態(tài),
則服務(wù)器上的TCP進(jìn)程會(huì)設(shè)置RST標(biāo)志,發(fā)送RST報(bào)文段給客戶進(jìn)程,拒絕建立連接。
TCP的 連接 釋放
數(shù)據(jù)傳輸結(jié)束后,通信雙方都可以主動(dòng)釋放TCP連接
。
主動(dòng)釋放連接的一端稱為客戶,被動(dòng)釋放連接的一端稱為服務(wù)器。
TCP釋放連接的過(guò)程中需要在客戶和服務(wù)器之間進(jìn)行四次報(bào)文段交換,稱為四次握手或四報(bào)文握手。
假定進(jìn)程A主動(dòng)釋放連接。將數(shù)據(jù)傳輸過(guò)程中,進(jìn)程A發(fā)送給進(jìn)程B的最后一字節(jié)編號(hào)記為x-1,
進(jìn)程B發(fā)送給進(jìn)程A的最后一字節(jié)編號(hào)記為y-1。
第1次握手
·A向B發(fā)送釋放連接請(qǐng)求報(bào)文段。
在該報(bào)文段內(nèi),將FIN標(biāo)志
置1,填寫序號(hào)為×。
由于TCP建議連接建立后的所有報(bào)文段中ACK標(biāo)志
都置1,所以A也將ACK標(biāo)志
置1,并填寫確認(rèn)號(hào)為y,用以確認(rèn)收到的最后一字節(jié)數(shù)據(jù)。
該報(bào)文段一般稱為FIN報(bào)文段。
FIN報(bào)文段數(shù)據(jù)部分長(zhǎng)度為0,但是占用1字節(jié)編號(hào),以方便通信中對(duì)方對(duì)FIN請(qǐng)求進(jìn)行確認(rèn)。
客戶從ESTABLISHED
狀態(tài)進(jìn)入FIN-WAIN-1狀態(tài)
。
第2次握手
收到A的釋放連接請(qǐng)求后,服務(wù)器進(jìn)程B應(yīng)立即確認(rèn)。
在確認(rèn)報(bào)文段中,B將ACK標(biāo)志
置1,填寫確認(rèn)號(hào)為x+1,填寫序號(hào)為y。
如果該ACK不含數(shù)據(jù),則不占用字節(jié)編號(hào)。
服務(wù)器從ESTABLISHED
狀態(tài)進(jìn)入CLOSE-WAIN
狀態(tài)。
客戶收到確認(rèn)報(bào)文段后,從FIN-WAIT-1
狀態(tài)進(jìn)入FIN-WAIT-2
狀態(tài)
這時(shí)的TCP連接處于半關(guān)閉狀態(tài)
,
A不能再發(fā)送數(shù)據(jù)。B如果有數(shù)據(jù),還可以繼續(xù)發(fā)送,A仍然要接收。
第3次握手
左圖示例中,半關(guān)閉狀態(tài)下,B沒(méi)有發(fā)送數(shù)據(jù)。
當(dāng)進(jìn)程B需要釋放連接時(shí),也需要發(fā)送一個(gè)FIN
請(qǐng)求。
該報(bào)文段中,FIN標(biāo)志置1,序號(hào)仍然為y。B也將ACK標(biāo)志置1,確認(rèn)號(hào)仍然為x 1。
FIN報(bào)文段雖然不包含數(shù)據(jù),但占用1字節(jié)編號(hào),
服務(wù)器從CLOSE-WAIT
狀態(tài)進(jìn)入LAST-ACK
狀態(tài)
第4次握手
收到B的FIN請(qǐng)求后,客戶進(jìn)程A應(yīng)立即確認(rèn)。
在確認(rèn)報(bào)文段中,A將ACK標(biāo)志
置1,填寫確認(rèn)號(hào)為y+1,填寫序號(hào)為x+1。
客戶A發(fā)送了確認(rèn)報(bào)文段后,從FIN-WAIT-2
狀態(tài)進(jìn)入TIME-WAIT
狀態(tài)。
連接釋放
服務(wù)器進(jìn)程B收到最后一個(gè)ACK報(bào)文
后,從LAST-ACK
狀態(tài)進(jìn)入COLOSED
狀態(tài)。此時(shí),對(duì)于B來(lái)說(shuō)TCP連接已關(guān)閉。
客戶進(jìn)程A需要在TIME-WAIT
狀態(tài)等待2MSL時(shí)間之后,才能進(jìn)入COLOSED
狀態(tài)。
MSL
代表最長(zhǎng)報(bào)文段生存期,RFC793建議MSL取值2分鐘。
當(dāng)2MSL計(jì)時(shí)器超時(shí)后,A從TIME-WAIT
狀態(tài)進(jìn)入CLOSED
狀態(tài)。對(duì)于A來(lái)說(shuō),TCP連接才關(guān)閉。
TCP的可靠傳輸
TCP的可靠傳輸協(xié)議是以字節(jié)
為單位的滑動(dòng)窗口協(xié)議。
TCP可靠傳輸?shù)奶攸c(diǎn):
1.TCP窗口內(nèi)的序號(hào)不是以PDU為單位編號(hào),而是以字節(jié)為單位編號(hào)。
2.TCP的發(fā)送窗口和接收窗口均大于1。
3.TCP的發(fā)送窗口和接收窗口長(zhǎng)度不是固定的,而是動(dòng)態(tài)變化的。
4.TCP支持多種重傳機(jī)制:超時(shí)重傳、快重傳和SACK重傳。
以字節(jié)為單位的滑動(dòng)窗口
TCP的滑動(dòng)窗口運(yùn)行原理與連續(xù)ARQ協(xié)議
的原理一致。
實(shí)例分析:
接收緩存和接收窗口
由于時(shí)延的影響,從主機(jī)ns56A上觀察上述TCP通信實(shí)例,得到的報(bào)文段順序不同。
假定ns56A收到報(bào)文段后,都立即發(fā)送確認(rèn)信息,則在ns56A上觀察本節(jié)TCP通信實(shí)例,得到的TCP報(bào)文段順序應(yīng)該是:
超時(shí)重傳
如果出現(xiàn)了報(bào)文段丟失或差錯(cuò)
,TCP將會(huì)采用先前介紹的超時(shí)重傳機(jī)制
,對(duì)超時(shí)且未收到確認(rèn)的報(bào)文段進(jìn)行自動(dòng)重傳。
TCP的超時(shí)重傳類似于GBN協(xié)議,采用累積確認(rèn)
,不能單獨(dú)對(duì)失序到達(dá)的報(bào)文段進(jìn)行確認(rèn)。
TCP的超時(shí)重傳概念很簡(jiǎn)單,但實(shí)踐中超時(shí)重傳時(shí)間RTO的選擇卻比較復(fù)雜。
TCP測(cè)量往返時(shí)延RTT
,計(jì)算平滑往返時(shí)間
,并計(jì)算超時(shí)重傳時(shí)間RTO
。
往返時(shí)間RTT的估算
TCP記錄一個(gè)報(bào)文段的發(fā)出時(shí)間,以及收到對(duì)應(yīng)確認(rèn)信息的時(shí)間,二者之差作為一個(gè)RTT測(cè)量值,也稱為RTT樣本,記作RTTsam
TCP維護(hù)一個(gè)RTT的加權(quán)平均值,稱為平滑往返時(shí)間,記作SRTT
。
每進(jìn)行一次測(cè)量,TCP按照如下公式計(jì)算新的平滑往返時(shí)間SRTT:
SRTT = ( 1-α ) x SRTT + α x RTTsam
RFC6298中,建議α取值 0.125 。
SRTT的初值應(yīng)設(shè)置為第一個(gè)有效的RTT樣本。
類似SRTT這種加權(quán)平均值稱為指數(shù)移動(dòng)加權(quán)平均值
,時(shí)間越靠近當(dāng)前時(shí)刻的數(shù)據(jù)權(quán)重越大。
超時(shí)重傳時(shí)間RTO的估算
RFC6298定義了RTT偏差
,記作RTTV
,用以估算RTT樣本
偏離SRTT
的程度。
RTT偏差也是一個(gè)指數(shù)移動(dòng)加權(quán)平均值,每取得一次RTTsam,TCP按照如下公式計(jì)算RTTV:
RTTV = ( 1 - β ) x RTTV + β x | SRTT - RTTsam |
RFC6298中,建議 β 取值0.25。
RTTV的初值設(shè)置為第一個(gè)RTT樣本值的一半。
超時(shí)重傳時(shí)間RTO應(yīng)略大于平滑往返時(shí)間SRTT。
每取得一次RTTsam,TCP計(jì)算SRTT
和RTTV
,然后按照如下公式計(jì)算RTO
:
RTO = SRTT + max(G,4 x RTTV)
上式中G代表系統(tǒng)的時(shí)鐘粒度(clock granularity)
,即使計(jì)算得到的RTTV趨近零,RTO也應(yīng)該比SRTT大1個(gè)時(shí)鐘粒度。
在Liux系統(tǒng)中,TCP時(shí)鐘粒度為1ms
,因此RTO至少比SRTT大1ms。
RFC6298建議給RTO設(shè)定上界和下界,上界的建議值是60秒,下界的建議值是1秒。
在尚未取得有效RTT樣本之前,RFC6298建議將RTO初值設(shè)置為1秒
。
RTT樣本測(cè)量
Karn算法
Karn算法包括兩部分:
- 當(dāng)報(bào)文段重傳后,不采用該報(bào)文段作為RTT樣本。
- 報(bào)文段每重傳一次,將RTO增大為原來(lái)的2倍,直至不再發(fā)生重傳。
Karn算法使TCP可以區(qū)分有效和無(wú)效樣本,保證RTO計(jì)算結(jié)果更加合理
基于時(shí)間戳選項(xiàng)的RTT樣本測(cè)量
在前文中,我們介紹了TCP的時(shí)間戳
選項(xiàng)可以用于往返時(shí)間測(cè)量
。
當(dāng)發(fā)送方收到確認(rèn)信息時(shí),用當(dāng)前時(shí)間減去回顯時(shí)間戳的時(shí)間,即可得到往返時(shí)間
。
利用時(shí)間戳選項(xiàng)計(jì)算往返時(shí)間,顯然可以避免上述二義性,因此不必采用Karn算法的第①部分。
快重傳
超時(shí)重傳機(jī)制可以實(shí)現(xiàn)可靠傳輸,但有如下缺點(diǎn):
- TCP的超時(shí)重傳機(jī)制類似于GBN協(xié)議。
- TCP的超時(shí)重傳機(jī)制會(huì)帶來(lái)更大的網(wǎng)絡(luò)負(fù)載。
- 根據(jù)Karn算法的第②部分,超時(shí)重傳事件還會(huì)引起RTO快速增長(zhǎng),因而會(huì)引起網(wǎng)絡(luò)利用率下降
RFC5681和RFC6582中定義了更為高效的快重傳機(jī)制。
快重傳機(jī)制不依賴重傳計(jì)時(shí)器超時(shí)
,而是基于接收方的反饋信息來(lái)引發(fā)重傳??熘貍鳈C(jī)制通過(guò)檢測(cè)重復(fù)ACK(duplicate ACK)事件
發(fā)現(xiàn)丟包,觸發(fā)重傳。
由于TCP的確認(rèn)號(hào)具有累積確認(rèn)功能,因此,當(dāng)接收方TCP收到失序的報(bào)文段時(shí),發(fā)送的ACK中的確認(rèn)號(hào),與確認(rèn)最后一個(gè)按序到達(dá)的報(bào)文段的確認(rèn)號(hào)一樣。這種再次確認(rèn)某個(gè)報(bào)文段的ACK稱為重復(fù)ACK
。
我們首先介紹接收方發(fā)送ACK的策略
TCP接收方發(fā)送ACK的 策略
重復(fù)ACK的閾值
由于網(wǎng)絡(luò)層不保證按序提交數(shù)據(jù)報(bào),因此TCP發(fā)送方僅收到一個(gè)重復(fù)ACK,并不能確認(rèn)是發(fā)生了
丟包
還是發(fā)生了失序傳輸
。
RFC5681規(guī)定重復(fù)ACK的閾值(DupThresh)
默認(rèn)為3。注意:重復(fù)ACK的閾值是允許調(diào)整的。
當(dāng)收到3個(gè)重復(fù)的ACK,才認(rèn)為這個(gè)已經(jīng)被確認(rèn)4次(1次正常的確認(rèn) 3次重復(fù)的確認(rèn))的報(bào)文段之后的報(bào)文段已經(jīng)丟失。
當(dāng)TCP發(fā)送方收到3個(gè)重復(fù)ACK時(shí),TCP就啟動(dòng)快重傳
,立即重傳丟失的報(bào)文段而不必等待重傳計(jì)時(shí)器超時(shí)。
有效ACK
快重傳機(jī)制屬于選擇重傳協(xié)議
,啟動(dòng)快重傳
后,在收到有效ACK前,TCP只能重傳一個(gè)報(bào)文段。
有效ACK是指確認(rèn)了新到達(dá)數(shù)據(jù)的ACK。有效ACK包括兩種:完全ACK
和部分ACK
,這兩種有效ACK的區(qū)分依賴恢復(fù)點(diǎn)的定義。
當(dāng)發(fā)送方啟動(dòng)快重傳算法時(shí),已經(jīng)發(fā)送了多個(gè)失序報(bào)文段
,RFC6582將此時(shí)發(fā)送方已經(jīng)發(fā)送的最大序號(hào)稱為恢復(fù)點(diǎn)。
快重傳算法的要點(diǎn)
TCP NEWReno版本的快重傳算法的要點(diǎn)可以總結(jié)如下:
收到3個(gè)重復(fù)ACK
:記錄恢復(fù)點(diǎn),啟動(dòng)快重傳算法,重傳丟失的報(bào)文段;收到部分ACK
:立即重傳下一個(gè)丟失的報(bào)文段:收到完全ACK
:退出快重傳。
TCP的快重傳機(jī)制,實(shí)際上以重復(fù)ACK
的形式實(shí)現(xiàn)了隱式的否定確認(rèn)(NAK)
優(yōu)勢(shì)
:與超時(shí)重傳相比,快重傳能更加及時(shí)有效地修復(fù)丟包情況,提高重傳效率。
不足
:雖然可以對(duì)一個(gè)窗口內(nèi)的多個(gè)丟失報(bào)文段進(jìn)行快速重傳,但是第2次重傳是在收到第次重傳的確認(rèn)信息之后,兩次重傳之間的時(shí)間間隔大于一個(gè)RTT,因此效率不高,并且仍然容易觸發(fā)超時(shí)重傳。
SACK重傳
快重傳機(jī)制收到部分ACK
后才能得到下一個(gè)丟失的報(bào)文段的信息,因此在一個(gè)RTT內(nèi)僅能夠重傳一個(gè)報(bào)文段。
TCP的SACK選項(xiàng)用來(lái)描述失序到達(dá)的報(bào)文段信息。
在重復(fù)ACK
中攜帶的SACK選項(xiàng)信息可以反映接收方存在的多個(gè)數(shù)據(jù)空缺,因而發(fā)送方可以根據(jù)SACK的信息,在一個(gè)RTT內(nèi)重傳多個(gè)報(bào)文段。
基于SACK的重傳機(jī)制也屬于選擇重傳協(xié)議
。但TCP的SACK重傳機(jī)制,與先前介紹的選擇重傳的原理協(xié)議有很多不同。
TCP是在復(fù)雜的網(wǎng)絡(luò)環(huán)境中運(yùn)行的協(xié)議,其SACK重傳機(jī)制考慮了更多因素,其通信雙方的行為更復(fù)雜。
為方便描述,這里將采用SACK選項(xiàng)的數(shù)據(jù)接收方簡(jiǎn)稱為SACK接收方
,將采用SACK選項(xiàng)的數(shù)據(jù)發(fā)送方簡(jiǎn)稱為SACK發(fā)送方
。
SACK接收方行為
SACK接收方收到失序報(bào)文段后,將報(bào)文段內(nèi)的失序數(shù)據(jù)暫存在接收緩存
中,然后就生成并發(fā)回發(fā)送方一個(gè)包含SACK選項(xiàng)的報(bào)文段
。
對(duì)于SACK發(fā)送方來(lái)說(shuō),根據(jù)該報(bào)文段中的確認(rèn)號(hào)判定,這個(gè)包含SACK選項(xiàng)的報(bào)文段屬于一個(gè)重復(fù)ACK
。
一個(gè)SACK選項(xiàng)中可以包含多個(gè)字節(jié)塊,SACK選項(xiàng)中的字節(jié)塊簡(jiǎn)稱為SACK塊
。
RFC2018規(guī)定接收方生成SACK選項(xiàng)的規(guī)則如下:
①在生成SACK選項(xiàng)時(shí),接收方應(yīng)該填寫盡可能多的SACK塊。
②第一個(gè)SACK塊必須指明觸發(fā)該SACK選項(xiàng)的失序數(shù)據(jù)序號(hào)
③其它的SACK塊指明最近接收到的失序數(shù)據(jù)序號(hào)。這些SACK塊曾經(jīng)填寫在之
前發(fā)送過(guò)的SACK選項(xiàng)中。
SACK發(fā)送方行為
SACK發(fā)送方除了需要記錄收到的累積確認(rèn)信息,還需記錄收到的SACK信息。
根據(jù)累積確認(rèn)信息和SACK信息,SACK發(fā)送方維護(hù)一個(gè)數(shù)據(jù)結(jié)構(gòu),用來(lái)記錄已被正確接收的失序數(shù)據(jù)塊的序號(hào)范圍和數(shù)據(jù)空缺的序號(hào)范圍。
在RFC6675中,該數(shù)據(jù)結(jié)構(gòu)被稱為記分板(scoreboard)
發(fā)送方在收到SACK選項(xiàng)后,如果判定報(bào)文段丟失,則啟動(dòng)SACK重傳。
依據(jù)重復(fù)ACK閾值(DupThresh)
,RFC6675規(guī)定滿足以下兩個(gè)條件之一時(shí),啟動(dòng)SACK重傳:
- 收到
DupThresh
個(gè)不連續(xù)的SACK塊 SACK塊的最高數(shù)據(jù)序號(hào) - 累積ACK號(hào) > (DupThresh - 1) × MSS。
上述兩個(gè)條件在以下多種情況下,可以觸發(fā)SACK重傳。
- 收到3個(gè)不連續(xù)的重復(fù)ACK,且發(fā)送方的報(bào)文段較小,滿足第①個(gè)條件,啟動(dòng)SACK重傳。
- 收到3個(gè)連續(xù)的重復(fù)ACK時(shí),滿足第②個(gè)條件,啟動(dòng)SACK重傳。
- 發(fā)送方丟失了多個(gè)數(shù)據(jù)報(bào)文段,接收方發(fā)回的重復(fù)ACK數(shù)量不足三個(gè),但滿足第②個(gè)條件,啟動(dòng)SACK重傳。
- 在TCP協(xié)議的設(shè)計(jì)中,對(duì)于不包含數(shù)據(jù)的”純ACK”,沒(méi)有確認(rèn)和重傳的機(jī)制。如果接收方發(fā)出的重復(fù)ACK丟失,但后續(xù)到達(dá)的重復(fù)ACK滿足第②個(gè)條件,也就是說(shuō)只要收到的SACK塊的序號(hào)足夠大,也能夠觸發(fā)SACK重傳。
SACK重傳時(shí),TCP根據(jù)“記分板”中的信息,從低序號(hào)向高序號(hào)依次重傳空缺報(bào)文段。沒(méi)有空缺報(bào)文段后,TCP才會(huì)發(fā)送新數(shù)據(jù)。
優(yōu)點(diǎn):基于SACK的重傳算法,其判斷報(bào)文段丟失的方法比快重傳算法更靈活,且可以在一個(gè)RTT內(nèi)重傳多個(gè)空缺報(bào)文段,在丟包嚴(yán)重的情況下,比快重傳算法更高效,也更不易觸發(fā)超時(shí)重傳。
注意1:SACK發(fā)送方在收到一個(gè)SACK后,不能清除其重傳緩存中對(duì)應(yīng)的數(shù)據(jù),只有收到累積ACK后,才能清除其重傳緩存中對(duì)應(yīng)的數(shù)據(jù)。
注意2:RFC2018規(guī)定,當(dāng)TCP啟動(dòng)超時(shí)重傳時(shí),應(yīng)該忽略SACK中的信息。即使已經(jīng)收到過(guò)SACK確認(rèn),也需要重傳超時(shí)的報(bào)文段之后的所有報(bào)文段。
TCP三種重傳的比較
TCP的流量控制
如果接收方應(yīng)用進(jìn)程讀取數(shù)據(jù)的速度相對(duì)緩慢,而發(fā)送方發(fā)送數(shù)據(jù)太多、太快,發(fā)送的數(shù)據(jù)就可能會(huì)造成接收緩存溢出。
TCP的流量控制機(jī)制完成了對(duì)發(fā)送速度的調(diào)節(jié),它是基于ACK報(bào)文段中的通知窗口長(zhǎng)度
來(lái)實(shí)現(xiàn)的。這種方式提供了明確的來(lái)自接收方的狀態(tài)信息,可以避免接收方緩存溢出。
停等協(xié)議
和連續(xù)ARQ協(xié)議
,兩者都采用了固定長(zhǎng)度的發(fā)送窗口,不能根據(jù)接收方的情況進(jìn)行調(diào)節(jié)。
TCP協(xié)議采用了可變長(zhǎng)度的發(fā)送窗口,其發(fā)送窗口根據(jù)接收方的通知窗口設(shè)定。
TCP流量控制的過(guò)程
接收方每收到一個(gè)報(bào)文段,都重新計(jì)算自己的接收窗口長(zhǎng)度。
·較早的TCP實(shí)現(xiàn)中,TCP接收方被分配一個(gè)固定大小的接收緩存,用以下公式計(jì)算接收窗口長(zhǎng)度:
接收窗口長(zhǎng)度 = 接收緩存字節(jié)數(shù) - 已緩存但未被讀取的按序到達(dá)字節(jié)數(shù)
較新版本的TCP實(shí)現(xiàn)中,增加了TCP接收窗口長(zhǎng)度自動(dòng)調(diào)優(yōu)算法
,該算法綜合考慮當(dāng)前可用緩存容量以及本連接的帶寬時(shí)延積等因素,調(diào)整分配給TCP連接的接收緩存,然后計(jì)算接收窗口長(zhǎng)度。
接收方在發(fā)送確認(rèn)信息給發(fā)送方時(shí),將計(jì)算得到的接收窗口長(zhǎng)度填入TCP首部中的窗口字段通知給發(fā)送方
發(fā)送方要求自己的發(fā)送窗口必須小于等于通知窗口,在不考慮擁塞控制的影響時(shí),發(fā)送方設(shè)置發(fā)送窗口等于通知窗口。
發(fā)送方根據(jù)自己的發(fā)送窗口發(fā)送報(bào)文段。
零窗口通知 / 窗口更新報(bào)文 / 窗口探測(cè)報(bào)文
在流量控制過(guò)程中,如果接收緩存耗盡,接收方會(huì)將通知窗口長(zhǎng)度設(shè)置為0。發(fā)送零窗口通知
給發(fā)送方,不允許發(fā)送方繼續(xù)發(fā)送新數(shù)據(jù)。
在接收方重新獲得可用緩存空間后,主動(dòng)傳送給發(fā)送方窗口更新報(bào)文
。窗口更新報(bào)文通常不包含數(shù)據(jù)。屬于純ACK
在TCP協(xié)議的設(shè)計(jì)中,對(duì)于不包含數(shù)據(jù)的純ACK
,沒(méi)有確認(rèn)和重傳的機(jī)制。如果窗口更新報(bào)文丟失,發(fā)送方將一直等待窗口更新報(bào)文,而接收方則一直等待新的數(shù)據(jù),協(xié)議將陷入死鎖狀態(tài)。
為避免這種死鎖狀態(tài)的出現(xiàn),TCP發(fā)送方會(huì)維持一個(gè)持續(xù)計(jì)時(shí)器
。
一旦收到零窗口通知,發(fā)送方就設(shè)定持續(xù)計(jì)時(shí)器,持續(xù)計(jì)時(shí)器超時(shí)則發(fā)送一個(gè)窗口探測(cè)報(bào)文
,查詢接收方通知窗口變化。
糊涂窗口綜合征
如果應(yīng)用進(jìn)程讀取數(shù)據(jù)后,接收方獲得的可用緩存空間很小,這時(shí)發(fā)送窗口更新報(bào)文,會(huì)造成傳輸效率的下降。
在極端情況下,會(huì)造成發(fā)送方和接收方交互的都是僅包含1字節(jié)數(shù)據(jù)的報(bào)文段,這種現(xiàn)象在RFC813中稱為糊涂窗口綜合征
。
為避免糊涂窗口綜合征,RFC1122建議:在滿足以下兩種情況之一時(shí),TCP才發(fā)送窗口更新報(bào)文。
- 可用緩存可以容納一個(gè)全長(zhǎng)報(bào)文段
- 可用緩存達(dá)到接收緩存空間的一半。
Nagle算法
TCP發(fā)送方發(fā)送數(shù)據(jù)時(shí),會(huì)盡可能按照EMSS值封裝全長(zhǎng)報(bào)文段。
對(duì)交互式應(yīng)用來(lái)說(shuō),TCP的這種發(fā)送機(jī)制時(shí)效性較差。
如果對(duì)交互式應(yīng)用的每字節(jié)數(shù)據(jù)單獨(dú)封裝發(fā)送,則傳輸效率很低。在交互式應(yīng)用中,TCP廣泛采用Naglet算法,兼顧傳輸效率
和時(shí)效性
。
- 若發(fā)送應(yīng)用進(jìn)程把待發(fā)送的數(shù)據(jù)逐個(gè)字節(jié)地送到TCP的發(fā)送緩存,則發(fā)送方就把第一個(gè)數(shù)據(jù)字節(jié)先發(fā)送出去,把后面到達(dá)的數(shù)據(jù)字節(jié)都緩存起來(lái)。
- 當(dāng)發(fā)送方收到對(duì)第一個(gè)數(shù)據(jù)字節(jié)的確認(rèn)后,再把發(fā)送緩存中的所有數(shù)據(jù)封裝成一個(gè)報(bào)文段發(fā)送出去,同時(shí)繼續(xù)對(duì)隨后到達(dá)的數(shù)據(jù)進(jìn)行緩存。
- 只有在收到對(duì)前一個(gè)報(bào)文段的確認(rèn)后才繼續(xù)發(fā)送下一個(gè)報(bào)文段。
- 此外,當(dāng)緩存的數(shù)據(jù)已達(dá)到發(fā)送窗口大小的一半或已達(dá)到報(bào)文段的最大長(zhǎng)度時(shí),就立即發(fā)送一個(gè)報(bào)文段。
TCP的擁塞控制
路由器無(wú)法處理高速率到達(dá)的流量而被迫丟棄分組的現(xiàn)象稱為擁塞
。
處于擁塞狀態(tài)的路由器稱為擁塞結(jié)點(diǎn)
。
擁塞產(chǎn)生的原因很多:
結(jié)點(diǎn)的緩存空間較少
輸出鏈路的容量較低
結(jié)點(diǎn)處理機(jī)的運(yùn)算能力較弱
等等
擁塞是一個(gè)復(fù)雜的綜合問(wèn)題,依靠增加資源等簡(jiǎn)單措施不能解決。
網(wǎng)絡(luò)擁塞會(huì)帶來(lái)很多負(fù)面影響:
擁塞控制
進(jìn)行擁塞控制的目標(biāo)就是避免網(wǎng)絡(luò)進(jìn)入擁塞狀態(tài),即讓網(wǎng)絡(luò)負(fù)載處于B
點(diǎn)之前。
所謂擁塞控制就是由相關(guān)算法控制TCP發(fā)送方行為,防止過(guò)多的分組進(jìn)入網(wǎng)絡(luò),避免網(wǎng)絡(luò)中的路由器或者鏈路過(guò)載。
擁塞控制需要通過(guò)限制發(fā)送方的發(fā)送速率來(lái)實(shí)現(xiàn)。
擁塞控制與流量控制:
TCP的擁塞控制方法
1988年Van Jacobson提出了最初的TCP擁塞控制算法,其算法基于數(shù)據(jù)包守恒準(zhǔn)側(cè):
A new packet isn't put into the network until an old packet leaves.
Jacobsoni提出的擁塞控制算法,包括慢開始
和擁塞避免
,奠定了TCP協(xié)議的擁塞控制算法的基石。
TCP采用的擁塞控制方法
是基于窗口的。
TCP增加了一個(gè)狀態(tài)變量,叫擁塞窗口(congestion windows,cwnd)
擁塞窗口長(zhǎng)度取決于網(wǎng)絡(luò)的擁塞程度
,并能根據(jù)網(wǎng)絡(luò)擁塞情況動(dòng)態(tài)變化。發(fā)送方要求自己的發(fā)送窗口必須小于等于擁塞窗口,以此控制發(fā)送速率TCP進(jìn)行擁塞控制的原則是:
如果網(wǎng)絡(luò)中沒(méi)有出現(xiàn)擁塞,就增大擁塞窗口,以此提高發(fā)送速率,提高吞吐量;
如果網(wǎng)絡(luò)中出現(xiàn)了擁塞,就減小擁塞窗口,以此降低發(fā)送速率,降低網(wǎng)絡(luò)負(fù)載。。
注意:
最終的發(fā)送窗口長(zhǎng)度 = Min(通知窗口長(zhǎng)度,擁塞窗口長(zhǎng)度)
本節(jié)討論中,暫時(shí)忽略通知窗口的影響。
TCP發(fā)送方如何監(jiān)測(cè)網(wǎng)絡(luò)的擁塞程度呢?
監(jiān)測(cè)先前介紹的三種重傳事件:
超時(shí)重傳
:超時(shí)計(jì)時(shí)器超時(shí)事件
快重傳
:3個(gè)重復(fù)ACK事件
SACK重傳
:RFC6675規(guī)定的兩個(gè)條件之一
出現(xiàn)了以上三種重傳事件,TCP認(rèn)為出現(xiàn)了不同程度的網(wǎng)絡(luò)擁塞,應(yīng)用不同的擁塞控制算法進(jìn)行處理。
慢開始
在TCP連接建立之初或者發(fā)生超時(shí)重傳事件后,都需要執(zhí)行慢開始算法
。
TCP連接建立之后,需要設(shè)定初始擁塞窗口
,記為初始窗口IW
。
RFC5681規(guī)定IW值為2~4個(gè)發(fā)送方最大報(bào)文段長(zhǎng)度SMSS,具體規(guī)定如下:
每收到一個(gè)有效ACK
,把擁塞窗口增加不超過(guò)1個(gè)SMSS的數(shù)值。
RFC5681規(guī)定的計(jì)算公式如下:
cwnd += min(N,SMSS)
其中N代表原先未被確認(rèn)的,現(xiàn)在被剛到達(dá)的ACK確認(rèn)的字節(jié)數(shù)。
顯然,當(dāng)N<SMSS時(shí),每收到一個(gè)ACK,cwnd的增加量要小于SMSS。
大多數(shù)情況下,TCP發(fā)送的報(bào)文段是全長(zhǎng)報(bào)文段,此時(shí),每收到一個(gè)ACK,cwnd增加1個(gè)SMSS。
從TCP發(fā)送一輪報(bào)文段到TCP收到這些報(bào)文段的確認(rèn)為止,經(jīng)歷的時(shí)間大約等于一個(gè)RTT
,我們將之稱為一個(gè)傳輸輪次。使用傳輸輪次這個(gè)術(shù)語(yǔ),更便于我們描述TCP的擁塞控制算法
。
在慢開始階段,擁塞窗口cwnd
隨輪次呈指數(shù)增長(zhǎng),每經(jīng)過(guò)一個(gè)傳輸輪次,cwnd加倍。
關(guān)于延遲確認(rèn):
在快重傳
中已經(jīng)介紹,RFC5681中規(guī)定:如果TCP接收方收到的兩個(gè)報(bào)文段間隔時(shí)間小于500ms,則每?jī)蓚€(gè)報(bào)文段發(fā)送一個(gè)ACK,這稱為延遲確認(rèn)。
如果采用延遲確認(rèn),那么慢開始
階段cwnd的增長(zhǎng)速度將放緩。
在某些操作系統(tǒng)的 TCP/IP 實(shí)現(xiàn)中,在慢開始階段采用了快速確認(rèn)模式
,即慢開始階段不使用延遲確認(rèn)。
慢開始–ssthresh
什么時(shí)候結(jié)束這種指數(shù)增長(zhǎng)呢?慢開始算法提供了以下幾種策略:
- 擁塞窗口增長(zhǎng)超出慢開始閾值ssthresh
- 監(jiān)測(cè)到重傳事件時(shí)
TCP維持一個(gè)狀態(tài)變量叫慢開始閾值ssthresh,也譯作慢開始門限。
當(dāng)cwnd<ssthresh時(shí),TCP采用慢開始算法;
當(dāng)cwnd>ssthresh時(shí),TCP停用慢開始算法,改用擁塞避免算法:
當(dāng)cwnd=ssthresh時(shí),TCP選用慢開始算法或者擁塞避免算法。
ssthresh的初值應(yīng)設(shè)置得盡可能高,然后ssthresh值隨擁塞控制而調(diào)整。
慢開始–超時(shí)事件
當(dāng)監(jiān)測(cè)到超時(shí)事件時(shí),TCP停止cwnd的增長(zhǎng),按照以下公式計(jì)算ssthresh:
ssthresh = max(FlightSize/2 , 2 x SMSS)
其中,FlightSize為在途數(shù)據(jù)量
,代表已經(jīng)發(fā)出但尚未被累積確認(rèn)的字節(jié)數(shù)。
在不考慮通知窗口的限制時(shí),可以近似認(rèn)為FlightSize ≈ cwnd
, 此時(shí)ssthresh
的計(jì)算公式變換為:
ssthresh = max(cwnd/2 , 2 X SMSS)
然后,將cwnd設(shè)為1,重新執(zhí)行慢開始算法。
慢開始算法要點(diǎn)小結(jié):
- IW的初值2~4個(gè)SMSS,ssthresh的初值盡可能高
- 每收到一個(gè)有效ACK,cwnd+1 smss;即每經(jīng)過(guò)一個(gè)輪次,cwnd加倍
- 若cwnd > ssthresh,停止慢開始,執(zhí)行擁塞避免算法
- 出現(xiàn)超時(shí)事件,設(shè)置ssthresh = cwnd/2,然后設(shè)置cwnd=1,重新執(zhí)行慢開始
- 出現(xiàn)快重傳或SACK重傳事件,執(zhí)行快恢復(fù)算法
擁塞避免
快恢復(fù)
當(dāng)監(jiān)測(cè)到3個(gè)重復(fù)ACK
或收到的SACK滿足RFC6675的兩個(gè)條件之一
時(shí),
TCP啟動(dòng)快重傳
或SACK重傳
,同時(shí)啟動(dòng)快恢復(fù)。
RFC規(guī)定:快恢復(fù)算法與快重傳算法一起實(shí)現(xiàn)。
·RFC5681規(guī)定了TCP Reno版本的快重傳和快恢復(fù)算法。
·RFC6582規(guī)定了TCP NewReno版本的快重傳和快恢復(fù)算法。
·RFC6675規(guī)定了啟用SACK支持后的快重傳和快恢復(fù)算法。
三個(gè)版本的快恢復(fù)算法在經(jīng)過(guò)快恢復(fù)階段的調(diào)整之后,當(dāng)退出快恢復(fù)算法時(shí),cwnd值和ssthresh值均為啟動(dòng)快恢復(fù)算法時(shí)的cwnd值的一半。
退出快恢復(fù)算法后,TCP啟動(dòng)擁塞避免算法
。
**注意:**在TCP快恢復(fù)算法執(zhí)行過(guò)程中,如果監(jiān)測(cè)到超時(shí)重傳事件,TCP將退出快恢復(fù)算法,將cwnd設(shè)為1個(gè)SMSS,重新執(zhí)行慢開始算法。
擁塞控制狀態(tài)變遷
根據(jù)執(zhí)行算法不同,TCP經(jīng)典擁塞控制包括三個(gè)階段:慢開始、擁塞避免、快恢復(fù)。
三個(gè)階段的作用如下:
- 慢開始階段是TCP探測(cè)當(dāng)前網(wǎng)絡(luò)傳輸能力的階段。
- 擁塞避免階段是TCP的穩(wěn)定運(yùn)行階段,在該階段TCP繼續(xù)探測(cè)可能利用的網(wǎng)絡(luò)資源。
- 快恢復(fù)階段是TCP發(fā)現(xiàn)網(wǎng)絡(luò)擁塞后,調(diào)整和恢復(fù)穩(wěn)定運(yùn)行的階段。
AIMD算法
TCP擁塞控制算法被稱為AIMD算法
:
在擁塞避免階段,TCP線性增加擁塞窗口cwd,緩慢探測(cè)網(wǎng)絡(luò)傳輸能力,該特點(diǎn)被稱為加法增大。
在快恢復(fù)階段,經(jīng)過(guò)快速的調(diào)整和恢復(fù),TCP將慢開始閾值ssthresh和擁塞窗口cwnd設(shè)置為觸發(fā)快恢復(fù)時(shí)的cwnd的一半,該特點(diǎn)被稱為乘法減小。
AIMD算法公平性討論
什么樣的擁塞控制算法是公平的?
經(jīng)過(guò)某個(gè)結(jié)點(diǎn)的多條TCP連接,在擁塞控制算法的控制下,平均占用帶寬資源,則算法是公平的。
·例如:n條TCP連接,都經(jīng)過(guò)一個(gè)最大處理能力為Xbit/s的路由器。如果沒(méi)有擁塞控制機(jī)制,每個(gè)連接的發(fā)送方都以最大速率發(fā)送數(shù)據(jù),則網(wǎng)絡(luò)擁塞。在擁塞控制算法的調(diào)節(jié)下,如果最終每條連接的發(fā)送速率都收斂至Xbit/s,則該擁塞控制算法是公平的。
AIMD算法是公平的
影響發(fā)送窗口值的兩個(gè)因素
影響發(fā)送窗口swnd的兩個(gè)因素為:
- 通知窗口awnd:TCP的流量控制要求TCP的發(fā)送窗口小于等于通知窗口
- 擁塞窗口cwnd:TCP的擁塞控制要求發(fā)送方的發(fā)送窗口小于等于擁塞窗口
swnd = min(awnd,cwnd)
上式說(shuō)明:
當(dāng)awnd較小時(shí),決定發(fā)送方發(fā)送速率的是TCP的流量控制
當(dāng)cwnd較小時(shí),決定發(fā)送方發(fā)送速率的是TCP的擁塞控制
網(wǎng)絡(luò)層輔助的擁塞控制
網(wǎng)絡(luò)層輔助的擁塞控制方法包括:主動(dòng)隊(duì)列管理AQM和顯式擁塞通知ECN
主動(dòng)隊(duì)列管理:
尾部丟棄策略:當(dāng)隊(duì)列已滿時(shí),以后到達(dá)的所有分組將都被丟棄。
路由器的尾部丟棄
會(huì)導(dǎo)致一批分組的丟失,TCP發(fā)送方根據(jù)擁塞控制算法
將降低擁塞窗口值。
當(dāng)網(wǎng)絡(luò)中有多條TCP連接通過(guò)瓶頸路由器時(shí),路由器的尾部丟棄策略會(huì)造成多條TCP連接同時(shí)降低擁塞窗口值。這種現(xiàn)象稱為TCP全局同步
。
為了避免發(fā)生全局同步現(xiàn)象,ETF提出主動(dòng)隊(duì)列管理AQM
。
AQM不等到路由器的隊(duì)列滿時(shí)才丟棄分組,而是在隊(duì)列長(zhǎng)度達(dá)到某個(gè)數(shù)值時(shí)或當(dāng)網(wǎng)絡(luò)有了某些擁塞征兆時(shí),就主動(dòng)丟棄部分到達(dá)的分組。
AQM僅引起部分TCP連接降低擁塞窗口值
,避免了全局同步。
典型的AQM方法是隨機(jī)早期檢測(cè)RED
隨機(jī)早期檢測(cè)AQM:
實(shí)現(xiàn)RED算法需要路由器預(yù)先設(shè)定三個(gè)參數(shù):隊(duì)列長(zhǎng)度最小閾值minth、最大閾值maxth和最大丟包概率maxp
顯式擁塞通知
第五章 網(wǎng)絡(luò)層
網(wǎng)絡(luò)層概述
網(wǎng)絡(luò)層是互聯(lián)網(wǎng)體系結(jié)構(gòu)中最重要的一層,其主要任務(wù)是向上層提供主機(jī)到主機(jī)的通信服務(wù)。
互聯(lián)網(wǎng)采用的交換方式是分組交換
,實(shí)現(xiàn)分組交換的關(guān)鍵設(shè)備是網(wǎng)絡(luò)核心部分的路由器
。
路由器中的網(wǎng)絡(luò)層是本章介紹的重點(diǎn)。
傳統(tǒng)網(wǎng)絡(luò)的控制平面和數(shù)據(jù)平面
路由器是一種具有多個(gè)接口的專用計(jì)算機(jī),每個(gè)接口連接了不同的網(wǎng)絡(luò)。路由器能夠連接異構(gòu)
的網(wǎng)絡(luò)。
路由器的主要功能包括分組轉(zhuǎn)發(fā)
和路由選擇
,其中分組轉(zhuǎn)發(fā)功能屬于數(shù)據(jù)平面,路由選擇功能屬于控制平面。
傳統(tǒng)網(wǎng)絡(luò)中,每臺(tái)路由器都由實(shí)現(xiàn)路由選擇功能的控制平面
和實(shí)現(xiàn)分組轉(zhuǎn)發(fā)功能的數(shù)據(jù)平面
構(gòu)成。
路由器的結(jié)構(gòu)
控制平面的核心構(gòu)件是路由選擇處理機(jī)
。
數(shù)據(jù)平面由一組輸入接口
、一組輸出接口
和交換結(jié)構(gòu)
組成。
傳統(tǒng)網(wǎng)絡(luò)的控制平面是分布式實(shí)現(xiàn)的。每臺(tái)路由器中都包含控制平面。
每臺(tái)路由器通過(guò)路由協(xié)議與其它路由器交換網(wǎng)絡(luò)拓?fù)湫畔?#xff0c;獨(dú)立維護(hù)路由表(轉(zhuǎn)發(fā)表)
傳統(tǒng)網(wǎng)絡(luò)的數(shù)據(jù)平面采用基于目的地址的轉(zhuǎn)發(fā)策略
路由器根據(jù)收到分組的目的IP地址,查找轉(zhuǎn)發(fā)表,轉(zhuǎn)發(fā)分組。
軟件定義網(wǎng)絡(luò)的控制平面與數(shù)據(jù)平面
軟件定義網(wǎng)絡(luò)SDN通過(guò)將控制平面和數(shù)據(jù)平面分離,構(gòu)建可編程控制
的網(wǎng)絡(luò)體系結(jié)構(gòu)。
SDN的網(wǎng)絡(luò)交換設(shè)備僅需實(shí)現(xiàn)數(shù)據(jù)平面的功能,控制平面的功能集中在遠(yuǎn)程控制器上實(shí)現(xiàn)。
為區(qū)別于傳統(tǒng)路由器,SDN將受控網(wǎng)絡(luò)交換設(shè)備
稱為SDN網(wǎng)元
或SDN交換機(jī)
。
SDN的控制平面是集中式實(shí)現(xiàn)的。
SDN的控制邏輯
全部在SDN控制器中實(shí)現(xiàn),SDN控制器通過(guò)控制數(shù)據(jù)平面接口CDPI
對(duì)SDN交換機(jī)進(jìn)行控制和管理。
SDN控制器維護(hù)流表
,并通過(guò)OpenFlow協(xié)議
將流表下發(fā)給SDN交換機(jī)。
SDN控制器通過(guò)北向接口
向網(wǎng)絡(luò)控制應(yīng)用程序開放編程能力。
SDN的數(shù)據(jù)平面采用通用轉(zhuǎn)發(fā)策略,即基于流表的轉(zhuǎn)發(fā)策略。流表的匹配域是首部字段的集合。SDN的轉(zhuǎn)發(fā)策略能夠匹配協(xié)議棧中的多個(gè)首部字段。
數(shù)據(jù)平面與控制平面分離的優(yōu)缺點(diǎn):
目前的網(wǎng)絡(luò)仍然以傳統(tǒng)網(wǎng)絡(luò)為主
雖然SDN已經(jīng)提出并發(fā)展多年,但由于以下幾點(diǎn)原因,軟件定義網(wǎng)絡(luò)SDN
仍不可能完全取代傳統(tǒng)網(wǎng)絡(luò)
①SDN仍然沒(méi)有統(tǒng)一的國(guó)際標(biāo)準(zhǔn);
②互聯(lián)網(wǎng)上已經(jīng)部署了大量的傳統(tǒng)網(wǎng)絡(luò)設(shè)備;
③互聯(lián)網(wǎng)中自治系統(tǒng)之間的路由協(xié)議一邊界網(wǎng)關(guān)協(xié)議的功能和作用仍不可替代;
在目前的互聯(lián)網(wǎng)中,傳統(tǒng)網(wǎng)絡(luò)仍然占據(jù)較大市場(chǎng)。本書的討論依然以傳統(tǒng)網(wǎng)絡(luò)為主
本章主要協(xié)議:
網(wǎng)際協(xié)議IP:網(wǎng)絡(luò)層核心協(xié)議,運(yùn)輸層TCP、UDP等協(xié)議的數(shù)據(jù)都通過(guò)P數(shù)據(jù)報(bào)傳
輸。
網(wǎng)際控制報(bào)文協(xié)議ICMP:提供與網(wǎng)絡(luò)配置信息和IP數(shù)據(jù)報(bào)處置相關(guān)的診斷和控制信息。
路由協(xié)議:路由器之間用來(lái)交換路由信息、鏈路狀態(tài)信息或網(wǎng)絡(luò)拓?fù)湫畔⒌膮f(xié)議,主要包括路由信息協(xié)議RIP
、開放最短路徑優(yōu)先OSPF協(xié)議
和邊界網(wǎng)關(guān)協(xié)議BGP
多協(xié)議標(biāo)記交換MPLS:為P等網(wǎng)絡(luò)層協(xié)議提供面向連接的服務(wù)質(zhì)量,支持流量工程、負(fù)載均衡,支持MPLS VPN等,在運(yùn)營(yíng)商和ISP中得到廣泛應(yīng)用。
相關(guān)協(xié)議地址解析協(xié)議ARP
網(wǎng)際協(xié)議IP
IP協(xié)議是為了實(shí)現(xiàn)網(wǎng)際互聯(lián)
才設(shè)計(jì)的協(xié)議。
IP的協(xié)議數(shù)據(jù)單元通常稱為 IP分組
或IP數(shù)據(jù)報(bào)
。
IP協(xié)議屏蔽了底層網(wǎng)絡(luò)的實(shí)現(xiàn)細(xì)節(jié),采用IP協(xié)議后,網(wǎng)絡(luò)層之上的協(xié)議實(shí)體都無(wú)需再考慮具體網(wǎng)絡(luò)的實(shí)現(xiàn)細(xì)節(jié)。
統(tǒng)一采用了IP協(xié)議的網(wǎng)絡(luò),也稱為IP網(wǎng)絡(luò)
或簡(jiǎn)稱IP網(wǎng)
。
IP網(wǎng)絡(luò)中,具有相同網(wǎng)絡(luò)前綴的IP地址屬于相同網(wǎng)絡(luò);具有不同網(wǎng)絡(luò)前綴的IP地址屬于不同網(wǎng)絡(luò)。
目前有兩個(gè)版本的IP協(xié)議正在使用,分別是IPV4
和IPv6
。
IP協(xié)議的作用范圍
IP協(xié)議的作用范圍是源主機(jī)的網(wǎng)絡(luò)接口
到目的主機(jī)的網(wǎng)絡(luò)接口
。
IP協(xié)議向上層僅提供簡(jiǎn)單靈活的、無(wú)連接的、盡最大努力交付的數(shù)據(jù)報(bào)服務(wù)。
每一個(gè)IP數(shù)據(jù)報(bào)獨(dú)立發(fā)送
,與其前后的IP數(shù)據(jù)報(bào)無(wú)關(guān)。
IP數(shù)據(jù)報(bào)格式
IP 數(shù)據(jù)報(bào)文由首部(稱為報(bào)頭)和數(shù)據(jù)兩部分組成。首部的前一部分是固定長(zhǎng)度,共 20 字節(jié)
,是所有 IP 數(shù)據(jù)報(bào)必須具有的。在首部的固定部分的后面是一些可選字段,其長(zhǎng)度是可變的。
每個(gè) IP 數(shù)據(jù)報(bào)都以一個(gè) IP 報(bào)頭開始。源計(jì)算機(jī)構(gòu)造這個(gè) IP 報(bào)頭,而目的計(jì)算機(jī)利用 IP 報(bào)頭中封裝的信息處理數(shù)據(jù)。IP 報(bào)頭中包含大量的信息,如源 IP 地址、目的 IP 地址、數(shù)據(jù)報(bào)長(zhǎng)度、IP 版本號(hào)等。每個(gè)信息都被稱為一個(gè)字段。
IP 報(bào)頭的最小長(zhǎng)度為 20 字節(jié),上圖中每個(gè)字段的含義如下:
1) 版本(version)
占 4 位,表示 IP 協(xié)議的版本。通信雙方使用的 IP 協(xié)議版本必須一致。目前廣泛使用的IP協(xié)議版本號(hào)為 4,即 IPv4。
2) 首部長(zhǎng)度(網(wǎng)際報(bào)頭長(zhǎng)度IHL)
占 4 位,可表示的最大十進(jìn)制數(shù)值是 15。這個(gè)字段所表示數(shù)的單位是 32 位字長(zhǎng)(1 個(gè) 32 位字長(zhǎng)是 4 字節(jié))。因此,當(dāng) IP 的首部長(zhǎng)度為 1111 時(shí)(即十進(jìn)制的 15),首部長(zhǎng)度就達(dá)到 60 字節(jié)。當(dāng) IP 分組的首部長(zhǎng)度不是 4 字節(jié)的整數(shù)倍時(shí),必須利用最后的填充字段加以填充。
數(shù)據(jù)部分永遠(yuǎn)在 4 字節(jié)的整數(shù)倍開始,這樣在實(shí)現(xiàn) IP 協(xié)議時(shí)較為方便。首部長(zhǎng)度限制為 60 字節(jié)的缺點(diǎn)是,長(zhǎng)度有時(shí)可能不夠用,之所以限制長(zhǎng)度為 60 字節(jié),是希望用戶盡量減少開銷。最常用的首部長(zhǎng)度就是 20 字節(jié)(即首部長(zhǎng)度為 0101),這時(shí)不使用任何選項(xiàng)。
3) 區(qū)分服務(wù)(tos)
也被稱為服務(wù)類型,占 8 位,用來(lái)獲得更好的服務(wù)。這個(gè)字段在舊標(biāo)準(zhǔn)中叫做服務(wù)類型,但實(shí)際上一直沒(méi)有被使用過(guò)。1998 年 IETF 把這個(gè)字段改名為區(qū)分服務(wù)(Differentiated Services,DS)
。只有在使用區(qū)分服務(wù)時(shí),這個(gè)字段才起作用。
4) 總長(zhǎng)度(totlen)
首部和數(shù)據(jù)之和,單位為字節(jié)??傞L(zhǎng)度字段為 16 位,因此數(shù)據(jù)報(bào)的最大長(zhǎng)度為 2^16-1=65535 字節(jié)。
5) 標(biāo)識(shí)(identification)
用來(lái)標(biāo)識(shí)數(shù)據(jù)報(bào),占 16 位。IP 協(xié)議在存儲(chǔ)器中維持一個(gè)計(jì)數(shù)器。每產(chǎn)生一個(gè)數(shù)據(jù)報(bào),計(jì)數(shù)器就加 1,并將此值賦給標(biāo)識(shí)字段。當(dāng)數(shù)據(jù)報(bào)的長(zhǎng)度超過(guò)網(wǎng)絡(luò)的 MTU,而必須分片時(shí),這個(gè)標(biāo)識(shí)字段的值就被復(fù)制到所有的數(shù)據(jù)報(bào)的標(biāo)識(shí)字段中。具有相同的標(biāo)識(shí)字段值的分片報(bào)文會(huì)被重組成原來(lái)的數(shù)據(jù)報(bào)。
6) 標(biāo)志(flag)
占 3 位。第一位未使用,其值為 0。第二位稱為 DF(不分片),表示是否允許分片。取值為 0 時(shí),表示允許分片;取值為 1 時(shí),表示不允許分片。第三位稱為 MF(更多分片),表示是否還有分片正在傳輸,設(shè)置為 0 時(shí),表示沒(méi)有更多分片需要發(fā)送,或數(shù)據(jù)報(bào)沒(méi)有分片。
7) 片偏移(offsetfrag)
占 13 位。當(dāng)報(bào)文被分片后,該字段標(biāo)記該分片在原報(bào)文中的相對(duì)位置。片偏移以 8 個(gè)字節(jié)為偏移單位。所以,除了最后一個(gè)分片,其他分片的偏移值都是 8 字節(jié)(64 位)的整數(shù)倍。
8) 生存時(shí)間(TTL)
表示數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中的壽命,占 8 位。該字段由發(fā)出數(shù)據(jù)報(bào)的源主機(jī)設(shè)置。其目的是防止無(wú)法交付的數(shù)據(jù)報(bào)無(wú)限制地在網(wǎng)絡(luò)中傳輸,從而消耗網(wǎng)絡(luò)資源。
路由器在轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)之前,先把 TTL 值減 1。若 TTL 值減少到 0,則丟棄這個(gè)數(shù)據(jù)報(bào),不再轉(zhuǎn)發(fā)。因此,TTL 指明數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中最多可經(jīng)過(guò)多少個(gè)路由器。TTL 的最大數(shù)值為 255。若把 TTL 的初始值設(shè)為 1,則表示這個(gè)數(shù)據(jù)報(bào)只能在本局域網(wǎng)中傳送。
9) 協(xié)議
表示該數(shù)據(jù)報(bào)文所攜帶的數(shù)據(jù)所使用的協(xié)議類型,占 8 位。該字段可以方便目的主機(jī)的 IP 層知道按照什么協(xié)議來(lái)處理數(shù)據(jù)部分。不同的協(xié)議有專門不同的協(xié)議號(hào)。
例如,TCP 的協(xié)議號(hào)為 6,UDP 的協(xié)議號(hào)為 17,ICMP 的協(xié)議號(hào)為 1。
10) 首部檢驗(yàn)和(checksum)
用于校驗(yàn)數(shù)據(jù)報(bào)的首部,占 16 位。數(shù)據(jù)報(bào)每經(jīng)過(guò)一個(gè)路由器,首部的字段都可能發(fā)生變化(如TTL),所以需要重新校驗(yàn)。而數(shù)據(jù)部分不發(fā)生變化,所以不用重新生成校驗(yàn)值。
11) 源地址
表示數(shù)據(jù)報(bào)的源 IP 地址,占 32 位。
12) 目的地址
表示數(shù)據(jù)報(bào)的目的 IP 地址,占 32 位。該字段用于校驗(yàn)發(fā)送是否正確。
13) 可選字段
該字段用于一些可選的報(bào)頭設(shè)置,主要用于測(cè)試、調(diào)試和安全的目的。這些選項(xiàng)包括嚴(yán)格源路由(數(shù)據(jù)報(bào)必須經(jīng)過(guò)指定的路由)、網(wǎng)際時(shí)間戳(經(jīng)過(guò)每個(gè)路由器時(shí)的時(shí)間戳記錄)和安全限制。
14) 填充
由于可選字段中的長(zhǎng)度不是固定的,使用若干個(gè) 0 填充該字段,可以保證整個(gè)報(bào)頭的長(zhǎng)度是 32 位的整數(shù)倍。
15) 數(shù)據(jù)部分
表示傳輸層的數(shù)據(jù),如保存 TCP、UDP、ICMP 或 IGMP 的數(shù)據(jù)。數(shù)據(jù)部分的長(zhǎng)度不固定。
補(bǔ)充
區(qū)分服務(wù):
支持區(qū)分服務(wù)DS功能
的結(jié)點(diǎn)稱為DS結(jié)點(diǎn)
。
跳過(guò)區(qū)分服務(wù)的細(xì)節(jié)個(gè)紹
IP協(xié)議中,對(duì)lP數(shù)據(jù)報(bào)采取的轉(zhuǎn)發(fā)處理行為稱為每跳行為(Per-Hop Behavior,PHB)。
不同的PHB種類代表了不同種類的服務(wù)質(zhì)量。
6位DS字段可以定義64個(gè)區(qū)分服務(wù)碼點(diǎn)DSCP。
默認(rèn)PHB(Default PHB,DF PHB)
DSCP的默認(rèn)值為全0,代表采用常規(guī)的盡最大努力交付的IP數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)策略。
類別選擇PHB組(Class Selector PHB,CS PHB)
RFC2474規(guī)定:按照從高位到低位的順序,DS字段的第0-2位與早期服務(wù)類型字段中的優(yōu)先級(jí)定義保持兼容,DS字段中的第3-5位均為0的DSCP值對(duì)應(yīng)的PHB稱為CSPHB。
確保轉(zhuǎn)發(fā)PHB組(Assured Forwarding PHB,AF PHB)
RFC2597定義了AF組。按照從高位到低位的順序,AF組用DSCP的第0-2位把通信量劃分為四個(gè)AF類,分別為001,010,011和100。對(duì)于每個(gè)AF類,再用DSCP的第3-5位劃分出三個(gè)“丟棄優(yōu)先級(jí)”,從最低丟棄優(yōu)先級(jí)到最高丟棄優(yōu)先級(jí)分別為010,100和110。
AF類為i,丟棄優(yōu)先級(jí)為j的IP數(shù)據(jù)報(bào)標(biāo)記為Af,如DSCP值為010110的IP數(shù)據(jù)報(bào)標(biāo)記為AF23。
對(duì)于不同的AF類,RFC2597要求DS結(jié)點(diǎn)分配不同的轉(zhuǎn)發(fā)資源,如緩存或帶寬等。
丟棄優(yōu)先級(jí)僅用來(lái)配合路由器的主動(dòng)隊(duì)列管理AQM策略使用。相同AF類中,“丟棄優(yōu)先級(jí)”較高的分組適用較高的丟包概率。
加速轉(zhuǎn)發(fā)PHB(expedited forwarding PHB,EF PHB)
RFC3246定義了加速轉(zhuǎn)發(fā)PHB,DSCP值為101110.
加速轉(zhuǎn)發(fā)EF提供了非擁塞的網(wǎng)絡(luò)服務(wù),對(duì)于EF流量,要求DS結(jié)點(diǎn)的輸出速率大于輸入速率。在一臺(tái)路由器的隊(duì)列中,EF流量?jī)H排在其他EF流量之后。
容量許可流量(Capacity-Admitted Traffic)
由RFC5865定義,DSCP值為101100。該DSCP命名為VOICE-ADMIT,主要用于VolP業(yè)務(wù)。
較少努力PHB(Lower-Effort PHB,LE PHB)
·由RFC8622定義,DSCP值為000001,主要用于低優(yōu)先級(jí)流量,如搜索引擎的爬蟲。
IP分片和重組
IP數(shù)據(jù)報(bào)總長(zhǎng)度超過(guò)MTU則需要分片
IPV4中的分片操作可以在發(fā)送方主機(jī)
和任何中間路由器
上進(jìn)行。
注意:IPv6的分片操作僅允許在發(fā)送方主機(jī)上進(jìn)行。
IP的重組操作只能在最終目的主機(jī)
上進(jìn)行。
總長(zhǎng)度字段、標(biāo)識(shí)字段、標(biāo)志字段和片偏移字段用來(lái)完成IP的分片和重組。
IP分片操作時(shí),將原IP數(shù)據(jù)報(bào)的首部復(fù)制到各IP數(shù)據(jù)報(bào)片中,并根據(jù)需要修改總長(zhǎng)度
、標(biāo)志
、片偏移
等字段的值,重新計(jì)算首部校驗(yàn)和
。
IP數(shù)據(jù)報(bào)片的數(shù)據(jù)部分長(zhǎng)度需要滿足以下3個(gè)條件:
①數(shù)據(jù)部分長(zhǎng)度 首部長(zhǎng)度 ≤ MTU:
②數(shù)據(jù)部分長(zhǎng)度是8字節(jié)整數(shù)倍,最后一個(gè)分片可以不滿足該條件:
③數(shù)據(jù)部分長(zhǎng)度取滿足以上兩個(gè)條件的數(shù)值中的最大值。
常見(jiàn)的協(xié)議字段值
IP分組轉(zhuǎn)發(fā)
互聯(lián)網(wǎng)中的主機(jī)和路由器都維護(hù)了至少一張路由表,用來(lái)實(shí)現(xiàn)分組轉(zhuǎn)發(fā)功能。
主機(jī)或路由器查找路由表,將IP數(shù)據(jù)報(bào)從某個(gè)網(wǎng)絡(luò)接口轉(zhuǎn)發(fā)出去的過(guò)程稱為IP分組轉(zhuǎn)發(fā)
。
當(dāng)互聯(lián)網(wǎng)中的結(jié)點(diǎn)要把一個(gè)IP數(shù)據(jù)報(bào)發(fā)送給目的主機(jī)時(shí),需要判斷目的主機(jī)是否與自己直接相連。
- 轉(zhuǎn)發(fā)結(jié)點(diǎn)與目的結(jié)點(diǎn)位于相同網(wǎng)絡(luò),則直接相連。
- 如果直接相連,則不需要經(jīng)過(guò)任何路由器,IP數(shù)據(jù)報(bào)就直接發(fā)送到目的主機(jī),這個(gè)過(guò)程稱為直接交付。
- 如果不是直接相連,則必須把IP數(shù)據(jù)報(bào)發(fā)送給某個(gè)路由器,由該路由器將IP數(shù)據(jù)報(bào)交付到目的主機(jī),這個(gè)過(guò)程稱為間接交付。
路由表
P協(xié)議沒(méi)有規(guī)定路由表或轉(zhuǎn)發(fā)表的精確格式,為了支持CDR,路由表中每個(gè)項(xiàng)目至少應(yīng)包含以下字段:目的地址、掩碼、下一跳和轉(zhuǎn)發(fā)接口。
目的地址:
目的地址是一個(gè)32位值,用于與掩碼操作結(jié)果做匹配??梢源硪韵氯N含義:
①目的主機(jī)地址:當(dāng)掩碼是32位,即掩碼為255.255.255.255
時(shí),目的地址僅能匹配某一個(gè)主機(jī)的IP地址,這樣的路由表項(xiàng)目稱為特定主機(jī)路由
;
②所有主機(jī):當(dāng)掩碼長(zhǎng)度是0位,即掩碼為0.0.0.0
,且目的地址字段值為0.0.0.0
時(shí),該目的地址可以匹配所有的P地址,這樣的路由表項(xiàng)目稱為默認(rèn)路由
:
③目的網(wǎng)絡(luò)前綴:當(dāng)掩碼長(zhǎng)度是1~31位,目的地址能匹配某個(gè)CIDR網(wǎng)絡(luò)前綴
,這樣的路由表項(xiàng)目稱為目的網(wǎng)絡(luò)路由
。
掩碼:
掩碼指CIDR掩碼
,長(zhǎng)度32位,可以用來(lái)和IP數(shù)據(jù)報(bào)中的目的IP地址做掩碼操作
下一跳:
下一跳是一個(gè)P地址,指向一個(gè)直接相連的路由器,IP數(shù)據(jù)報(bào)將被轉(zhuǎn)發(fā)到該地址。
轉(zhuǎn)發(fā)接口:
轉(zhuǎn)發(fā)接口是一個(gè)網(wǎng)絡(luò)層使用的標(biāo)識(shí)符,用以指明將P數(shù)據(jù)報(bào)發(fā)送到下一跳的網(wǎng)絡(luò)接口。
路由表的維護(hù)可以由系統(tǒng)管理員手動(dòng)進(jìn)行,也可以由一個(gè)或多個(gè)路由選擇協(xié)議維護(hù)。
結(jié)點(diǎn)進(jìn)行分組轉(zhuǎn)發(fā)的過(guò)程如下:
- 獲取目的IP地址ID:
解析待發(fā)送P數(shù)據(jù)報(bào)的首部,讀取目的P地址ID: - 按照最長(zhǎng)前綴匹配算法搜索路由表:
在路由表中搜索所有與ID“匹配”的路由項(xiàng)目。
所謂“匹配”是指:將ID與路由項(xiàng)目的掩碼字段做按位與操作,得到的結(jié)果與該項(xiàng)目的目的地址字段值相同。在所有與ID匹配的路由項(xiàng)目中,選出掩碼中1的位數(shù)最多的路由項(xiàng)目,即最長(zhǎng)前綴匹配。 - 按照最長(zhǎng)前綴匹配的路由項(xiàng)目進(jìn)行
轉(zhuǎn)發(fā)
:
讀取最長(zhǎng)前綴匹配的路由項(xiàng)目的接口字段和下一跳字段,將IP數(shù)據(jù)報(bào)從指定接口發(fā)送出去。
路由表的快速查找
經(jīng)過(guò)精心設(shè)計(jì)的路由查找算法
不需要遍歷路由表,即可高效、快速地找到最長(zhǎng)前綴匹配項(xiàng)目。
最容易想到的方法是按照掩碼長(zhǎng)度
的順序,存儲(chǔ)路由表,掩碼越長(zhǎng)的表項(xiàng)存儲(chǔ)位置越靠前,這樣按序查找后,最先找到的匹配就是最長(zhǎng)前綴匹配。各種路由表的實(shí)現(xiàn)中,有更多更高效的算法,如Linux中實(shí)現(xiàn)的Hash查找算法
和Tire樹查找算法
。
網(wǎng)際控制報(bào)文協(xié)議ICMP
網(wǎng)際控制報(bào)文協(xié)議ICMP負(fù)責(zé)傳送差錯(cuò)報(bào)文以及其它控制信息,它必須與IP協(xié)議一起實(shí)現(xiàn),通常被認(rèn)為是網(wǎng)絡(luò)層的一部分。
ICMP報(bào)文可分為兩大類:ICMP差錯(cuò)報(bào)告報(bào)文
和ICMP查詢/信息報(bào)文
。
ICMP報(bào)文格式
常見(jiàn)類型值
常見(jiàn)代碼值
ICMP差錯(cuò)報(bào)告報(bào)文
所有的ICMP差錯(cuò)報(bào)告報(bào)文中的數(shù)據(jù)字段都具有同樣的格式。
包含一個(gè)完整的原始IP數(shù)據(jù)報(bào)(導(dǎo)致差錯(cuò)的IP數(shù)據(jù)報(bào))的首部副本,以及原始IP數(shù)據(jù)報(bào)的數(shù)據(jù)部分的前n字節(jié)。
ICMP差錯(cuò)報(bào)告報(bào)文中應(yīng)包含原始IP數(shù)據(jù)報(bào)中的盡可能多的數(shù)據(jù),但要確保新生成的IP數(shù)據(jù)報(bào)長(zhǎng)度不超過(guò)576字節(jié)
。
拓展的ICMP報(bào)文格式
RFC4884規(guī)定了ICMP擴(kuò)展結(jié)構(gòu)
的格式,但是擴(kuò)展結(jié)構(gòu)中的對(duì)象由其它RFC文檔具體規(guī)定。
如:RFC4950為多協(xié)議標(biāo)記交換MPLS規(guī)定了標(biāo)記堆棧對(duì)象,標(biāo)記堆棧對(duì)象可以應(yīng)用在目的不可達(dá)報(bào)文和超時(shí)報(bào)文中,當(dāng)使用traceroute程序時(shí),可以用來(lái)記錄轉(zhuǎn)發(fā)路徑中的標(biāo)記。
再如:RFC8335將擴(kuò)展結(jié)構(gòu)應(yīng)用在ICMP查詢/信息類報(bào)文中,利用擴(kuò)展結(jié)構(gòu)對(duì)回顯請(qǐng)求和回顯應(yīng)答報(bào)文進(jìn)行擴(kuò)展,提出了一種新型的網(wǎng)絡(luò)可達(dá)性探測(cè)工具Probe。
目的不可達(dá)差錯(cuò)報(bào)告報(bào)文
目的不可達(dá)差錯(cuò)報(bào)告報(bào)文用來(lái)表示IP數(shù)據(jù)報(bào)無(wú)法送達(dá)目的地,可能的原因很多。
ICMPv4為此報(bào)文定義了16個(gè)不同的代碼,其中有5個(gè)是較常用的,分別是:
網(wǎng)絡(luò)不可達(dá)
主機(jī)不可達(dá)
端口不可達(dá)
需要分片
管理禁止通信
重定向差錯(cuò)報(bào)告報(bào)文
如果路由器收到一個(gè)IP數(shù)據(jù)報(bào),查找路由表后發(fā)現(xiàn)自己并不是將該IP數(shù)據(jù)報(bào)投遞到目的地址的最佳路由,則該路由器發(fā)送一個(gè)重定向差錯(cuò)報(bào)告報(bào)文給源主機(jī),同時(shí)仍然將該IP數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)到正確的下一跳路由器。
路由器比較IP數(shù)據(jù)報(bào)的輸入接口
是否與其下一跳轉(zhuǎn)發(fā)接口
相同,如果輸入接口等于輸出接口,則需要產(chǎn)生重定向差錯(cuò)報(bào)告報(bào)文
。
超時(shí)差錯(cuò)報(bào)告報(bào)文
每臺(tái)路由器在轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)時(shí)都將IP數(shù)據(jù)報(bào)中的TTL
值減1。
當(dāng)TTL值減為0時(shí),路由器丟棄該IP數(shù)據(jù)報(bào),并發(fā)送一個(gè)超時(shí)差錯(cuò)報(bào)告報(bào)文
給源主機(jī)。
不產(chǎn)生ICMP差錯(cuò)報(bào)告報(bào)文的情況
根據(jù)RFC1812的規(guī)定,以下幾種情況不應(yīng)產(chǎn)生和發(fā)送CMP差錯(cuò)報(bào)告報(bào)文:
ICMP差錯(cuò)報(bào)告報(bào)文;
第一個(gè)IP分片以外的其它IP數(shù)據(jù)報(bào)片;
IP首部校驗(yàn)和驗(yàn)證失敗的IP數(shù)據(jù)報(bào);
目的地址是IPv4廣播地址或IPv4多播地址的IP數(shù)據(jù)報(bào);
作為鏈路層廣播的IP數(shù)據(jù)報(bào);
源IP地址不是單播地址的IP數(shù)據(jù)報(bào),或者源地址無(wú)效(全零地址、環(huán)回地址等)的IP數(shù)據(jù)報(bào)。
ICMP應(yīng)用實(shí)例
ping / traceroute / tracert / TCP路徑MTU發(fā)現(xiàn)
ping
traceroute / tracert
TCP的路徑MTU發(fā)現(xiàn)
路由選擇協(xié)議
實(shí)現(xiàn)路由選擇功能的算法稱為路由選擇算法。
為路由選擇算法傳遞必要信息的網(wǎng)絡(luò)協(xié)議
稱為路由選擇協(xié)議。
路由選擇算法是路由選擇協(xié)議的核心,其目的是找到從發(fā)送方到接收方的最佳路由
。
互聯(lián)網(wǎng)中的路由選擇算法根據(jù)特定的指標(biāo)定義并度量“最佳”路由。這些度量可以統(tǒng)稱為開銷,通常最佳路由指具有最低開銷的路由。
路由選擇算法的目標(biāo)就是找出從源到目的之間的最低開銷路徑,即最佳路徑。
可以用圖來(lái)形式化描述路由選擇算法。
圖G=(N,E)
是一個(gè)具有N個(gè)頂點(diǎn)和E條邊的集合。
圖中的一個(gè)頂點(diǎn)代表一臺(tái)路由器或者一個(gè)其它結(jié)點(diǎn),這是做出分組轉(zhuǎn)發(fā)決定的點(diǎn)。
兩個(gè)頂點(diǎn)之間的邊代表兩臺(tái)相鄰路由器之間的鏈路。每條邊用一個(gè)值代表它的開銷。
E中的任一條邊(x,y)
,我們用c(x,y)
代表邊(x,y)的開銷。
一旦圖中的每條邊都給定了開銷,路由選擇算法找出從源到目的之間的最低開銷路徑,即最佳路徑。
路由選擇協(xié)議為路由選擇算法傳遞和提供邊的“開銷”。
不同的路由選擇協(xié)議,采用不同的度量指標(biāo),對(duì)邊的開銷的定義也不同。
即使網(wǎng)絡(luò)拓?fù)湎嗤?#xff0c;不同的路由協(xié)議也有可能得出不同的最佳路由。
常用的路由選擇算法包括:
- 距離向量算法(DV)
- 鏈路狀態(tài)算法(LS)
- 路徑向量算法(PV)
自治系統(tǒng)AS
互聯(lián)網(wǎng)的規(guī)模為路由選擇協(xié)議帶來(lái)了巨大的困難。解決路由選擇擴(kuò)展能力的方法是引入層次結(jié)構(gòu)。
為了實(shí)現(xiàn)分層次的路由選擇,互聯(lián)網(wǎng)被劃分為許多自治系統(tǒng)(Autonomous System,AS)
自治系統(tǒng)AS是指在單一技術(shù)管理下的一組路由器,這些路由器使用一種自治系統(tǒng)內(nèi)部的路由選擇協(xié)議和共同的度量。
RFC4271強(qiáng)調(diào),自治系統(tǒng)AS的關(guān)鍵在于:對(duì)其它AS表現(xiàn)出一個(gè)單一的、一致的路由選擇策略。
每個(gè)自治系統(tǒng)擁有一個(gè)全球唯一的自治系統(tǒng)號(hào)ASN
,ASN由IANA管理和分配,最初規(guī)定為一個(gè)16位數(shù)值,RFC6793將其擴(kuò)展到了32位。
引入自治系統(tǒng)后,互聯(lián)網(wǎng)的路由選擇協(xié)議就被劃分為兩大類:
內(nèi)部網(wǎng)關(guān)協(xié)議IGP
外部網(wǎng)關(guān)協(xié)議EGP
自治系統(tǒng)、內(nèi)部網(wǎng)關(guān)協(xié)議和外部網(wǎng)關(guān)協(xié)議之間的關(guān)系
路由信息協(xié)議RIP
RIP是互聯(lián)網(wǎng)的正式標(biāo)準(zhǔn),由RFC2453規(guī)定,目前版本2,記為RIPv2.
RIPv2支持CIDR,其最大優(yōu)點(diǎn)是簡(jiǎn)單
。
RIPv2支持簡(jiǎn)單認(rèn)證,RFC4822為RIPv2補(bǔ)充規(guī)定了加密認(rèn)證機(jī)制。
RIP采用距離向量算法(DV)。
距離向量算法(DV)
DV算法不需要知道網(wǎng)絡(luò)的全局信息,它是一種迭代的、異步的和分布式的算法。
DV算法的基礎(chǔ)是Bellman-Ford
方程
d(x,y)=minv{c(x,v), d(v,y)},v∈{x的鄰居頂點(diǎn)}
Bellman-Ford方程給出了一種求頂點(diǎn)x到頂點(diǎn)y的最低開銷的方法。DV算法利用Bellman-Ford方程求解最短路徑。
思路:我到目的地的最小距離,等于 我到鄰居距離與鄰居到目的地最小距離之和(存在一個(gè)或多個(gè)鄰居) 的最小值。
參考博客:
距離向量DV算法
RIP協(xié)議概述
RIP規(guī)定所有路由器到與其直接連接的網(wǎng)絡(luò)的開銷為1。
RIP將兩臺(tái)路由器之間的最低開銷稱為“距離”,也稱為“跳數(shù)”。每經(jīng)過(guò)一臺(tái)路由器,跳數(shù)加1。
RIP允許一條路徑的“距離”的最大值為15,因此“距離等于16即相當(dāng)于不可達(dá)。
RIP僅適用于小型自治系統(tǒng)。
RIP更新算法
運(yùn)行RIP的路由器中維護(hù)的路由信息數(shù)據(jù),由多個(gè)路由項(xiàng)目組成
RIP協(xié)議的報(bào)文中也包括多個(gè)路由項(xiàng)目。來(lái)自路由器G的RIP報(bào)文中的一個(gè)路由項(xiàng)目如下所示:
RIP協(xié)議其他規(guī)定
路由器最初僅知道直連網(wǎng)絡(luò)的路由信息。
RIP規(guī)定每間隔30秒
,路由器都需要發(fā)送RIP路由更新報(bào)文
給所有鄰居。RIP路由更新報(bào)文中的路由項(xiàng)目包括本路由器已知的全部路由信息。每臺(tái)路由器只和數(shù)目有限的相鄰路由器交換并更新路由信息。
RIP規(guī)定超時(shí)計(jì)時(shí)器
,默認(rèn)為3分鐘,若超時(shí)計(jì)時(shí)器到期,仍未收到鄰居路由器G的路由更新報(bào)文,則將下一跳為G的所有路由都標(biāo)記為無(wú)效,即將距離修改為16。
RP規(guī)定垃圾回收計(jì)時(shí)器
,默認(rèn)為2分鐘,若垃圾回收計(jì)時(shí)器到期,才會(huì)刪除無(wú)效路由項(xiàng)目。
示例
“無(wú)窮計(jì)數(shù)”問(wèn)題
無(wú)窮計(jì)數(shù)問(wèn)題的解決方法
帶毒性逆轉(zhuǎn)的水平分割:
簡(jiǎn)單水平分割
:向鄰居發(fā)送路由更新時(shí),不包含從該鄰居學(xué)習(xí)到的項(xiàng)目:
帶毒性逆轉(zhuǎn)的水平分割
:向鄰居發(fā)送路由更新時(shí)包含從該鄰居學(xué)習(xí)到的項(xiàng)目,但將這些項(xiàng)目的距離設(shè)置為16。
可以完全避免兩臺(tái)路由器之間的路由環(huán)路。但是當(dāng)三臺(tái)以上路由器構(gòu)成環(huán)路,并相互學(xué)習(xí)時(shí),帶毒性逆轉(zhuǎn)的水平分割方案就無(wú)法避免無(wú)窮計(jì)算問(wèn)題了。
觸發(fā)更新:
當(dāng)路由器一旦發(fā)現(xiàn)路由項(xiàng)目的距離發(fā)生變化,就立即發(fā)送路由更新信息
給鄰居路由器。
綜合采用上述機(jī)制可以使發(fā)生無(wú)窮計(jì)數(shù)問(wèn)題的概率降到極低,但仍然不能完全避免該問(wèn)題的發(fā)生。
RIP報(bào)文格式
參考連接:
RIP報(bào)文格式
開放最短路徑優(yōu)先OSPF
OSPF是互聯(lián)網(wǎng)的正式標(biāo)準(zhǔn),IPv4使用的是第2版的OSPF,由RFC2328規(guī)定。
OSPF也支持CIDR,其最大特點(diǎn)是支持在自治系統(tǒng)內(nèi)再次分層。
OSPF支持身份鑒別。
OSPF采用鏈路狀態(tài)算法。
鏈路狀態(tài)算法(LS算法)
LS算法是一種使用全局信息
的算法。
在LS算法中,網(wǎng)絡(luò)拓?fù)浜退械逆溌烽_銷都是已知的,可以用作LS算法的輸入,計(jì)算最小開銷。
在實(shí)踐中,鏈路開銷通常通過(guò)鏈路狀態(tài)廣播通知給網(wǎng)絡(luò)中的其它路由器。鏈路狀態(tài)廣播的結(jié)果就是網(wǎng)絡(luò)中的所有路由器都擁有包含網(wǎng)絡(luò)拓?fù)浜退墟溌烽_銷的一致數(shù)據(jù),這些數(shù)據(jù)稱為鏈路狀態(tài)數(shù)據(jù)庫(kù)。
LS算法利用鏈路狀態(tài)數(shù)據(jù)庫(kù)進(jìn)行路由計(jì)算。
基于鏈路狀態(tài)的路由選擇分為兩個(gè)階段:鏈路狀態(tài)廣播階段
和路由計(jì)算階段
。OSPF采用的LS算法是Dijkstra算法(前向算法)
。
參考鏈接:
OSPF介紹
LS算法介紹
OSPF協(xié)議概述
OSPF協(xié)議非常復(fù)雜和繁瑣,
本節(jié)僅從以下幾個(gè)方面介紹OSPF協(xié)議的基本原理:
·OSPF的區(qū)域劃分
·OSPF的鏈路狀態(tài)廣播
·OSPF的工作過(guò)程
OSPF的區(qū)域劃分
OSPF在自治系統(tǒng)內(nèi)引入了層次結(jié)構(gòu),將一個(gè)自治系統(tǒng)進(jìn)分為多個(gè)區(qū)域
在上層的區(qū)域叫做主干區(qū)域
,用于連通其它區(qū)域,
OSPF規(guī)定每個(gè)區(qū)域必須有一32位的標(biāo)識(shí)符。主干區(qū)域的標(biāo)識(shí)符為0.0.0.0
,一般稱為區(qū)域0
。劃分區(qū)域后,鏈路狀態(tài)廣播被限制在區(qū)域內(nèi)部。
OSPF自治系統(tǒng)內(nèi)包括四種類型的路由器:
- 內(nèi)部路由器
- 主干路由器
- 區(qū)域邊界路由器
- AS邊界路由器
內(nèi)部路由器:廣播發(fā)送自己的鏈路狀態(tài)信息,參與區(qū)域內(nèi)的路由計(jì)算,并從區(qū)域邊界路由器那里學(xué)習(xí)其它區(qū)域的路由信息。
主干路由器:主干區(qū)域的內(nèi)部路由器。
區(qū)域邊界路由器:屬于多個(gè)區(qū)域,執(zhí)行LS算法的多個(gè)拷貝,每個(gè)拷貝參與一個(gè)區(qū)域的路由計(jì)算。
區(qū)域邊界路由器負(fù)責(zé)將所屬區(qū)域的路由信息匯總后發(fā)往主干區(qū)域,也將來(lái)自主干區(qū)域的路由信息匯總后發(fā)往自己所屬的區(qū)域。
AS邊界路由器:運(yùn)行OSPF獲得AS內(nèi)的路由信息,也運(yùn)行外部網(wǎng)關(guān)協(xié)議如BGP,學(xué)習(xí)AS外的路由信息,并將外部路由信息在整個(gè)AS內(nèi)通告。
樁(stub)區(qū)域
OSPF定義了一類特殊的區(qū)域,它們不需要接收本區(qū)域外的路由信息,這類特殊區(qū)域稱為樁區(qū)域(stub areas)
當(dāng)某區(qū)域只有唯一的出口時(shí),或者某區(qū)域的出口不需要根據(jù)網(wǎng)絡(luò)拓?fù)溥M(jìn)行設(shè)定時(shí),可以將該區(qū)域配置為樁區(qū)域。
OSPF的鏈路狀態(tài)廣播
OSPF采用可靠洪泛
方法實(shí)現(xiàn)行鏈路狀態(tài)廣播。
可靠洪泛方法的基本步驟包括洪泛和確認(rèn)。
運(yùn)行OSPF的路由器會(huì)創(chuàng)建一個(gè)或多個(gè)鏈路狀態(tài)通告LSA,封裝在OSPF的分組中。
OSPF共定義了5種LSA,每種LSA都至少包含如下信息:
- 創(chuàng)建LSA的路由器ID;
- 與路由器
直接相鄰的鏈路信息
,包括鏈路開銷: - 鏈路狀態(tài)序號(hào)(LS sequence number);
- 鏈路狀態(tài)老化時(shí)間(LS age)
可靠洪泛法
LS洪泛
:路由器X收到來(lái)自同一個(gè)區(qū)域的路由器Y的LSA時(shí),X將檢查該LSA是否是新的。只有收到新的LSA,路由器X才更新自己的LSDB并將新的LSA從本次接收接口以外的其它所有接口轉(zhuǎn)發(fā)出去。
LS確認(rèn)
:收到LS更新的路由器將確認(rèn)信息通過(guò)本次接收接口,發(fā)向相鄰路由器。LS確認(rèn)不需要洪泛。
OSPF的工作過(guò)程
參考鏈接:
OSPF詳解
OSPF分組格式
參考鏈接:
OSPF分組格式
五類LSA
OSPF的特點(diǎn)
邊界網(wǎng)關(guān)協(xié)議BGP
邊界網(wǎng)關(guān)協(xié)議BGP是目前域間路由協(xié)議的事實(shí)標(biāo)準(zhǔn),其當(dāng)前版本號(hào)為4,記
為BGP-4,由RFC4271規(guī)定。
BGP一直被認(rèn)為是互聯(lián)網(wǎng)最復(fù)雜的部分之一。
BGP支持CIDR
,支持鑒別
。
BGP采用路徑向量算法
,尋找有效路徑。
BGP基于策略
,選擇“最佳”路由。
BGP的路徑向量算法僅和其鄰居路由器交換可達(dá)性信息,路由信息包含到達(dá)目的網(wǎng)絡(luò)的完整路徑信息,因而稱為路徑向量算法。
但BGP不追求尋找一條最低開銷路徑,BGP只力求尋找一條無(wú)環(huán)的通往目的網(wǎng)絡(luò)的有效路徑。
當(dāng)存在多條有效路徑時(shí),BGP基于策略選擇出“最佳”路徑。
采用路徑向量算法的原因
BGP- 自治系統(tǒng)AS分類
依據(jù)允許的流量不同,可以對(duì)AS進(jìn)行分類:
本地流量
指起止點(diǎn)都在AS內(nèi)的通信量,
中轉(zhuǎn)流量
指穿過(guò)一個(gè)AS傳送的通信量。
每個(gè)AS都有一臺(tái)或多臺(tái)AS邊界路由器。
AS邊界路由器是負(fù)責(zé)在AS之間完成分組轉(zhuǎn)發(fā)的路由器。
每個(gè)AS可以擁有多個(gè)網(wǎng)絡(luò)前綴
。
路徑向量交換
每一個(gè)參與BGP的AS必須至少選擇一個(gè)BGP發(fā)言人
通常選擇AS邊界路由器作為BGP發(fā)言人,但AS邊界路由器并不一定必須成為BGP發(fā)言人。
BGP發(fā)言人之間通過(guò)TCP通信,交換路由信息。
建立TCP連接的兩個(gè)BGP發(fā)言人,彼此成為對(duì)方的鄰站或?qū)Φ日尽?/p>
BGP路由信息的構(gòu)成:
BGP路由=[前綴,BGP屬性]
前綴支持CIDR,由[目的P地址,掩碼]
構(gòu)成
BGP屬性有很多,最重要的是AS-PATH
屬性,AS-PATH屬性包含到目的網(wǎng)絡(luò)的完整路徑信息。
BGP還可以包含很多其它屬性。
AS-PATH屬性可以防止
環(huán)路
出現(xiàn)。
AS-PATH中,每個(gè)AS用唯一編號(hào)ASN
表示
對(duì)于樁AS,可以不分配ASN
當(dāng)收到的AS-PATH中包含自己的編號(hào)時(shí),說(shuō)明出現(xiàn)環(huán)路,丟棄。
基于策略的最佳路由選擇
AS1到N2有兩條路徑,應(yīng)該如何選擇?
AS1可以根據(jù)預(yù)先配置的路由選擇策略來(lái)進(jìn)行選擇。
根據(jù)不同的屬性可以設(shè)定不同的規(guī)則。
規(guī)則舉例:AS跳數(shù)較少的路由較好。
所謂策略就是一系列按照順序執(zhí)行的規(guī)則
。
BGP報(bào)文種類
當(dāng)TCP連接建立后,BGP首先發(fā)送OPEN
報(bào)文,如果鄰站接受這種關(guān)系,就用KEEPALIVE
報(bào)文響應(yīng)。這樣,兩個(gè)BGP發(fā)言人就建立了對(duì)等站關(guān)系。
在BGP最初運(yùn)行時(shí),BGP對(duì)等站交換完整的BGP路由表
。但以后只在路由發(fā)生變化時(shí)更新有變化的部分。這樣可以節(jié)約網(wǎng)絡(luò)帶寬和減少路由器的處理開銷。
一旦建立了對(duì)等站關(guān)系,雙方都需要周期性地發(fā)送KEEPALIVE報(bào)文
,以證實(shí)自己還在線。
BGP發(fā)言人可以用UPDATE報(bào)文宣布增加新的路由,也可以通告撤銷過(guò)時(shí)路由。
檢測(cè)到BGP差錯(cuò)時(shí),BGP發(fā)送NOTIFICATION報(bào)文,隨后將關(guān)閉BGP連接
域間路由與域內(nèi)路由的集成
當(dāng)BGP發(fā)言人
收到對(duì)等站的路由信息后,如何才能把這些域間路由信息通知給本AS內(nèi)的其它路由器呢?
1、最簡(jiǎn)單的情況,只有一臺(tái)AS邊界路由器的樁AS:
·AS邊界路由器只需將一個(gè)默認(rèn)路由導(dǎo)入內(nèi)部網(wǎng)關(guān)協(xié)議,然后內(nèi)部網(wǎng)關(guān)協(xié)議將默認(rèn)路由擴(kuò)散到AS內(nèi)的全部路由器。
2、多連接AS和中轉(zhuǎn)AS的情況
由于有多臺(tái)AS邊界路由器,因而AS內(nèi)部路由器需要決定將IP數(shù)據(jù)報(bào)從哪臺(tái)AS邊界路由器發(fā)送出去。
BGP路由表非常龐大,如果把BGP路由表都導(dǎo)入內(nèi)部網(wǎng)關(guān)協(xié)議,依靠?jī)?nèi)部網(wǎng)關(guān)協(xié)議將這些域間路由信息擴(kuò)散到AS內(nèi)部路由器,會(huì)極大增加網(wǎng)絡(luò)的負(fù)載和路由器的計(jì)算開銷。
解決方案:BGP將其應(yīng)用范圍擴(kuò)展到了自治系統(tǒng)AS內(nèi)部。RFC4271將BGP分為兩種形式:外部BGP
(External BGP,EBGP)和內(nèi)部BGP
(Internal BGP)
運(yùn)行于不同AS之間的BGP稱為EBGP
運(yùn)行于同一AS內(nèi)部的BGP稱為IBGP
EBGP與IBGP本質(zhì)上沒(méi)有區(qū)別,都是為了傳遞域間路由信息
BGP報(bào)文格式
專用網(wǎng)相關(guān)概念
網(wǎng)絡(luò)地址轉(zhuǎn)換NAT
專用網(wǎng)
是指企業(yè)或機(jī)構(gòu)內(nèi)部專用的網(wǎng)絡(luò)。
專用網(wǎng)上的主機(jī)與公用的互聯(lián)網(wǎng)上的主機(jī)通信需要利用網(wǎng)絡(luò)地址轉(zhuǎn)換NAT
。
專用網(wǎng)上的地址稱為專網(wǎng)地址(Private Address)
,它們僅需要在一定的范圍內(nèi)唯一。在互聯(lián)網(wǎng)的不同部分,這些IP地址可以被重復(fù)使用。因此,也稱為可重用地址
。
網(wǎng)絡(luò)地址轉(zhuǎn)換也被用來(lái)延緩IP地址空間耗盡。
需要向IANA
申請(qǐng)才能使用的全球唯一的IP地址稱為全球地址(Global Address)
或公網(wǎng)地址
。
使用NAT需要在專用網(wǎng)絡(luò)連接到互聯(lián)網(wǎng)的路由器上安裝NAT軟件
。
安裝了NAT軟件的路由器稱為NAT路由器,它至少應(yīng)具有一個(gè)有效的全球地址。
NAT存在兩種形左式:
- 基本NAT
- 網(wǎng)絡(luò)地址與端口轉(zhuǎn)換NAPT
基本NAT
網(wǎng)絡(luò)地址與端口轉(zhuǎn)換NAPT
NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)
:NAT是將IP數(shù)據(jù)報(bào)頭中的IP地址轉(zhuǎn)換為另一個(gè)IP地址的過(guò)程。使用少量的公網(wǎng)IP地址代表較多的私網(wǎng)IP地址的方式,僅支持地址轉(zhuǎn)換,不支持端口映射
NAPT(網(wǎng)絡(luò)地址端口轉(zhuǎn)換)
:支持端口的映射并允許多臺(tái)主機(jī)共享一個(gè)公用IP地址,這樣就可以支持同時(shí)多個(gè)位于NAT后面的機(jī)器和外部進(jìn)行交互了。支持端口轉(zhuǎn)換的NAT又可以分為兩類:源地址轉(zhuǎn)換(SNAT)和目的地址轉(zhuǎn)換NAT(DNAT),下面說(shuō)的NAT都是指NAPT。
不管采用NAT,還是采用NAPT,NAT路由器的地址映射表都有兩種實(shí)現(xiàn)方式:
動(dòng)態(tài)映射
和靜態(tài)映射
。
虛擬專用網(wǎng)VPN
機(jī)構(gòu)內(nèi)部的專用網(wǎng)之間的鏈路通常是·私有的·。
利用公網(wǎng)的互聯(lián)網(wǎng)作為本機(jī)構(gòu)各專用網(wǎng)之間通信載體的專用網(wǎng)稱為虛擬專用網(wǎng)(VPN)
隧道技術(shù)
在公用互聯(lián)網(wǎng)上創(chuàng)建虛擬鏈路建設(shè)VPN的技術(shù)稱為隧道技術(shù)。
可以把隧道想象成一對(duì)結(jié)點(diǎn)間的一條虛擬鏈路,這對(duì)結(jié)點(diǎn)之間事實(shí)上可以相隔任意多個(gè)網(wǎng)絡(luò)。
最基礎(chǔ)的隧道是IP in IP隧道,即利用IP協(xié)議
構(gòu)建隧道。
通過(guò)將隧道兩端路由器的IP地址提供給虛擬鏈路,就可以在隧道兩端的路由器之間創(chuàng)建虛擬鏈路。
在隧道兩端路由器的路由表中,這條虛鏈路像一條普通的鏈路一樣。隧道鏈路具有一個(gè)虛接口號(hào)
。
隧道的實(shí)質(zhì)是再次封裝。
經(jīng)虛接口轉(zhuǎn)發(fā)出去的數(shù)據(jù)報(bào)將經(jīng)過(guò)再次封裝,來(lái)自虛接口的數(shù)據(jù)報(bào)將被再次解封。
隧道協(xié)議
IP in IP隧道
由RFC1853規(guī)定。
在IP in IP隧道中,隧道中的數(shù)據(jù)以明文
形式在互聯(lián)網(wǎng)中傳送,沒(méi)有提供數(shù)據(jù)安全保障。
實(shí)際中,用于建立隧道的協(xié)議通常將原IP數(shù)據(jù)報(bào)加密后才再次封裝。
用于構(gòu)建VPN的常見(jiàn)協(xié)議包括:
通用路由封裝(Generic Routing Encapsulation,GRE)
點(diǎn)對(duì)點(diǎn)隧道協(xié)議(Point-to-Point Tunneling Protocol,PPTP)
第2層隧道協(xié)議(Layer Two Tunneling Protocol,.L2TP)
IP層安全((Internet Protocol Security,IPSec)
多協(xié)議標(biāo)記交換MPLS
多協(xié)議標(biāo)記交換(Multi--Protocol Label Switching,IMPLS)
是IETF的MPLS工作組開發(fā)的一種協(xié)議,它試圖將虛電路的一些特點(diǎn)與數(shù)據(jù)報(bào)的靈活性結(jié)合起來(lái)。
2001年成為互聯(lián)網(wǎng)建議標(biāo)準(zhǔn)。它主要應(yīng)用于以下三個(gè)方面:
①使不知道如何轉(zhuǎn)發(fā)P數(shù)據(jù)報(bào)的設(shè)備支持基于目的P地址的轉(zhuǎn)發(fā);
②利用顯式路由,支持負(fù)載均衡和流量工程;
③利用BGP,支持對(duì)等模式VPN。
支持MPLS技術(shù)的路由器稱為標(biāo)記交換路由器LSR。
許多彼此相鄰的LSR組成的集合稱為MPLS域
。
MPLS的重要特點(diǎn)就是在MPLS域的入口處,給每一個(gè)IP數(shù)據(jù)報(bào)打上固定長(zhǎng)度的“標(biāo)記”,然后按照標(biāo)記轉(zhuǎn)發(fā)IP數(shù)據(jù)報(bào)。
MPLS標(biāo)記是MPLS首部中的一個(gè)字段,MPLS首部位于數(shù)據(jù)鏈路層首部和網(wǎng)絡(luò)層IP首部之間。
入標(biāo)點(diǎn)和出標(biāo)點(diǎn)
LSR同時(shí)具有標(biāo)記交換
和路由選擇
這兩種功能。
為了支持和記錄MPLS標(biāo)記,LSR在路由表中增加了兩個(gè)字段:入標(biāo)記
和出標(biāo)記
。
入標(biāo)記
:代表接收到的分組中攜帶的MPLS標(biāo)記,
出標(biāo)記
:代表自己發(fā)出的分組中攜帶的MPLS標(biāo)記。
MPLS轉(zhuǎn)發(fā)IP分組
MPLS入口結(jié)點(diǎn)
根據(jù)目的IP地址,為分組增加標(biāo)記。
MPLS域內(nèi)結(jié)點(diǎn)
根據(jù)標(biāo)記轉(zhuǎn)發(fā),并完成標(biāo)記對(duì)換。
MPLS出口結(jié)點(diǎn)
去除標(biāo)記
MPLS優(yōu)點(diǎn)
更快速的轉(zhuǎn)發(fā)IP分組
除了MPLS入口結(jié)點(diǎn)以外,其它的LSR在轉(zhuǎn)發(fā)分組時(shí),只需檢索
入標(biāo)記
。
目的IP地址的查找算法是最長(zhǎng)前綴匹配算法
,而標(biāo)記查找算法
是一種精確匹配算法
。
標(biāo)記查找算法比目的IP地址查找算法效率更高,速度更快
支持基于目的IP地址的轉(zhuǎn)發(fā)
雖然我們替換了路由表的查找算法,但路由選擇算法可以不做改變。
基于目的地址分配標(biāo)記后,分組經(jīng)過(guò)的路徑與不使用MPLS時(shí)經(jīng)過(guò)的路徑是相同的
以前不知道如何轉(zhuǎn)發(fā)IP數(shù)據(jù)報(bào)的設(shè)備,在MPLS域內(nèi)能夠支持P數(shù)據(jù)報(bào)的轉(zhuǎn)發(fā)
這種結(jié)果可以應(yīng)用在ATM上,也可以應(yīng)用在光交換設(shè)備上
MPLS中的核心概念就是轉(zhuǎn)發(fā)等價(jià)類FEC
。
轉(zhuǎn)發(fā)等價(jià)類FEC
是指路由器按照同樣方式對(duì)待的IP數(shù)據(jù)報(bào)的集合。
顯然,每個(gè)MPLS標(biāo)記與一個(gè)轉(zhuǎn)發(fā)等價(jià)類FEC一一對(duì)應(yīng)。
上例中,路由表中每個(gè)相同的網(wǎng)絡(luò)前綴是一個(gè)FEC,即所有網(wǎng)絡(luò)前綴相同的分組,都沿著相同的路徑進(jìn)行轉(zhuǎn)發(fā)。這種轉(zhuǎn)發(fā)等價(jià)類等價(jià)于基于目的IP地址的轉(zhuǎn)發(fā)。
FEC是非常強(qiáng)大和靈活的概念,劃分FEC的方法不受什么限制,并不局限在基于目的IP地址劃分FEC。
可以將所有源地址與目的地址都相同的IP數(shù)據(jù)報(bào)劃分為一個(gè)FEC,
也可以將具有某種服務(wù)質(zhì)量需求的IP數(shù)據(jù)報(bào)劃分為一個(gè)FEC。
MPLS首部格式
標(biāo)記值
占20位,理論上允許最多220個(gè)標(biāo)記
。RFC3032規(guī)定標(biāo)記0~15保留用于特殊用途。。
流量類(Traffic Class,TC)
占3位,最初這3位保留用于試驗(yàn)。RFC5462將這三位重命名為流量類,包括服務(wù)質(zhì)量信息
和顯式擁塞通知ECN
.
棧底標(biāo)記S
占1位。當(dāng)多次插入MPLS首部,構(gòu)成標(biāo)記棧
時(shí)使用。位于棧底的MPLS首部,即最后一個(gè)MPLS首部的S位置1.
生存時(shí)間TTL
占8位。每經(jīng)過(guò)一個(gè)LSR,TTL減1。當(dāng)TTL為0時(shí),丟棄分組。
支持流量工程
MPLS實(shí)現(xiàn)了相同標(biāo)記的分組都沿著相同的路徑轉(zhuǎn)發(fā)
,在MPLS域內(nèi),這樣的路徑稱為標(biāo)記交換路徑。
顯然一個(gè)轉(zhuǎn)發(fā)等價(jià)類對(duì)應(yīng)一條標(biāo)記交換路徑LSP。
每條LSP在入口結(jié)點(diǎn)為分組指定標(biāo)記時(shí)就已經(jīng)確定了。這種“**由入口結(jié)點(diǎn)確定進(jìn)入MPLS域以后轉(zhuǎn)發(fā)路徑”**的方法稱為顯式路由。
顯式路由與我們之前討論的“"逐跳路由”完全不同。顯式路由可以應(yīng)用于負(fù)載均衡和流量工程。
傳統(tǒng)的逐跳路由僅根據(jù)目的IP地址轉(zhuǎn)發(fā)
顯式路由可以靈活定義FEC,比如根據(jù)分組的不同來(lái)源劃分FEC,分配標(biāo)記,完成網(wǎng)絡(luò)通信量的負(fù)載均衡。
由網(wǎng)絡(luò)管理員采用自定義的FEC來(lái)均衡網(wǎng)絡(luò)負(fù)載的做法稱為流量工程。
在MPLS流量工程中,顯式路由不需要網(wǎng)絡(luò)管理員手動(dòng)計(jì)算,可以采用約束最短路徑優(yōu)先算法
自動(dòng)計(jì)算。
支持MPLS VPN
重疊模式VPN和對(duì)等模式VPN
對(duì)等模式VPN
在MPLS網(wǎng)絡(luò)上,構(gòu)建對(duì)等模式VPN
,是MPLS最廣泛的應(yīng)用,也是MPLS在互聯(lián)網(wǎng)工程界被廣泛部署的原因之一。
RFC4364規(guī)定了利用MPLS和BGP實(shí)現(xiàn)對(duì)等模式VPN的技術(shù)方案。這種VPN被稱為MPLS L3VPN,也稱為BGP/MPLS VPN
.
MPLS的顯式路由可以用來(lái)構(gòu)建隧道,BGP被用來(lái)傳遞VPN的路由信息和分發(fā)MPLS標(biāo)記。
RFC4760對(duì)BGP-4進(jìn)行了多協(xié)議擴(kuò)展,使BGP可以為三層VPN等多種協(xié)議傳遞路由信息
。擴(kuò)展后的BGP稱為MP-BGP,屬于HBGP.
MP-BGP還可以為MPLS分發(fā)專網(wǎng)標(biāo)記,以區(qū)別VPN用戶數(shù)據(jù)的歸屬。
BGP/MPLS VPN
CE設(shè)備
將VPN的路由信息發(fā)送給PE設(shè)備。
PE設(shè)備
之間利用MP-BGP交換路由信息,得到到達(dá)其它VPN子網(wǎng)的路由
利用MP-BGP分發(fā)MPLS標(biāo)記,
這些MPLS標(biāo)記用來(lái)在PE設(shè)備之間構(gòu)建MPLS隧道。
第六章 數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層概述
在EEE802的系列標(biāo)準(zhǔn)中,將所有運(yùn)行了數(shù)據(jù)鏈路層(二層)協(xié)議
的網(wǎng)絡(luò)設(shè)備稱為站點(diǎn)
或站(station)
結(jié)點(diǎn)
通常是指運(yùn)行了網(wǎng)絡(luò)層(三層)協(xié)議
的網(wǎng)絡(luò)設(shè)備,如主機(jī)
和路由器
。
鏈路是指從一個(gè)站點(diǎn)到相鄰站點(diǎn)之間的一段物理線路(有線或無(wú)線),中間沒(méi)有任何其它的站點(diǎn),也稱為物理鏈路
。
數(shù)據(jù)鏈路是指在一段物理鏈路之上增加了控制數(shù)據(jù)傳輸?shù)膮f(xié)議軟件或硬件,也稱為邏輯鏈路。
數(shù)據(jù)鏈路層的協(xié)議數(shù)據(jù)單元PDU稱為幀
。
每個(gè)數(shù)據(jù)幀中包含的源地址和目的地址稱為硬件地址
或物理地址
。
數(shù)據(jù)幀的源地址是發(fā)送方結(jié)點(diǎn)的發(fā)送接口的硬件地址;
數(shù)據(jù)幀的目的地址是下一跳結(jié)點(diǎn)的接收接口的硬件地址。
每經(jīng)過(guò)一臺(tái)路由器,數(shù)據(jù)幀中的源地址
和目的地址
都會(huì)發(fā)生變化
數(shù)據(jù)鏈路層協(xié)議的作用范圍
數(shù)據(jù)鏈路層的主要任務(wù)是提供相鄰結(jié)點(diǎn)之間的通信服務(wù)。大多數(shù)數(shù)據(jù)鏈路層協(xié)議的作用范圍是相鄰的結(jié)點(diǎn)之間。
當(dāng)無(wú)線AP連接了以太網(wǎng)和無(wú)線局域網(wǎng)時(shí),以太網(wǎng)協(xié)議和無(wú)線局域網(wǎng)協(xié)議的作用范圍較小,不能覆蓋到兩個(gè)相鄰的結(jié)點(diǎn)之間,僅覆蓋到相鄰的兩個(gè)站點(diǎn)之間。
數(shù)據(jù)鏈路層的信道
數(shù)據(jù)鏈路層使用的信道主要有以下兩種類型:廣播信道
和點(diǎn)對(duì)點(diǎn)信道
封裝成幀
封裝成幀
是數(shù)據(jù)鏈路層最基本的功能。
由于幀在物理層上以比特流
的形式傳輸,所以數(shù)據(jù)鏈路層在接收時(shí)必須能夠確定每一幀的邊界。確定幀開始和幀結(jié)束的位置,稱為幀定界。
幀長(zhǎng)度和MTU
幀長(zhǎng)
等于幀的數(shù)據(jù)部分長(zhǎng)度加上幀首部以及幀尾部的長(zhǎng)度。
數(shù)據(jù)鏈路層協(xié)議規(guī)定的它能傳送的數(shù)據(jù)部分的長(zhǎng)度上限,稱為最大傳送單元MTU
。
顯然,為了提高幀的傳輸效率,應(yīng)該使幀的數(shù)據(jù)部分長(zhǎng)度盡可能地接近MTU。
幀定界方法
典型的幀定界方法包括:
- 標(biāo)志字符法
- 標(biāo)志比特法
- 特殊的物理層編碼法
網(wǎng)絡(luò)層協(xié)議無(wú)需了解數(shù)據(jù)鏈路層采用的幀定界方法,即幀定界方法對(duì)網(wǎng)絡(luò)層是透明的,這稱為透明傳輸。
不同的幀定界方法實(shí)現(xiàn)透明傳輸?shù)姆绞揭膊灰粯印?/strong>
標(biāo)志字符法
定界方法
:對(duì)于以字符為基本傳送單元的協(xié)議,可以指定特殊字符作為幀開始和幀結(jié)束的標(biāo)志字符,稱為幀定界符。
透明傳輸
:如果標(biāo)志字符出現(xiàn)在數(shù)據(jù)中時(shí),會(huì)干擾幀定界功能的實(shí)現(xiàn)。采用字符填充法實(shí)現(xiàn)透明傳輸。(轉(zhuǎn)義符)
典型協(xié)議:PPP協(xié)議用于異步傳輸時(shí),采用標(biāo)志字符法。
標(biāo)志比特法
定界方法
:對(duì)于以比特為基本傳送單元的協(xié)議,可以指定特殊的比特組合作為幀開始或幀結(jié)束的標(biāo)志。
透明傳輸
:采用比特填充法,避免傳送的數(shù)據(jù)中包含標(biāo)志比特組合,實(shí)現(xiàn)透明傳輸。
特殊的物理層編碼法
定界方法
:利用物理層的特殊編碼標(biāo)記幀的邊界。要求:物理層編碼方案中包含冗余編碼。
透明傳輸
:由于冗余編碼不會(huì)出現(xiàn)在常規(guī)數(shù)據(jù)中,因而不需要額外處理,即可實(shí)現(xiàn)透明傳輸。
尋址
廣播信道上的數(shù)據(jù)鏈路層協(xié)議必須有尋址功能,在廣播信道上的主機(jī)或路由器的網(wǎng)絡(luò)接口必須具有硬件地址才能夠發(fā)送和接收數(shù)據(jù)幀。
點(diǎn)對(duì)點(diǎn)信道上的發(fā)送方和接收方都只有一個(gè),因此其數(shù)據(jù)鏈路層協(xié)議的尋址功能不是必須的。
以太網(wǎng)協(xié)議和WLAN協(xié)議都采用了48位
的硬件地址,該硬件地址也稱為MAC地址。
在以太網(wǎng)上,主機(jī)和路由器的網(wǎng)絡(luò)接口都必須具有MAC地址
,但是二層交換機(jī)的接口允許沒(méi)有MAC地址。
MAC地址
IEEE規(guī)定了兩種類型的擴(kuò)展唯一標(biāo)識(shí)符EUI,分別為6字節(jié)長(zhǎng)度的EUI-48和8字節(jié)長(zhǎng)度的EUI-64。
EUI-48通常用作IEEE802網(wǎng)絡(luò)設(shè)備的硬件地址,如以太網(wǎng)MAC地址
、WLAN的MAC地址
。
MAC地址分為兩個(gè)部分,每部分占3字節(jié)。
- 組織唯一標(biāo)識(shí)符OUI:前三個(gè)字節(jié)(高24位),由IEEE的注冊(cè)管理機(jī)構(gòu)負(fù)載分配;
- 擴(kuò)展標(biāo)識(shí)符EI:后三個(gè)字節(jié)(低24位),由獲得OUI的廠商自行分配。
最高字節(jié)的最低位稱為I/G位
最高字節(jié)的次低位稱為U/L位
48位全為1的地址是廣播地址。
差錯(cuò)控制
任何通信鏈路都不是理想的,在傳輸過(guò)程中都會(huì)出現(xiàn)差錯(cuò),0可能變成1,1也可能變成0,這稱為比特差錯(cuò)
。
數(shù)據(jù)鏈路層,不同的協(xié)議提供不同程度的差錯(cuò)控制功能,包括無(wú)差錯(cuò)接受
或可靠傳輸
。
在光纖、同軸電纜和雙絞線等比特差錯(cuò)率很低的鏈路上的數(shù)據(jù)鏈路層協(xié)議,如以太網(wǎng)協(xié)議、PPP協(xié)議等僅提供無(wú)差錯(cuò)接受
功能,而不提供可靠傳輸
功能。
在無(wú)線鏈路等比特差錯(cuò)率較高的鏈路上的數(shù)據(jù)鏈路層協(xié)議,如無(wú)線局域網(wǎng)WLAN協(xié)議,依靠確認(rèn)重傳機(jī)制,提供相鄰MAC站(MAC station)
之間的可靠傳輸
功能。
無(wú)論是無(wú)差錯(cuò)接受功能,還是可靠傳輸功能的實(shí)現(xiàn),都需要差錯(cuò)檢測(cè)算法來(lái)發(fā)現(xiàn)比特差錯(cuò)。
差錯(cuò)檢測(cè)算法CRC
在數(shù)據(jù)鏈路層,目前應(yīng)用廣泛的差錯(cuò)檢測(cè)算法是循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check,CRC)
冗余碼和幀校驗(yàn)序列FCS
發(fā)送方,把數(shù)據(jù)劃分為組,每次發(fā)送一組數(shù)據(jù)。
假定每組數(shù)據(jù)k
個(gè)比特,將待發(fā)送數(shù)據(jù)記為M
。
發(fā)送方利用CRC算法在數(shù)據(jù)M的后面添加供差錯(cuò)檢測(cè)用的比特冗余碼,一起發(fā)送出去。
對(duì)于一個(gè)幀來(lái)說(shuō),為了進(jìn)行檢錯(cuò)而添加的冗余碼常稱為幀檢驗(yàn)序列FCS
在數(shù)據(jù)后面增加 r
比特冗余碼,增大了數(shù)據(jù)傳輸?shù)拈_銷,但提供了差錯(cuò)檢測(cè)能力
CRC-32
CRC校驗(yàn)也稱為多項(xiàng)式編碼
,其基本思想是將比特串看作系數(shù)為0或1的多項(xiàng)式,對(duì)比特串的計(jì)算被解釋為多項(xiàng)式計(jì)算。
收發(fā)雙方商定的P
來(lái)源于生成多項(xiàng)式P(x),其最高位和最低位系數(shù)必須是1.
經(jīng)過(guò)精心挑選的生成多項(xiàng)式P(x)可以確保CRC算法漏判的慨率極低。
CRC-32被EEE應(yīng)用在包括以太網(wǎng)在內(nèi)的多種數(shù)據(jù)鏈路層協(xié)議中:
CRC屬于檢錯(cuò)碼
媒體介入控制
媒體接入控制(Medium Access Control,MAC)協(xié)議
用來(lái)規(guī)定共享信道的訪問(wèn)方式和訪問(wèn)者。
在點(diǎn)對(duì)點(diǎn)信道上,僅有一個(gè)發(fā)送方和一個(gè)接收方,只要信道是全雙工的,就無(wú)需MAC協(xié)議。例如PPP就不需要MAC協(xié)議。
在廣播信道上的MAC協(xié)議也稱為多點(diǎn)接入?yún)f(xié)議
,或多路訪問(wèn)協(xié)議
。
實(shí)現(xiàn)媒體接入控制的方法可以分為三類:
- 靜態(tài)信道分配方法、
- 隨機(jī)接入方法
- 受控接入方法。
其中,靜態(tài)信道分配方法屬于物理層的方法。
靜態(tài)信道分配方法
常見(jiàn)的靜態(tài)信道劃分方法包括頻分復(fù)用
、時(shí)分復(fù)用
和碼分復(fù)用
。
碼分復(fù)用也成為碼分多址CDMA。
隨機(jī)接入方法
隨機(jī)接入方法是一種基于爭(zhēng)用的信道分配方法。
隨機(jī)接入的特點(diǎn)是所有站點(diǎn)可隨機(jī)地發(fā)送數(shù)據(jù)。
如果恰巧有兩個(gè)或更多的站點(diǎn)在同一時(shí)刻發(fā)送數(shù)據(jù),那么在共享信道上就會(huì)產(chǎn)生碰撞,也稱為發(fā)生了沖突
。隨機(jī)接入方法必須有處理沖突的方法。
隨機(jī)接入的MAC協(xié)議主要包括:
- 純ALOHA
- 隙ALOHA
- CSMA/CD:帶有碰撞檢測(cè)的載波監(jiān)聽(tīng)多點(diǎn)接入
- CSMA/CA:帶有碰撞避免的載波監(jiān)聽(tīng)多點(diǎn)接入
ALLOHA
CSMA/CD
不再采用統(tǒng)一長(zhǎng)度的幀,在ALOHA協(xié)議
的基礎(chǔ)之上增加了更多的控制措施。
可以用以下四句話描述:
- 發(fā)送前先監(jiān)聽(tīng)
- 閑則發(fā)送,忙則等待
- 邊發(fā)送邊監(jiān)聽(tīng)
- 碰撞則停發(fā),隨機(jī)退避重傳
CSMA/CD采用二進(jìn)制指數(shù)退避算法進(jìn)行隨機(jī)退避。隨著重傳次數(shù)的增加,增大隨機(jī)退避的時(shí)間范圍。
CSMA/CD的爭(zhēng)用期、傳輸期和空閑期
CSMA/CD的應(yīng)用
無(wú)線局域網(wǎng)WLAN中使用分布協(xié)調(diào)功能DCF時(shí),采用的MAC協(xié)議是CSMA/CA協(xié)議
。
在無(wú)線局域網(wǎng)中,由于不能進(jìn)行碰撞檢測(cè),只要開始發(fā)送數(shù)據(jù),就不會(huì)中途停止發(fā)送,而一定會(huì)把整個(gè)幀發(fā)送完畢。因此,CSMA/CA用確認(rèn)重傳和碰撞避免機(jī)制代替以太網(wǎng)中的碰撞檢測(cè)機(jī)制`。
碰撞避免機(jī)制雖然能減少碰撞發(fā)生的概率,但并不能完全避免碰撞的發(fā)生。
受控接入方法
受控接入方法是一種無(wú)爭(zhēng)用的信道分配方法
。
受控接入的特點(diǎn)是站點(diǎn)發(fā)送數(shù)據(jù)必須服從一定的控制,因而不會(huì)產(chǎn)生碰撞。
受控接入?yún)f(xié)議分別包括輪詢
和令牌傳遞
。
流量控制
流量控制是數(shù)據(jù)鏈路層協(xié)議的可選功能。
流量控制用于解決發(fā)送方的發(fā)送速度超出接收方的處理速度的問(wèn)題。
在TCPP協(xié)議族中,運(yùn)輸層的TCP協(xié)議依賴滑動(dòng)窗口機(jī)制實(shí)現(xiàn)了端到端的流量控制。因此,很多數(shù)據(jù)鏈路層協(xié)議并未設(shè)計(jì)流量控制功能,而將流量控制交給運(yùn)輸層處理。
但是,以太網(wǎng)協(xié)議
設(shè)計(jì)了流量控制功能。
在以太網(wǎng)中,流量控制功能也是可選的。它可以由用戶激活或通過(guò)自動(dòng)協(xié)商激活。以太網(wǎng)中,通常并未使用流量控制。
以太網(wǎng)設(shè)計(jì)了兩種流量控制機(jī)制:背壓機(jī)制和暫停幀。本章的主要協(xié)議
以太網(wǎng)協(xié)議Ethernet
地址解析協(xié)議ARP
無(wú)線局域網(wǎng)協(xié)議WLAN
點(diǎn)對(duì)點(diǎn)協(xié)議PPP
以太網(wǎng)
以太網(wǎng)的發(fā)展趨勢(shì)
經(jīng)過(guò)幾十年的發(fā)展,以太網(wǎng)的發(fā)展趨勢(shì)包含以下幾個(gè)方面:
從低速到高速
從共享傳輸媒體到獨(dú)享傳輸媒體
從局域網(wǎng)到城域網(wǎng)再到廣域網(wǎng)
從低速到高速
最早用于實(shí)驗(yàn)的以太網(wǎng)速率僅3Mbt/S
.
第一個(gè)標(biāo)準(zhǔn)的以太網(wǎng)速率為10Mbit/s
,稱為傳統(tǒng)以太網(wǎng)
。
1995年發(fā)布的100Mbit/s
的以太網(wǎng),稱為快速以太網(wǎng)(Fast Ethernet)
。
超過(guò)100Mbit/s
速率的以太網(wǎng),稱為高速以太網(wǎng)
。
2019年和2020年分別發(fā)布了單模光纖
、多模光纖
上的400Gbit/s以太網(wǎng)標(biāo)準(zhǔn)。
從共享傳輸媒體到獨(dú)享傳輸媒體
傳統(tǒng)以太網(wǎng)采用同軸電纜作為共享傳輸媒體,也被稱為共享以太網(wǎng)
。
多個(gè)站被連接到一根共享總線上,采用CSMA/CD協(xié)議
協(xié)調(diào)多個(gè)站的數(shù)據(jù)發(fā)送。
隨著10BASE-T的開發(fā),各站點(diǎn)通過(guò)雙絞線連接到集線器上,而不再連接到同軸電纜上。出現(xiàn)了星形共享以太網(wǎng)
。
·依然采用CSMA/CD
協(xié)議。
隨著100BASE-T以太網(wǎng)的發(fā)展和流行,交換機(jī)逐漸取代集線器。
交換機(jī)完全取代集線器、并工作在全雙工模式下的網(wǎng)絡(luò),稱為全雙工網(wǎng)絡(luò)
。
全雙工網(wǎng)絡(luò)中各站獨(dú)享傳輸媒體,不再使用CSMA/CD協(xié)議。
從局域網(wǎng)到城域網(wǎng)再到廣域網(wǎng)
以太網(wǎng)的幀格式
最初的以太網(wǎng)標(biāo)準(zhǔn)由DEC、Intel和施樂(lè)公司聯(lián)合推出,稱為稱為DIX Etherneti標(biāo)準(zhǔn)。該聯(lián)盟推出Ethernet V2標(biāo)準(zhǔn)后沒(méi)有繼續(xù)更新。
IEEE802委員會(huì)對(duì)Ethernet V:2幀格式稍加修改,推出了802.3標(biāo)準(zhǔn)的以太網(wǎng)幀格式。
IEEE802.3為了支持各種類型的局域網(wǎng)互連,將數(shù)據(jù)鏈路層分為兩個(gè)子層:媒體接
入控制(Media Access Control,.MAC)子層和邏輯鏈路控制(Logical Link
Control,LLC)子層。
因此,數(shù)據(jù)鏈路層首部分為MAC首部
和LLC首部
。它們的關(guān)系如下:
隨著其它種類的局域網(wǎng)被以太網(wǎng)淘汰,EEE于2010年撤銷了802.2標(biāo)準(zhǔn),802.3以
太網(wǎng)標(biāo)準(zhǔn)中不再使用LLC首部。本節(jié)討論以太網(wǎng),不再考慮LLC子層。
目前,LLC首部仍然應(yīng)用在802.11無(wú)線局域網(wǎng)中。
802.3以太網(wǎng)幀格式
在IEEE分組中,前導(dǎo)碼、幀開始符SFD和載波延伸字段屬于物理層,其它字段屬于數(shù)據(jù)鏈路層
,數(shù)據(jù)鏈路層的各字段共同構(gòu)成了幀
。
前導(dǎo)碼
占7個(gè)字節(jié),取值為交替的1和0。其作用是使接收端的適配器在接收MAC幀時(shí)能夠迅速調(diào)整其時(shí)鐘頻率,實(shí)現(xiàn)位同步
幀開始符SFD
占1個(gè)字節(jié),取值“10101011”。SFD的前六位的作用和前導(dǎo)碼一樣,最后的兩個(gè)連續(xù)的1代表幀即將開始傳送。
目的地址:
占6字節(jié),接收方MAC地址。
源地址:
占6字節(jié),發(fā)送方MAC地址。
類型長(zhǎng)度
占2字節(jié)。由于歷史原因,該字段包含兩種含義。當(dāng)取值小于等于1500時(shí),該字段理解為長(zhǎng)度字段,代表基本幀中MAC客戶數(shù)據(jù)的字節(jié)數(shù)。
當(dāng)取值大于等于1536時(shí),該字段理解為類型字段,代表MAC客戶協(xié)議類型。
MAC客戶數(shù)據(jù)(MAC Client Data)
MAC客戶數(shù)據(jù)包含可選的標(biāo)簽和上層協(xié)議數(shù)據(jù)。
EEE802.3定義了三種類型的以太網(wǎng)幀:基本幀(basic frame)、Q標(biāo)簽幀(Q-tagged frame)和信封幀(envelope frame)
基本幀不包含標(biāo)簽,Q標(biāo)簽幀和信封幀包含標(biāo)簽。
三種類型的以太網(wǎng)幀中封裝的上層協(xié)議的數(shù)據(jù)最大長(zhǎng)度都是1500字節(jié),也就是說(shuō)以太網(wǎng)的MTU為1500字節(jié)。
填充
以太網(wǎng)最小幀長(zhǎng)為64字節(jié)。當(dāng)上層協(xié)議交下來(lái)的數(shù)據(jù)小于46字節(jié),將導(dǎo)致封裝的以太網(wǎng)幀不足64字節(jié),以太網(wǎng)協(xié)議實(shí)體必須在填充字段用“0”補(bǔ)足。
幀檢驗(yàn)序列FCS
占4字節(jié),利用CRC算法進(jìn)行幀檢驗(yàn)。幀檢驗(yàn)計(jì)算范圍包括目的地址、源地址、類型長(zhǎng)度、MAC客戶數(shù)據(jù)和填充字段。
以太網(wǎng)的FCS采用IEEE標(biāo)準(zhǔn)的CRC32進(jìn)行計(jì)算利用CRC算法進(jìn)行幀檢驗(yàn)。
載波延伸
在1Gbit/s的以太網(wǎng)中,當(dāng)工作在半雙工模式時(shí),為了保持CSMA/CD協(xié)議的有效性,需要在較短的幀后補(bǔ)充載波延伸字段,該字段值全為0
當(dāng)工作在全雙工模式時(shí),不需要該字段。
幀間間隔
以太網(wǎng)規(guī)定,每發(fā)送完一幀,必須停下來(lái)等待一小段時(shí)間,才能發(fā)送下一幀。這段時(shí)間稱為幀間間隔
。幀間間隔的作用有兩點(diǎn):
- 在運(yùn)行CSMA/CD協(xié)議時(shí),停止發(fā)送可以讓信道空閑下來(lái),方便多個(gè)站點(diǎn)爭(zhēng)用信道;
- 停止發(fā)送代表幀結(jié)束標(biāo)記,再次發(fā)送新幀時(shí),前導(dǎo)碼和SFD可以代表幀開始標(biāo)記。((10Mbit/s的傳統(tǒng)以太網(wǎng)中的規(guī)定)
IEEE規(guī)定的以太網(wǎng)的幀間間隔為96bit時(shí)間
。
對(duì)于10Mbit/s的傳統(tǒng)以太網(wǎng)來(lái)說(shuō),幀間間隔為9.6μs;對(duì)于100Mbit/s的快速以太網(wǎng)來(lái)說(shuō),幀間間隔為0.96μs
網(wǎng)橋和交換機(jī)
我們可以使用中繼器
或集線器
來(lái)擴(kuò)展以太網(wǎng)的地理覆蓋范圍。
中繼器和集線器都屬于物理層設(shè)備,通過(guò)中繼器或集線器的接口連接在一起的所有站點(diǎn)都處于同一個(gè)碰撞域。
所謂碰撞域是指站點(diǎn)發(fā)送的物理層信號(hào)可以到達(dá)的范圍。
處于同一個(gè)碰撞域內(nèi)的站點(diǎn),在任一時(shí)刻只能有一個(gè)站點(diǎn)發(fā)送數(shù)據(jù),否則將會(huì)發(fā)生碰撞
。
隨著100BASE-T網(wǎng)絡(luò)和交換機(jī)的普及,集線器最終被交換機(jī)所替代。交換機(jī)本質(zhì)上是多接口、高性能的網(wǎng)橋。
交換機(jī)工作在數(shù)據(jù)鏈路層
,也稱為二層交換機(jī)
。
交換機(jī)的每個(gè)端口下連接的站點(diǎn)處于同一個(gè)碰撞域。
交換機(jī)的工作原理
交換機(jī)收到一個(gè)數(shù)據(jù)幀后,首先進(jìn)行自學(xué)習(xí)
填寫交換表,然后轉(zhuǎn)發(fā)數(shù)據(jù)幀。
如果交換表中某項(xiàng)目的老化時(shí)間到達(dá)了“有效期”,則交換機(jī)
會(huì)刪除該項(xiàng)目
自學(xué)習(xí)算法和轉(zhuǎn)發(fā)算法
交換機(jī)工作原理實(shí)例
生成樹協(xié)議
當(dāng)多個(gè)交換機(jī)連接在一起共同工作時(shí),由于存在冗余鏈路的可能性,可能會(huì)形成很多循環(huán)幀。引起廣播風(fēng)暴
和交換表震蕩
等問(wèn)題。
虛擬局域網(wǎng)
IEEE規(guī)定48位全為1的地址是廣播地址,目的地址為廣播地址的幀稱為廣播幀。廣播幀能夠被分發(fā)到同一以太網(wǎng)上的所有主機(jī)。
隨著交換式以太網(wǎng)的大量應(yīng)用,位于同一以太網(wǎng)中的主機(jī)數(shù)量越來(lái)越多,為了更有效地利用網(wǎng)絡(luò)帶寬資源,需要限制以太網(wǎng)廣播的范圍。
站點(diǎn)發(fā)送的廣播幀能夠到達(dá)的范圍稱為廣播域。
交換機(jī)的所有端口下連接的站點(diǎn)處于同一個(gè)廣播域。
路由器收到以太網(wǎng)廣播時(shí),不進(jìn)行轉(zhuǎn)發(fā)。路由器的每個(gè)接口下連接的站點(diǎn)處于同一個(gè)廣播域
。
虛擬局域網(wǎng)
在同一個(gè)以太網(wǎng)內(nèi)部可以利用虛擬局域網(wǎng)
隔離廣播域。
虛擬局域網(wǎng)VLAN是由一些局域網(wǎng)網(wǎng)段構(gòu)成的與物理位置無(wú)關(guān)的邏輯組,如下圖所示。
支持VLAN功能的交換機(jī)稱為VLAN交換機(jī)
。
Q標(biāo)簽幀格式
標(biāo)簽協(xié)議TPID:
三種Q標(biāo)簽:
優(yōu)先級(jí)碼點(diǎn)PCP:
丟棄適當(dāng)性指示符DEI:
VLAN ID:
地址解析協(xié)議ARP
ARP協(xié)議提供了一種從網(wǎng)絡(luò)層的IP地址
解析出數(shù)據(jù)鏈路層的硬件地址
的方法。
ARP協(xié)議需要做的是在每一個(gè)網(wǎng)絡(luò)中將下一跳結(jié)點(diǎn)的P地址解析為其對(duì)應(yīng)的MAC地址。
以太網(wǎng)協(xié)議可以將解析出的MAC地址作為目的MAC地址寫入幀首部中,完成發(fā)送。
對(duì)于間接交付網(wǎng)絡(luò),下一跳IP地址可以從路由表中獲得;對(duì)于直接交付網(wǎng)絡(luò),下一跳P地址即目的地址。
ARP地址解析過(guò)程
ARP報(bào)文格式:
參考鏈接:
ARP報(bào)文格式
ARP緩存
ARP緩存用來(lái)存放IP地址和MAC地址之間的最新映射。
主機(jī)或路由器的每個(gè)網(wǎng)絡(luò)接口維護(hù)一張ARP緩存表。
ARP緩存表包括三個(gè)字段:
IP地址
MAC地址
生存時(shí)間
當(dāng)主機(jī)需要解析IP地址對(duì)應(yīng)的MAC地址時(shí),首先查詢本機(jī)的ARP緩存表,只有在查詢不到時(shí),才發(fā)起廣播形式ARP請(qǐng)求。
使用ARP緩存,可以很大程度上減少ARP請(qǐng)求的數(shù)量,減少網(wǎng)絡(luò)中的廣播流量。
ARP緩存策略
- 一臺(tái)主機(jī)發(fā)送了ARP請(qǐng)求后,當(dāng)它收到ARP響應(yīng)時(shí),會(huì)將對(duì)方的IP地址和MAC地址記錄在ARP緩存表中。
- 如果一臺(tái)主機(jī)收到了一個(gè)ARP請(qǐng)求,這個(gè)ARP請(qǐng)求的目的地址是本機(jī),這臺(tái)主機(jī)會(huì)將ARP請(qǐng)求中的發(fā)送方IP地址和MAC地址記錄在ARP緩存中。
- 如果一臺(tái)主機(jī)收到了一個(gè)ARP請(qǐng)求,這個(gè)ARP請(qǐng)求中的發(fā)送方IP地址已經(jīng)在本機(jī)的ARP緩存表中,這臺(tái)主機(jī)會(huì)將發(fā)送方IP地址和MAC地址更新在ARP緩存表中。
ARP緩存刪除策略
-
當(dāng)生存時(shí)間超過(guò)規(guī)定的時(shí)間后,ARP緩存記錄將被刪除。
-
在RFC1122中,規(guī)定了ARP緩存的驗(yàn)證方法。
主機(jī)采用單播輪詢方式,周期性地向遠(yuǎn)程主機(jī)發(fā)送單播ARP請(qǐng)求。
如果連續(xù)兩次單播ARP請(qǐng)求都未收到對(duì)方的ARP響應(yīng),則刪除相應(yīng)ARP緩存記錄。
無(wú)線局域網(wǎng)
無(wú)線局域網(wǎng)WLAN也稱為Wi-Fi
,它的標(biāo)準(zhǔn)是IEEE802.11,包括無(wú)線局域網(wǎng)的MAC層標(biāo)準(zhǔn)和物理層標(biāo)準(zhǔn),目前最新的版本是802.11-2020.
802.11網(wǎng)絡(luò)定義了多種物理層標(biāo)準(zhǔn),但都使用相同的MAC協(xié)議,采用相同的MAC幀結(jié)構(gòu)。
無(wú)線局域網(wǎng)的組成
802.11無(wú)線局域網(wǎng)分為兩類,一類是基礎(chǔ)設(shè)施(infrastructure)網(wǎng)絡(luò)
,另一類是自組織(ad hoc)網(wǎng)
。
接入點(diǎn)AP
:提供分布系統(tǒng)接入功能的站點(diǎn),也負(fù)責(zé)一個(gè)BSS內(nèi)的流量轉(zhuǎn)發(fā),
門戶portal
:指提供802.11WLAN和非802.11LAN交互服務(wù)的邏輯點(diǎn)。
在一臺(tái)設(shè)備內(nèi)可以同時(shí)實(shí)現(xiàn)AP和門戶功能。
分布系統(tǒng)DS
可以連接多個(gè)AP.
分布系統(tǒng)中用來(lái)連接AP的媒體稱為分布系統(tǒng)媒體DSM。最常見(jiàn)的DSM是802.3媒體。
用無(wú)線媒體連接的分布系統(tǒng)稱為無(wú)線分布系統(tǒng)WDS.
Mesh
是一種網(wǎng)狀網(wǎng),其中的站點(diǎn)稱為mesh站點(diǎn)。
Mesh網(wǎng)關(guān)
是指提供分布系統(tǒng)接入功能的mesh站點(diǎn)。
基本服務(wù)集BSS
基本服務(wù)集BSS
是802.11體系結(jié)構(gòu)中的基本構(gòu)件,它由多個(gè)無(wú)線站點(diǎn)組成。
根據(jù)基本服務(wù)集中站點(diǎn)的種類和功能,802.11-2020標(biāo)準(zhǔn)將基本服務(wù)集分為:
- 獨(dú)立基本服務(wù)集(Independent BSS,IBSS)
- 個(gè)人基本服務(wù)集(Personal BSS,PBSS)
- 基礎(chǔ)設(shè)施基本服務(wù)集(infrastructure BSS)
- 網(wǎng)狀網(wǎng)基本服務(wù)集(Mesh BSS,MBSS)
獨(dú)立基本服務(wù)集
獨(dú)立基本服務(wù)集IBSS
是802.11WLAN
中最基礎(chǔ)、最簡(jiǎn)單的BSS,由多個(gè)站點(diǎn)組成。
BSS中的站點(diǎn)之間是對(duì)等關(guān)系,站點(diǎn)之間直接相連,可以直接通信。
BSS中的站點(diǎn)不具備轉(zhuǎn)發(fā)能力,BSS網(wǎng)絡(luò)不具有多跳傳輸功能。
BSS中不包含接入點(diǎn)、門戶以及分布系統(tǒng)等基礎(chǔ)設(shè)施,屬于自組織網(wǎng)絡(luò)。
個(gè)人基本服務(wù)集PBSS
個(gè)人基本服務(wù)集PBSS與IBSS類似,它也由多個(gè)站點(diǎn)組成,站點(diǎn)之間可以直接通信。
PBSS的各站點(diǎn)之間不是對(duì)等關(guān)系。在PBSS中,只有一個(gè)站點(diǎn)承擔(dān)PBSS控制點(diǎn)PCP
的角色。PCP負(fù)責(zé)發(fā)送信標(biāo)幀,為PBSS中的站點(diǎn)提供基于競(jìng)爭(zhēng)的信道訪問(wèn)服務(wù)。
PBSS只能由DMG站點(diǎn)建立,DMG工作在60Ghz頻段,由IEEE802.11ad規(guī)定。
基本設(shè)施基本服務(wù)集infrastructure BSS
拓展服務(wù)集EBS
網(wǎng)狀網(wǎng)基本服務(wù)集MBSS
網(wǎng)狀網(wǎng)由ad hoc網(wǎng)絡(luò)發(fā)展而來(lái),具有多跳傳輸
功能。
MBSS由Mesh站點(diǎn)
組成,Mesh站點(diǎn)可以作為源站、目的站或者轉(zhuǎn)發(fā)站。
MBSS允許通過(guò)一個(gè)或多個(gè)Mesh網(wǎng)關(guān)接入分布系統(tǒng)DS。
MBSS中的所有站點(diǎn)都可以通過(guò)無(wú)線媒體互相通信,因此MBSS也可以用來(lái)作為分布系統(tǒng)媒體DSM。
Mesh網(wǎng)關(guān)與AP可以組合在一起,在一臺(tái)設(shè)備內(nèi)實(shí)現(xiàn)。
無(wú)線局域網(wǎng)的MAC幀
IEEE802.11-2020中定義了多種類型的MAC幀格式。
在所有802.11的MAC幀中,前2個(gè)比特的定義是一樣的,為協(xié)議版本號(hào)
(Protocol Version,PV)字段。
目前,802.11標(biāo)準(zhǔn)共定義了兩個(gè)版本號(hào),分別為PV0和PV1。
PV0格式的MAC幀是絕大多數(shù)802.11WLAN中采用的MAC幀;
PV1格式的MAC幀是802.11ah中定義的MAC幀,該格式為物聯(lián)網(wǎng)領(lǐng)域做了優(yōu)化,更適用于低功耗的應(yīng)用場(chǎng)景。
PV0格式的MAC幀的前8個(gè)比特的定義是一樣的,分別是
- 協(xié)議版本(2bit)
- 類型(2bit)
- 子類型(4bit)
其它部分的格式定義與類型和子類型相關(guān)。
在802.11中共定義了3種類型的MAC幀,分別是
數(shù)據(jù)幀
管理幀
控制幀
子類型很多,可以參考802.11-2020。
數(shù)據(jù)幀格式
本部分表格例圖較多,不再做文字解釋,這里貼上學(xué)校的PPT作為參考。
(∪.∪ )…zzz
WLAN數(shù)據(jù)幀由MAC首部
、幀主體
和幀檢驗(yàn)序列FCS
三個(gè)部分組成。
802.11幀到802.3幀的轉(zhuǎn)換
當(dāng)802.11無(wú)線局域網(wǎng)與802.3以太網(wǎng)互連時(shí),AP需要完成802.11幀和802.3幀之間的格式轉(zhuǎn)換。
在下圖所示網(wǎng)絡(luò)拓?fù)渲?#xff0c;考慮主機(jī)H3向主機(jī)H1發(fā)送P數(shù)據(jù)報(bào)的過(guò)程。主機(jī)H3發(fā)出的802.11數(shù)據(jù)幀中:
地址1為MAC_AP2(RA)
地址2為MAC_3(TA/SA)
地址3為MAC_1(DA)
當(dāng)AP2收到該數(shù)據(jù)幀后,需要將其轉(zhuǎn)換成802.3以太網(wǎng)幀格式轉(zhuǎn)發(fā)向交換機(jī)。
轉(zhuǎn)換后的802.3幀中:目的地址為MAC_1,源地址為MAC_3。
幀校驗(yàn)序列FCS
管理幀
管理幀主要用于創(chuàng)建
、維持
、終止站點(diǎn)
和AP
之間的關(guān)聯(lián)。
常見(jiàn)的管理幀包括信標(biāo)幀
、關(guān)聯(lián)請(qǐng)求幀
、關(guān)聯(lián)響應(yīng)幀
、探測(cè)情求幀
和探測(cè)響應(yīng)幀
等。
關(guān)聯(lián)意味著在無(wú)線站點(diǎn)和AP之間創(chuàng)建一個(gè)虛擬線路。AP僅向與其關(guān)聯(lián)的無(wú)線站點(diǎn)發(fā)送數(shù)據(jù)幀,無(wú)線站點(diǎn)也僅通過(guò)關(guān)聯(lián)AP向其它站點(diǎn)或因特網(wǎng)發(fā)送數(shù)據(jù)幀。
與AP建立關(guān)聯(lián)的方法有被動(dòng)掃描和主動(dòng)掃描。
控制幀
控制幀主要用于預(yù)約信道和數(shù)據(jù)幀確認(rèn)等。
常見(jiàn)的控制幀主要包括確認(rèn)幀ACK
、請(qǐng)求發(fā)送幀RTS
和允許發(fā)送幀CTS
等。
802.11無(wú)線局域網(wǎng)采用了停止等待協(xié)議,在數(shù)據(jù)鏈路層實(shí)現(xiàn)可靠傳輸。
當(dāng)WLAN中某站點(diǎn)正確收到一幀數(shù)據(jù)時(shí),它等待一個(gè)短幀間間隔SIFS
,然后發(fā)回一個(gè)確認(rèn)幀ACK
。
802.11的停止等待協(xié)議是在直接發(fā)送站和直接接收站之間實(shí)現(xiàn)的。
隱蔽站問(wèn)題
無(wú)線站點(diǎn)H1和H2都與AP關(guān)聯(lián),但互相不在對(duì)方的無(wú)線信號(hào)范圍之內(nèi)。
如果兩個(gè)站點(diǎn)同時(shí)發(fā)送數(shù)據(jù)給AP,顯然會(huì)產(chǎn)生碰撞,但由于無(wú)線信號(hào)覆蓋范圍的問(wèn)題,雙方都不能通過(guò)載波監(jiān)聽(tīng)的方法發(fā)現(xiàn)對(duì)方正在發(fā)送數(shù)據(jù),這個(gè)問(wèn)題被稱為隱蔽站問(wèn)題。
802.11允許采用RTS幀
和CTS幀
進(jìn)行信道預(yù)約,用來(lái)避免隱蔽站帶來(lái)的碰撞可能。
RTS幀和CTS幀
發(fā)送站在發(fā)送數(shù)據(jù)幀前,首先向接收站AP發(fā)送一個(gè)RTS幀,用持續(xù)時(shí)間字段指示傳輸數(shù)據(jù)幀和確認(rèn)幀需要的總時(shí)間。
當(dāng)接收站AP收到RTS幀后,它發(fā)送一個(gè)CTS幀作為響應(yīng)。
CTS幀有兩個(gè)目的:
給發(fā)送站明確的發(fā)送許可,
也通知其它站點(diǎn)在持續(xù)時(shí)間內(nèi)不要發(fā)送數(shù)據(jù)。
RTS和CTS;數(shù)據(jù)幀和確認(rèn)幀之間均采用短幀間間隔SIFS。
一般情況下,802.11協(xié)議的實(shí)現(xiàn)會(huì)提供一個(gè)稱為RTS閾值的配置選項(xiàng),超過(guò)閾值長(zhǎng)度的幀才會(huì)觸發(fā)一個(gè)RTS幀,預(yù)約信道。
RTS幀、CTS幀和ACK幀
無(wú)線局域網(wǎng)的MAC協(xié)議
802.11-2020標(biāo)準(zhǔn)采用三種方法解決無(wú)線媒體接入控制問(wèn)題:
- 分布協(xié)調(diào)功能(Distributed Coordination Function,DCF)
DCF是WLAN中媒體接入控制的基本方法,用于競(jìng)凈服務(wù),是HCF和MCF的基礎(chǔ),
802.11協(xié)議規(guī)定所有站都應(yīng)該實(shí)現(xiàn)DCF。
- 混合協(xié)調(diào)功能(hybrid coordination function,HCF)
HCF用于支持802.11e和802.11n中的QoS,所有支持QoS的設(shè)備都應(yīng)該實(shí)現(xiàn)HCF。
HCF包括受控接入和競(jìng)凈接入兩種方法。
HCF受控接入即HCF受控信道接入(HCF Controlled Channel Access,HCCA)
·HCF競(jìng)爭(zhēng)接入即增強(qiáng)型分布式信道接入(Enhanced Distributed ChannelAccess,EDCA)。
- Mesh協(xié)調(diào)功能(Mesh coordination function,McF)
MCF僅用于MBSS中。MCF不在本書討論范圍。
在較早期的802.11標(biāo)準(zhǔn)中還定義了點(diǎn)協(xié)調(diào)功能(Point Coordination Function,PCF),PCF的應(yīng)用非常少,在802.11-2020中已經(jīng)廢棄了PCF。
分布協(xié)調(diào)功能DCF
分布協(xié)調(diào)功能DCF使用CSMA/CA協(xié)議,即帶有碰撞避免的載波監(jiān)聽(tīng)多點(diǎn)接入?yún)f(xié)議。
- 載波監(jiān)聽(tīng)用來(lái)檢測(cè)傳輸媒體是否繁忙,
- 多點(diǎn)接入用來(lái)確保每一個(gè)無(wú)線終端可以公平地訪問(wèn)傳輸媒介,
- 碰撞避免用以降低碰撞發(fā)生的概率,期望在指定時(shí)間內(nèi)只有一個(gè)無(wú)線終端能夠訪問(wèn)傳輸媒體。
DCF采取的接入控制措施
802.11WLAN中實(shí)現(xiàn)了停止等待協(xié)議,利用確認(rèn)幀ACK,代替802.3中的
碰撞檢測(cè)機(jī)制。
802.11的無(wú)線站點(diǎn)無(wú)法同時(shí)發(fā)送和接收數(shù)據(jù),不能邊發(fā)送邊檢測(cè)。
802.11中,如果發(fā)送站沒(méi)有收到ACK幀,就認(rèn)為發(fā)送失敗,重傳該數(shù)據(jù)幀。
802.11中規(guī)定廣播幀和多播幀不需要進(jìn)行確認(rèn)。
- 802.11采用碰撞避免機(jī)制來(lái)減少碰撞發(fā)生的概率。
當(dāng)監(jiān)聽(tīng)到信道空閑時(shí),WLAN的站點(diǎn)先利用二進(jìn)制指數(shù)退避算法隨機(jī)退避一段時(shí)間后,才允許發(fā)送數(shù)據(jù)。
- 802.11的載波監(jiān)聽(tīng)包括物理載波監(jiān)聽(tīng)和虛擬載波監(jiān)聽(tīng)。
802.11還采用RTS幀/CTS幀預(yù)約信道,解決隱蔽站問(wèn)題,進(jìn)一步減少碰撞發(fā)生的概率。
802.11的碰撞避免機(jī)制
802.11的碰撞避免機(jī)制包含以下幾方面內(nèi)容:
幀間間隔
可以提供接入無(wú)線媒體的優(yōu)先級(jí)
載波監(jiān)聽(tīng)
包括物理載波監(jiān)聽(tīng)和虛擬載波監(jiān)聽(tīng)
·隨機(jī)退避
802.11的二進(jìn)制指數(shù)退避算法
幀間間隔
幀發(fā)送完成后,必須等待一段很短的時(shí)間才能發(fā)送下一幀。這段時(shí)間稱為幀間間隔IFS。
載波監(jiān)聽(tīng)
802.11CSMA/CA設(shè)備在開始傳輸前必須進(jìn)行載波監(jiān)聽(tīng),用以檢查傳輸媒體是否被占用。
802.11的載波監(jiān)聽(tīng)包括兩種方式:物理載波監(jiān)聽(tīng)和虛擬載波監(jiān)聽(tīng)。
物理載波監(jiān)聽(tīng)和虛擬載波監(jiān)聽(tīng)是同時(shí)執(zhí)行判斷的,只有兩種方式都認(rèn)為信道空閑時(shí),才判定信道空閑。
物理載波監(jiān)聽(tīng)(Physical Carrier Sense)
·每個(gè)802.11的物理層規(guī)范都需要提供一種評(píng)估信道是否空閑的功能,它通常基于能量和波形
識(shí)別。
·這種功能稱為空閑信道評(píng)估(Clear Channel Assessment,CCA),用于了解媒體當(dāng)前是否繁忙。
虛擬載波監(jiān)聽(tīng)(Virtual Carrier Sense)
執(zhí)行虛擬載波監(jiān)聽(tīng)的每個(gè)站維持一個(gè)稱為網(wǎng)絡(luò)分配向量(Network Allocation Vector,NAV)的本地計(jì)數(shù)器,用來(lái)估計(jì)信道將處于繁忙狀態(tài)的時(shí)間。
只要NAV變量不為0,信道就會(huì)被認(rèn)為是繁忙的。
發(fā)送站發(fā)送單播幀時(shí),會(huì)設(shè)置持續(xù)時(shí)間字段。
·虛擬載波監(jiān)聽(tīng)機(jī)制將檢查每個(gè)MAC幀中的持續(xù)時(shí)間字段,并據(jù)此更新NAV變量。
當(dāng)一個(gè)站監(jiān)聽(tīng)到一個(gè)大于本地NAV的持續(xù)時(shí)間時(shí),它用持續(xù)時(shí)間值更新本地NAV變量。
·NAV變量基于本地時(shí)鐘遞減,當(dāng)監(jiān)聽(tīng)到一個(gè)ACK幀時(shí),本地NAV被重置為O。
數(shù)據(jù)幀、RTS幀和CTS幀的持續(xù)時(shí)間
隨機(jī)退避
在802.11WLAN中,需要發(fā)送數(shù)據(jù)的站需要執(zhí)行隨機(jī)退避算法。
例外:發(fā)送站需要發(fā)送的數(shù)據(jù)是本站的第1幀數(shù)據(jù),且載波監(jiān)聽(tīng)時(shí)信道空閑,而非信道由忙轉(zhuǎn)閑
WLAN的隨機(jī)退避算法是二進(jìn)制指數(shù)退避算法。
退避時(shí)間等于一個(gè)隨機(jī)數(shù)與時(shí)隙的乘積。
時(shí)隙依賴物理層標(biāo)準(zhǔn)不同,通常是幾十微秒。
隨機(jī)數(shù)是在區(qū)間[O,CW中隨機(jī)選擇的一個(gè)整數(shù),其中CW代表競(jìng)爭(zhēng)窗口,是一個(gè)整數(shù),且滿足aCWmin< CW < aCWmax
。
aCWmin和aCWmax由物理層標(biāo)準(zhǔn)定義。
CW的值從物理層指定的常數(shù)aCWmin開始,隨著重傳次數(shù)增加,以2的冪次減1增加,直到aCWmax為止。
競(jìng)爭(zhēng)窗口CW的變化
隨機(jī)退避的過(guò)程
隨機(jī)退避計(jì)時(shí)器是無(wú)線站點(diǎn)傳輸幀之前的最后一個(gè)計(jì)時(shí)器。
當(dāng)信道從忙轉(zhuǎn)閑,并持續(xù)空閑DIFS時(shí)間后,隨機(jī)退避計(jì)時(shí)器開始計(jì)時(shí)。
在退避過(guò)程中,每經(jīng)過(guò)一個(gè)時(shí)隙,站點(diǎn)會(huì)監(jiān)聽(tīng)一次信道
若信道空閑側(cè)則隨機(jī)退避計(jì)時(shí)器的值減1;
若信道忙則掛起隨機(jī)退避計(jì)時(shí)器,直至信道再次從忙轉(zhuǎn)閑,并持續(xù)DIFS時(shí)間后,計(jì)時(shí)器恢復(fù)計(jì)時(shí)。
當(dāng)站點(diǎn)的隨機(jī)退避計(jì)時(shí)器倒數(shù)至0時(shí),意味著站點(diǎn)競(jìng)爭(zhēng)獲得信道,可以發(fā)送數(shù)據(jù)。
混合協(xié)調(diào)功能HCF
2004年,802.11e標(biāo)準(zhǔn)為WLAN增加了QoS功能。
后續(xù)的802.11標(biāo)準(zhǔn)中的QoS功能基本都來(lái)源于802.11e的主要設(shè)計(jì)?;旌蠀f(xié)調(diào)功能HCF用來(lái)支持QoS功能。包括:
HCF受控信道接入HCCA:使用輪詢方法控制媒體接入,HCCA的應(yīng)用很少。
增強(qiáng)型分布式信道接入EDCA:基于DCF改進(jìn)的媒體接入控制機(jī)制。
我們僅討論EDCA。
EDCA對(duì)DCF主要做了兩點(diǎn)改進(jìn):
·傳輸機(jī)會(huì)(Transmission Opportunity,TXOP)
·接入類別(Access Category,AC)。
傳輸機(jī)會(huì)TXOP
傳統(tǒng)的DCF中,當(dāng)站點(diǎn)競(jìng)爭(zhēng)到信道后,可以獲得發(fā)送一幀的機(jī)會(huì),即**“競(jìng)爭(zhēng)一次,傳輸一個(gè)幀”**。這會(huì)帶來(lái)`速率異常問(wèn)題:
改進(jìn):引入了傳輸機(jī)會(huì)TXOP,將競(jìng)爭(zhēng)方式改進(jìn)為**“競(jìng)爭(zhēng)一次,傳輸一段時(shí)間”**
當(dāng)站點(diǎn)競(jìng)爭(zhēng)到信道后,可以獲得一段傳輸時(shí)間,在這段時(shí)間內(nèi),站點(diǎn)可以傳輸多個(gè)數(shù)據(jù)幀,稱為幀突發(fā)(frame burst)
。
在幀突發(fā)期間,每個(gè)幀之間使用SFS。
TXOP的傳輸時(shí)間可以通過(guò)虛擬載波監(jiān)聽(tīng)保證。
接入類別AC
4個(gè)介入類別:
按用戶優(yōu)先級(jí)對(duì)流量分類
EDCA模型
在EDCA中,幀間間隔不再采用DCF中的DIFS
,而是采用AIFS[AC]
。
點(diǎn)對(duì)點(diǎn)協(xié)議PPP
**點(diǎn)對(duì)點(diǎn)協(xié)議(Point to Point Protocol,PPP)**是一種在傳統(tǒng)撥號(hào)上網(wǎng)
、ADSL接入網(wǎng)
、光纖接入網(wǎng)
以及SDH網(wǎng)絡(luò)
中廣泛使用的協(xié)議。
PPP來(lái)源于另一種廣泛應(yīng)用的協(xié)議:高級(jí)數(shù)據(jù)鏈路控制HDLC協(xié)議。
PPP協(xié)議用來(lái)在全雙工
、點(diǎn)對(duì)點(diǎn)鏈路
上傳輸網(wǎng)絡(luò)層分組
,由RFC1661和RFC1662規(guī)定,是互聯(lián)網(wǎng)正式標(biāo)準(zhǔn)。
PPP實(shí)際上是一個(gè)協(xié)議集合,它包括三個(gè)主要組成部分:
- 一種將網(wǎng)絡(luò)層分組封裝到串行鏈路的方法。
- 一個(gè)用來(lái)處理連接建立、選項(xiàng)協(xié)商、測(cè)試線路和釋放連接的鏈路控制協(xié)議LCP。
- 一組網(wǎng)絡(luò)控制協(xié)議NCP。其中每一個(gè)網(wǎng)絡(luò)控制協(xié)議支持不同的網(wǎng)絡(luò)層協(xié)議,如用于HP的網(wǎng)絡(luò)控制協(xié)議IPCP。
PPP的幀格式
PPP幀格式
以下是對(duì)PPP幀格式各部分的介紹:
標(biāo)志:
幀首部的第一個(gè)字段和幀尾部的最后一個(gè)字段都是標(biāo)志字段,各占1字節(jié)。
標(biāo)志字段表示一個(gè)幀的開始或結(jié)束。。
標(biāo)志字段規(guī)定取值為0x7E
,二進(jìn)制表示為01111110
。
當(dāng)PPP用于異步傳輸時(shí),采用字符填充法
實(shí)現(xiàn)透明傳輸:
PPP規(guī)定轉(zhuǎn)義字符為0x7D,按照如下方法進(jìn)行填充:
- 把數(shù)據(jù)字段中出現(xiàn)的每一個(gè)0x7E字符轉(zhuǎn)換成為2字節(jié)序列(0x7D,0x5E)。
- 若數(shù)據(jù)字段中出現(xiàn)0x7D字符,則將其轉(zhuǎn)換為2字節(jié)序列(0x7D,0x5D)。
- 若數(shù)據(jù)字段中出現(xiàn)ASCII碼的控制字符(即數(shù)值小于0x20的字符),則在該字符前面插入一個(gè)0x7D字符,并將該字符的編碼加0x20。例如,字符0x03被轉(zhuǎn)換成(0x7D,0x23),字符0x11被轉(zhuǎn)換成(0x7D,0x31)等。
接收方在收到數(shù)據(jù)后需要進(jìn)行相反的變換。
當(dāng)PPP用于同步傳輸時(shí),采用比特填充法
實(shí)現(xiàn)透明傳輸:
·發(fā)送方在數(shù)據(jù)中發(fā)現(xiàn)連續(xù)5個(gè)1時(shí),就立即在其后方填充1個(gè)0。
·接收方如果收到連續(xù)5個(gè)1時(shí),將其后的0刪除。
地址和控制:
PPP的地址字段
來(lái)源于HDLC,占1字節(jié)。HDLC可用于多點(diǎn)鏈路,地址字段用來(lái)指明接收方
。
但加粗樣式PPP僅用于點(diǎn)對(duì)點(diǎn)鏈路,僅有一個(gè)接收方,地址字段總是被設(shè)置為0xFF
。
PPP的控制字段
也來(lái)源于HDLC,占1字節(jié)。在HDLC中,控制字段用來(lái)指明幀類型
,
但PPP僅使用了一種幀,控制字段總是被設(shè)置為0xO3
。
PPP中這兩個(gè)字段實(shí)際上并沒(méi)有意義。
PPP協(xié)議使用LCP進(jìn)行鏈路層參數(shù)協(xié)商時(shí),通常會(huì)省略這兩個(gè)字段。
協(xié)議:
協(xié)議字段用來(lái)指明數(shù)據(jù)部分封裝的是何種協(xié)議的數(shù)據(jù),占1或2個(gè)字節(jié)。
在默認(rèn)情況下,協(xié)議字段占2字節(jié),但PPP協(xié)議使用LCP進(jìn)行鏈路層選項(xiàng)協(xié)商時(shí),允許將協(xié)議字段配置為1字節(jié)的壓縮形式。
當(dāng)協(xié)議字段為0x0021時(shí),說(shuō)明數(shù)據(jù)字段封裝的是IP數(shù)據(jù)報(bào)。
當(dāng)協(xié)議字段為0xC021時(shí),說(shuō)明數(shù)據(jù)字段封裝的是LCP分組。
當(dāng)協(xié)議字段為0x8021時(shí),說(shuō)明數(shù)據(jù)字段封裝的是IPCP分組
數(shù)據(jù)和填充
PPP的最大傳送單元MTU默認(rèn)為1500字節(jié)
。
PPP協(xié)議使用LCP進(jìn)行鏈路層選項(xiàng)協(xié)商時(shí),可以將MTU配置為其它值。
FCS
FCS字段占2字節(jié)或4字節(jié)。
PPP的FCS字段采用CRC算法校驗(yàn)除FCS字段本身和標(biāo)志字段之外的整個(gè)幀
。
在默認(rèn)情況下,PPP采用16位的FCS,其生成多項(xiàng)式所對(duì)應(yīng)的二進(jìn)制數(shù)為10001000000100001
。
PPP協(xié)議使用LCP進(jìn)行鏈路層選項(xiàng)協(xié)商時(shí),允許將CRC從16位擴(kuò)展到32位,此時(shí),CRC的生成多項(xiàng)式與以太網(wǎng)相同的CRC-32。
PPP鏈路的狀態(tài)
鏈路狀態(tài)變遷的細(xì)節(jié)不再闡釋。
PPPoE協(xié)議
隨著以太網(wǎng)占據(jù)市場(chǎng)主導(dǎo)地位,利用以太網(wǎng)接入互聯(lián)網(wǎng)
成為一種寬帶接入方案。
ISP需要一種能在以太網(wǎng)上運(yùn)行的、基于單用戶計(jì)費(fèi)的接入控制方案。
RFC2516規(guī)定了PPPoE(PPP over Ethernet)協(xié)議
,它將PPP幀封裝在以太網(wǎng)幀內(nèi),利用PPP協(xié)議,使以太網(wǎng)上的每個(gè)用戶站點(diǎn)都可以與一個(gè)遠(yuǎn)程的PPPoE服務(wù)站點(diǎn)建立一個(gè)PPP會(huì)話,
該服務(wù)站點(diǎn)位于ISP內(nèi),稱為接入集中器(Access Concentrator,AC)。
當(dāng)用戶通過(guò)PPP會(huì)話獲得一個(gè)ISP地址,ISP就可以通過(guò)IP地址和特定的用戶相關(guān)聯(lián)。以此完成單用戶計(jì)費(fèi)。
發(fā)現(xiàn)階段和PPP會(huì)話階段
PPPoE幀格式
版本和類型字段:
各占4位,目前均取值為0x01。
代碼字段:
占8位,用以區(qū)分發(fā)現(xiàn)階段和PPP會(huì)話階段中各種類型的PPPoE幀
會(huì)話標(biāo)識(shí)符字段:
占16位,每一個(gè)PPPoE會(huì)話都會(huì)具有一個(gè)唯一標(biāo)識(shí)符。
長(zhǎng)度字段:
占16位,代表PPPOE載荷部分的長(zhǎng)度,以字節(jié)為單位。
載荷字段:
根據(jù)代碼不同,載荷部分封裝的數(shù)據(jù)不同。
在發(fā)現(xiàn)階段,載荷字段封裝PPPoE用來(lái)分配會(huì)話標(biāo)識(shí)符的各種幀。
在PPP會(huì)話階段,載荷部分封裝PPP幀。
發(fā)現(xiàn)階段
會(huì)話階段
在PPPOE會(huì)話階段,PPPOE數(shù)據(jù)封裝在以太網(wǎng)幀中,以太網(wǎng)幀的類型字段填寫0x8864
。
以太網(wǎng)幀以遠(yuǎn)程接入集中器AC和用戶站點(diǎn)的MAC地址為目的地址和源地址交互。
PPPOE幀會(huì)話標(biāo)識(shí)符字段填寫發(fā)現(xiàn)階段獲得的會(huì)話標(biāo)識(shí)符。
上層的PPP實(shí)體就像進(jìn)行普通的PPP會(huì)話一樣運(yùn)行。
當(dāng)LCP發(fā)出終止請(qǐng)求幀,終止一個(gè)PPP會(huì)話時(shí),PPPOE會(huì)話也會(huì)被終止。
PPPOE也定義了一個(gè)PPPOE會(huì)話終止幀,。AC和用戶站點(diǎn)也可以主動(dòng)發(fā)送PPPOE會(huì)話終止幀以結(jié)束會(huì)話。
思維導(dǎo)圖總結(jié)
第一章
第二章
第三章
第四章
第五章
第六章
術(shù)語(yǔ)詞典
待更新