網(wǎng)絡(luò)雜談,你學(xué)會(huì)了什么?
互聯(lián)網(wǎng)是什么相信不用在這里贅述,大家平時(shí)“網(wǎng)上沖浪”都離不開它。本篇文章中我們就來翻譯翻譯,什么 ** 的叫 ** 的網(wǎng)絡(luò)。
網(wǎng)絡(luò)的概念
對(duì)于網(wǎng)絡(luò),我們可能聽過非常多的名詞,比如因特網(wǎng)、萬維網(wǎng)、互聯(lián)網(wǎng)。三者的關(guān)系其實(shí)為:
互聯(lián)網(wǎng) > 因特網(wǎng) > 萬維網(wǎng)
那么一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)看起來會(huì)是這樣:
一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)會(huì)由多個(gè)節(jié)點(diǎn)(AKA 計(jì)算機(jī))和連接他們的鏈路組成。就好像你家里有 3 臺(tái)電腦,然后它們都相互連接,這樣你家里的 3 臺(tái)電腦就組成了一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)。而所謂的互聯(lián)網(wǎng),就是網(wǎng)絡(luò)的網(wǎng)絡(luò),如下所示:
而不同的網(wǎng)絡(luò)之間可以通過路由器來相互連接,就形成了覆蓋范圍更大的互聯(lián)網(wǎng)。所以總的來說,網(wǎng)絡(luò)連接了許多的計(jì)算機(jī),而因特網(wǎng)將許多網(wǎng)絡(luò)連接到了一起。因此,因特網(wǎng)也是目前全球最大的計(jì)算機(jī)網(wǎng)絡(luò)。
因特網(wǎng)的發(fā)展
第一階段
互聯(lián)網(wǎng)的起源帶有一點(diǎn)戰(zhàn)爭(zhēng)的背景。它起源于 1960s,當(dāng)時(shí)正值冷戰(zhàn),美國(guó)國(guó)防部開發(fā)了一個(gè)分布式的、預(yù)期能夠抵御核攻擊的通訊網(wǎng)絡(luò),而這就是世界上第一個(gè)互聯(lián)網(wǎng)的原型 — ARPANET。
在 1983 年,TCP/IP 協(xié)議成為了 ARPANET 上的標(biāo)準(zhǔn)協(xié)議,只要是使用了 TCP/IP 協(xié)議,計(jì)算機(jī)之間都能夠相互通信。
第二階段
1985 年,美國(guó)國(guó)家科學(xué)基金會(huì)圍繞了 6 個(gè)大型計(jì)算機(jī)中心建設(shè)計(jì)算機(jī)網(wǎng)絡(luò),這一階段的特點(diǎn)是形成了三級(jí)結(jié)構(gòu)的因特網(wǎng),分別是:主干網(wǎng)、地區(qū)網(wǎng)、校園網(wǎng)(企業(yè)網(wǎng))。這個(gè)三級(jí)結(jié)構(gòu)的網(wǎng)絡(luò)覆蓋了當(dāng)時(shí)全美主要的大學(xué)和研究所。后續(xù),越來越多的企業(yè)接入了因特網(wǎng),導(dǎo)致了網(wǎng)絡(luò)上通信量激增,由于當(dāng)時(shí)的因特網(wǎng)是由政府維護(hù)的,其容量已經(jīng)滿足不了當(dāng)時(shí)的需求了,所以美國(guó)政府決定將主干網(wǎng)轉(zhuǎn)交給私人企業(yè)經(jīng)營(yíng),并開始收費(fèi)。
第三階段
隨著主干網(wǎng)開始由私人企業(yè)經(jīng)營(yíng),該階段形成了多層次 ISP 結(jié)構(gòu)的因特網(wǎng)。什么叫 ISP?其實(shí)也就是互聯(lián)網(wǎng)(因特網(wǎng))服務(wù)的提供商。給你舉個(gè)例子你就知道了,比如咱們國(guó)內(nèi)的三巨頭:中國(guó)聯(lián)通、電信、移動(dòng),他們就是典型的 ISP。
ISP 其實(shí)也是一層代理,因?yàn)樗麄円彩菑囊蛱鼐W(wǎng)管理機(jī)構(gòu)去申請(qǐng)的一堆 IP 地址,然后我們?nèi)?ISP 那辦理寬帶,支付費(fèi)用,然后我們就能夠在使用期間,用這個(gè) IP 地址上網(wǎng)“沖浪”。
因特網(wǎng)中的協(xié)議
經(jīng)過了這么多年的發(fā)展,互聯(lián)網(wǎng)已經(jīng)演變成了一個(gè)橫跨全球、極其復(fù)雜的網(wǎng)絡(luò)。這就好像我們每個(gè)城市的內(nèi)部是通過各種道路相互連接的,而城市與城市之間也是相互連接的,而所有這些城市相互連接就組成了這個(gè)大型的“國(guó)家互聯(lián)網(wǎng)”。連接到互聯(lián)網(wǎng)的機(jī)器可以相互通信,而在“國(guó)家互聯(lián)網(wǎng)”中的城市也可以相互“通信”。
你說包裹有可能在運(yùn)輸途中丟失嗎?當(dāng)然有可能,這樣的例子還不少。同理,我們發(fā)送出去的數(shù)據(jù)包也有可能丟失。
所以為了保證數(shù)據(jù)包的準(zhǔn)確送達(dá),互聯(lián)網(wǎng)使用了很多種協(xié)議。例如我們非常熟悉的 TCP/IP。TCP 全稱是 Transmission Control Protocol,IP 全稱是 Internet Protocol。
它們分工明確,IP 負(fù)責(zé)數(shù)據(jù)包的路由,讓它從一個(gè)“中轉(zhuǎn)站”跳到下一個(gè)“中轉(zhuǎn)站”,而 TCP 則是確保包裹可靠、準(zhǔn)確、有序的到達(dá)“中轉(zhuǎn)站”。
當(dāng)然,在互聯(lián)網(wǎng)這個(gè)巨大的概念里,TCP/IP 協(xié)議并不是全部,還有我們非常熟悉的 DNS(Domain Name System)和 HTTP(Hypertext Transfer Protocol)。
不太熟悉 DNS 及其底層原理的可以看看我之前寫的這篇文章你的域名是如何變成 IP 地址的?
還有像 SSL 和 TLS 這樣的網(wǎng)絡(luò)安全加密協(xié)議,讓我們的數(shù)據(jù)能夠安全的在互聯(lián)網(wǎng)上傳播。當(dāng)然,現(xiàn)在 TLS 已經(jīng)將 SSL 給替代了,因?yàn)?TLS 有著更高的安全性和更強(qiáng)的認(rèn)證機(jī)制。
在互聯(lián)網(wǎng)的通信和數(shù)據(jù)交換流程中,協(xié)議扮演了一個(gè)非常關(guān)鍵的角色。這就好像人與人之間要進(jìn)行溝通,語言是非常重要的一樣。語言不通,溝通起來是非常非常困難的。通信的前提也是雙方需要使用一樣的協(xié)議。
而協(xié)議其實(shí)就是一堆的規(guī)則,這些規(guī)則規(guī)定了信息交換的細(xì)節(jié)。就比如咱們的老朋友三次握手、四次揮手就屬于 TCP/IP 協(xié)議的一部分。而規(guī)定使用這些協(xié)議有什么好處?
答案當(dāng)然是標(biāo)準(zhǔn)化,用標(biāo)準(zhǔn)化來屏蔽不通制造商或者不通系統(tǒng)之間的差異。舉個(gè)例子,假設(shè)不同的制造商的制造出來的手機(jī)使用了不同的協(xié)議,那么某個(gè) APP 在制造商 A 上能用,在制造商 B 上又不能用,又或者不同的操作系統(tǒng)之間不能相互通信,這類問題以現(xiàn)在的眼光來看肯定是不能接受的。
再舉個(gè)標(biāo)準(zhǔn)化協(xié)議的例子,像我們用的 Type-C 這種接口的充電線就是一種標(biāo)準(zhǔn),不管是哪個(gè)廠家生產(chǎn)的,只要遵循了這個(gè)標(biāo)準(zhǔn),消費(fèi)者就能夠正常使用。再舉一個(gè)協(xié)議不同的例子,不同的國(guó)家使用的充電器的標(biāo)準(zhǔn)不同,不同的標(biāo)準(zhǔn)之間要想充電則需要使用轉(zhuǎn)接頭,及其的不方便。
網(wǎng)絡(luò)分層模型
OSI 七層模型
相信大家曾經(jīng)都被問過一個(gè)問題:“請(qǐng)簡(jiǎn)單描述一下 OSI 七層模型”。這個(gè)網(wǎng)絡(luò)模型是啥意思?怎么來的?或者說,為什么需要網(wǎng)絡(luò)模型這個(gè)玩意兒?
這是因?yàn)?70 年代,網(wǎng)絡(luò)快速發(fā)展演進(jìn)出了不同網(wǎng)絡(luò)體系結(jié)構(gòu),而由于全球的經(jīng)濟(jì)發(fā)展,迫切的需要使在不同的網(wǎng)絡(luò)結(jié)構(gòu)體系結(jié)構(gòu)中的用戶相互通信,交換信息。為了達(dá)成這一目的,國(guó)際標(biāo)準(zhǔn)化組織在 1977 年成立了專門的機(jī)構(gòu)來研究這個(gè)問題。
而他們的研究成果就是著名的 OSI 模型。在 OSI 模型中總共包含了 7 層(到這里是不是很多人就條件反射的開始全文背誦了),從下至上分別是:物理層、數(shù)據(jù)鏈路層、傳輸層、網(wǎng)絡(luò)層、會(huì)話層、表示層、應(yīng)用層。
但,OSI 模型的設(shè)計(jì),理想很豐滿,現(xiàn)實(shí)很骨感。OSI 僅僅取得了理論上的成果,這些專家在設(shè)計(jì)的時(shí)候,并沒有太考慮商業(yè)化,并且,OSI 協(xié)議設(shè)計(jì)過于復(fù)雜,復(fù)雜則導(dǎo)致其運(yùn)行效率低下,并且 OSI 的層次中有重復(fù)的層次。
所以用一句話來總結(jié) OSI 七層模型就是:既復(fù)雜又不實(shí)用。
TCP/IP 體系
相對(duì)于 OSI 的不實(shí)用,TCP/IP 是一個(gè)四層的體系結(jié)構(gòu),分別是:應(yīng)用層、運(yùn)輸層、網(wǎng)際層、網(wǎng)絡(luò)接口層,和 OSI 的對(duì)比如下圖所示:
消息如何發(fā)送
簡(jiǎn)單的了解了一些背景之后,我們來看看網(wǎng)絡(luò)中的消息是如何發(fā)送的。那在一般的認(rèn)知中,所謂的通信是啥樣的呢?可能看起來是這樣:
假設(shè)現(xiàn)在有 A、B 兩臺(tái)機(jī)器,其 IP 地址分別為 1.2.3.4 和 4.3.2.1,它們的 IP 地址都不相同,并且需要通過上圖中的“網(wǎng)絡(luò)”進(jìn)行通信。那如果 A 要發(fā)送消息給 B,這個(gè)消息該如何“傳輸”到 B 呢?當(dāng)然是通過連接到 B 機(jī)器上的網(wǎng)線(假設(shè)是有線),我們知道,線路中傳輸?shù)氖请娦盘?hào),這套轉(zhuǎn)換的流程當(dāng)然不需要我們手動(dòng)的實(shí)現(xiàn),這些功能都內(nèi)置在了計(jì)算機(jī)中,而上面說的轉(zhuǎn)化,則是由協(xié)議棧來完成的,協(xié)議棧的大致工作流程如下:
這樣講有點(diǎn)抽象,比如協(xié)議棧到底是啥,它是通過什么方式來處理的數(shù)據(jù)的,都不知道。關(guān)于協(xié)議棧相關(guān)的概念,以及數(shù)據(jù)包發(fā)送、接收的大致流程,在我之前寫的 數(shù)據(jù)包從發(fā)送到接收,都經(jīng)歷了什么 這篇文章里都有詳細(xì)的介紹,在此不再贅述。
這里我們拿 TCP/IP 協(xié)議棧來舉個(gè)例子,它分為 4 層,大致長(zhǎng)這樣:
- 應(yīng)用層,就比如你看這篇文章所使用到的 HTTP 協(xié)議
- 傳輸層,TCP 協(xié)議
- 網(wǎng)絡(luò)層,IP 協(xié)議
- 硬件層,使用的是以太網(wǎng)協(xié)議,將二進(jìn)制的數(shù)據(jù)轉(zhuǎn)換成電信號(hào),以及相互轉(zhuǎn)換,就比如網(wǎng)卡
那結(jié)合上面這個(gè)圖,就會(huì)變成這樣:
這個(gè)流程跟上面舉過的網(wǎng)購、快遞包裹的例子非常類似,我們下單了東西,賣家會(huì)將東西層層的包裝,而這個(gè)“打包”的過程跟協(xié)議棧對(duì)數(shù)據(jù)包的處理非常像,從上至下,將數(shù)據(jù)「Hi, there」一步步的處理。而對(duì)于我們收快遞的人來說,我們會(huì)一點(diǎn)點(diǎn)從外至里的打開這個(gè)包裹,最終拿到我們購買的貨物。而對(duì)于 4.3.2.1 的協(xié)議棧來說,一步步的將電信號(hào)還原成「Hi, there」也是同樣的道理。
而我們將這個(gè)打包的細(xì)節(jié)添加到上圖的話,看起來就會(huì)是這樣,以 HTTP 協(xié)議來說:
可以看到,每一層的包都是由 XX 頭和 XX 數(shù)據(jù)包組成的,通過協(xié)議棧的“層層加碼”,通信所需要的關(guān)鍵的信息也會(huì)被打包進(jìn)去:
- 傳輸層,會(huì)將 HTTP 報(bào)文添加到 TCP 的數(shù)據(jù)包中,并在 TCP 頭中添加發(fā)送方、接收方的端口號(hào)
- 網(wǎng)絡(luò)層,會(huì)將上一層的 TCP 包添加到 IP 數(shù)據(jù)包中,并且在 IP 頭中添加發(fā)送方、接收方的 IP 地址
- 硬件層,會(huì)將 IP 包添加到以太網(wǎng)數(shù)據(jù)包中,并在以太網(wǎng)頭中添加發(fā)送方、接收方的 Mac 地址。
那么問題來了,我們現(xiàn)在只知道中間有個(gè)“網(wǎng)絡(luò)”,那從 1.2.3.4 機(jī)器 A 中出發(fā)的數(shù)據(jù)包,是如何找到 4.3.2.1 B 這臺(tái)機(jī)器的呢?A 從一開始就知道該走哪條線路
1.2.3.4 發(fā)送的數(shù)據(jù),會(huì)經(jīng)過協(xié)議棧從上至下的處理,變成一個(gè)一個(gè)的數(shù)據(jù)包,然后 4.3.2.1 收到數(shù)據(jù)包之后,也會(huì)經(jīng)過協(xié)議棧從下至上的處理,解析出原始的消息。
參考
- How Does the Internet Work?
- 《計(jì)算機(jī)網(wǎng)絡(luò)》