亚洲 欧洲 日韩 综合色天使,久久国产Av无码一区二区老太,人妻醉酒被下药迷昏带到诊所 ,亚州老熟女A片AV色欲小说

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

今天這篇的標題是“掃盲”,也就是說:即使那些完全不懂 IT 領域,也不懂CT領域的讀者,依然能看懂(至少能看懂一部分)。為了做到這點,我會盡量使用通俗的比喻,并適當加一些示意圖。

另外,就算你已經(jīng)比較了解網(wǎng)絡通信領域,本文中提到的某些部分,也可能是你所不知道的。也就是說:懂行的同學,看看此文,也會有幫助。
本文的標題特地強調(diào)了【系統(tǒng)性】——我希望這篇教程能幫助讀者對“計算機網(wǎng)絡通信”這個領域進行系統(tǒng)性學習(何為“系統(tǒng)性學習”?)
為了做到【系統(tǒng)性】這個目的,這篇教程很長。建議大伙兒慢慢看,不要著急。

★基本概念

為了足夠通俗,我先要介紹一些基本概念。

◇信道(channel)

這是通訊領域非常基本的概念,肯定要先聊聊它。
通俗地說,信道就是“傳送信息的通道”。

◇信道的類型

首先,信道可以從廣義上分為“物理信道 & 邏輯信道”。
顧名思義,“物理信道”就是直接使用某種【物理介質(zhì)】來傳送信息;至于“邏輯信道”——是基于“物理信道”之上抽象出來的玩意兒(待會兒講到“協(xié)議?!钡臅r候再聊)。

◇信道的帶寬

帶寬”指的是:某個信道在單位時間內(nèi)最大能傳輸多少比特的信息。
請注意:
電氣領域 & 計算機領域都有“帶寬”這個概念,但兩者的定義不太一樣。電氣領域所說的“帶寬”指的是“模擬帶寬”,單位是“赫茲/Hz”;計算機領域所說的“帶寬”指“數(shù)字帶寬”,單位是“比特率”或“字節(jié)率”。
后續(xù)章節(jié)提到“帶寬”,都是指計算機領域的術語。

◇帶寬的單位——容易把外行繞暈

“比特率”或“字節(jié)率”很容易搞混淆。用英文表示的話——大寫字母 B 表示【字節(jié)】;小寫字母 b 表示【比特】。

由于帶寬的數(shù)字通常很大,要引入“K、M、G”之類的字母表示數(shù)量級,于是又引出一個很扯蛋的差異——“10進制”與“2進制”的差異。
【10進制】的 K 表示 1000;M 表示 1000×1000(1百萬)
【2進制】的 K 表示 1024(2的10次方);M 表示 1024×1024(2的20次方)
為了避免扯皮,后來國際上約定了一個規(guī)矩:對【2進制】的數(shù)量級要加一個小寫字母 i。比如說:Ki 表示 1024;Mi 表示 1024×1024 …… 以此類推。
舉例:
1Kbps 表示“1000比特每秒”
1KiBps 表示“1024字節(jié)每秒”

◇信道的工作模式:單工 VS 半雙工 VS 全雙工

再來說說信道的工作模式。大致可以分為如下三種。為了讓大伙兒比較好理解,我對每一種都舉相應的例子。

單工(simplex)
比如“電臺廣播”就是典型的【單工】?!半娕_”可以發(fā)信號給“收音機”,但“收音機”【不能】發(fā)信號給“電臺”。

半雙工(half-duplex)
比如“單條鐵路軌道”,就是典型的【半雙工】?;疖囋趩螚l鐵軌上,可以有兩種運行方向;但對于同一個瞬間,只能選其中一個方向(否則就撞車了)。

全雙工(full-duplex)
比如“光纖”就是典型的【全雙工】。在同一根光導纖維中,可以有多個光束【同時相向】傳播,互相不會干擾對方。

◇端點

為了敘述方便,我把參與通訊的對象(主體)稱作“通訊端點”,簡稱“端點”。
這里的“端點”是廣義的,可以是硬件(比如某個網(wǎng)卡),也可以是軟件(比如某個應用程序)。

◇單播、組播/多播、廣播、選播

對于“網(wǎng)絡通訊”,至少得有 N 個端點參與,并且【N ≥ 2】才有意義。
當 N 個端點構成一個網(wǎng)絡,這時候就會涉及到“單播、組播、廣播”這幾個概念。
通俗地說:
單播(unicast)——發(fā)送給網(wǎng)絡中的指定的【單個】端點
組播/多播(multicast)——發(fā)送給網(wǎng)絡中的指定的【多個】端點
廣播(broadcast)——發(fā)送給網(wǎng)絡中的【所有】端點
選播(anycast)——發(fā)送給網(wǎng)絡中隨機選擇的【單個】端點

通訊協(xié)議(protocol)

所謂的“通訊協(xié)議”就是:參與通訊的各方所采用的某種【約定】。只有大家都遵守這個約定,才有可能相互傳遞信息。
打個比方:如果兩個人要用自然語言交流,前提是:雙方使用相同(或相互兼容)的自然語言。
“通訊協(xié)議”就類似某種自然語言,參與通訊的多個端點,都必須能理解這個語言。

★從“分層”到“參考模型”

◇分層

在聊“分層”之前,先說說“分工”。比如在一個公司中,通常設有不同的工種/崗位,這就是【分工】。
對于網(wǎng)絡通訊也是如此,不太可能用一種通訊協(xié)議完成所有的信息傳遞任務(注:對于特別簡單的網(wǎng)絡,或許有可能只用單一協(xié)議;但如今的網(wǎng)絡通訊已經(jīng)很復雜,用【單個】通訊協(xié)議包辦所有事情,已經(jīng)不太可能)
一旦采用了多種通訊協(xié)議,這幾種協(xié)議之間,該如何配合捏?
在網(wǎng)絡通訊領域,采用的是【分層】的設計思路。多個層次的協(xié)議在一起協(xié)同工作,技術上稱作“協(xié)議棧”(洋文叫做“protocol stack”)。

◇協(xié)議棧的原理

對于多層次的協(xié)議棧。每個層次都有各自的“端點”(進行通訊的主體)。處于【同一層次】的兩個端點會使用該層次的協(xié)議進行通訊(注:同一個層次的協(xié)議,可能只有一個,也可能有多個)。
除了最頂層,每個層次的端點會向其【直接】上層提供“服務”;除了最底層,每個層次的端點會調(diào)用【直接】下層提供的“服務”(這里所說的“服務”指某種“編程接口”,技術行話叫 API)。

(“協(xié)議?!钡氖疽鈭D)

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(“服務”與“協(xié)議”之間的關系)

◇邏輯信道

(前一個小節(jié)說了)每個層次會向上一個層次提供服務(API 調(diào)用)。對上層而言,調(diào)用下層提供的 API 發(fā)送信息,其效果相當于在使用某種【信道】進行通訊,這也就是我在 ★基本概念 那個章節(jié)所說的“邏輯信道”。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(“邏輯信道”示意圖)

◇數(shù)據(jù)格式的原理

大部分協(xié)議會把要傳送的數(shù)據(jù)切割為 N 份,每一份就是一個數(shù)據(jù)包。
通常來說,數(shù)據(jù)包的格式有如下三部分:

頭部
身體(也稱作“有效載荷”)
尾部(注:很多協(xié)議沒有尾部)

如果你收過快遞,可以把“網(wǎng)絡數(shù)據(jù)包”與“快遞包裹”作一個對照——
數(shù)據(jù)包的“頭/尾”,就類似于快遞包裹的【包裝袋】。數(shù)據(jù)包的“身體”,就類似于快遞包裹里面的東西。

對于【相鄰】兩層的協(xié)議,【下】層包含【上】層。也就是說:下層協(xié)議的【載荷】就是上層協(xié)議的【整體】。
還是以快遞舉例:
假設你從網(wǎng)上買了一臺筆記本電腦。電腦出廠時,電腦廠商肯定會提供一個包裝盒??爝f公司在寄送這臺筆記本的時候,又會在筆記本的盒子外面再加一個包裝袋。對應到網(wǎng)絡協(xié)議——“快遞公司的包裝袋”相當于【下層】協(xié)議;“電腦廠商的包裝盒”,相當于【上層】協(xié)議。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(上下層協(xié)議的格式及包含關系)

◇網(wǎng)絡分層的參考模型

上述所說的“分層 & 協(xié)議棧”只是一個抽象的(籠統(tǒng)的)思路。具體要分幾層?每一層要干啥事兒?這些都是很有講究滴!網(wǎng)絡技術發(fā)展了幾十年,已經(jīng)有很多牛人提出了各種不同的劃分方案,稱之為“網(wǎng)絡分層的參考模型”(為了打字省力,以下簡稱“模型”)。
在各種模型中,名氣最大的當然是“OSI 模型”(洋文稱作“OSI model”)。在后續(xù)的章節(jié)中,我會以這個模型為主體,進行介紹。
除了“OSI 模型”還有一個很出名的模型是“TCP/IP 模型”(因為互聯(lián)網(wǎng)很成功,它才跟著出名)。對“TCP/IP 模型”的分層,不同的文章或書籍,說法不太一樣(“3層、4層、5層”皆有),這就引發(fā)了一些爭議。包括幾位熱心讀者也在博客留言,表達不同意見。為了避免一家之言,貼出XX百科的“”,其中給出了幾種比較有名的說法。
另外,我想提醒一下:
由于本文是基于【OSI 模型】進行展開。對于 TCP/IP 模型到底算幾層,這方面的爭論【不】影響本文后續(xù)的內(nèi)容。

★OSI 概述

◇OSI 的歷史

“OSI”的全稱是“Open System Interconnection”。先說說它的歷史。
上世紀70年代,“國際電信聯(lián)盟”(ITU)想對各國的電信系統(tǒng)(電話/電報)建立標準化的規(guī)格;與此同時,“國際標準化組織”(ISO)想要建立某種統(tǒng)一的標準,使得不同公司制造的大型主機可以相互聯(lián)網(wǎng)。
后來,這兩個國際組織意識到:“電信系統(tǒng)互聯(lián)”與“電腦主機互聯(lián)”的性質(zhì)差不多。于是 ISO 與 ITU 就決定合作,兩家一起干。這2個組織的2套班子,從上世紀70年代開始搞,搞來搞去,搞了很多年,一直到1984年才終于正式發(fā)布 OSI 標準。

◇OSI 標準的兩個組成部分

嚴格來講,OSI 包括兩大部分——
其一,抽象的概念模型,也就是前面提到的【OSI model】;
其二,針對這個概念模型的具體實現(xiàn)(具體的通訊協(xié)議),洋文叫做【OSI protocols】。

(前面說了)OSI 是由 ISO & ITU 聯(lián)手搞出來滴。這兩個國際組織里面的人,要么是來自各國的電信部門,要么是來自各國的高校學者。總而言之,既有嚴重的官僚風氣,又有明顯的學究風氣。(正是因為這兩種風氣疊加,所以搞了很多年,才搞出 OSI)
OSI 的協(xié)議實現(xiàn)(OSI protocols),不客氣地說,就是一堆垃圾——據(jù)說把 OSI protocols 所有的協(xié)議文檔,全部打印成 A4 紙,摞起來得有一米多高!是不是很嚇人?協(xié)議搞得如此復雜,嚴重違背了 IT 設計領域的 KISS 原則。
由于 OSI protocols 實在太復雜,后來基本沒人用。但 OSI model 反而廣為流傳,并且成為“網(wǎng)絡分層模型”中名氣最大,影響力最廣的一個。
因此,本文后續(xù)章節(jié)中,凡是提到 OSI,指的是【OSI model】。

◇OSI 模型的7層

OSI 模型總共分7層,示意圖參見如下表格:

層次

中文名

英文名

第7層

應用層

Application Layer

第6層

表示層

Presentation Layer

第5層

會話層

Session Layer

第4層

傳輸層

Transport Layer

第3層

網(wǎng)絡層

Network Layer

第2層

數(shù)據(jù)鏈路層

Data Link Layer

第1層

物理層

Physical Layer

(注:為了打字省力,在后續(xù)章節(jié)把“數(shù)據(jù)鏈路層”直接稱為“鏈路層”)

考慮到本文是針對一般性讀者的【掃盲教程】,我重點聊第1~4層。搞明白這幾個層次之后,有助于你更好地理解網(wǎng)絡的很多概念,也有助于你更好地理解很多信息安全的概念。
網(wǎng)上已經(jīng)有很多關于 OSI 的文章,可惜大部分寫得粗糙——很多文章只是在照抄定義。
要想更好地理解 OSI 模型,你得搞明白:為啥需要引入某某層?(請注意:這是一個 WHY 型的問題)
接下來在討論 OSI 的每個層次時,我都會專門寫一個小節(jié),談該層次的【必要性】。搞明白【必要性】,你就知道為啥要引入這個層次。

物理層:概述

◇物理層的必要性

通俗地說:直接與物理介質(zhì)打交道的層次,就是物理層。這一層的必要性比較明顯。
因為所有的通訊,歸根結底都要依賴于【物理介質(zhì)】。與物理介質(zhì)打交道,需要牽涉到很多與【物理學】相關的東東。比如:“無線電通訊”需要關心“頻率/波長”;電纜通訊需要跟“電壓”打交道;“光纖通訊”需要關心“玻璃的折射率&光線的入射角” ……
“物理層”的主要職責是:屏蔽這些細節(jié),使得“物理層”之上的層次不用再去操心物理學。

◇物理信道的類型

何為“物理信道”,在本文開篇的“基本概念”已經(jīng)提到了。
對于“物理信道”,還可以進一步細分為如下三大類:
1. 有線信道(比如:雙絞線、同軸電纜、光纖、等等)
2. 無線信道(比如:微波通訊、電臺廣播、衛(wèi)星通訊、等等)
3. 存儲信道

“存儲信道”比較少見,很多人沒聽說過,稍微解釋一下。
假設你要把一大坨信息傳送給另一個人,除了用“有線 or 無線”這兩種通訊方式,還可以把信息先保存到某種【存儲介質(zhì)】(比如硬盤),然后再把存儲介質(zhì)用某種方式(比如快遞)轉交給對方。這就是所謂的“存儲信道”。

◇信噪比(Signal-to-noise ratio)

信噪比這個概念是從通信領域借用的術語。
對于“物理信道”,總是會存在某些環(huán)境干擾,稱之為“噪聲”(Noise)。“信道傳輸?shù)挠杏眯畔ⅰ迸c“無用的干擾噪聲”,這兩者的比值就是“信噪比”。
“信噪比”單位是【分貝】?!胺重悺庇⑽慕凶觥癲ecibel”(簡寫為 dB)?!癲eci”表示“十進制”;“bel”是為了紀念大名鼎鼎的貝爾(電話它爹)。

◇帶寬的限制因素

“物理信道”要依賴于物理傳輸介質(zhì)。不管使用何種物理介質(zhì),都要受限于某些基本的物理學定律(比如“光速上限”)。另外,不管何種物理介質(zhì),總是會有或多或少的環(huán)境干擾(噪聲)。這兩個因素導致了:任何“物理信道”的最大傳輸率總是有限滴。
由于物理層是最底下的一層,物理層之上的其它層次總是要直接或間接地依賴【物理信道】。因此,其它層次建立的“邏輯信道”,其帶寬只會比“物理信道”的最大帶寬更小。換句話說:“物理信道”的帶寬上限也就是整個協(xié)議棧的帶寬上限。

多路復用(Multiplexing)

一般來說,凡是能實現(xiàn)【長距離】通訊的“物理信道”,都有相當?shù)慕?jīng)濟成本。比如鋪設“光纖、同軸電纜”都要花錢。無線電通訊雖然免去了鋪設線路的成本,但需要競標購買頻段。因此,物理信道非常強調(diào)“多路復用”。
所謂的“多路復用”,通俗地說就是:盡可能地共享物理信道,不要浪費了。
“多路復用”有很多種類型;不同的類型,原理也不同。為了展示各種不同的原理,我拿【無線通信】來說事兒。
無線通信領域的“多路復用”,【至少】有如下幾種:

頻分多路復用/FDM(Frequency-Division Multiplexing)
這個最簡單,就是根據(jù)頻率拆分。不同的線路占用不同的頻段,互不干擾。(電臺廣播用的就是這個思路)
但這個思路的缺點很明顯——
其一,要依賴足夠?qū)挼念l段(頻段是稀缺資源);
其二,不同線路的流量可能會動態(tài)變化。如果某個線路空閑,其占用的頻段就浪費了。
(注:光纖通訊中有個“波分多路復用/WDM”,本質(zhì)上就是 FDM)

時分多路復用/TDM(Time-Division Multiplexing)
這種思路只用一個很窄的頻段。為了在同一個頻道發(fā)送多個信道,采用【分時機制】,把時間切割成很小的時間片,每個線路占用一個時間片。周而往復。
這個思路有點像十字路口的紅綠燈——每隔一段時間,其中一條路可以通行。
這個思路的優(yōu)點是:可以只使用一個很窄的頻段。缺點是:線路越多,每條線路等待越久;即使某個線路空閑,依然會占用時間片(浪費了資源)。

碼分多路復用/CDM(Code-Division Multiplexing)
這種思路采用某種【編碼】的技巧,使得多個端點可以在同一個時間點使用同一頻段發(fā)送數(shù)據(jù);由于他們采用不同的編碼方式,不會相互干擾。
一般來說,CDM 要依賴于“擴頻技術”(spread spectrum),需占用一個比較寬的頻道范圍。這算是缺點。但其優(yōu)點很明顯——
其一,可以支持 N 個線路(N 動態(tài)變化);
其二,即使任何一個線路的流量動態(tài)變化,也不會浪費物理信道的資源。
顯然,這種思路明顯優(yōu)于 FDM & TDM。如今在移動通訊領域大名鼎鼎的 CDMA(碼分多址),采用的就是這個思路。

★物理層:具體實例

◇物理層的【協(xié)議】

物理層的協(xié)議主要有如下:
USB 協(xié)議
藍牙協(xié)議的一部分
IEEE 802.11 的一部分(Wi-Fi)
IEEE 802.16(WiMAX)
IEEE 1394火線接口
RS-232 協(xié)議(串行接口/串口
……
(考慮到篇幅)我不可能具體細聊這些協(xié)議,只是貼出每個的XX百科鏈接,感興趣的同學自己點進去看。

◇物理層的【協(xié)議實現(xiàn)】

對于電腦主機(含移動設備),“網(wǎng)卡硬件”包含了物理層的協(xié)議實現(xiàn)(參見如下示意圖)
另外,還有一些專門的【1層】網(wǎng)絡設備,也提供物理層的功能(參見下一個小節(jié))。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(OSI 模型中,不同層次的協(xié)議實現(xiàn))

◇物理層相關的【網(wǎng)絡設備】

調(diào)制解調(diào)器(modem)
通俗地說,“調(diào)制解調(diào)器”就是用來翻譯“數(shù)字信號 & 模擬信號”。
在發(fā)送信息時,modem 把電腦要發(fā)送的“字節(jié)流”(數(shù)字信號)翻譯成“模擬信號”,然后通過物理介質(zhì)發(fā)送出去;當它從物理介質(zhì)收到“模擬信號”,再翻譯成“數(shù)字信號”,傳回給電腦。
早期的撥號上網(wǎng),modem 面對的物理介質(zhì)是“固話線路”;如今家庭寬帶普及,光纖入戶,modem 面對的物理介質(zhì)是“光纖線路”。

(老式 modem,用于固定電話線路)

中繼器repeater
信號在物理介質(zhì)中傳輸,會出現(xiàn)【衰減】(不論是“有線 or 無線”都有可能衰減)。“中繼器”的作用是【信號增益】,使得信號能傳得更遠。
另外,比如“微波通訊”是直線傳播,而地球表面有弧度,還有地形的起伏。所以每隔一定距離要建“微波塔”。這玩意兒也相當于“中繼器”。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(微波塔示意圖)

集線器(hub)
可以把“集線器”視作更牛逼的“中繼器”——“中繼器”只有兩個口(只能連接兩個通訊端點),而“集線器”有多個口(同時連接多個通訊端點)。
通常所說的“集線器”是指“以太網(wǎng)集線器”。這種設備如今已經(jīng)逐步淘汰,很少見到了。

另外,很多同學應該都用過“USB hub”,就是針對 USB 線的“集線器”(“USB 線”也可以視作某種通訊介質(zhì))。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(老式的10兆以太網(wǎng)集線器)

★鏈路層:概述

◇鏈路層的必要性

對信息的打包
物理層傳輸?shù)男畔?,通俗地說就是【比特流】(也就是一長串比特)。但是對于計算機來說,“比特流”太低級啦,處理起來極不方便?!版溌穼印币傻牡谝粋€事情,就是把“比特流”打包成更大的一坨,以方便更上層的協(xié)議進行處理。在 OSI 模型中,鏈路層的一坨,稱之為“幀”(frame)。

差錯控制
物理介質(zhì)的傳輸,可能受到環(huán)境的影響。這種影響不僅僅體現(xiàn)為“噪聲”,有時候會出現(xiàn)嚴重的干擾,導致物理層傳輸?shù)摹氨忍亓鳌背鲥e(某個比特“從0變1”或“從1變0”)。因此,鏈路層還需要負責檢查物理層的傳輸是否出錯。在 IT 行話中,檢測是否出錯,稱之為“差錯控制機制”(后面有一個小節(jié)會簡單說一下這個話題)。

流量控制
假設兩個端點通過同一個物理信道進行通訊,這兩個端點處理信息的速度可能不同。如果發(fā)送方輸出信息的速度超過接收方處理信息的速度,通訊就會出問題。于是就需要有某種機制來協(xié)調(diào),確保發(fā)送方的發(fā)送速度不會超出接收方的處理速度。在技術行話中,這稱之為“流量控制”,簡稱“流控”。

信道復用
在上一個章節(jié)已經(jīng)講到:用于遠距離通訊的“物理介質(zhì)”,總是有成本。因此需要對物理信道進行“多路復用”,就會導致多個端點共用同一個物理信道。如果同時存在多個發(fā)送者和多個接收者。接收者如何知道某個信息是發(fā)給自己而不是別人?
另外,某些物理介質(zhì)可能不支持并發(fā)(無法同時發(fā)送信息)。某些物理介質(zhì)可能是【半雙工】,所有這些物理層的限制,都使得“多路復用”變得復雜。為了解決這些問題,鏈路層需要提供了某種相應的機制(協(xié)議),術語叫做“介質(zhì)訪問控制”(洋文是“Media Access Control”,簡稱 MAC)。后續(xù)小節(jié)會聊它。

◇差錯控制

為了發(fā)現(xiàn)傳輸?shù)男畔⑹欠癯鲥e,設計了很多相應的數(shù)學算法。這些算法大體分為兩類:“檢錯算法 & 糾錯算法”。
簡而言之,“檢錯算法”只能檢測出錯誤,而“糾錯算法”不但能檢測出錯誤,還能糾正錯誤。很顯然,“糾錯算法”更牛逼,但是它也更復雜。
常見的“檢錯算法”對傳輸?shù)臄?shù)據(jù)計算出一個【校驗值】,接收方收到數(shù)據(jù)會重新計算校驗和,如果算出來不對,就把收到的數(shù)據(jù)丟棄,讓對方重發(fā)?!靶r炈惴ā钡脑眍愃朴凇稈呙の募暾孕r灐P于散列值和數(shù)字簽名》一文中提到的“散列算法/哈希算法”。
“糾錯算法”更高級,由于涉及到更多數(shù)學,我就不展開啦。
對于【無線】物理信道,由于出錯的概率更高,并且重新傳輸數(shù)據(jù)的成本也更高。所以【無線】通訊的鏈路層協(xié)議,更傾向于用【糾錯】機制;作為對比,【有線】通訊的鏈路層協(xié)議,更傾向于用【檢錯】機制。

MAC 協(xié)議

“MAC 協(xié)議”用來確保對下層物理介質(zhì)的使用,不會出現(xiàn)沖突。為了形象,我拿“鐵路系統(tǒng)”來比喻,說明“MAC 協(xié)議”的用途。
假設有一條【單軌】鐵路連接 A/B 兩地。有很多火車想從 A 開到 B,同時還有很多火車想從 B 開到 A。
首先,要確保不發(fā)生撞車(如果已經(jīng)有車在 A 開往 B 的途中,那么 B 就不能再發(fā)車);其次,即使是同一個方向的車,出發(fā)時間也要錯開一個時間間隔。
所有這些協(xié)調(diào)工作,都是靠“MAC 協(xié)議”來搞定。

◇MAC 地址

為了完成上述任務,光有“MAC 協(xié)議”還不夠,還需要為每一個端點引入【惟一的】標識。這個標識就稱作“MAC 地址”。
通俗地說,每個網(wǎng)卡都內(nèi)置了一個“MAC 地址”。這個地址是網(wǎng)卡在出廠的時候就已經(jīng)設置好的,并且用某種機制確保該地址【全球唯一】。

如何保證 MAC 地址全球唯一捏?簡單說一下:
MAC 地址包含6個字節(jié)(48個比特),分為兩半。第一部分稱作【OUI】,OUI 的24個比特中,其中2個比特有特殊含義,其它22個比特,用來作為網(wǎng)卡廠商的唯一編號。這個編號由國際組織 IEEE 統(tǒng)一分配。
MAC 地址第二部分的24比特,由網(wǎng)卡廠商自己決定如何分配。每個廠商只要確保自己生產(chǎn)的網(wǎng)卡,后面這24比特是唯一的,就行啦。

(MAC 地址的構成) 順便說說【虛擬網(wǎng)卡】的 MAC 地址。
“虛擬網(wǎng)卡”是由【虛擬化軟件】創(chuàng)建滴。IEEE 也給每個虛擬化軟件的廠商(含開源社區(qū))分配了唯一的 OUI。因此,虛擬化軟件在創(chuàng)建“虛擬網(wǎng)卡”時,會使用自己的 OUI 生成前面24個比特;后面的24比特,會采用某種算法使之盡可能【隨機化】。由于“2的24次方”很大(224 = 16777216),碰巧一樣的概率很低。
(注:如果手工修改 MAC 地址,故意把兩塊網(wǎng)卡的 MAC 地址搞成一樣,那確實就做不到唯一性了。并且會導致鏈路層的通訊出問題)

★鏈路層:具體實例

◇鏈路層的【協(xié)議】

鏈路層的協(xié)議主要有如下:
MAC 協(xié)議(介質(zhì)訪問控制)
LLC 協(xié)議(邏輯鏈路控制)
ARP 協(xié)議(解析 MAC 地址)
IEEE 802.3(以太網(wǎng))
IEEE 802.11 的一部分(Wi-Fi)
L2TP 協(xié)議(2層VPN)
PPP 協(xié)議(撥號上網(wǎng))
SLIP 協(xié)議(撥號上網(wǎng))
……
(考慮到篇幅)我不可能具體細聊這些協(xié)議,只是貼出每個的XX百科鏈接,感興趣的同學自己點進去看。

◇鏈路層的【協(xié)議實現(xiàn)】

對于電腦主機(含移動設備),“網(wǎng)卡硬件 & 網(wǎng)卡驅(qū)動”會包含鏈路層協(xié)議的實現(xiàn)(參見如下示意圖)。
另外,還有一些專門的【2層】網(wǎng)絡設備,也提供鏈路層的功能(參見下一個小節(jié))。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(OSI 模型中,不同層次的協(xié)議實現(xiàn))

◇鏈路層相關的【網(wǎng)絡設備】

網(wǎng)絡交換機(network switch)
(注:一般提到“網(wǎng)絡交換機”,如果不加定語,指的就是“2層交換機”;此外還有更高層的交換機,在后續(xù)章節(jié)介紹)
為啥要有交換機捏?我拿“以太網(wǎng)的發(fā)展史”來說事兒。
以太網(wǎng)剛誕生的時候,稱之為“經(jīng)典以太網(wǎng)”,電腦是通過【集線器】相連?!凹€器”前面提到過,工作在【1層】(物理層),并不理解鏈路層的協(xié)議。因此,集線器的原理是【廣播】模式——它從某個網(wǎng)線接口收到的數(shù)據(jù),會復制 N 份,發(fā)送到其它【每個】網(wǎng)線接口。假設有4臺電腦(A、B、C、D)都連在集線器上,A 發(fā)數(shù)據(jù)給 B,其實 C & D 也都收到 A 發(fā)出的數(shù)據(jù)。顯然,這種工作模式很(低效)。由于“經(jīng)典以太網(wǎng)”的工作模式才“10兆”,所以集線器雖然低效,還能忍受。
后來要發(fā)展“百兆以太網(wǎng)”,再用這種傻SB的廣播模式,就不能忍啦。于是“經(jīng)典以太網(wǎng)”就發(fā)展為“交換式以太網(wǎng)”。用【交換機】代替“集線器”。
交換機是工作在2層(鏈路層)的設備,能夠理解鏈路層協(xié)議。當交換機從某個網(wǎng)線接口收到一份數(shù)據(jù)(鏈路層的“幀”),它可以識別出“鏈路幀”里面包含的目標地址(接收方的 MAC 地址),然后只把這份數(shù)據(jù)轉發(fā)給“目標 MAC 地址相關的網(wǎng)線接口”。
由于交換機能識別2層協(xié)議,它不光比集線器的性能高,而且功能也強得多。比如(稍微高級點的)交換機可以實現(xiàn)“MAC 地址過濾、VLAN、QoS”等多種額外功能。

網(wǎng)橋/橋接器(network bridge)
“交換機”通常用來連接【同一種】網(wǎng)絡的設備。有時候,需要讓兩臺不同網(wǎng)絡類型的電腦相連,就會用到【網(wǎng)橋】。
下面以“操作系統(tǒng)虛擬機”來舉例(完全沒用過虛擬機的同學,請?zhí)^這個舉例)。
在這篇博文,我介紹了虛擬機的幾種“網(wǎng)卡模式”,其中有一種模式叫做【bridge 模式】。一旦設置了這種模式,Guest OS 的虛擬網(wǎng)卡,對于 Host OS 所在的外部網(wǎng)絡,是【雙向】可見滴。也就是說,物理主機所在的外部網(wǎng)絡,也可以看見這塊虛擬網(wǎng)卡。
現(xiàn)在,假設你的物理電腦(Host OS)只安裝了【無線網(wǎng)卡】(WiFi),而虛擬化軟件給 Guest OS 配置的通常是【以太網(wǎng)卡】。顯然,這是兩種【不同】的網(wǎng)絡。為啥 Guest OS 的以太網(wǎng)卡設置為“bridge 模式”之后,外部 WiFi 網(wǎng)絡可以看到它捏?
奧妙在于——虛擬化軟件在內(nèi)部悄悄地幫你實現(xiàn)了一個“網(wǎng)橋”。這個網(wǎng)橋把“Host OS 的 WiFi 網(wǎng)卡”與“Guest OS 的以太網(wǎng)卡”關聯(lián)起來。WiFi 網(wǎng)卡收到了鏈路層數(shù)據(jù)之后,如果接收方的 MAC 地址對應的是 Guest OS,網(wǎng)橋會把這份數(shù)據(jù)丟給 Guest OS 的網(wǎng)卡。
這種網(wǎng)卡模式之所以稱作“bridge 模式”,原因就在于此。

◇鏈路層相關的【軟件工具】

嗅探抓包工具(Sniffer)
要了解鏈路層的數(shù)據(jù)包結構,需要用到“嗅探工具”。這類工具能捕獲流經(jīng)你網(wǎng)卡的所有【鏈路層】數(shù)據(jù)包。前面聊“協(xié)議?!钡臅r候說過:下層數(shù)據(jù)包的載荷就是上層數(shù)據(jù)包的整體。因此,拿到【鏈路層】數(shù)據(jù)包也就意味著:你已經(jīng)拿到2層之上的所有數(shù)據(jù)包的信息了。
有些抓包工具自帶圖形界面,可以直接顯示數(shù)據(jù)包的內(nèi)容給你看。還有些只提供命令行(只是把獲取的數(shù)據(jù)包保存為文件),然后要搭配其它圖形化的工具來展示數(shù)據(jù)包的內(nèi)容。
抓包的工具有很多,名氣最大的是 Wireshark(原先叫做 Ethereal)。

ARP 命令
首先,ARP 是“MAC 地址解析協(xié)議”的洋文名稱。該協(xié)議根據(jù)“IP 地址”解析“MAC 地址”。
Windows 自帶一個同名的 arp 命令,可以用來診斷與“MAC 地址”相關的信息。比如:列出當前子網(wǎng)中其它主機的 IP 地址以及對應的 MAC 地址。這個命令在 Linux & Mac OS 上也有。

★網(wǎng)絡層:概述

◇網(wǎng)絡層的必要性

路由機制(routing)
在 OSI 模型中,鏈路層本身【不】提供路由功能。你可以通俗地理解為:鏈路層只處理【直接相連】的兩個端點(注:這么說不完全嚴密,只是幫助外行理解)
對于某個復雜網(wǎng)絡,可能有很多端點,有很復雜的拓撲結構。當拓撲足夠復雜,總有一些端點之間【沒有直連】。那么,如何在這些【沒有直連】的端點之間建立通訊捏?此時就需要提供某種機制,讓其它端點幫忙轉發(fā)數(shù)據(jù)。這就需要引入“路由機制”。
為了避免把“鏈路層”搞得太復雜,路由機制放到“鏈路層”之上來實現(xiàn),也就是“網(wǎng)絡層”。

基于【路由】的地址編碼方式
鏈路層已經(jīng)提供了某種全球唯一的地址編碼方式(MAC 地址)。但“MAC 地址”有如下幾個問題:
其一,它是固定的(雖然可以用技術手段去修改 MAC 地址,但很少這么干)
其二,MAC 地址的編碼是基于【廠商】,無法體現(xiàn)網(wǎng)絡拓撲結構。或者說,“MAC 地址”對于“路由機制”是不夠友好滴。
因此,需要引入一種更抽象(更高層)的地址,也就是“網(wǎng)絡層地址”。咱們常說的“IP 地址”,是“網(wǎng)絡層地址”的實現(xiàn)方式之一。

為了幫你理解,舉個例子:
每個人都有身份證號(這就類似于“MAC 地址”)。當某人加入了某個公司,公司會為此人再分配一個“員工號”(這就類似于“網(wǎng)絡地址”)。既然有身份證號,為啥公司還要另搞一套“員工編號”捏?因為“員工編號”有額外的好處。比如說:可以把員工號劃分為不同的區(qū)間,對應不同的部門。這樣一來,只要看到員工號,就知道此人來自哪個部門。
類似道理,每個網(wǎng)卡都有自己固定的 MAC 地址,當這個網(wǎng)卡接入到不同的網(wǎng)絡,每次都可以再分配不同的“網(wǎng)絡地址”。通過“網(wǎng)絡地址”可以看出這個網(wǎng)卡屬于哪個網(wǎng)絡(對路由比較方便)。

網(wǎng)際互聯(lián)(internetwork)
引入“網(wǎng)絡層”的另一個目的是:屏蔽不同類型的網(wǎng)絡之間的差異,從而有利于【網(wǎng)際互聯(lián)】(也就是建立“網(wǎng)絡的網(wǎng)絡”)。
一般來說,要想聯(lián)通【異種】網(wǎng)絡,就要求每個網(wǎng)絡中都有一臺主機充當【網(wǎng)關】(gateway)?!揪W(wǎng)關】起到“中介/翻譯”的作用——幫不同的網(wǎng)絡翻譯協(xié)議,使得不同的網(wǎng)絡可以互相聯(lián)通。
假設【沒有】統(tǒng)一的網(wǎng)絡層,網(wǎng)關的工作就很難做。就好比說:如果全球沒有某種通用的自然語言,就需要培養(yǎng)非常多不同類型的翻譯人才(假設有30種主要語言,任意兩種互譯,就需要幾百種不同的翻譯人才)。
反之,如果有了某種統(tǒng)一的網(wǎng)絡層標準,問題就好辦多了(還是假設有30種主要語言,只要選定某種作為通用語,然后培養(yǎng)29種翻譯人才,就可以實現(xiàn)任意兩種語言互譯)。
如今的互聯(lián)網(wǎng)時代,【IP 協(xié)議】就是那個充當統(tǒng)一標準的網(wǎng)絡層協(xié)議。

◇網(wǎng)絡拓撲(network topology)

網(wǎng)絡的拓撲結構有很多種,有簡單的,有復雜的。一般來說,再復雜的拓撲,也可以逐步分解為若干簡單拓撲的組合。
對拓撲的研究,有專門一個數(shù)學分支(拓撲學)。考慮到本文只是掃盲,我不可能再去聊“拓撲學”。因此,只挑幾種簡單的拓撲結構,讓大伙兒有個直觀的印象。

(常見的網(wǎng)狀拓撲結構:星形拓撲、環(huán)形拓撲、總線拓撲、網(wǎng)狀拓撲等等)

如今的互聯(lián)網(wǎng),整體的拓撲結構超級復雜。但還是可以逐步分解為上述幾種基本的拓撲結構。

(互聯(lián)網(wǎng)的復雜拓撲,右下角是圖中某個小點的放大。

為節(jié)省大伙兒的”學習”流量,我貼的是縮小圖。

◇互聯(lián)網(wǎng)的拓撲——從“歷史”的角度看其健壯性

從上面那張圖可以看出:互聯(lián)網(wǎng)拓撲的【局部】有很多是“星形拓撲”(當然也有其它的)。但從【宏觀】上看,更像是“網(wǎng)狀拓撲”。
在現(xiàn)實生活中,對于復雜結構,通常都會采用“樹狀層次結構”,以便于管理。比如:域名系統(tǒng)、公司組織結構、官僚系統(tǒng) …… 那為啥互聯(lián)網(wǎng)的【宏觀】拓撲結構是“網(wǎng)狀”捏?這就要說到互聯(lián)網(wǎng)的歷史。

在上世紀50年代(冷戰(zhàn)高峰期),漂亮國軍方的指揮系統(tǒng)高度依賴于電信公司提供的電話網(wǎng)絡。當時的電話網(wǎng)絡大致如下——
在基層,每個地區(qū)有電話交換局,每一部電話都連入當?shù)氐慕粨Q局。
在全國,設有若干個長途局,每個交換局都接入某個特定的長途局(不同地區(qū)的交換局通過長途局中轉)。
簡而言之,當時漂亮國的電話網(wǎng)絡是典型的【多級星形拓撲】。這種拓撲的優(yōu)點是:簡單、高效、便于管理;但缺點是:健壯性很差。從這個案例中,大伙兒可以再次體會到“效率”與“健壯性”之間的矛盾。
話說1957年的時候,蘇聯(lián)成功試射第一顆洲際彈道導彈(ICBM),漂亮國軍方開始擔心:一旦蘇聯(lián)先用洲際導彈攻擊美國,只要把少數(shù)幾個長途局轟掉,軍方的指揮系統(tǒng)就會癱瘓。也就是說,“長途局”已經(jīng)成為美國軍方的【單點故障】(何為“單點故障”?參見這篇博文)。
1960年,美國國防部找來大名鼎鼎的蘭德公司進行咨詢,要求提供一個應對核打擊的方案。該公司的研究員 Paul Baran 設計了一個方案,把“星形拓撲”改為【網(wǎng)狀拓撲】。采用【網(wǎng)狀拓撲】的好處在于:即使發(fā)生全面核大戰(zhàn),大量骨干節(jié)點被摧毀,整個網(wǎng)絡也不會被分隔成幾個孤島,軍方的指揮系統(tǒng)依然能正常運作。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(左邊:互聯(lián)網(wǎng)誕生前——美國的電話網(wǎng)絡  右邊:蘭德公司的“Baran 方案”)

有了蘭德公司的方案,美國軍方找到當時最大的電信公司 AT&T,想要實現(xiàn)這個系統(tǒng),結果被否決了。AT&T 高層認為:搞這樣一種系統(tǒng)根本不切實際。于是 Baran 的方案中途夭折。
為啥 AT&T 反對這個方案捏?一方面,成功的大公司總是有很強的思維定勢(關于這點,參見這篇文章);另一方面,Baran 的設計方案確實很超前——其前瞻性不僅包括“拓撲結構”,而且把當時電信行業(yè)的幾大核心觀念完全顛覆掉了(具體如何顛覆,后續(xù)章節(jié)還會再聊)。
時間一晃又過了好多年,到了60年代末,由于一系列機緣巧合,英國佬發(fā)現(xiàn)了“Baran 方案”的價值,并據(jù)此搞了一個小型的 NPL 網(wǎng)絡(NPL 是“國家物理實驗室”的縮寫)。然后在某次 ACM 會議上,美國佬看到英國佬的論文,才意識到:Baran 方案完全可行。經(jīng)歷了“出口轉內(nèi)銷”的命運之后,該方案重新被美國國防部重視。之后,(國防部下屬的)“高級計劃研究局”(ARPA)開始籌建“阿帕網(wǎng)”(ARPANET),才有了如今的互聯(lián)網(wǎng)。

◇路由的大致原理

聊完“拓撲”,再來聊“路由”。
當主機 A 向主機 B 發(fā)送網(wǎng)絡層的數(shù)據(jù)時,大致會經(jīng)歷如下步驟:

1.
A 主機的協(xié)議棧先判斷“A B 兩個地址”是否在同一個子網(wǎng)(“子網(wǎng)掩碼”就是用來干這事兒滴)。
如果是同一個子網(wǎng),直接發(fā)給對方;如果不是同一個子網(wǎng),發(fā)給本子網(wǎng)的【默認網(wǎng)關】。
(此處所說的“網(wǎng)關”指“3層網(wǎng)關/網(wǎng)絡層網(wǎng)關”) 2.
對于“默認網(wǎng)關”,有可能自己就是路由器;也可能自己不是路由器,但與其它路由器相連。
也就是說,“默認網(wǎng)關”要么自己對數(shù)據(jù)包進行路由,要么丟給能進行路由的另一臺設備。
(萬一找不到能路由的設備,這個數(shù)據(jù)就被丟棄,于是網(wǎng)絡通訊出錯)
3.
當數(shù)據(jù)到達某個路由器之后,有如下幾種可能——
3.1
該路由器正好是 B 所在子網(wǎng)的網(wǎng)關(與 B 直連),那就把數(shù)據(jù)包丟給 B,路由過程就結束啦;
3.2
亦或者,路由器會把數(shù)據(jù)包丟給另一個路由器(另一個路由器再丟給另一個路由器) …… 如此循環(huán)往復,最終到達目的地 B。
3.3
還存在一種可能性:始終找不到“主機 B”(有可能該主機“斷線 or 關機 or 根本不存在”)。為了避免數(shù)據(jù)包長時間在網(wǎng)絡上閑逛,還需要引入某種【數(shù)據(jù)包存活機制】(洋文叫做“Time To Live”,簡稱 TTL)。
通常會采用某個整數(shù)(TTL 計數(shù))表示數(shù)據(jù)包能活多久。當主機 A 發(fā)出這個數(shù)據(jù)包的時候,這個“TTL 計數(shù)”就已經(jīng)設置好了。每當這個數(shù)據(jù)包被路由器轉發(fā)一次,“TTL 記數(shù)”就減一。當 TTL 變?yōu)榱悖@個數(shù)據(jù)包就死了(被丟棄)。

對于某些大型的復雜網(wǎng)絡(比如互聯(lián)網(wǎng)),每個路由器可能與其它 N 個路由器相連(N 可能很大)。對于上述的 3.2 情形,它如何判斷:該轉發(fā)給誰捏?
這時候,“路由算法”就體現(xiàn)出價值啦——
一般來說,路由器內(nèi)部會維護一張【路由表】。每當收到一個網(wǎng)絡層的數(shù)據(jù)包,先取出數(shù)據(jù)包中的【目標地址】,然后去查這張路由表,看誰距離目標最近,就把數(shù)據(jù)包轉發(fā)給誰。
上面這段話看起來好像很簡單,其實路由算法挺復雜滴??紤]到本文是“掃盲性質(zhì)”,而且篇幅已經(jīng)很長,不可能再去聊“路由算法”的細節(jié)。對此感興趣的同學,可以去看《計算機網(wǎng)絡》的第5章。

◇路由算法的演變史(以互聯(lián)網(wǎng)為例)

(技術菜鳥可以跳過這個小節(jié))
由于互聯(lián)網(wǎng)的 IP 協(xié)議已經(jīng)成為“網(wǎng)絡層協(xié)議”的事實標準,我簡單聊一下互聯(lián)網(wǎng)的路由機制是如何進化滴。

第1階段:靜態(tài)全局路由表
(前面說了)互聯(lián)網(wǎng)的前身是“阿帕網(wǎng)/ARPANET”。在阿帕網(wǎng)誕生初期(上世紀70年代),全球的主機很少。因此,早期的路由表很簡單,既是“全局”滴,又是“靜態(tài)”滴。簡而言之,每個路由器內(nèi)部都維護一張“全局路由表”,這個“路由表”包含了全球所有其它路由器的關聯(lián)信息。每當來了一個數(shù)據(jù)包,查一下這張全局路由表,自然就清楚要轉發(fā)給誰,才能最快到達目的地。
早期的阿帕網(wǎng),主機的變化比較少,也很少增加路由器。每當出現(xiàn)一個新的路由器,其它路由器的管理員就手工編輯各自的“全局路由表”。
為了加深大伙兒印象,特意找來兩張70年代初的阿帕網(wǎng)拓撲圖(注:圖中的 IMP 是“Interface Message Processor”的縮寫,也就是如今所說的“路由器”)。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(1973年的阿帕網(wǎng))

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(1977年的阿帕網(wǎng))

第2階段:動態(tài)全局路由表
后來,“阿帕網(wǎng)/互聯(lián)網(wǎng)”的規(guī)模猛增,路由器數(shù)量也跟著猛增,隔三差五都有新的路由器冒出來。再用“靜態(tài)路由表”這種機制,(編輯路由表的)管理員會被活活累死。于是改用“動態(tài)路由表”,并引入某種“路由發(fā)現(xiàn)機制”。但“路由表”依然是【全局】滴。

第3階段:動態(tài)分級路由表
再到后來,全球的路由器越來越多,成千上萬,再搞“全局路由表”已經(jīng)不太現(xiàn)實了——
一方面,“全局路由表”越來越大(查詢的速度就越來越慢)
另一方面,由于互聯(lián)網(wǎng)的流量越來越大,每來一個數(shù)據(jù)包都要查表,查詢越來越頻繁。
于是,路由器開始吃不消了。為了解決困境,想出一個新招數(shù):引入“分級路由”(hierarchical routing)。所謂的“分級路由”就是:把整個互聯(lián)網(wǎng)分為多個大區(qū)域,每個大區(qū)域內(nèi)部再分小區(qū)域,小區(qū)域內(nèi)部再分小小區(qū)域 …… 看到這里,熟悉“數(shù)據(jù)結構與算法”的同學就會意識到——這相當于構造了一個【樹狀】層次結構。
有了這個層次結構,每個路由器重點關注:自己所在的那個最小化區(qū)域里面的網(wǎng)絡拓撲。如此一來,每個路由器的“路由表”都會大幅度減小。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(全局路由表 VS 分級路由表)

◇互聯(lián)網(wǎng)的路由——從“CAS”的角度看其健壯性

如果把互聯(lián)網(wǎng)視作一個系統(tǒng),每個公網(wǎng)上的路由器都是一個自適應的主體。假如某個地區(qū)的網(wǎng)絡流量突然暴漲,骨干網(wǎng)路由器會自動分流;假如因為地震或War,導致某個地區(qū)的骨干網(wǎng)路由器全部下線,周邊地區(qū)的路由器也會自動避開這個區(qū)域 …..
所有這些工作,【不需要】依靠任何最高指揮中樞,去進行協(xié)調(diào)。
相反,如果互聯(lián)網(wǎng)的路由系統(tǒng)中,設立了某種“Center委員會”進行實時調(diào)度,那互聯(lián)網(wǎng)早就完蛋了,根本無法成長為今天這種規(guī)模。

◇網(wǎng)絡層的兩種交換技術——電路交換(circuit switching) VS 分組交換(packet switching)

(技術菜鳥可以跳過這個小節(jié))
前面聊“互聯(lián)網(wǎng)誕生”,說到蘭德公司的“Baran 方案”。該方案對當時的電信系統(tǒng)提出幾大革命性的變化,其中之一就是“分組交換”技術(也稱“數(shù)據(jù)包交換”or“封包交換”)。
一般來說,網(wǎng)絡層的設計有兩種截然不同的風格:【電路交換 VS 分組交換】。有時候也分別稱之為“有連接的網(wǎng)絡層 VS 無連接的網(wǎng)絡層”。此處所說的“連接”指的是某種“虛電路”(洋文叫做“virtual circuit”,簡稱 VC)。

要理解“虛電路”,首先要從老式的電話系統(tǒng)說起。
最早期的電話,既沒有撥號盤也沒有按鍵,全靠一張嘴。當你拿起電話,先告訴接線員你要打給誰,接線員會用一根跳接線,插入電話交換設備的某個插孔,從而把你的電話機與對方的電話機相連。于是建立了一條兩人之間的電話通路,也就是“電路”。你可以把“接線員”想象成某種“人肉路由器” ??

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(1900年法國巴黎的電話交換局,可以看到接線員在操作電話交換設備)

后來發(fā)明了“自動電話交換機”,導致“接線員”全體下崗。雖然自動化了,但原理還是一樣——當你在電話上撥了某人的號碼,電話局的交換機會自動選擇一條線路。只有當這條線路建立起來,對方的電話才會響。一旦雙方開始通話,雙方之間的語音都是通過這條線路傳輸。并且這條線路是獨占的——只要通話不掛斷,這條線路就不會再分配給其他人使用。

前面提到“互聯(lián)網(wǎng)誕生的歷史”,當時軍方推動的“Baran 方案”被 AT&T 斷然拒絕。因為這個方案完全顛覆了傳統(tǒng)的電話系統(tǒng)——
顛覆之1:把“模擬信號”顛覆為“數(shù)字信號”(這點比較好理解,我就不解釋了)
顛覆之2:把“星形拓撲”顛覆為“網(wǎng)狀拓撲”(關于這點,前面的小節(jié)已經(jīng)討論了)
顛覆之3:把“電路交換”顛覆為“分組交換”(這就是本小節(jié)的重點)

為了幫大伙兒理解上述第3點,舉個例子:
假設主機 A 要向主機 B 發(fā)送一大坨數(shù)據(jù)。因為數(shù)據(jù)太多,肯定要分成好幾坨小一點的(分成多個數(shù)據(jù)包)。如何把這些數(shù)據(jù)包發(fā)送給對方捏?

“電路交換”的實現(xiàn)方式
在發(fā)送數(shù)據(jù)之前,要先建立連接通道(通過路由算法,找出 A & B 之間的某條通路)。這條通路就是所謂的“虛電路/VC”。一旦 VC 建立,每一個數(shù)據(jù)包都是從這條拓撲路徑進行路由。

“分組交換”的實現(xiàn)方式
在發(fā)送數(shù)據(jù)之前,【不需要】建立通道,讓每個數(shù)據(jù)包獨立進行路由。這種情況下,這幾個數(shù)據(jù)包可能會走【不同的】拓撲路徑。因此,數(shù)據(jù)包到達的順序與發(fā)送的順序【不一定】相同。接收方收到所有數(shù)據(jù)包之后,還要自己進行排序。
XX百科上有一個 GIF 動畫(這個鏈接),比較直觀地演示“分組交換/封包交換”的效果。由于這個動畫稍微有點大(超過 1MB),我就不貼到博文中了。

當時的電話系統(tǒng)主要承載語音傳輸,“電路交換”顯然性能更高。那為啥 Baran 的設計要采用“分組交換”捏?我又要再次提到【效率 VS 健壯性】之間的矛盾與均衡。
對于“電路交換”,一旦建立連接,同一個連接的所有數(shù)據(jù)都走相同的路徑(會經(jīng)過完全相同的路由器)。也就是說,傳輸?shù)倪^程中,如果某個路由器掛掉了(網(wǎng)絡掉線 or 硬件當機 or 軟件崩潰)。那么,該路由器正在處理的 N 個連接全都要報廢。而“分組交換”則更加靈活——即使某個路由器掛掉了,后續(xù)的數(shù)據(jù)包會自動轉向另外的路由器,損失很小。
“Baran 方案”之所以采用“分組交換”的設計,因為人家這個方案是提交給軍方用來應對【全面核戰(zhàn)爭】滴,當然要考慮健壯性啦。

話說這兩種交換機制,各有很多支持者,并分裂為兩大陣營,分別是:“電信陣營 VS 互聯(lián)網(wǎng)陣營”。兩大陣營的口水戰(zhàn)持續(xù)了 N 年,都無法說服對方。到了后來設計 OSI 模型的時候,為了保持中立性與通用性,OSI 模型本身并沒有強制要求網(wǎng)絡層采用哪一種風格。
經(jīng)過幾十年之后,咱們已經(jīng)可以看出來:“互聯(lián)網(wǎng)陣營”占據(jù)主導地位。如今,連電信系統(tǒng)都是架構在互聯(lián)網(wǎng)之上。

★網(wǎng)絡層:具體實例

◇網(wǎng)絡層的【協(xié)議】

網(wǎng)絡層的協(xié)議有很多。由于“互聯(lián)網(wǎng)”已經(jīng)成為全球的事實標準,因此我只列出屬于“互聯(lián)網(wǎng)協(xié)議族”的那些“網(wǎng)絡層協(xié)議”:
IP 協(xié)議(含 IPv4 & IPv6)
ICMP
IGMP
IPSec
……
(考慮到篇幅)我不可能具體細聊這些協(xié)議,只是貼出每個的XX百科鏈接,感興趣的同學自己點進去看。
對上述這些協(xié)議,最重要的當然是 IP 協(xié)議。如果你想要深入了解 IP 協(xié)議,可以參考如下這本書。關于 IP 協(xié)議的書,此書的影響力最大。這本書共3卷,通常只需看第1卷。
《TCP-IP 詳解》

◇網(wǎng)絡層的【協(xié)議實現(xiàn)】

對于電腦主機(含移動設備),網(wǎng)絡層的協(xié)議實現(xiàn)通常包含在操作系統(tǒng)自帶的網(wǎng)絡模塊中(也就是“操作系統(tǒng)協(xié)議?!保?。具體參見如下示意圖。
另外,還有一些專門的【3層】網(wǎng)絡設備,也提供網(wǎng)絡層的功能(參見本章節(jié)的后續(xù)小節(jié))。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(OSI 模型中,不同層次的協(xié)議實現(xiàn))

◇IP 地址的格式及含義

當年設計阿帕網(wǎng)的時候,采用了【4字節(jié)】(32比特)來表示“網(wǎng)絡層地址”(也就是 IP 地址)。
“IP 地址”的含義很重要,我有必要解釋一下:
咱們平時所說的 IP 地址,采用【點分十進制】來表示。就是把地址的4個字節(jié),先翻譯為十進制,然后每個字節(jié)用一個小數(shù)點分隔開(參見如下示意圖):

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(4字節(jié) IP 地址:“二進制”與“點分十進制”的對照示意圖)

“IP 地址”的32比特,分為兩部分:第1部分用來標識【子網(wǎng)】,第2部分用來標識該子網(wǎng)中的【主機】。
這兩部分各占用多少比特,是不確定的。在這種情況下,“操作系統(tǒng)協(xié)議?!比绾沃?a href="http://www.qjsdgw.cn/tag/%e5%93%aa%e4%ba%9b" title="【查看含有[哪些]標簽的文章】" target="_blank">哪些比特標識“子網(wǎng)”,哪些比特標識“主機”捏?奧妙在于【子網(wǎng)掩碼】。所以,大伙兒在給系統(tǒng)配置 IP 地址的時候,通常都需要再設置一個【子網(wǎng)掩碼】,就這個用途。

◇IP 地址枯竭,及其解決方法

前一個小節(jié)提到:IP地址包含【4字節(jié)】(32比特)。因此,最多只能表示【2的32次方】(42億左右)的不同地址??紤]到還有很多地址保留給特殊用途,實際可用地址遠遠不到42億。
到了如今,全球網(wǎng)民都已經(jīng)幾十億了,IP 地址開始枯竭。咋辦捏?為了解決這個問題,發(fā)展出若干技術手段。簡單說一下最常見的幾種手段:

IPv6
名氣最大(最多人知道)的技術手段,大概是 IPv6 了。這招想要一勞永逸地解決地址枯竭的問題,采用了16字節(jié)(128比特)來表示 IP 地址。
設計 IPv6 的人自豪地宣稱:即使給地球上的每一粒沙子分配一個 IPv6 地址,依然綽綽有余(確實沒有吹牛,“2的128次方”是天文數(shù)字)。
但 IPv6 的缺點在于,【無法】向下兼容原有的 IP 協(xié)議(原有的協(xié)議叫“IPv4”)。IPv6 的普及一直比較慢,這是主要原因。

代理服務器(proxy)
一看到代理,很多人就想到”學習”。其實它也可以用來解決“地址枯竭”的問題。
比如說,某個公司有100人,100臺電腦。如果每臺電腦都分配公網(wǎng) IP 地址,就要消耗100個公網(wǎng)地址(太浪費啦)。
可以只申請一個公網(wǎng) IP,然后在內(nèi)網(wǎng)搞一個代理服務器,公網(wǎng) IP 分配給它(代理服務器有兩個網(wǎng)卡,一個接內(nèi)網(wǎng),一個接公網(wǎng))。然后在其它電腦上設置代理,指向這臺代理服務器,就都可以上外網(wǎng)啦。
(注:在本文的末尾有一個 ★雜項 的章節(jié),會專門聊一下“代理”這個話題)

網(wǎng)絡地址轉換(NAT)
前面 proxy 那招有個缺點:內(nèi)網(wǎng)的每臺電腦里面的每個上網(wǎng)軟件,都要單獨設置代理。實在太麻煩啦!
后來就發(fā)明了某種更牛逼的招數(shù)——網(wǎng)絡地址轉換(洋文是“Network Address Translation”,簡稱 NAT)。
用了這招,還是只要申請一個公網(wǎng) IP,分配給內(nèi)網(wǎng)的網(wǎng)關(網(wǎng)關有兩個網(wǎng)卡,一個接內(nèi)網(wǎng),一個接公網(wǎng))。然后在內(nèi)網(wǎng)的網(wǎng)關配置 NAT 功能,自動就可以讓內(nèi)網(wǎng)的每臺電腦訪問外網(wǎng)。
在這篇帖子,我介紹了虛擬機的幾種“網(wǎng)卡模式”,其中有一種模式叫做【NAT 模式】,就是指這個玩意兒。
采用了 NAT 技術之后,可能會對某些應用軟件(尤其是 P2P 類型的)造成兼容性問題,于是又發(fā)明了一些“NAT 穿透技術”(NAT traversal)。這類技術有好幾種,如果有空的話,我會單獨寫教程介紹。

其它解決方法
關于“IPv4 地址空間耗盡”,解決方法肯定不止上面這幾招。限于篇幅,就此打住。更多的討論參見XX百科的“這個鏈接”。

◇網(wǎng)絡層相關的【網(wǎng)絡設備】

路由器(router)
(前面章節(jié)聊“路由原理”的時候,已經(jīng)介紹過它;這里就不再浪費口水啦)

3層交換機(Layer 3 switching)
“3層交換機”是在“2層交換機”的基礎上,增加了對網(wǎng)絡層的處理。因此,它可以做到類似路由器的效果——在幾個子網(wǎng)之間轉發(fā)數(shù)據(jù)。
與路由器的差別在于——“3層交換機”鏈接的幾個子網(wǎng)是【同種】網(wǎng)絡;而路由器可以連接【異種】網(wǎng)絡。
從上面這句話看,“3層交換機”的能力顯然不如“路由器”。既然已經(jīng)有“路由器”,為啥還要發(fā)明“3層交換機”捏?這就要說到【單臂路由器】的弊端。
對于企業(yè)內(nèi)網(wǎng)的“2層交換機”,通常都支持 VLAN 功能。通俗地說:可以在交換機中劃分多個【虛擬子網(wǎng)】。其實這些子網(wǎng)的中所有的電腦,都還是接入這臺交換機,只不過這些子網(wǎng)配置了不同的網(wǎng)絡地址。對于同一個 VLAN 內(nèi)部的通訊,“2層交換機”自己就可以搞定(只需要用到2層協(xié)議);但對于【跨】VLAN 主機之間的通訊,“2層交換機”就沒戲啦(它沒有路由功能)。因此,就必須在它旁邊外加一個路由器,形成如下拓撲結構。在這個拓撲中,路由器只與單個設備(2層交換機)相連,所以稱之為“單臂”。
請注意:如下示意圖只畫了兩臺電腦,位于兩個 VLAN。實際上可能有很多個 VLAN,每個里面有幾十臺電腦。于是,交換機與路由器之間的傳輸通道就會成為瓶頸——【跨】VLAN 的任意兩臺電腦通訊,數(shù)據(jù)包都要到路由器那里兜一圈。為了消除這種瓶頸,才發(fā)明了“3層交換機”——把路由功能直接集成到交換機內(nèi)部。

無線熱點(Wireless Access Point)
“無線熱點”通常用來提供無線接入,使得某個【無線】設備能接入到某個【有線】網(wǎng)絡中。一般來說,熱點都內(nèi)置了路由功能,那么它就是“無線路由器”,對應到“3層”(網(wǎng)絡層)。反之,如果沒有路由功能,它就是“網(wǎng)橋”,屬于“2層”(鏈路層)。

◇網(wǎng)絡層相關的【軟件工具】

ping
這個命令,很多人應該都知道。早在 Win9x 就有這個命令了。它使用(網(wǎng)絡層的)ICMP 協(xié)議來測試某個遠程主機是否可達。
提醒一下:
如果 ping 命令顯示某個 IP 地址不可達,有很多種情況。比如說:

這個 IP 地址對應的主機已經(jīng)關機
這個 IP 地址對應的主機已經(jīng)斷線
這個 IP 地址對應的主機拒絕響應 ICMP 協(xié)議
從你本機到這個 IP 地址之間,有某個防火墻攔截了 ICMP 協(xié)議
……

traceroute
這是一個通用的工具,用來測試路由。很早以前的 Windows 就已經(jīng)內(nèi)置了它,命令是 tracert。在 POSIX(Linux&UNIX)上通常叫 traceroute
你可以用這個命令,測試你本機與互聯(lián)網(wǎng)另一臺主機之間的路由(也就是:從你本機到對方主機,要經(jīng)過哪些路由器)

★傳輸層:概述

◇傳輸層的必要性

屏蔽“有連接 or 無連接”的差異
(上一個章節(jié)提到)網(wǎng)絡層本身已經(jīng)屏蔽了【異種網(wǎng)絡】的差異(比如“以太網(wǎng)、ATM、幀中繼”之間的差異),而且網(wǎng)絡層也屏蔽了路由的細節(jié)。但網(wǎng)絡層本身還有一個差異,也就是網(wǎng)絡層的兩種交換技術:電路交換(有連接) VS 分組交換(無連接)。
前面章節(jié)也提到了:上述兩種交換技術各有很多支持者,并分裂為兩大陣營。當年設計 OSI 模型的時候,為了保持中立性與通用性,并沒有強制規(guī)定“網(wǎng)絡層”必須采用何種交換機制。
對于開發(fā)網(wǎng)絡軟件的程序員來說,當然不想操心“網(wǎng)絡層用的是哪一種交換機制”。因此,需要對網(wǎng)絡層的上述差異再加一個抽象層(也就是“傳輸層”)。

從“主機”到“進程”
前面介紹的“網(wǎng)絡層”,其設計是面向主機(電腦)。“網(wǎng)絡層地址”也就是某個主機的地址。
而“傳輸層”是面向【進程】滴!因為傳輸層要提供給【網(wǎng)絡軟件】使用,而網(wǎng)絡軟件打交道的對象是【另一個網(wǎng)絡軟件】。因此,傳輸層必須在“網(wǎng)絡層地址”的基礎上,再引入某種新的標識,用來區(qū)分同一臺主機上的不同【進程】。

◇傳輸層的特殊性

在 OSI 7層模型中,傳輸層正好居中。這是一個很特殊的位置。
OSI 模型最下面3層,與【網(wǎng)絡設備】比較密切。這里面所說的“網(wǎng)絡設備”,既包括那些獨立的主機(比如“路由器、交換機、等”),也包括電腦上的硬件(比如“網(wǎng)卡”)。
OSI 模型最上面3層,與【網(wǎng)絡軟件】比較密切(或者說,與“用戶的業(yè)務邏輯”比較密切)。
而中間的傳輸層,正好是承上啟下。對于開發(fā)應用軟件的程序猿/程序媛,“傳輸層”是他們能感知的最低一層。

◇傳輸層的【端口】

剛才談“傳輸層的必要性”,提到說——“網(wǎng)絡層地址”只能標識【主機】,而傳輸層必須要能標識【進程】。為了達到這個目的,于是就引入了“傳輸層端口”這個概念(為了打字省力,后續(xù)討論簡稱為“端口”)。
在 OSI 模型中,“端口”的官方稱呼是“傳輸服務訪問點”(洋文縮寫 TSAP)。但是作為程序員,我已經(jīng)習慣于“端口”這個稱呼。后續(xù)介紹依然用“端口”一詞。
當程序員使用傳輸層提供的 API 開發(fā)網(wǎng)絡軟件時,通常把“端口”與“網(wǎng)絡地址”一起使用(構成“二元組”),就可以定位到某個主機上的某個進程。

★傳輸層:具體實例

◇傳輸層的【協(xié)議】

為了讓程序員可以更爽地使用傳輸層來開發(fā)網(wǎng)絡軟件,傳輸層既要提供“有連接”的風格,也要提供“無連接”的風格。關于這兩種風格的對比,前面已經(jīng)聊過,這里不再浪費口水。
具體到“互聯(lián)網(wǎng)協(xié)議族”,有兩個主要的傳輸層實現(xiàn),分別是 TCP & UDP(前者是“有連接”,后者是“無連接”)。
除了 TCP & UDP,“互聯(lián)網(wǎng)協(xié)議族”還提供了其它一些傳輸層協(xié)議。因為比較冷門,我就不介紹啦。

◇傳輸層的【協(xié)議實現(xiàn)】

對于電腦主機(含移動設備),傳輸層的協(xié)議實現(xiàn)通常包含在操作系統(tǒng)自帶的網(wǎng)絡模塊中(也就是“操作系統(tǒng)協(xié)議?!保?。具體參見如下示意圖。
另外,還有一些專門的【4層】網(wǎng)絡設備,也提供傳輸層的功能(參見后續(xù)的小節(jié))。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(OSI 模型中,不同層次的協(xié)議實現(xiàn))

◇套接字(socket API)

前面說了:傳輸層是面向程序員(讓他們可以更方便地開發(fā)網(wǎng)絡軟件)。因此,就需要提供一些封裝傳輸層的【庫】(API)。程序員只需要調(diào)用這些【庫】,就可以使用傳輸層的協(xié)議進行通訊啦。
影響力最大的傳輸層封裝庫,當然是 socket API。它來自加州大學伯克利分校。
在互聯(lián)網(wǎng)誕生初期,伯克利分校開發(fā)了一個 UNIX 操作系統(tǒng)的的變種,叫做“伯克利 UNIX 發(fā)行版”(BSD Unix),也就是如今 BSD 操作系統(tǒng)的前身。伯克利發(fā)行版內(nèi)置了一套用來進行網(wǎng)絡編程的 API,當時叫做“伯克利套接字”(Berkeley sockets)。由于這套 API 用起來很方便,很多其它的 UNIX 變種也移植了這套 API,于是就逐漸成了業(yè)界的事實標準。到了上世紀90年代,Windows & Linux 也都提供了這套 API。
由于大部分讀者不是程序員,“套接字”這個話題就到此為止。如果你是個程序員,并且對網(wǎng)絡編程感興趣,可以參考我的電子書清單,其中有一個分類目錄是【IT 類 / 軟件開發(fā) / 網(wǎng)絡相關】。

◇傳輸層相關的【網(wǎng)絡設備】

4層交換機(Layer 4 switching)
前面已經(jīng)介紹了“3層交換機”,“4層交換機”是其進一步的改良,可以識別傳輸層的協(xié)議,獲取 TCP or UDP 的端口號。
有了這個能力,網(wǎng)管就可以在這種交換機上配置一些管理策略。比如說:(根據(jù)傳輸層端口號)過濾掉某種流量,或者對某種流量設置轉發(fā)的優(yōu)先級。

狀態(tài)防火墻(stateful firewall)
網(wǎng)絡防火墻分好幾種,大部分屬于這種。它能完全處理 TCP 協(xié)議的狀態(tài),顯然它屬于“4層”(傳輸層)。

◇傳輸層相關的【軟件工具】

netcat 家族——傳輸層的“瑞士軍刀”
很多與 TCP/UDP 相關的事情,都可以用 netcat 搞定。另外,netcat 還有很多衍生品(衍生的開源項目),構成一個豐富的 netcat 家族。在上述教程也有介紹。

netstat & ss
Windows 和 POSIX(Linux&UNIX)都有一個 netstat 命令,可以查看當前系統(tǒng)的 TCP/UDP 狀態(tài)(包括當前系統(tǒng)開啟了哪些監(jiān)聽端口)。
另外,Linux 上還有一個 ss 命令,功能更強(但這個命令在 Windows 上默認沒有)

nmap
這是最著名的開源的掃描器,可以掃描遠程主機監(jiān)聽了哪些傳輸層端口(注:前面提到的“netcat 家族”也可以干這事兒)
nmap 的功能很強,“端口掃描”只是其功能之一。

★業(yè)務層(OSI 上三層):概述

一不小心,這篇教程已經(jīng)寫了這么長。為了照顧那些有“閱讀障礙”的讀者,我要稍微控制一下篇幅,就把 OSI 的【上三層】合在一起討論。
前面的章節(jié)說過:【上三層】更接近于“網(wǎng)絡軟件”,對應的是應用軟件的業(yè)務邏輯,因此我統(tǒng)稱為“業(yè)務層”。
注:有些書(比如《計算機網(wǎng)絡》)會把 OSI 的上三層統(tǒng)稱為“應用層”。由于 OSI 模型中本來就有一個“應用層”,我認為這樣容易搞混(尤其不利于技術菜鳥),所以另外起了一個“業(yè)務層”的名稱。

◇業(yè)務層的必要性

業(yè)務層顯然是必要滴。因為傳輸層位于操作系統(tǒng),它不可能去了解網(wǎng)絡軟件的業(yè)務邏輯。為了讓網(wǎng)絡軟件能夠相互通訊,肯定要在傳輸層之上再定義更高層的協(xié)議。
問題在于:網(wǎng)絡軟件千奇百怪,其業(yè)務邏輯各不相同,因此,“業(yè)務層如何設計”,【無】一定之規(guī)。有些軟件只用一個協(xié)議來搞定所有的業(yè)務邏輯(只有一層);有些軟件會參考 OSI,把業(yè)務邏輯的協(xié)議分為三層;還有些軟件可能會分出更多的層次。
再強調(diào)一下:業(yè)務層的協(xié)議如何分層,完全看具體的業(yè)務邏輯,不要生搬硬套任何現(xiàn)有的參考模型。

◇會話層 & 表示層 & 應用層

對于大部分讀者來說,【沒必要】花時間去了解 OSI 最上面三層之間的區(qū)別。你只需把最上面三層視作【一坨】——他們都是與網(wǎng)絡軟件的業(yè)務邏輯密切相關滴。
那么,哪些人需要詳細了解“這三層的差異”捏?
如果你是個程序員,并且你正好是開發(fā)【網(wǎng)絡】軟件,我建議你了解一下 OSI 模型的最上面三層,有助于你更深刻地思考某些網(wǎng)絡協(xié)議的設計。所謂的“更深刻”指的是:你不能光停留在 WHAT 層面,要提升到 HOW 甚至 WHY 層面(參見《學習技術的三部曲:WHAT、HOW、WHY》)

★業(yè)務層(OSI 上三層):具體實例

◇業(yè)務層的【協(xié)議】

業(yè)務層的協(xié)議非常多。即使光把各種協(xié)議的名稱列出來,也很費勁。所以我就偷懶一下,只點評幾個特別重要的協(xié)議。

HTTP 協(xié)議
如果讓我評選最重要的業(yè)務層協(xié)議,我首推 HTTP 協(xié)議?;ヂ?lián)網(wǎng)的普及推動了 Web 的普及,而 Web 的普及使得 HTTP 成為信息時代的重要支柱。當你上網(wǎng)的時候,你看到的網(wǎng)頁(HTML 頁面)就是通過 HTTP 協(xié)議傳輸?shù)侥愕臑g覽器上。
如今 HTTP 已經(jīng)不僅僅用來展示網(wǎng)頁,還有很多業(yè)務層的協(xié)議是建立在 HTTP 協(xié)議之上。比如說:如果你用 RSS 訂閱我的WebSite,RSS 閱讀器需要調(diào)用 blogspot 博客平臺提供的 RSS 接口,這些 RSS 接口就是基于 HTTP 協(xié)議傳輸?shù)巍?br />考慮到本文的篇幅,我不可能在這里細聊 HTTP 協(xié)議的規(guī)格,有興趣的同學可以去看《HTTP 權威指南》這本書。

SSL/TLS 協(xié)議
最早的 HTTP 協(xié)議是【明文】滴;為了強化安全性,后來又設計了 SSL 協(xié)議,用來【加密】HTTP 流量;再后來,SSL 升級為 TLS(這倆是同義詞)。如今經(jīng)常看到的 HTTPS 相當于“HTTP over TLS”。
SSL/TLS 設計得比較優(yōu)雅(很靈活),使得其它業(yè)務層的協(xié)議可以很方便地架構在 SSL/TLS 之上。這樣的好處是:其它協(xié)議就不用自己再設計一套加密機制&認證機制。
SSL/TLS 對于安全性很重要,因此我專門寫了一個系列教程(如下),詳細介紹該協(xié)議的技術細節(jié)。
《掃盲 HTTPS 和 SSL/TLS 協(xié)議》(系列)

域名相關的協(xié)議(DNS 及其它)
域名相關的協(xié)議,也很重要。因為域名系統(tǒng)是整個互聯(lián)網(wǎng)的基礎設施。最早的域名查詢協(xié)議是“DNS 協(xié)議”,由于這個協(xié)議【沒有】加密,導致了一些安全隱患。比如 GFW 就利用 DNS 的這個弱點,搞“域名污染/域名投毒”。因此,后來又設計了一系列新的域名協(xié)議,引入了加密的機制。
關于這些協(xié)議的掃盲教程,可以參考如下幾篇博文:
《掃盲 DNS 原理,兼談“域名劫持”和“域名欺騙/域名污染”》
《對比4種強化域名安全的協(xié)議——DNSSEC,DNSCrypt,DNS over TLS,DNS over HTTPS》

◇業(yè)務層相關的【網(wǎng)絡設備】

應用層防火墻(application firewall)
前面提到了:大多數(shù)網(wǎng)絡防火墻處于4層(狀態(tài)防火墻),另外還有少數(shù)處于7層,也就是“應用層防火墻”(有時候也稱之為“7層防火墻”)。
一般來說,這類防火墻具備了【深度包檢測】(deep packet inspection,簡稱 DPI)的能力,可以分析應用層協(xié)議的【內(nèi)容】。
簡單說一下“深度包檢測”:
如果某個網(wǎng)絡設備,僅僅分析“應用層協(xié)議”本身,它還【不夠格】稱之為 DPI。為了做到 DPI,還要能理解應用層協(xié)議所承載的【內(nèi)容】。
比如說:某人通過【明文】的 HTTP 協(xié)議從網(wǎng)上下載了一個 zip 壓縮包。對于這個下載行為,那些做得好的 DPI 設備不光能識別出“HTTP 協(xié)議的內(nèi)容是 ZIP 壓縮包”,而且還能從 ZIP 壓縮包中提取出里面的文件。

入侵檢測(intrusion detection system)
一般來說,“入侵檢測”如果不加定語,通常指“【網(wǎng)絡】入侵檢測”(洋文叫 NIDS);另外還有一種“【主機】入侵檢測”(洋文叫 HIDS)。HIDS 與本文無關。
“入侵檢測”是一種網(wǎng)絡安全設備,它通過嗅探(sniffer)的方式抓取網(wǎng)上的數(shù)據(jù)包,然后進行分析,嘗試發(fā)現(xiàn)網(wǎng)絡中是否存在黑客/駭客的入侵的行為。故名“入侵檢測”。
由于 IDS 需要理解【應用層】(7層)的內(nèi)容,因此它與“應用層防火墻”有個共同點,需要具備某種程度的 DPI(深度包檢測)能力。它倆的一大差異是【部署方式】。
考慮到很多讀者是 IT 外行,簡單說一下“旁路部署”——
如果你學過中學物理,應該知道電路有“串聯(lián) & 并聯(lián)”。所謂的“旁路部署”類似于電路中的【并聯(lián)】。通俗地說:IDS 是【并聯(lián)】部署,防火墻是【串聯(lián)】部署。

GFW(Great Firewall)

由于“Great Firewall”中有“Firewall”字樣,很多【誤以為】GFW 是防火墻,其實不然!GFW 本質(zhì)上就是 IDS——其部署方式類似于 IDS(旁路部署),其工作方式有很大一部分也類似于 IDS(當然啦,GFW 的功能比 IDS 更多)。

★雜項

有些概念,并不屬于某個特定的層次,單獨放到這個章節(jié)。

◇VPN(virtual private network)

同學們使用 VPN,一多半是為了學習。其實 VPN 的本意(如其名稱所示)是為了提供某種虛擬化的私有的網(wǎng)絡,讓身處異地的多個人,可以用 VPN 構建出一個虛擬的內(nèi)網(wǎng),從而能在這個內(nèi)網(wǎng)中協(xié)同工作。
VPN 的類型很多,使用的技術也各不相同,因此 VPN 對應的 OSI 層次很寬(“1層”到“6層”)。我到XX百科剽竊了如下這張圖,讓你見識一下 VPN 的多樣性。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(名目繁多的 VPN,分類示意圖)

◇代理(proxy)

那些經(jīng)?!睂W習”的同學,對“代理”應該都很熟悉了?!按怼迸c VPN 類似,一開始并不是用來學習滴,“學習”只是這倆的副業(yè)。

代理服務器(proxy server)
“代理服務器”部署在“客戶端 & 服務端”之間,起到某種“中介”的作用?!按矸掌鳌钡念愋陀泻芏啵傻氖虑楦鞑幌嗤?。

網(wǎng)絡設備具體有哪些圖片(網(wǎng)絡設備具體有哪些服務器)

(“代理服務器”的簡單示意圖)

代理客戶端(proxy client)
早期的代理服務器,【不】需要“代理客戶端”。因為早期的“代理服務器”支持的是【標準協(xié)議】。比如“HTTP proxy server”支持的是標準 HTTP協(xié)議,而用戶的電腦上,已經(jīng)有瀏覽器(原生支持 HTTP 協(xié)議)。這種情況下,自然不需要再有“代理客戶端”。
后來,為了滿足某些特殊需求(比如”學習”),“代理服務器”必須使用某種特殊的(非標準的)協(xié)議。因此,就必須在用戶的環(huán)境中安裝“代理客戶端”。對于學習來說,你裝的學習軟件,相當于“代理客戶端”。

代理的層次
“代理”也分不同的層次。比較常見的有如下幾種:

TCP 代理(TCP 端口轉發(fā))——4層(傳輸層)
SOCKS 代理——5層(會話層)
HTTP 代理——7層(應用層)
……

◇網(wǎng)關(gateway)

前面的某些章節(jié),已經(jīng)稍微提及了“網(wǎng)關”這個概念,但還沒有具體介紹它。
嚴格來講,“網(wǎng)關”是一個邏輯概念,【不要】把它當成具體的網(wǎng)絡設備。充當“網(wǎng)關”的東東,可能是:路由器 or XX層交換機 or XX層防火墻 or 代理服務器 ……
“網(wǎng)關”也分不同的層次。如果不加定語,通常指的是“3層網(wǎng)關”(網(wǎng)絡層網(wǎng)關)。列幾種比較常見的,供參考:

路由器充當網(wǎng)關——3層(網(wǎng)絡層)
3層交換機充當網(wǎng)關——3層(網(wǎng)絡層)
4層交換機充當網(wǎng)關——4層(傳輸層)
應用層防火墻充當網(wǎng)關——7層(應用層)
代理服務器充當網(wǎng)關——(取決于代理的層次,參見前一個小節(jié))
……

◇隧道協(xié)議(tunneling protocol)

所謂的“隧道協(xié)議”,通俗地說就是:用某種協(xié)議包裹另一種協(xié)議,以滿足某些特殊的需求。
看到這里,估計某些同學會感到納悶——因為我在本文開頭介紹“協(xié)議?!钡臅r候提到說:相鄰的兩層協(xié)議,下層會包裹上層?!八淼绤f(xié)議的包裹”與“上下層協(xié)議的包裹”,差別在哪捏?
我來解釋一下:
“隧道協(xié)議”可以做到更靈活的包裹——既可以對層次相隔很遠的協(xié)議進行包裹,也可以對同一層的協(xié)議進行包裹,甚至可以“倒掛”——所謂的“倒掛”就是讓【上】層反過來包裹【下】層。
舉例:
《如何讓【不支持】代理的網(wǎng)絡軟件,通過代理進行聯(lián)網(wǎng)(不同平臺的 N 種方法)》,其中介紹了“HTTP 代理”的兩種模式:“轉發(fā)模式 & 隧道模式”。對于“HTTP 代理”的隧道模式,可以實現(xiàn)【TCP over HTTP】(把 TCP 協(xié)議打包到 HTTP 協(xié)議內(nèi)部),這就是剛才所說的“倒掛”。
另外,VPN 小節(jié)的那張圖中,有些類型的 VPN 就是用“隧道協(xié)議”的機制實現(xiàn)。

如果你覺得有些【網(wǎng)絡相關】的概念,不太明白,歡迎留言,進行反饋。我會根據(jù)大伙兒的反饋,再對這篇教程進行補充。

本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 sumchina520@foxmail.com 舉報,一經(jīng)查實,本站將立刻刪除。
如若轉載,請注明出處:http://www.qjsdgw.cn/5656.html