---
# System prepended metadata

title: 網路基礎概論

---

# 網路基礎概論
## 從傳紙條輕鬆學習基本網路概念

其實可以把傳紙條這件事情「分層」來看，意思就是把傳紙條分成不同的層級，每一層都只專注於傳紙條的其中一個面向：

![Image for post](https://miro.medium.com/max/2285/1*58hXSwsixNDxVkbbFKJ-Cg.png)

傳紙條分層

最底下一層就是傳紙條，指的就是「傳遞紙條」這個實體的動作，可是如果只有這層的話，你怎麼知道要把紙條傳給誰？所以中間那層是加上收發地址，才能知道要傳給誰嘛。

有了底下兩層，已經可以傳紙條給任何人了，但沒辦法保證收發是正常的。所以最上面那層代表的是「如何傳送資料」，意思是說你可以使用我們上面提到的機制（三個步驟）來傳紙條，就能夠確保收發正常，但你不想要也可以。

#### 第一集小結

在第一集裡面，我們用了傳紙條當作生活化的範例，主要是想讓大家知道「傳紙條就跟網路傳封包沒兩樣」，想讓大家把這兩個東西對應起來，在思考網路概念時就會比較有畫面。

而我們也把傳紙條與網路進行了「分層」，分層的好處就是可以很明確看到每一層關注的東西都不同，所以只要處理跟那一層有關的事情就好了。

而第一集最後，我們導入了《紙條保證傳得到通訊協定》（TCP），來確保收發正常。能夠確保傳輸正常以後，就有了更多傳紙條的應用出現。

#### 第二集所對應到的網路概念

從第二集訂便當服務的發展過程當中，我們可以很清楚地知道一件事情。

> 想要規模化，就要標準化

在網路世界也是如此，為什麼要有 Protocol？為什麼要有這些規範？因為網路的封包都是由電腦來解讀的，它跟人腦最大的差別在於它是死的。例如說「一個便當」、「乙個便當」、「one 個 bento」，對人類來說很輕易能夠看得懂這三個是在指涉同一個東西，但是對電腦來說，只是三個不同的「字串」，是三個不同的詞，它沒辦法知道這三個其實是一樣的。所以必須制定一套標準，例如說「便當 1」這樣的格式，讓輸入全都符合這一套格式，電腦就只要去解析這一個單一格式就好。

開頭有提到說這個訂便當的服務是建立在《紙條保證傳得到通訊協定》之上，其實除了訂便當以外，還能發展出更多的服務，例如說訂飲料之類的，這些說穿了其實都是「如何應用傳紙條」來建立更多服務。

而這一段故事裡所提到的「訂便當服務」，對應到網路中其實就是我們最常看到的 HTTP（[Hypertext Transfer Protocol](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol)）：

![Image for post](https://miro.medium.com/max/2398/1*JeiVo68Vy9mtTNjrqPBdbw.png)

網路與傳紙條的分層

這邊會是我們傳紙條模型的最上層，因為確認如何傳送資料以後，就可以發展出更多實際應用。例如說「用紙條談情說愛」是一種傳紙條的應用，「用紙條訂便當」也是，你想拿來做什麼就可以做什麼。

在前面的故事中，我們可以得出底下的傳紙條守則：

1. 標準化內容格式
2. 分為 header 跟 body
3. 用狀態碼標準化結果
4. 用動詞標準化動作

而這四個其實就是 HTTP 通訊協定的內容。

###  TCP/IP 四層模型：

![Image for post](https://miro.medium.com/max/2433/1*BFde4y9sPtLllTZ6OjoKEg.png)

> 在「如何傳送資料」這一層裡面，有可以保障收發正常的 TCP，也有不能保障但是效能較好的 UDP，而上層的實際應用可以選擇任何一種。
>
> 這邊的圖可能有點小誤導所以要特別說明，圖片並不是說 FTP 建立在 UDP 之上，只是想表達應用這一層有 HTTP 「與」 FTP，傳輸這層有 TCP「與」UDP，而 HTTP 與 FTP 事實上都選擇了以 TCP 作為傳輸方式。

這個模型會把網路分成四層，每一層都關注不同的面向，例如說傳輸層指的就是「你要以什麼方式來傳送資料？」，而應用層是最貼近我們的一層，就是實際應用。這四層關注的對象也可以透過傳紙條的例子來看，會清楚很多。

對我來說，與其去思考「為什麼會有 HTTP？」、「為什麼要這樣分層？」，不如先從傳紙條的例子開始慢慢去想，去想說當服務變大的時候該怎麼辦，當格式不統一的時候該做些什麼，這時候就會發現這些問題的解答，就是 Protocol 出現的原因。

#### 第三集所對應到的網路概念

這一集裡面我們多了許多不同的服務，也產生了對應的服務代碼，這些對應到網路世界裡就是 Port（連線埠，中國翻叫端口）的概念，一台主機上面可以跑很多不同的服務，但你要怎麼區別呢？就是利用 Port（服務代碼）。

就像千千班上一樣，有訂便當、訂飲料還有借籃球，要把紙條傳到「八班：3000」才是訂飲料這個服務。網路也是如此，一台主機上有很多服務，你一定要傳到「Server IP：80」才是 HTTP 伺服器這個服務。

每一種服務都有預設的 Port，例如說 HTTP 是 80，FTP（[File Transfer Protocol](https://de.wikipedia.org/wiki/File_Transfer_Protocol)）是 21，所以你會發現在使用瀏覽器的時候沒有輸入 Port，因為預設就是 80，所以不用特別填寫。

這可以對應到我們之前的圖表，在最上面一層「實際應用」，可以有不同的應用，例如說訂便當跟訂飲料。網路世界的話則是 HTTP 跟 FTP 這兩個不同的通訊協定。

在傳輸資料的時候有很多種協定可以選擇， TCP 是一種，就是我們故事中的《紙條保證傳得到通訊協定》，還有另外一種叫做 UDP（User Datagram Protocol），就是上面提到的「漏掉訊息沒差，重要的是傳輸即時性」的通訊協定。

---

#### Http status code 狀態碼

用數字表示 reponse 的狀態，通常以開頭的數字做判斷

**1xx ：稍等**

- 100 Continue：Server 成功接收、但 Client 還要進行一些處理。

**2xx：成功**

- 200 OK：成功
- 204 No Content：成功但沒有回傳的內容（當你發出 Delete 的 request）

**3xx：重新導向，用戶端瀏覽器必須採取更多動作才能完成要求。**

- 301 Moved Permanently：資源「永久」移到其他位置，再下一次發出 request 時，瀏覽器直接到新位置。
- 302 Found（Moved Temporarily）：資源「暫時」移到其他位置。
- 304 Not Modified：東西跟之前長一樣，可以從快取拿就好。

**4xx：Client 端錯誤**

- 400 Bad Request：請求語法錯誤、或資源太大…等等。
- 401 Unauthorized：未認證，可能需要登入或 Token。
- 403 Forbidden：沒有權限。
- 404 Not Found：找不到資源。

**5xx：Service 端錯誤**

- 500 Internal Server Error：伺服器出錯，搶票時很可能發生。
- 501 Not Implemented
- 502 Bad Gateway：通常是伺服器的某個服務沒有正確執行。