這個部分算是網路的基礎,關於網路之間是如何傳遞資料的,背後的邏輯,我覺得很重要所以花了一些時間去研究,主要在這邊整理我理解的結果。

研究網頁前端的過程中,讓我發現一些盲點的事情,像是當我們輸入網址的時候按下了 enter 後,究竟是發生了什麼事情?

當時我的腦袋覺得,只是我在客戶端發送了一個請求,然後在伺服器端接收了這個請求後,發送了回應回來,渲染出一個新的話,所以我這邊可以看到一個全新的畫面。

但是傳輸的過程沒有這麼簡單。

網路的層級 - OSI

過去有一群人有發現說網路在傳送的過程中實在是做了太多的事情了,沒有整理起來的話其實大家都不太好懂,雜亂不堪是很難持續進步的,所以他們就一起把這些東西,也就是網路的部分做了標準化。

這些人把網路標準化後的部分,分成了七個層級,每一層都是負責不同的事情,包括了硬體和軟體在內的七個標準。

也就是所謂的 OSI,它是一個模型。
全名是 System Interconnection Model。

有哪七個呢? 如下圖

最上面是軟體,最下面是硬體的部分,而詳細這七層每一層在做什麼事情,我個人沒有去背,我覺得只要知道說最詳細嚴謹的層數有七層,然後它叫做 OSI 就好。

然後有了這七層之後,剛剛說到我送出了一個網址的這個網路傳送行為就會像這樣:

我覺得這個部分也只是有大概的概念就好了,為什麼會這麼說呢,因為七層可能太多了,所以後來會推出一個簡化版本的,也就是今天的主題,TCP/IP 四層模型。

TCP/IP

首先,它是經過 OSI 簡化過後的,也是現在比較主流會討論的,所以我比較偏好去理解這個。

簡化版的 TCP/IP 會比原本 OSI 的七層少了一些,只剩四層。

其實也就是把七層的一些部分給合在了一起,像是說應用、表達、會談簡化成了應用一層。

剩下的這四層都是我覺得相較重要的,這邊來一個個做介紹。

應用層 Application

這層的東西就是一般常聽到的像是 HTTP、RTSP、FTP。

應用層這邊的東西,我會想像成是一種協議,協議意思是要用什麼樣的方式來達成共識。

有點像是如果法國人不懂中文,我也不同法文,那假如我跟法國人買東西時,要怎麼樣有辦法達成共識,其實還是有辦法的,因為雖然我們語言不通,但只要我們彼此都有學過數字,都懂的阿拉伯數字,那還是有辦法可以達成共識,那這時候阿拉伯數字就可以變成是我跟法國人的一種協議。

而這塊我會理解成不同的功能應用,就會需要用到不同的協議,因為就網路來說,所需要的功能也是很多種。

像是一般網頁上的需求,可以就會選擇 HTTP。
要傳送資料的話會選擇 FTP。
需要做一些串流服務像是開直播的話會選擇 RTSP。

依照所需要的情境而使用不同的協議及應用。

這塊是平常很容易專注到的,像是現在的網頁網址你點開裡面,裡面沒出意外的話應該就是’https’
開頭的吧。

傳輸層 Transport

顧名思義,傳輸。

就是決定著用什麼樣的方式,來進行傳輸這件事情,把資料送到定位。

現在主流的方式有兩種。

  • TCP
  • UDP

網路上主要會走的傳輸方式是 TCP,因為比較安全可靠。

這是由於 TCP 的這種方式,會在確定傳輸前,進行一個名字叫做三次握手的方式。

我對這個方式其實沒有很明白它的底層是怎麼實作的。

網路上很多文章用兩個人聊天來當作例子,雖然不準確但是好懂。

大概是兩個人,一個叫做小白,一個叫做小紅。

兩個互相傳訊息,小白說你好嗎,小紅說我很好你呢,小白說也不錯。

傳三次之後就代表兩個人的收跟發功能就正常了。

我對三次握手的理解是這樣。

我覺得這塊理解這樣就足夠了,TCP 由於有進行一個三次握手的動作,所以可以確保資料不會在傳送的過程中有遺漏,所以很可靠。

相對來說,UDP 就沒有三次握手,但也是因為沒有三次握手,所以它的傳輸速度會比 TCP 快很多,有好有壞的概念。

由於這個特點,所以 UDP 這種傳輸的方式常常會被拿來運用在沒有那麼需要可靠及穩定的情況下,這種情況通常也比較需要傳遞速度快一些,舉例來說串流服務,不論是視訊通話或是直播。

會沒有需要那麼可靠以及穩定主要是因為這種的服務其實每秒都在傳送,要是傳送的過程中丟失一咪咪的東西,其實對使用者的影響不會太大,體感來說就只是看影片時突然失真,卡頓了一下下,其實影響也是不會太大的,這時候的需求反而是因為要很及時,所以傳輸速度要很快,所以 UDP 的傳輸方式是首選。

而像是一般在傳送電子郵件,如果使用 UDP 的方式那就可能很慘,因為如果丟掉了資料在傳送的過程中,就算只是一點點,那也會造成很大的影響,說不定那是很重要的資料,對我來說兩個都有它使用的情境。

結合上面應用層所講的不同的應用會對應到不同的傳輸方式,像是說 http 會走 TCP 的方式,RTSP 會走 UDP 的方式。

網路層 Internet

這個在網路傳送資料的分層中,是代表地址的一塊。

我要把資料送到哪裡去? 這就是網路層的概念。

平常很常聽到的 IP 其實就是了,大家會講 IP 其實已經是簡化過的用語,其實是 IP 位址,這也是我們在網路上的地址。

我的想像是每一台電腦都有一個 IP 位址,都可以從這 IP 位置去找到電腦的所在地。

這個部分還可以細分成:

  • 固定 IP
  • 浮動 IP
  • 虛擬 IP

簡單解釋一下,這三種的差別。

固定 IP 就是固定不會變的地址,通常都是公司企業會使用的,這樣才能保證使用者可以連上伺服器,不會突然找不到。

浮動 IP 就是代表說,每次連上網路的時候,IP 位址都會不一樣,別人還是可以連到這個 IP,但是呢這個 IP 位址會隨著下一次的連線而做變化,為什麼要這樣設計呢?

我覺得原因是今天如果被有心人士給盯上,或是被洩露了 IP 位置,也不會被輕易的攻擊,如果是用浮動 IP 的話,像我自己電腦就是浮動 IP,一般來說,普通的使用者跟家用電腦也大部分是浮動 IP。

最後一個是虛擬 IP,我其實比較不太懂這個,它是在內網底下才可以互相連結的,沒辦法使用外網連上,
這也代表說內網的 IP 位址可以重複,不過這個對於外網而已一定會有一組 IP 地址對外,可能是浮動也可能是固定。

網路訪問層 Network Access

這就是 TCP/IP 這四層模組最下面那一層,代表的是實體的連結方式。

就是網路需要一個實際真正的實體來做傳輸,最早的時候可能是透過海底電纜的方式,現在的話可能是使用光纖網路,連結的方法有很多種。

我會想像成是我家裡電腦的網路線,要拉一段距離,然後是實體的。

結語

我做了一張圖:

其實我研究的時候有發生其他更深入的部分,但我只選擇看過但是沒吸收進入大腦,當然也是因為太複雜了如果要完全弄需要花費很多的時間成本,但最主要是我覺得只要現在了解大概,之後真的有需要用到的時候再去研究也不遲。

那麼這篇文章就告一段落,加油加油!

參考資料

影片類

05 成為看起來很強的後端:網路是如何運作的-TCP/IP 四層模型 - YouTube
網路基礎 2- 網路七層與 TCP/IP - YouTube
The OSI Model Demystified - YouTube

文章類

[第六週] 網路基礎 — TCP/ IP. 學習目標:粗淺了解 TCP/ IP | by MiaHsu | Medium
網際網路協議套組 - 維基百科,自由的百科全書
[知識篇] 網際網路協議 - TCP/IP - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天