---
# System prepended metadata

title: Network
tags: ['1112', 網路, LSA2]

---

###### tags: `LSA2` `網路` `1112`
# Network  
- Book mode: https://hackmd.io/@ncnu-opensource/book
[TOC]

## 介紹 TCP/IP
- 為了進行有效的通訊，協定是必須使用的，必須遵守這些規則，才能成功傳遞訊息
- 如果某家製造商沒有遵守協定，裝置就有可能無法通訊
 - ![](https://i.imgur.com/pdF1e0r.png)
     - 由很多不同協定所組成的模型
 - 情境  (小明要用紙條約小睿看電影)
     - ![](https://i.imgur.com/Z5QPDcw.png)
     - ![](https://i.imgur.com/KGpYprZ.png)
     - ![](https://i.imgur.com/3kDG9NG.png)
     - ![](https://i.imgur.com/Iia0EZ9.png)
     - 總結
         - ![](https://i.imgur.com/lxQCnVV.png)
- ![](https://i.imgur.com/8TNIxUy.png)



## Link Layer
![](https://i.imgur.com/NWcB8j3.png)
- **同一網域主機的連接處理**
- 學校的某一個班級中，人與人的溝通模式
- 為**直接**透過網路硬體裝置連接的電腦（子網路），建立相互通訊的連線，但不能透過轉送的方式跨越至其他網路（網際網路）。
- 言簡意賅的說法就是負責在相鄰的兩個網路節點之間傳輸數據。
- 在這裡設立了**幀 Frame** 的概念（又稱訊框），是 Link Layer 的傳送單位
### 常見連接方式

| 網路 | 標準 | 功能 | 傳輸媒介 | 碰撞處理 |
|-|-|-|-|-|
| Ethernet 乙太網路 | 802.3 | 區域網路連線上的通信協定 | 雙絞線 | CSMA/CD |
| Wi-Fi 無線網路| 802.11 | 無線區域網路的電腦通訊標準 | 5GHz / 2.4GHz 無線電波 | CSMA/CA |

> [form_Reference](https://hackmd.io/@Alanjy-Huang/ryARVogrj#Ethernet-vs-Wi-Fi)
> 網路傳輸皆是使用 Digital 數位訊號傳遞喔
![](https://i.imgur.com/Hg2QvXe.png)
> [圖片來源](https://www.google.com/url?sa=i&url=https%3A%2F%2Flearn.sparkfun.com%2Ftutorials%2Flogicblocks--digital-logic-introduction%2Fwhat-is-digital-logic&psig=AOvVaw3_nBrA_cIQquTgt6Ii3tjT&ust=1678258841171000&source=images&cd=vfe&ved=0CBEQjhxqFwoTCOiqsNKfyf0CFQAAAAAdAAAAABAD)
### Ethernet Frame(根據其他的協定而有不同的 frame)

![](https://i.imgur.com/XnOkqSY.png)
> 在班上同學與同學之間溝通的格式
> 風和日麗的一天，Ray 要跟 Wally 講一件很重要的事
-  **Preamble 前導碼 :** 在數據傳輸開始之前，發送方會先發送一個固定長度的前導碼，此 56 位元的前導碼為 0 與 1 交錯，當接收方收到連續的 0 與 1 ，就會知道傳輸即將發生，此外也會根據 0 與 1 的變化速度，讓接收方可以同步數據傳輸時序。 
> Ray 跟 Wally 說：我要講重要的事了喔，你要開始適應我的語速，跟上我的速度喔
-  **SFD :** 全名Start Frame Delimeter，目的為區隔 Preamble 與接下來的內容，表示傳輸即將開始。 
> Ray : 調整完了齁，我要開始講重要的事了
-  **Destination/Source Address :** 分別為接收方與發送方的地址，各 48 Bits，以 MAC Address 表示。
> 確認誰是 Ray 要傳遞對象
-  **Length or Type :** 如果該欄位的值小於或等於 1500，則表示這是一個長度字段，指示了 Frame 的長度；如果該欄位的值大於 1500，則表示這是一個類型字段，指示了 Frame 中所包含的協議類型。
> 先聲明 Ray 要講什麼類型的事情
-  **Data :** Frame 中實際傳輸的數據部分，大小在 46 Bits與 1500 Bits之間，如有超過這個長度就會拆成另一幀。
> Ray : LSA 是堂優質課程欸，要不要一起修
-  **Frame Check Sequence :** 這是一個固定長度的校驗碼，用於檢測 Frame 中數據的錯誤。
> Ray : Wally 我剛剛講的東西有任何錯誤嗎？還是有哪裡沒聽到的

> Ethernet Frame 中，位元最長為 1518 Bits，最短為 64 Bits。
> [Frame_Reference](https://hackmd.io/@0xff07/BJUwIm5XF)
### MAC Address (Media Access Control Address)
- 一張網卡，一個 MAC Address
- 在一個班級中，一個座號只會有一位學生使用，但如果在其他班就可能會有一樣的號碼
- 在班上傳紙條只需要知道我要傳給幾號（MAC Address）
- 要傳給其他班的時候可能需要知道對方的學號才能傳遞 （IP Address）
- 以 Hexadecimal 表示
- ![](https://i.imgur.com/sjgZMFc.png)
- Size: 6 Bytes (48 Bits)
    - 第 1 bit 為單播位址 Unicast (0) / 群播位址 Multicast (1)
    - 第 2 bit 為廣域位址(0) / 區域位址(1)
    - **例外:** 當每一個 bit 為 1 時 (FF:FF:FF:FF:FF:FF)，則為 Broadcast 廣播位址
    
![](https://i.imgur.com/mUTR4RY.png)
#### Organizationally unique identifier (OUI) 組織唯一標識符
- 用於唯一標識一個供應商、製造商或其他組織，由供應商至 IEEE 的註冊機構購買
- 即第 3~24 Bit 由 IEEE 決定

#### Network Interface Controller (NIC) 網路卡
- 由第 2 bit 決定管理者
- **Global Unique:** 由 OUI 擁有者（即實際生產該網路裝置的廠商）自行決定後 24 Bits
- **Locally Administered:** 網管可自行決定 24 Bits


![](https://i.imgur.com/ZLTrlwP.png)

        
> [MAC_Addr_Reference 1](http://lirobo.blogspot.com/2015/09/mac-address.html) 
> [MAC_Addr_Reference 2](https://techaccess.in/2021/05/16/unicast-multicast-and-broadcast-mac-address/)
> [OUI_Reference](https://zh.wikipedia.org/zh-tw/组织唯一标识符)


### CSMA / CD (Carrier Sense Multiple Access with Collision Detection)
- 碰撞偵測處理
- 用於容易偵測碰撞的網路環境 (Ex. 乙太網路)
#### 傳送步驟
1. 訊號採用廣播的方式傳送（所以才會發生碰撞）
2. 當節點要發送訊號時，會先偵測通道是否有其他節點正在使用（carrier sense）
3. 當通道沒有被其他節點使用時，就傳送封包
4. 封包傳送之後立即檢查是否發生碰撞（carrier detection），若是發生碰撞則對通道發出高頻訊號告知其他節點已經發生碰撞
5. 碰撞後隨機等待一段時間重新發送封包
6. 嘗試 15 次都失敗的話則告知上層 Timeout

![](https://i.imgur.com/yeiMGlo.png)
> [Diagram_Reference](https://hackmd.io/@Alanjy-Huang/ryARVogrj#CSMACD-Carrier-Sense-Multiple-Access--Collision-Detection)
> [CSMA/CD_Reference](https://blog.toright.com/posts/1243/csmacd-與-csmaca-之間的差異.html)


### CSMA / CA (Carrier Sense Multiple Access with Collision Avoidance)
- 碰撞避免處理
- 多用在無法避免碰撞的環境 (Ex. WiFi)
- 因為在無線的環境下無法確實偵測是否有碰撞，且無線的環境容易受到無線電波、宇宙射線 ... blablabla 的干擾
- 所以在無線的環境下從偵測碰撞修改成避免碰撞 (CSMA / CA) 的方式

#### 傳送步驟
1. 訊號採用廣播的方式傳送（非常容易受到無線電波干擾）
2. 當節點要發送訊號時偵測頻道是否空閒
3. 若是空閒則等待 Interval Frame Space ( IFS ) 時間後再次偵測頻道是否空閒
> Interval Frame Space: 傳送一 Frame 的時間
4. 若是空閒則發送 RTS，反之重新進入等待頻道空閒（隨機等待時間）
5. 發送 RTS 之後必須在限定時間內收到來至目的端的 CTS 訊號
6. 收到 CTS 後才發送封包
7. 當失敗 32 次之後通知上層 Timeout
![](https://i.imgur.com/b9tiGIa.png)
> [CSMA/CA_Reference](https://blog.toright.com/posts/1243/csmacd-與-csmaca-之間的差異.html)
:::info
### Appendix - Request to send / Clear to send
- RTS / CTS
- 送真的封包之前，先發送 RTS 封包，此封包不只有接收者會收到，發送者傳輸範圍內的其他裝置也會收到。
> 一樣又是風和日麗的一天，Ray 又要跟 Wally 說重要的事
> 今天雖然一樣在班上，但環境是無線的環境
> Ray 大喊 : Wally 你聽得到我說話嗎？ (發送 RTS)
- 接收者順利收到之後，則必須廣播一個 CTS 封包，代表已經準備好接收封包
- 在發送 CTS 之後，聽到 CTS 的節點，在一段足夠向發送者傳輸完訊息的時間內，都不能向發送者發送訊息。
> Wally 大喊回覆 : 我有聽到，其他人惦惦啦不要跟我說話 (發送 CTS)
> [Ref](https://hackmd.io/@0xff07/SJO5VTpmY#RTSCTS)
:::
### Connecting Device
- Hub
    - 以 Broadcast 方式進行傳輸
    - 假設 A Node 要傳輸資料給 D Node ，每個 Node 都會收到
    - 當 C Node 要傳輸資料時，就會發生碰撞
    - 這樣的方式不僅不安全，且還要處理碰撞，所以 Hub 已經很少人在使用
    - 半雙工 (half - duplex)
    - 全班都在講話很吵雜，只會令人不爽，容易起衝突
    - ![](https://i.imgur.com/xNXIqAa.png)
    
    > [Hub_Ref](https://notfalse.net/66/repeater-hub-bridge-switch#-Hub)
![](https://i.imgur.com/ZeYkpQG.png)

- Switch
    - 全雙工（full-duplex）
    - 有一個表 (Table) 可以學習、儲存紀錄每台電腦的MAC位址
    > 找不到再 Broadcast
    - 每個 port 是獨立的，並且分割碰撞網域 (不用擔心碰撞問題)
    - 可視為是 硬體 + ROM (table)
    - ![](https://i.imgur.com/CTXZrxU.png)
    - ![](https://i.imgur.com/IBXrqts.png)
    > [Switch_Reference](https://home.gamer.com.tw/creationDetail.php?sn=4247878)
- Switch 步驟
    - 某一網段 A 的某電腦 X 要發送一封包給 Y ，發送時 Switch 記下了 X 電腦的 MAC Address 在網段 A 。
    - Switch 不知道 Y 在哪裏，所以向所有網段轉發封包 (除了 A 以外)
    - MAC Address Y 的電腦收到該封包，向 MAC Address X 發出確認包。Switch 收到該包後，記錄下 MAC Address Y 所在的網段。
    - Switch 向 MAC Address X 轉發確認包。
    - Switch 收到一個封包，查表後發現該封包的來源位址與目的位址屬於同一網段。Switch 將不處理該封包。
    > Q : 那同網段的封包不知道 MAC Address 要怎麼做處理呢？
    > A : 可以利用 ARP 的技術處理喔
    
    > [Step_REF](https://zh.wikipedia.org/zh-tw/網路交換器)

:::info
### Appendix-全雙工/半雙工/單工 
#### 單工
- 資料流只能單向傳送，我從 A 主機 a port 送出，client B 負責接收。A主機 a port 不負責接收資料。
#### 半雙工
- 不同時間，資料可以做雙向傳輸，但同一時間內只能做單向傳輸。(Ex. 無線電通訊)
#### 全雙工
- 全雙工基本上就是同一時間內兩邊可以相互傳遞資料。(Ex. 電話通訊)

> [Reference](https://sites.google.com/site/archerdevil/home/networking/dan-gong-ban-shuang-gong-yu-shuang-gong-chuan-shu)

:::

### LAN (Local Area Network)
- 區域網路
- 是連接住宅、學校、實驗室、大學校園或辦公大樓等有限區域內計算機的計算機網路
- Ethernet 為 LAN 最普遍使用的一種技術
- 相關規範由 IEEE 訂定，收錄於 IEEE 802.3 標準中
![](https://i.imgur.com/Rx53zCW.png)
> [LAN_Reference 1](https://hackmd.io/@Alanjy-Huang/ryARVogrj#LAN)
> [LAN_Reference 2](https://zh.wikipedia.org/zh-tw/局域网)
### WAN (Wide Area Network)
- 廣域網路
- 通常跨接很大的物理範圍，近則十幾公里，遠至幾千公里。
- 它能連接多個地區、城市和國家
- 常見於企業分公司，將這些分公司以專線的方式連接，就稱 WAN
- 傳送介質主要是利用公共網路（例如：網路供應商預先埋在馬路下的線路、衛星網路、海底纜線 ... etc ），頻寬較容易受限制，不僅慢，因為維護不易，成本相對高，費用也較貴。
> 一般所指的網際網路是屬於一種公共型的廣域網路，公共型的廣域網路的成本會較低
，但跟廣域網路比較來說，是沒辦法管理頻寬，走公共型網路系統，任何一段的頻寬都無法被保證。

![](https://i.imgur.com/tGIAsKa.png)

> [WAN_REF](https://zh.wikipedia.org/zh-tw/广域网)
> FIXME:走衛星網路呢?要定義!!而不是舉例
------

## Internet Layer
![](https://i.imgur.com/PDZWKQG.png)
- **跨網域的傳輸**
- 班級同學與班級同學之間的傳遞
- 有了網路介面層提供的 MAC 位址後，就可以知道要把資料傳輸到子網路內的哪台電腦，然而 MAC 位址只適用於子網路的通訊，單從 MAC 地址無法得知收件者的子網路為何，因此需要 IP 協定，透過 IP 位址即可知道該電腦屬於哪一個子網路。
- 將資料轉送到未直接連接的其他網路，而將封包轉送到指定的方向就稱作**路由（route）**。
- 最具代表性的協定為 **IP（Internet Protocol，網際網路通訊協定）**，此協定針對未直接連結的網路，提供封包路由機制，為任意的電腦端點建立通訊連線。
- **ICMP（Internet Control Message Protocol，網際網路控制訊息協定）**，用來輔助 IP 協定，能偵測資料是否被送達任意端點，若否，則發送失敗通知。
> [Ref](https://pjchender.dev/internet/internet-tcp-ip-1/)

### IP Address
- 每個人在學校中都會有屬於自己的學號且不重複，畢業後十年學號是可能會再被釋出的（部分學校適用）
- 把學校比擬成網際網路的話，IP 位置就跟學號一樣在同一時間是不能重複的
#### IPv4
![](https://i.imgur.com/2tmoAEh.png)
- Since 1981 
- 32 Bits，8 Bits 一組，組跟組之間有一個 Dot 來做區隔，由 Decimal 表示
- 目前最廣泛使用的版本
- 目前 IPv4 已經快被用完了，因此有了 IPv6 
- 其中 IP 的結構包含：**網路號碼 (Network number)** & **主機號碼(Host number)**
- 一般主機的 Host ID 不會出現全 0 或全 1 的狀況
    - **全 0 :** 表示網段的位置 (網域)
    - **全 1 :** 表示廣播的位置



#### IPv6
![](https://i.imgur.com/vz60t19.png)
- Since 1995
- 128 Bits，並由 Hexadecimal 表示
- 因應 IPv4 快被用完，因此成為未來趨勢

#### 一些常見特殊 IP Address (保留位址)
- **全部為 0 保留特殊使用 :** `0.0.0.0`
    > 1. 當在自己電腦上配置IP位址為0.0.0.0的時候，表示這台機器在網絡上是不可達的。
    > 比如你的筆記本電腦在沒有聯網的時候
    > 2. (配置在軟體的配置文件)
    > 很多伺服器都是有雙網卡的，比如其中一個網卡的IP地址為`192.168.32.10`另一塊網卡的IP地址是`192.168.45.30`。
    > 如果配置成`0.0.0.0`表示無論你從哪個IP地址訪問這個服務都是OK的
    > [REF1](https://kknews.cc/tech/6gkgnb3.html)
- **Net ID 為 127 時 :** `127.0.0.0`
    > Loopback Address
    > 迴繞地址、繞回地址、環回地址，都是一樣的意思
    > 以`127.0.0.0`作為回繞位址，`127.0.0.1`表示主機位址，主要作為測試網路使用 (Loopback Testing)。
- **IP 位址全部為 1 時:** `255.255.255.255`
    > Broadcast Address
    > 對所有主機的廣播位址
- [REF2](http://www.tsnien.idv.tw/Manager_WebBook/chap4/4-3%20IP%20協定概述.html)
    
### Subnet Mask (子網路遮罩)
- Net_ID 全部位元為 1 ，Host_ID 全部位元為 0 時
:::info
### Appendix - IP Address 分級
![](https://i.imgur.com/qeirUHa.png)
> 現在幾乎不會用這種分級
- **Class A：** 以最高位元（第 31 位元）為 0 表示 Class A 模式。前一位元組（8 位元）表示網路位址；而後 24 位元表示主機位址。Class A 級的 IP 範圍： `0.0.0.0` ~ `127.0.0.0` ，通常比較大型的組織或政府機構才有辦法拿到 Class A 級的IP，Netmask = `255.0.0.0`
- **Class B：** 以二個最高位元為 10 表示 Class B 模式。前 16 位元表示網路位址；而後 16 位元表示主機位址。Class B級的IP範圍： `128.0.0.0` ~ `191.255.0.0`。通常適用於中型企業，Netmask = `255.255.0.0`
- **Class C:** 以前三個最高位元為 110 表示 Class C 模式。前 24 位元是網路位址；而後 8 位元為主機位址，Class C級的IP範圍： `192.0.0.0` ~ `223.255.255.0`。通常用於家庭與小型企業，Netmask = `255.255.255.0`
- **Class D:** 以前四個位元為 1110 表示 Class D 模式。其主要應用於多點廣播（Multicast），一些特殊應用軟體皆用此模式，來對某些定點（工作站）廣播，如隨選視訊（VOD）就用此定址模式，對若干個定點工作站廣播視訊。
- **Class E:** 以前四個最高位元為 1111 表示 Class E 模式。目前保留尚未使用。
> [IP_Class REF1](https://notes.andywu.tw/2018/ip等級與子網路遮罩介紹/#class-b)
> [IP_Class REF2](http://www.tsnien.idv.tw/Manager_WebBook/chap4/4-3%20IP%20協定概述.html)
:::
- 統整
    - Class A: `255.0.0.0`
    - Class B: `255.255.0.0`
    - Class C: `255.255.255.0`
    
#### 求一網段之至多分配主機數
- 以 Class C 為例 `255.255.255.0`
- 換算 Binary => `11111111.11111111.111111111.00000000`
- 前 24 Bits Net ID 不管它，後面 Host ID 共 8 Bits
- `2 ** 8 - 3 = 253`
- 共 253 台，扣 3 為廣播位址、網段位址及 Gateway
#### 如何求 Net ID (Network Number) 、 Host ID (Host Number) 與 Broadcast IP
- 將 IP 位址與 Netmask 整個加在一起做 AND 運算，即可求得 Net ID
- 將 Netmask 做 NOT 運算後，再與 IP 位址做 AND 運算，即可求得 Host ID
- 將 Netmask 做 NOT 運算後，再與 IP 位址（或是 Net ID ）做 OR 運算，即可求得 Broadcast IP
> 記得要先換成 Binary 才能進行運算喔 (廢話)
> 你說你聽不懂？下面實際計算一次就知道了
> 首先先看懂 Truth Table 
:::info
### Appendix - Truth table 
- AND


| A | B |A∧B|
| - | - |  - |
| 0 | 0 |  0|
| 0 | 1 |  0|
| 1 | 0 |  0|
| 1 | 1 |  1|
- OR

| A | B |A∨B|
| - | - |  - |
| 0 | 0 |  0|
| 0 | 1 |  1|
| 1 | 0 |  1|
| 1 | 1 |  1|

- NOT

| A | A' |
| - | - | 
| 0 | 1 | 
| 1 | 0 | 

:::
> fixme : 下面有個地方寫錯了 
:::success
#### 有一 IP Address: `3.4.5.6` 為 Class A ，請問他的 Net ID、Host ID 以及 Broadcast IP 為何？
|Process|3.4.5.6|
|-|-|
|Binary|`00000011.00000100.00000101.00000110`|
|Netmask|`11111111.11111111.11111111.00000000`|
|AND|-----------------------------------------|
|Net ID|`00000011.00000100.00000101.00000000`|
- Net ID: `3.4.5.0`

|Process|3.4.5.6|
|-|-|
|Binary|`00000011.00000100.00000101.00000110`|
|Netmask'|`00000000.00000000.00000000.11111111`|
|AND|-----------------------------------------|
|Host ID|`00000000.00000000.00000000.00000110`|
- Host ID: `0.0.0.6`

|Process|3.4.5.6|
|-|-|
|Net ID|`00000011.00000100.00000101.00000000`|
|Netmask'|`00000000.00000000.00000000.11111111`|
|OR|-----------------------------------------|
|Broadcast IP|`00000011.00000100.00000101.11111111`|
- Broadcast IP: `3.4.5.255`
-----
#### 有一 IP Address: `111.123.121.145/20` ，請問他的 Net ID、Broadcast IP 以及此網段可分配之主機數？
> 指令 `ip a` 可得知 `X.X.X.X/X` 表示方式的 IP Address
- **斜線後的數字為Netmask 有幾個 Bits**
- 20 Bits => `11111111.11111111.11110000.00000000`

|Process|111.123.121.145|
|-|-|
|Binary|`01101111.01111011.01111001.10010001`|
|Netmask|`11111111.11111111.11110000.00000000`|
|AND|-----------------------------------------|
|Net ID|`01101111.01111011.01110000.00000000`|
- Net ID: `111.123.112.0`

|Process|111.123.121.145|
|-|-|
|Net ID|`01101111.01111011.01110000.00000000`|
|Netmask'|`00000000.00000000.00001111.11111111`|
|OR|-----------------------------------------|
|Broadcast IP|`01101111.01111011.01111111.11111111`|
- Broadcast IP: `111.123.127.255`
- 可用主機數: `2 ** 12 - 3 = 4093 台`
-----

#### 實際演練時間
#### 有一 IP Address: `87.200.79.179/27` ，請問他的 Net ID、Broadcast IP 以及此網段可分配之主機數？
:::

#### ANSWER
:::spoiler
- 27 Bits => `11111111.11111111.11111111.11100000`

|Process|87.200.79.179|
|-|-|
|Binary|`01010111.11001000.01001111.10110011`|
|Netmask|`11111111.11111111.11111111.11100000`|
|AND|-----------------------------------------|
|Net ID|`01010111.11001000.01001111.10100000`|
- Net ID: `87.200.79.160`

|Process|111.123.121.145|
|-|-|
|Net ID|`01010111.11001000.01001111.10100000`|
|Netmask'|`00000000.00000000.00000000.00011111`|
|OR|-----------------------------------------|
|Broadcast IP|`01010111.11001000.01001111.10111111`|
- Broadcast IP: `87.200.79.191`
- 可用主機數: `2 ** 5 - 3 = 29 台`
:::

### Router
![](https://i.imgur.com/TX0Um2k.png)
> [Ref](https://www.pcnet.idv.tw/pcnet/network/network_ip_routing.htm)
- 傳輸資料步驟
    > Ray 今天要拿一個公文給 Wally，先查看他的學號
    1. 看封包目標 IP 位置。
    2. 查看自己主機的 Net_ID 是否與封包的相同(屬於同區網)，若相同可以直接傳給目的主機。
    > Ray 先看他是不是同一個系所的，如果是就可以直接在班上給他
    4. 若不同，查詢 Router (default gateway)， 並傳給它。
    > 如果不是，Ray 再去找負責送公文的工讀生
    6. 不理會封包流向，Router (default gatway) 會執行上述動作繼續往目的地傳送。
    > 之後工讀生就會幫忙送，所以 Ray 就不必太擔心
    
    > [Ref](https://hackmd.io/@ncnu-opensource/book/https%3A%2F%2Fhackmd.io%2Fivcr8d6lT2WBM5wZOYUyIQ)
:::info
### Appendix - 查看 routing Table
- **routing table:** 路由表，用來指引方向
- **iptables:** 讓 router 知道哪些要進來，哪些要擋掉，哪些要特殊處理 (下週會提到喔)
- `route -n` 以主機 IP 顯示
 ![](https://i.imgur.com/JNMxXIh.png)
- 不知道目的地？ Default 就是你的目的地 (紅色框框)
- 知道目的地就往指定的 Interface


- `sudo ip route add [Address] via [Gateway] dev [Interface]`

- 可使用指令加入 Table

![](https://i.imgur.com/8h8wPVj.png)

- `sudo ip route delete [Address]` 
- 指定該網段從 Table 刪除
![](https://i.imgur.com/TbC83jn.png)

> [Ref](https://ithelp.ithome.com.tw/articles/10235018)
:::


### ICMP (lnternet Control Message Protocol) 
- 網際網路控制訊息協定
- 光靠 IP 傳輸是很不可靠的，我們不知道是否能夠順利安全送達目的地。
> Ray 因個人因素轉系了，Wally 很想念他，想要問他近來如何，所以試著向他傳送紙條封包給 Ray
> Ray 因為太忙碌離不開實驗室，所以 Wally 拜託友人 Router A 幫忙

-  **障礙通知：** 當 IP 封包傳送當中，在某一網路上發生問題而無法繼續傳送，則會回應 ICMP 訊息給原封包傳送端。訊號_1是由 Router_A 回應；或是由 Router_B 回應訊號_2；也有可能是由主機 B 回應訊號_3。
> Router A 又再請了 Router B 幫忙，不料 Router B 在從管院走到科三的路上，風直接把紙條封包吹走了
> Router B 見狀趕緊發送 ICMP 通知 Wally，並告知他傳送失敗的原因

![](https://i.imgur.com/Hr5fhuR.png)
- **狀況查詢：** 可以發送 ICMP 來查詢目前網路的情況。主機 A 發送 ICMP 查詢訊息，有可能由路由器回應（訊號_1 和 訊號_2），或由主機 B 回應訊號_3。

> Wally 這次又怕紙條被吹走，所以他一直想辦法跟 Router A 確認進度以及傳送速度
> 最後他選擇發送 ICMP 查詢，最後也有得到 Ray 的 ICMP 回覆，確認已經送到手上以及花費的時間，真是可喜可賀

![](https://i.imgur.com/fZCMQiR.png)
- ICMP 封包無法直接傳送，必須如同 TCP 封包一樣被嵌入 IP 封包內，以 IP 方式傳送，包裝在 IP 內的封包格式
![](https://i.imgur.com/UiKRgZa.png)
- **回聲要求（Echo Request）:** 用來要求對方回聲，如有回聲表示對方主機或路由器工作正常，也可以用來測試網路路徑是否確實可以到達。
:::info
### Appendix - 常見 ICMP 應用
#### 指令：`ping [Address]`
![](https://i.imgur.com/QnCoAqE.png)
- `Time_To_Live` (TTL) : 生存時間，每過一個路由器，生存時間就會 -1 ，直到等於 0 都還沒走到目的地地址則代表 TTL 已經到期，接著就會傳送錯誤訊息給原本發送的電腦，TTL 的值越大越好，代表經過的路由器越少，也代表越快。
- 每台電腦預設的 TTL 都不同，像是 MacOS 大多預設為 64，可自行修改
- `ping 127.0.0.1` 可以看得出自己的 TTL
>記得 `Ctrl + C` 結束掉 ping command
#### 指令：`traceroute [Address]`
- 跟著封包去旅行，查看封包經過了哪些節點
> 非內建請先安裝

![](https://i.imgur.com/fxayu6L.png)
##### 運作模式
- 輸入此指令按下 Enter 鍵後，電腦先發送一個 `TTL = 1` 的封包，到達第一個 Router 時，他會回傳一個 Timeout 封包通知電腦， 而後再發送 `TTL = 2` 的封包，遇到第二個 Router 時再回傳 Timeout 封包，以此類推，一直讓 `TTL += 1`，就可以得知到達目的地之前所有經過的節點。

:::

> [Ref1](http://www.tsnien.idv.tw/Internet_WebBook/chap5/5-4%20ICMP%20通訊協定.html)
> [Ref2](https://ithelp.ithome.com.tw/articles/10239657)


### ARP (Address Resolution Protocol) / RARP (Reverse Address Resolution Protocol)
- 位址解析協定 / 反向位址解析協定
- ARP 是被用來以 IP 位址查詢其相對應的網路實體位址（MAC 位址）
> Ray 因為剛進入班上，不太了解大家，結果剛好遇到了一個失散多年的兄弟
> 但是他好像只知道他的學號，不知道他的座號

![](https://i.imgur.com/Qyju8Pz.png)
- 首先主機 A（163.15.2.1）的網際層（Internet Layer）發送出 ARP Request（查問 163.15.2.4）訊息給網路存取層（Network Access Layer）
> 於是乎他在班上大喊，送出 ARP Request：163.15.2.4 你的座號是多少？
- 網路存取層之 MAC 層（Ethernet 層）再將 ARP Request 訊息包裝在 Ethernet 訊框內，並廣播在網路上。
- 網路上（區域網路內）所有主機接收到廣播訊框再拆解訊框。
> 班上每個人都聽到 Ray 說的話，但聽到不是在叫自己就沒理他了
- 主機 C（163.15.2.4）的網際層收到 ARP Request 後，並由其中瞭解是詢問自己，便回應 ARP Reply（包含 Ethernet 位址） 給網路存取層，網路存取層再發送訊框給主機 A（163.15.2.1）。
> 他兄弟聽到了他的 Request，於是很開心的跟他講了他的座號 發送 ARP Reply 給 Ray
- 其它主機也會收到 ARP Request 訊號，但皆判斷不是詢問自己而不予理會。
- **RARP** 主機電腦用自己硬體位址（MAC 位址）向伺服器詢問自己的 IP 位址
> 剛入班的 Ray 不知道自己的新學號

![](https://i.imgur.com/I2kRgbw.png)
- 主機 A 為**動態主機組態伺服器**（Dynamic Host Configuration Protocol, DHCP），負責分配 IP 位址給網路上主機。
> 主機 A 為一名註冊組處理學號事宜的老師，也就是 DHCP 伺服器
- 電腦主機啟動時便要求 DHCP 伺服器分配一個 IP 位址，電腦主機關機時便釋放該 IP 位址，下次開機時再要求重新分配。
- 例如主機 C 啟動時立即在網路廣播（或傳送給 DHCP 伺服器） RARP Request（要求 IP 位址），主機 A 收到 RARP Request 並驗證其 Ethernet 位址是否可以給予 IP 位址，再回應 RARP Reply 給主機 C，其中攜帶對方的 IP 和 MAC 位址。
> 今天 Ray 決定直接去詢問該名老師，發送 RARP Request
> 主機 A 想了想，直接給了他一張紙條 (RARP Reply)，上面記載著 Ray 的學號與座號
- RARP 封包格式和 ARP 一樣。
> [Ref](http://www.tsnien.idv.tw/Network_WebBook/chap13/13-4%20ARP%20與%20RARP%20通訊協定.html)

:::info
### Appendix - 查看 ARP Table
- Ray 因為記性不好，所以問過的座號都存在 ARP Table，
- `arp -n` 以 IP Address 查看 Table
- `sudo arp -s [IP] [MAC]` 將資料寫入 Table
- `sudo arp -d [IP]` 將指定資料刪除
![](https://i.imgur.com/xGDXXzZ.png)

:::


-----
## Transport Layer
- ![](https://i.imgur.com/xTcdEKQ.png)
- 網際網路層只確保封包交換設備之間的傳輸，並沒有提供一套機制來確保封包的傳輸
- 負責在兩個應用程式之間建立臨時通訊會談和傳送它們之間的資料

### TCP(Transmission Control Protocol)
- 《紙條保證傳得到通訊協定》
- 大部分的網路協定都是建立在TCP 上面
- ![](https://i.imgur.com/scZS2oM.png)
    - `Sequence Number` : 紀錄封包序號，以便重組 ，也依據序號判斷封包是否被重複傳送
    - `Acknowledge Number` : 當 client 端收到這個確認碼時，就能夠確定之前傳遞的封包已經被正確的收下
    - `Data Offest` : 這是用來記錄表頭長度用的
    - `Reserved` : 這是保留區間，暫時還沒被使用
    - Control Flag 共有6個， 1 代表為啟動
        - `URG` : 代表緊急封包，接收端立即處理
            -  例如: 傳送端送出 [Ctrl-C] 的中斷訊息，當此訊息到達目的端後，目的端將會以最快速度處理此命令
        - `ACK` : 回應封包
            - 當傳送端送一個封包的時候，目的端如果有收到，就會向傳送端傳`ACK`代表有正確收到，如果傳送端沒有收到`ACK`的話，它會假設封包丟失，並在重送一個封包
        - `PSH` : 要求對方立即將緩衝區資料交給應用層
            - 例如： 像 Telnet 的協定，在使用端，每打一個字元，即使使用者尚未輸入 [ENTER] 鍵，就會立即傳送至接收端
        - `RST` :  連線強制結束
            - TCP 正常關閉連線是用四次揮手，但有些異常狀況可能無法做到，就需要 `RST`
                 1.  於對方連接時，對方的 port 不可用
                 2.  對方程式突然崩潰了，當 client 繼續傳訊息時，對方就會回應 `RST`
                 3.  iptables 設定規則為 `reject` 時，也會回應 `RST`
        - `SYN` : 通知對方要求建立連線（TCP 連線）
        - `FIN` : 通知對方，資料已傳輸完畢，是否同意斷線
    - `Window ` :  控制封包流量，Window=0 代表緩衝區滿了，應停止傳送
    - `Checksum` : 一種計算方式，在傳輸過程中使用 `Checksum` 檢查封包的完整性，以確保封包在傳輸過程中沒有被損壞或篡改
    - `Urgent Pointer` : 如果 `URG` 被設定為 1 時，那這裡就會指示出緊急資料所在位置
- 三向交握
    - 情境 :
        - ![](https://i.imgur.com/1wIDeS0.png)
    >參考: https://ithelp.ithome.com.tw/articles/10280652
    - ![](https://i.imgur.com/S7n9xih.png)
    >來自: [wiki](https://zh.wikipedia.org/wiki/%E4%BC%A0%E8%BE%93%E6%8E%A7%E5%88%B6%E5%8D%8F%E8%AE%AE)

- 四次揮手 
    - 情境 : 
        - ![](https://i.imgur.com/rrWt7lH.png)
    >參考: https://ithelp.ithome.com.tw/articles/10280652
    - ![](https://i.imgur.com/gQWW1fK.png)
    >來自: https://www.51cto.com/article/716299.html
    - 第二次揮手 : Server先回覆已收到終止連線的訊息，表示斷開連線的請求已經受理
    - 第三次揮手 :  Server向上層確認，還有沒有要向Client發訊息，沒有的話才會對Client回覆斷開連線


### UDP(User Datagram Protocol)
- 《快速寫紙條通訊協定》
- 盡力傳遞
    - 沒有確認機制來保證資料是否正確的被接收
- 適合短封包(不用分段的封包)
    - 就不用考慮分段丟失的問題
- 講求的是傳輸速度
    - 例如: 視訊
- ![](https://i.imgur.com/QNAU2Np.png)
    >來自:https://commons.wikimedia.org/wiki/File:UDP_header.png
    - `UDP Length` : UDP 頭部與資料的總長
    - `UDP Checksum` : 用於校驗錯誤(可選的)
### TCP與UDP差異
|  | TCP | UDP |
| -------- | -------- | -------- |
| 可靠性     | 可靠     | 不可靠     |
|    速度  | 慢     |快      |
|    傳輸方式  |    按順序傳輸  |   以串流方式傳輸   |
|   壅塞控制   |  有    |   無   |
|   確認   |   有   |   只有檢查碼   |
|   適用服務   |    可靠傳輸的服務，例如電子郵件、網頁瀏覽、檔案傳輸  |  即時服務，例如串流媒體、網路電話、網路遊戲    |
> 來自:https://nordvpn.com/zh-tw/blog/tcp-udp-bijiao/
- 壅塞控制: 確保網路上的流量不會超過網路的容量和負載能力，以防止網路壅塞和封包損失
    - TCP 通過調整封包的傳輸速率來實現壅塞控制，當網路傳輸量增加時，TCP 會降低封包的傳輸速率
    - UDP 可能就會出現 網路壅塞和封包丟失的情況 
### port
- 知道對方電腦的ip，但要使用對方電腦的哪個服務，就需要 port
> 舉例 : port 22 表示 SSH 的服務，當我們今天要連接到對方電腦的 ssh服務
- 每個port對應到不同的服務
- 就像一個郵局(IP位置)，有不同的窗口(port)會執行不同的業務
- `cat /etc/services` : 查 port 的占用狀況
- `grep -w 80 /etc/services` : 查詢指定port
    - ![](https://i.imgur.com/wyfMrFQ.png)
:::info
### 常見的 port
| port號 | 服務 | 
| -------- | -------- | 
| 21    | 	FTP，檔案傳輸協定的命令通道   | 
| 22     | SSH，較為安全的遠端連線伺服器    | 
| 23    | 	Telnet，早期的遠端連線伺服器軟體  | 
| 25    | 	SMTP，簡單郵件傳遞協定，用在作為 mail server 的埠口  | 
| 53    | DNS，用在作為名稱解析的領域名稱伺服器   | 
| 80    | 	WWW，全球資訊網伺服器  | 
| 110    | POP3，郵件收信協定  | 
| 443    | https，有安全加密機制的 WWW 伺服器  | 

:::


 
 
 
## Application Layer
![](https://i.imgur.com/s3T3yKA.png)
- 提供各種網路服務


 ==執行在 TCP 協定上的協定==

### HTTP（Hypertext Transfer Protocol，超文本傳輸協定）
- 當你在網路上看到一個網頁時，你的電腦需要向網站的伺服器發送一個請求，要求網站把這個網頁的資訊傳回你的電腦
- HTTP協定就是一個讓這樣的請求和回應能夠在網路上順利進行的規則，確保不同的電腦可以交換資料
- Client-Server架構
    - ![](https://i.imgur.com/GWogrfj.png)
- ![](https://i.imgur.com/HaDeaAP.png)
    >來自：https://bytesofgigabytes.com/networking/how-http-request-and-response-works/
- Client(客人) 與 Sever(達美樂) 的關係只是一時的(可能會互換)

#### HTTP的內容

- ![](https://i.imgur.com/ZR8SrTf.png)
>來自:https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages

##### Requests
1. **Start Line**
```
POST / HTTP/1.1
```
- `Method` : 請求的方法
- `Request target` : 請求的目標，通常是網址或者協議
- http的版本

:::info
### Method
- 發送的 Request 根據不同的用途，有查詢、新增、修改或者是刪除，是為了讓 Server 能夠清楚辨別 request 的目的
- 從客戶端發出 Request時，通常會定義以下資訊，以預覽 Google 首頁為例
- 通常一個 Method 都會搭配一個 URL
    - ![](https://i.imgur.com/xKQcJLy.png)
    >取自:https://medium.com/pierceshih/%E7%AD%86%E8%A8%98-%E4%BD%95%E8%AC%82-http-%E5%82%B3%E8%BC%B8%E5%8D%94%E5%AE%9A-1d9b5be3fd24
- 假設今天要寄出一封信
    - `GET`: 掛號的寄件方式
    - `www.google.com` : 地址
    - `Message Body` :信件內容
- 使用`GET`瀏覽網頁:`Message Body`為空
- 如果填寫表單，那client會送出資料，這筆資料會被送到server的資料庫
    - 則使用`POST`方法將資料送進`Message Body`，提交給某個指定的 URL，進而建立資料或更新資料
#### 常見的 Method
| Method |  |
| -------- | -------- | 
| GET     | 讀取資料   | 
| POST     | 新增資料   | 
| Patch     | 修改資料   | 
| Put    | 修改資料（若該筆資料不存在，則自動新增資料）   | 
| DELETE     | 刪除資料   | 


:::



2. **HTTP headers**
- ![](https://i.imgur.com/FMY1Ya4.png)
- `host` : server 的網址
- `Accept` : 要求服務端回應的文件型態
- `Content-Type` : 宣告遞送給對方的文件型態
    - 例如:瀏覽器的表單 (FORM) 要提交表單內容給服務端程式

3. **Empty line**
- 代表 HTTP headers 的內容已結束，後面可能有 body 資訊
4. **Body**
- 這裡會帶有主要的溝通資訊內容
- 根據不同的 method而有所不同
- `GET`、`DELETE` 不會帶有 body
- `POST`則會把資訊放入Body裡面

##### Responses
1. **Start Line**
```
HTTP/1.1 403 Forbidden
```
- http的版本
- `Status Code` : 狀態碼
- `Status text` : 簡短說明 Status Code 是什麼意思
    - Forbidden:禁止
:::info
#### Status Code
- 來告訴 client 這個 request 到底是成功還是失敗
- 按F12 可以看到狀態碼
    - ![](https://i.imgur.com/NMhB3xx.png)

##### 常見的狀態碼
- `200` : 請求成功
- `404` : 請求失敗，找不到頁面
##### 分成五類
- `1XX` : 收到請求，請求者繼續執行操作
- `2XX` : 操作被成功接受並處理
- `3XX` : 需進一步操作才能完成
- `4XX` : cleint端錯誤
- `5XX` : server端錯誤

:::

2. **HTTP headers**
- ![](https://i.imgur.com/sWRSv5n.png)
- `Server` : 透過什麼webserver來回應
- `content-type` :定義回應格式，client端才會知道該如何打開訊息
3. **Empty line**
4. **Body**
- 會帶著 server 要回傳給 client 的資料
- 通常會是程式碼檔案，渲染畫面給使用者看

### FTP（File Transfer Protocol，檔案傳輸協定）
- 當你需要從一個網站下載(上傳)一個檔案時，你可以使用 FTP 協定來建立與該網站的連接，然後將檔案下載(上傳)到你的電腦上
- FTP 協定是用來在網際網路上傳輸檔案的一種協定

- ![](https://i.imgur.com/uSObkXP.png)
    - FTP Server : 提供給別人作上下傳服務
    - FTP Client : 去抓檔案、傳檔案給別人
    - 傳送時，程式會自動將檔案切成多個小塊，以便快速傳輸，之後再由接收端程式將切割過後的小塊重新組合
- ![](https://i.imgur.com/5uWOgJx.png)
    - 用戶端要求檔案，伺服器則提供檔案，因此建立連線需要用到兩條TCP連線
    - 控制連線(port 21): 用來傳輸控制指令
        - 隨時保持暢通
    - 資料連線(port 20): 用來傳輸資料
        - 只有在傳輸才會建立，傳送完就會中斷
    1. FTP 檔案傳輸系統採用 Client-server ，FTP 伺服端隨時監視埠口 21（tcp/21）是否有連線要求。FTP 客戶端需要連線時，便由著名埠口 21 連結到 FTP 伺服器。
    2. 伺服端同意連線後（驗證使用者名稱及密碼），便建立並保持著控制連線，以便隨時交換訊息，當需要傳輸檔案時，再建立資料連線，傳輸後立即釋放該資料連線，一般伺服端的資料連線都建立在埠口 20（20/tcp）。
    3. 雙方透過資料連線來存取各自檔案系統（File System）中的檔案。
    >來自: https://hackmd.io/@ncnu-opensource/book/https%3A%2F%2Fhackmd.io%2F%40Alanjy-Huang%2FryARVogrj



==執行在 UDP 協定上的協定==

### DHCP（Dynamic Host Configuration Protocol，動態主機組態協定）
- 當你連接到一個新的 Wi-Fi 網路時，你的裝置需要一個 IP 位址才能夠在網路上通訊
    - 如果沒有 DHCP 協定，你需要手動設定 IP 位址和其他網路相關的設定，非常麻煩
    - 但是有了 DHCP 協定，你的裝置可以自動向網路中的 DHCP 伺服器發送請求，然後獲取所需的 IP 位址和其他設定
- 當今天有100部電腦需要設置?
- 藉由一部主機來自動的分配所有的網路參數給所有電腦
    - 提供用戶端電腦動態的 IP 位址、子網路遮罩、預設閘道器與 DNS 的位址等
    - 減少用戶手動設定 IP 位址的麻煩 
- ![](https://i.imgur.com/pUsmhKs.png)

- ![](https://i.imgur.com/UNUQpUg.png)
>來自:https://www.stockfeel.com.tw/dhcp%E4%BC%BA%E6%9C%8D%E5%99%A8%E6%98%AF%E4%BB%80%E9%BA%BC%EF%BC%9F%E5%A6%82%E4%BD%95%E9%81%8B%E7%94%A8%EF%BC%9F/#p-2
- a : 用戶端電腦發出廣播封包到整個子網路，向負責這個子網路的 DHCP 伺服器要求 IP 位址來連接網路
- b : DHCP 伺服器回應用戶端電腦的要求，指定一個未被使用的 IP 位址給用戶端電腦使用
- c : 用戶端電腦收到 DHCP 伺服器所提供的 IP 位址後，發出回覆給 DHCP 伺服器，表示接受 DHCP 伺服器所指定 的 IP 位址
- d : 由 DHCP 伺服器回應用戶端電腦確認訊號，表示用戶端電腦可以使用這個 IP 位址連接網路
> IP: 房間 ， 用戶端電腦 : 你 ，  DHCP伺服器 : 住服組


==執行在 TCP 和 UDP 協定上的協定==

### DNS（Domain Name Service，域名服務）
- 當你想要打開一個網站，但是你只知道它的名字，如果沒有 DNS，你就需要記住這個網站的 IP 位址，然後才能打開它
- DNS 的存在可以讓你輸入簡單的域名，然後由 DNS 伺服器幫你找到對應的 IP 位址，讓你更輕鬆地瀏覽網路和使用網路資源
- ![](https://i.imgur.com/F7EBxp7.png)
- 使用UDP
    - 因為UDP具有較低的延遲
- 使用TCP
    - 當傳輸的 DNS 封包大小超過了 UDP 的最大限制（約 512 位元）時，DNS 就會使用 TCP 協議來進行傳輸
    - 如果用戶端未收到來自 DNS 的回應，則間隔 3-5 秒後會使用 TCP 重新傳輸資料
>來自:https://ithelp.ithome.com.tw/articles/10273420


#### DNS 命名方式
整個 DNS 系統裡包含三種網域名稱系列：
- 採樹狀階層式的架構
    - 以 cu.edu.tw. 網域為例 :
        -  子網域 : cis.cu.edu.tw
        -  主機 : linux.cu.edu.tw 
- TLD(Top-level Domain)
    - 頂級域名
    - 例如 : com、edu、tw、jp  

- ![](https://i.imgur.com/6QCAHLu.png)
> 來自 : http://www.tsnien.idv.tw/Manager_WebBook/chap5/5-3%20%E7%B6%B2%E5%9F%9F%E5%90%8D%E7%A8%B1%E7%B3%BB%E7%B5%B1%E5%88%86%E6%9E%90.html
- 反向網域 : 由 IP 位址查詢到 Domain Name
- 通用網域 : 大多以三個英文字母表示某一組織單位的網域名稱，此網域名稱都以美國本土單位為主
    - com : 公司、企業
    - gov : 政府
    - edu : 教育單位
- 國家網域 : 大多以兩個字母來表示某一國家的網域名稱 
    - 例如 : tw 、 jp

 
#### FQDN (Full Qualified Domain Name)
- 完整網域名稱
- 一個網站或主機在網路上的完整識別名稱
- 『主機名稱 (Hostname) 』 + 『網域名稱 (Domain name )』 + 『. (root)』
- 『linux.cis.cu.edu.tw.』
    - 『主機名稱』 : linux
    - 『網域名稱』 : cis.cu.edu.tw
    - 『.』 :  root




#### DNS 查詢過程
- 當在 linux 系統輸入 domain name 時，會先檢查 `/etc/hosts`確定裡面有匹配的 IP 嗎
- 如找不到， linux 會發出 DNS 請求
- 先去本機的 DNS cache中查
    - 如果之前已經解析過，本機就會將結果保存在 DNS cache中
- 如沒有，會向本機預設的 DNS Server 傳送請求，然後去本機預設的 DNS Server 的 cache中查
    - 預設的 DNS 伺服器在 `/etc/resolv.conf` 裡面
- 如沒有，則會向上層 DNS Server 傳送請求，直到能解析該 domain name
- ![](https://i.imgur.com/MVUxw66.png)

#### 相關設定檔
- `/etc/hosts` : 本機的 IP 地址對應表
    - 紀錄一些特殊的 domain name
- `/etc/resolv.conf` : 預設的 DNS Server
    -    DNS 伺服器的 IP 可以設定多個(備援)
#### DNS 紀錄 
- DNS Server 會根據此 domain name 查詢相關的紀錄
    - 如果該 domain name 設定 A 紀錄，在  DNS 查詢過程就會使用 A 紀錄
    - 像是搜尋 google.com ，DNS Server 先查詢到它是使用 A 紀錄，所以就會回傳 IPv4 


| DNS紀錄 | 作用 |
| -------- | -------- | 
|    A  |   IPv4 的 IP 位址   |
|   AAAA    | IPv6 的 IP 位址     |
|  NS     |    管理這個領域名稱的伺服器主機名字  |
| MX      |   主要用於傳輸電子郵件使用   |
|    CNAME   |   實際代表這個主機別名的主機名字    |



#### 指令
- `dig`
    - `dig www.ncnu.edu.tw`
        - ![](https://i.imgur.com/yTLLk2H.png)
        - [待查資料] [暫存時間(秒)] IN [[資源類型] [資源內容]]
   - 暫存時間
       - TTL(time to live )
       - 當這筆記錄被其他 DNS 伺服器查詢到後， 這個記錄會保持在對方 DNS 伺服器的快取中，保持多少秒
       - 試試看反覆執行 !
           - 這個數字歸零後，下次有人再重新搜尋這筆記錄時，你的 DNS 就會重新沿著 . (root) 開始重來搜尋一遍， 而不會從快取裡面抓取
   
   - `dig -t A www.ncnu.edu.tw`
        - ![](https://i.imgur.com/WtH1T3I.png)
   - `dig -t ns ncnu.edu.tw`
       - 查詢 www.ncnu.edu.tw 是由哪部 DNS 伺服器提供的
       - 要輸入 domain Name 才查的到
       - ![](https://i.imgur.com/uXAKnTv.png)
           - 至少會有兩部以上才不會掛掉
   - `dig +trace www.ncnu.edu.tw`
        - 查看 DNS 的搜尋過程
        - . --> .tw --> .edu.tw --> .ncnu.edu.tw --> www.ncnu.edu.tw 
        - ![](https://i.imgur.com/WbqyM2C.png)

- `host -a www.ncnu.edu.tw` 
    - 查出所有重要參數
    - ![](https://i.imgur.com/vybLJOC.png)


- `nslookup www.ncnu.edu.tw` 
    - ![](https://i.imgur.com/HVwNzA4.png)
    - 其中 `127.0.0.53` 是查詢的 DNS 伺服器
        - 預設會使用 `/etc/resolv.conf` 內設定的 DNS 伺服器
- `whois www.ncnu.edu.tw`
    - 可以查詢到當初註冊這個 domain 的使用者的相關資訊
    - 近年來很多網路資訊安全的問題
        - 查詢到的資訊已經不見得是完全正確
    - ![](https://i.imgur.com/KCBNfOD.png)



    

---


## TCP/IP統整
| 層級 | 負責事項 | 傳送依據 |說明 |
| -------- | -------- | -------- |-------- |
|    Application  |  提供各種網路應用程式  |   |   HTTP,FTP,,DHCP,DNS        |
| Transport     |   根據不同的用途提供不同的通訊品質  |  port |TCP,UDP |
|   Network   | 決定資料如何傳送到目的地    | IP Address  | IP, ICMP,ARP        |
|  Data Link    | 負責網路對硬體的溝通    | MAC Address  |   Ethernet, Wi-Fi        |

- 分層的好處 
    - HTTP(應用層)，規範預覽網站的規則，像是傳輸內容的格式，就不用管封包沒有送達怎麼辦，這類的問題就是交給TCP(傳輸層)
- 盡可能的把抽象和實際的應用之間做一個連接，有些應用不見得可以很明確的歸類在某一層

## 參考資料
- https://zh.wikipedia.org/zh-tw/TCP/IP%E5%8D%8F%E8%AE%AE%E6%97%8F#%E5%BA%94%E7%94%A8%E5%B1%82https://miahsuwork.medium.com/%E7%AC%AC%E5%85%AD%E9%80%B1-%E7%B6%B2%E8%B7%AF%E5%9F%BA%E7%A4%8E-tcp-ip-f89cc09f1f36
- https://yakimhsu.com/project/project_w4_Network_http.html
- https://sls.weco.net/CollectiveNote20/HTTP
- https://www.seo-panda.tw/http-status-code-202112/#HTTP_Status_Code_1xx_%E8%A8%8A%E6%81%AF
- https://medium.com/johnny%E7%9A%84%E8%BD%89%E8%81%B7%E5%B7%A5%E7%A8%8B%E5%B8%AB%E7%AD%86%E8%A8%98/%E7%B6%B2%E8%B7%AF%E6%A6%82%E8%AB%96-%E4%BB%80%E9%BA%BC%E6%98%AFhttp-460c101c553
- https://www.rocksaying.tw/archives/21334380.html
- https://ithelp.ithome.com.tw/articles/10246761?sc=pt
- https://medium.com/pierceshih/%E7%AD%86%E8%A8%98-%E4%BD%95%E8%AC%82-http-%E5%82%B3%E8%BC%B8%E5%8D%94%E5%AE%9A-1d9b5be3fd24
- https://linux.vbird.org/linux_server/redhat9/0340dhcp.php#theory_Whatisdhcp
- https://hackmd.io/@ncnu-opensource/book/https%3A%2F%2Fhackmd.io%2F%40Alanjy-Huang%2FryARVogrj#TCP
- https://ithelp.ithome.com.tw/articles/10282225
- https://ithelp.ithome.com.tw/articles/10280652
- http://www.raidenftpd.com/tw/ftp.html
- https://www.pcnet.idv.tw/pcnet/network/network_ip_tcp.htm
- https://articles.onlinetoknow.com/dns/