---
# System prepended metadata

title: 企業資訊通訊與網路

---

# 企業資訊通訊與網路
## 引言
- 中文與英文是「協定」
- 透過中文或英文溝通是「通訊」
- 講話的內容是「資料」

![image](https://hackmd.io/_uploads/ryc8PVYl1g.png)
- 使用的語言(協定)不同，理解不能

---

![image](https://hackmd.io/_uploads/SkeWLNYgkx.png)
- 使用的語言(協定)一樣，溝通無礙

---

人類具有智慧、理解力，即使脫離原則，還是可以與對方溝通
![image](https://hackmd.io/_uploads/ry0t_NFgJg.png)
但電腦沒有這樣的理解力，在電腦之間的通訊，無論是以太網路等實體層，還是應用程式的軟體層面，都需要明確規範並遵這個約定，這個約定就是「協定」

---

約定是約定了，但要聽誰的...？
![image](https://hackmd.io/_uploads/SyEo6VFgyg.png)

---

![image](https://hackmd.io/_uploads/HJxNyHFeyg.png)

---

## OSI 模型
> OSI 模型沒有具體的協定，而是抽象的參考模型，不是一個標準，而是一個在制定標準時所使用的概念性框架

|   | 層 | 功 能 | 範 例 |
| - | --- | --- | --- |
| 7 | 應用層 | 針對應用程式的協定 | 電子郵件、檔案傳輸、遠端連線 |
| 6 | 表現層 | 負責資料的加密和解密，確保不同格式之間的轉換和壓縮 | JPEG、GIF |
| 5 | 會議層 | 決定通訊會話的建立、連接時間和切斷 | NFS會話控制、SIP會話發起協定 |
| 4 | 傳輸層 | 提供值得信賴的資料傳輸，可以進行流量控制、錯誤檢測和重傳 | TCP、UDP |
| 3 | 網絡層 | 確保封包在不同網路間的路由路徑選擇和轉發 | IP、路由器、ICMP |
| 2 | 資料鏈接層 | 負責 Message 與 bytes 之間的轉換 | MAC address、PPP |
| 1 | 實體層 | 負責網路硬體的傳輸方式，包括訊號的生成、電壓控制、訊號傳輸速率等 | 以太網路纜線、Wi-Fi、藍牙 |

---

我們用 HTTPS 來解釋 OSI 模型

### **應用層 Application Layer**
   - HTTPS 會在這一層發起請求和接收回應。在瀏覽器中輸入網址後，應用層負責和 Web 伺服器之間進行通訊，建立一個 HTTPS 連線，並將 HTTP 資料封裝進這個連線中傳送。

### **表現層 Presentation Layer**
   - 這層主要處理數據的加密和解密。HTTPS 使用的 TLS/SSL 加密技術就在這一層，將應用層的資料進行加密處理，確保數據傳輸的安全性和隱私性。

### **會議層 Session Layer**
   - 在 HTTPS 中，會議層管理伺服器和客戶端之間的會話。例如，建立、維護和終止加密的 HTTPS 會話（如 TLS 會話）就在這一層進行。

### **傳輸層 Transport Layer**
   - 這一層負責資料的傳輸和連接的可靠性。HTTPS 使用 TCP 來進行數據傳輸。當你建立一個 HTTPS 連線時，傳輸層會先建立一個 TCP 連接，保證數據包按順序、無遺失地傳遞。

### **網路層 Network Layer**
   - 網路層處理資料包的路由與轉發。當使用 HTTPS 時，網路層會將資料包從客戶端傳送到伺服器，確保每個封包找到正確的路徑傳送到目的地。

### **資料連接層與實體層 Data Link & Physical Layer**
   - 負責實際的硬體傳輸，像是光纖、Wi-Fi 等介質，數據會以電子訊號形式在硬體設備間傳輸。當我們使用 HTTPS 瀏覽一個網站時，資料的物理傳輸就在這一層進行。

---

雖然 OSI 模型劃分了七層，但在實際應用上，很少有產品可以符合 OSI 模型的定義，有些層數在實務上是可以合併的，這裡來談談 DoD 模型，別稱 TCP/IP 模型

---

## TCP/IP 模型

雖然兩種模型各有自己的架構，但基本上能互相對照
![image](https://hackmd.io/_uploads/HyM5QStlJg.png)

|OSI 模型||DoD 模型(TCP/IP 模型)|
|---|---|---|
|國際標準化組織 (ISO) |主要組織| 美國國防部（Department of Defense） |
|七層|層數|四層|
|理論性的分層模型，不常用|用途|現實世界中網絡通訊常用的模型|

## Fragments, Frames, and Packets

![image](https://hackmd.io/_uploads/SkskGgpxC.png)

---

# Ch1&2 TCP/IP 各層內容

## Link layer

![image](https://hackmd.io/_uploads/ryCcckv66.png)

### Ethernet vs Wi-Fi

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

---

### MAC Address

![image](https://hackmd.io/_uploads/BJej-kPpT.png)

> windows: ipconfig /all

一張網卡，一個 MAC address
> 同一區域網路 mac addr 絕對不能重複到，但不同區域可以接受 (因為不同IP)

在區網路內的地址
> 班級內的座號，同班級只能有唯一一個座號，但不同班可以有相同的座號

一張網卡，一個 MAC address
> 同一區域網路 mac addr 絕對不能重複到，但不同區域可以接受 (因為不同 IP)

- 乙太網路將封包送出後，最終目的地的所有電腦都會收到封包，但為了知道封包要傳送的對象，所以每張 Ethernet 網路卡都邊有一個獨一無二的位置，稱為 **Media Access Control Address**
- 在每一張 Ethernet 網卡出廠之前就已經將 MAC Address 寫在網路卡的 ROM，一張網卡就有一個 MAC Address在裡面
    - 可以虛擬、重設定
- 所有想生產網卡的廠商需要向 IEEE 註冊，取得合法的廠商代號，稱為 OUI，目的是為了確保全球唯一性，避免 MAC Address重複
- MAC 層的每個封包都會記載「從哪裡送出」（Source MAC Address），「到哪裡去」（Destination MAC Address），比對過後就可以得知自己是否為傳送的對象，看是要丟棄此封包，還是要繼續處理此封包
  > 舉例：XxX 電話！如果不關我的事就假裝沒聽到

:::info
- MAC 地址是以6 Bytes(48bits)表示
    - 第 1 bit 為單播位址 Unicast ( 0 )/群播位址 MuIticast ( 1 )。
    - 第 2 bit 為廣域位址( 0 )/區域位址( 1 )。
    - 前 3 ~ 24 bits 為廠商代號。
    - 後 24 bits 為產品流水號。例外: MAC 地址中所有 bit 都為 1 (FF:FF:FF:FF:FF:FF),代表是廣播位址
    > 所有公寓的住戶都在一起慶祝特殊活動，使用喇叭廣播音樂，這樣每個人都能聽到

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

:::success
查看 ARP Table
- `arp -n`: 以 IP Address 查看 Table
- `arp -d <ip 位址>`: 刪除特定紀錄
- `arp -s <ip 位址> <Mac 位址>`: 新增一筆靜態紀錄
    > 過了兩分鐘不會被刪除，但重新開機後就會被清除
:::

---

### Connecting device

- 早期用 hub
![](https://upload.wikimedia.org/wikipedia/commons/d/d9/4_port_netgear_ethernet_hub.jpg)
    - broadcast 收到資料就全部傳出去
    > 不安全，在連同一個 hub 的情況下，資料會互通
    - 半雙工(half-duplex) 
        - 收資料或送資料不能同時，一次只能作其中一種

![](https://dahtrang.com.tw/images/2023/04/06/rj45colorcode.jpg)

---

- 現在 switch 最常見
![](https://upload.wikimedia.org/wikipedia/commons/b/b9/2550T-PWR-Front.jpg)
- 可以建立 MAC address table
    > 不同種類、規格儲存不同數量的 Mac address
- 每個 port 會紀錄 client 的 Mac address
    > 檢查 Mac address 後會指定一個 port 傳輸，解決資料互通的隱憂

    ![](https://i.imgur.com/6xbhENb.png)
- 全雙工

---

## Internet Layer
![image](https://hackmd.io/_uploads/rJkT61v6T.png)

### 網域
- 連線方式
    - 同網域: 可以直接透過 CSMA/CD 傳送資料，網卡對網卡(MAC frame)
    - 不同網域：需要藉由 Router 將不同網域連接。

---

### Router
![](https://i.imgur.com/ED987PS.png)
- 若 PC01 要傳送資料給 PC11 時：
    1. 看封包目標 IP 位置。
    2. 查看自己主機的 Net_ID 是否與封包的相同(屬於同區網)，若相同可以直接傳給目的主機。
    3. 若不同，查詢 default gateway (此為 Server A) 並傳給它。
    4. 不理會封包流向，default gatway 會執行上述動作繼續往目的地傳送。

:::info
如何查看自己的 routing table
- `route`：主機已 domain name 的方式呈現
- `route -n` 主機名稱以 IP 的方式呈現
![image](https://hackmd.io/_uploads/Sy6UCJvaT.png)
:::

---

### IP
Internet Protocol 中的 IP Address （簡稱 IP）
同樣分 Source & Destination Address
- IPv4: IP address 以32 bits 表示，為目前主流
    - 現在在網路上的主機數已將多過 IPv4 32位元可以表示的數量
    - 2^32 = 4294967296
- IPv6: IP address 以 128 bits 表示，未來趨勢，以 128 bits 的方式呈現

---

### IP address
IP 位址（IPv4 位址）在電腦內部是以二進位 32bits 處理，但我們很難解讀二進位，所以我們採用分組的方式，將 32bits 的 IP 位址，以 8 位元分成一組，共分成四組，並以十進位表示，像是 10.107.26.215 就是

|          |          |          |          |     |
| -------- | -------- | -------- | -------- | --- |
| 00001010 | 01101011 | 00011010 | 11010111 | BIN |
| 10       | 107      | 26       | 215      | DEC |


:::success
MAC Address VS IP Address
| MAC addr | IP addr |
| ----- | ----- |
| 區網路下區分裝置 	| 控制裝置在全球網域下的溝通
| 12digits, 6 對 16進位 <br> EX: CC-3A-2A-E1-51-AA |	IPV4: 32bits 4對3位十進位表示 <br> 192.168.0.121 <br> EX: IPV6: 128bits 8 對 4 位 <br> EX: fe80::f060:18c6:27de:595d...
| 不能隨意改變(要跟IEEE申請) | 可任意改變
| physical address | logical address
| 寫在網卡的 bios 內 | 在傳遞過程中改變
:::

:::info
:::spoiler 點擊展開 補充：Gateway
- 一般人放在家裡的**住宅閘道器**（residential gateway）通常提供：
    - 通過網頁介面設定
    - 在家庭網路與網際網路之間路由 (Router)
    - 提供家庭網路的連通性，就像一台網路交換器 (Switch)
	- 網路位址轉換（NAT）
	- DHCP
	- 防火牆功能
- 也可能內建
	- 數據機 (modem，modulator-demodulator 的縮寫，俗稱小烏龜)
	- 動態 DNS (DDNS)
	- Wi-Fi 基地台
:::

:::warning
### LAN vs WAN
- LAN(Local Area Network)
    - ip: 192.168.0.1 or 10.0.1.256
- WAN(Wide Area Network)
    - 接外部 IP 地址用
    - WAN 就是由多個 LAN 組成之集合

同一網域  透過 switch 用 MAC address 溝通
不同網域 透過 Router 用 IP address 溝通
:::

---

## Transport Layer

![image](https://hackmd.io/_uploads/SJbH7xvpp.png)
:::info
- 如果只有 IP 位址，若有不同的軟體要同時進行傳輸，所有的資料就會從同一個出口一起通過，會產生碰撞。
    - 連接埠：讓同一台電腦擁有多個對外的出口，讓網路傳輸有多工的能力
- 每個 Port 對應到不同的網路
:::

### Port (通訊埠(ㄅㄨˋ)口)
- 接收方與傳送方皆需要 port（連線通道）來傳遞資料
    - 舉例: IP 為門牌號碼， port 為哪個窗口
    - https: 443, www: 80
    - 為TCP Header 的 Sourse Port 與 Destination

---

### UDP(User Datagram Protocol)
- ![](https://i.imgur.com/e9e2UHr.png)
    - Checksum: 確認資料是否丟失
- 僅提供傳輸基本功能，負責處裡封包要傳送到哪個 Port
![image](https://hackmd.io/_uploads/B1sTLJF-Jg.png)

- 追求即時性且能容忍一些封包丟失的情況（盡力傳遞）
    - 串流服務、視訊、音訊

- 優點：比較快、資料大小較小

---

### TCP
- 可靠的傳輸方式—>保障資料完整性
    - 連線導向 (Connection-Oriented)：傳輸資料前先建立連線，協調參數(用於資料確認與重送、流量控制)
    > 利用三項交握建立連線
    - 資料確認與重送：確認目的端是否收到已送出的資料 
    - 流量控制：視情況調整資料傳輸的狀況，盡量減少資料的流失

#### Three-way Open
![image](https://hackmd.io/_uploads/H1YbyiVbJe.png)

| SYN | SYN, ACK |
| -------- | -------- |
| ![image](https://hackmd.io/_uploads/BJ-ogoNWkg.png) | ![image](https://hackmd.io/_uploads/Bkihlo4Z1g.png) |

![image](https://hackmd.io/_uploads/HkjqoX77p.png)

#### 資料確認與重送
- A 傳送 packet1 給 B
- B 回應 ACK 封包給 A
- 如果A在時間內沒有收到B的ACK封包A就會重新傳送 packet 給 B

| SYN | SYN, ACK |
| -------- | -------- |
| ![image](https://hackmd.io/_uploads/BJ-ogoNWkg.png) | ![image](https://hackmd.io/_uploads/Bkihlo4Z1g.png) |

以這張圖為例，我發送了一個封包序號為 801223437 的封包， server 收到後會回應 801223438 也就是 801223437+1，表示 801223438 之前的資料都收到了。

假設今天這個封包在傳輸過程遺失了，我們過了一段時間都沒有收到來自 server 回傳的 Ack. Number = Seq. Number+1，我們就可以知道資料遺失，進而重新傳送資料，完成可靠性的通訊。

#### TCP Header

![image](https://hackmd.io/_uploads/rJuLsS_L6.png)

- SourcePort(來源埠號):
長度為 16 bits，用來記錄來源主機的 port

- DestinationPort(目的埠號):
長度為 16 bits，用來紀錄目的主機的 port

- SequenceNumber(序列號):
長度為 32 bits，用來記錄每個封包的序號。當 TCP 資料太大時(大於 IP 封包的容許程度)就必須進行分段，利用 Sequence Number 讓接收端組合資料

- AcknowledgmentNumber(確認號)：
長度為 32 bits，接收端確定之前傳遞的封包已被正確收下

:::spoiler Code (Control Flags, 控制標誌碼):
長度 6 bits，用來控制訊息的傳遞。此欄位共 6 bits 分別代表 6 種不同功能的控制碼，只要該位元被設定為 1，表示此封包內有包括該訊息。

- URG(Urgent，緊急):
若為1表示該封包為緊急資料，接收端應該要緊急處理，並使 Urgent Point 欄位被啟用。

- ACK(Acknowledge，確認回應):
若為1表示該封包為回應封包，具回應確認功能，確認 Acknowledge Number 欄位中所指定的順序號碼。

- PSH(Push，推送):
若為1表示要求對方立即傳送緩衝區內的其他對應封包，無須等待緩衝區滿了才送。

- RST(Reset，重設):
若為1表示連線被立即結束(強迫性)，無需等待終止確認手續，且發送端已斷線。

- SYN(Synchronous，同步):
若為1表示發送端通知對方要求建立連線。

- FIN(Finish，完成):
若為1表示傳送結束，通知對方資料傳輸完畢，是否同意斷線。發送者還在連線中等待對方回應。
:::
:::spoiler 其他
- Window（視窗大小）:
代表「接受視窗」(receive window) 的大小，用來控制封包流量，告訴對方目前本身還有多少緩衝器(Receive Buffer)可以接收封包。

- Checksum（檢查碼）：
確定所收封包是否在傳輸過程中出現錯誤

- UrgentPoint（緊急資料指標）：
指出緊急資料在 TCP 資料的哪裡
ex. Urgent Pointer = 3 :arrow_right: TCP 資料的 0~3 個 bytes 是緊急資料
:::

#### Closing
![image](https://hackmd.io/_uploads/S1Z5jbcMC.png)

---
### TCP/UDP 比較

|    | TCP       | UDP      |
| -------  | ----------- | ----- |
| 可靠性    | 可靠       | 不可靠 |
| 封包確認   | ACK      | -     |
| 速度      | 慢       | 快    |
| 傳輸方式   | 封包按順序傳輸  | 封包以串流方式傳輸                        |
| 錯誤檢查與修正 | 有    | 無   |
| 逾時處理  | 逾時重傳、高速重傳(指定封包)   | 逾時重傳(全部封包)     |
| 雍塞控制  | 有     | 無   |
| 適用服務   | **要求可靠運輸的服務**， ex :SSH、文字聊天、電子郵件、檔案傳輸...等不能漏缺資訊的服務 | **講求速度的即時服務** ex: 串流媒體、網路電話 |

---

## Application Layer
![image](https://hackmd.io/_uploads/HJV7OxPaT.png)

![image](https://hackmd.io/_uploads/SkRQdevaT.png)

![image](https://hackmd.io/_uploads/HJluSyP6p.png)

![image](https://hackmd.io/_uploads/BJTbEgTxA.png)

---

### HTTP(Hyper Transfer Protocol ,超文本傳輸協定)
- 全球資訊網（www）的網路通訊的基礎
- 用於網頁前後端溝通,瀏覽器向伺服器發送請求,伺服器回傳相應的資料

![](https://hackmd.io/_uploads/HJ5ab5HQp.jpg)
:::info
HTTP Request Method


- Get:
    - 較 post 不安全 
    - 訊息會顯示在head,body 不傳資料
    - 傳遞的參數會在URL上顯示
    - 流程:
        - 瀏覽器發出Get請求,只產生一個TCP封包
        - 伺服器回應200 ,表示請求成功,同時返回資料 
- Post:
    - 較Get安全
    - 將參數放至body中再發送request
    - 不會在 URL 看到參數,適合用於隱密性較高的資料, EX: 登入的帳號、密碼等 
    - 流程：
        - 瀏覽器發送 Get 請求,只產生一個 TCP 封包
        - 伺服器回應 200 ,表示請求成功,同時返回資料
- Put：新增一項資料，如果存在就覆蓋過去(維持一筆資料)
- Patch：附加新的資料在已經存在的資料後面（資料必須已存在）
- Delete：刪除資料
- Head：只會取得 HTTP header 的資料
- Option：可以了解 server 提供哪些溝通方法
:::

### FTP
- FTP 是應用於檔案傳輸、檔案共享使用，將共享檔案存放於 FTP 伺服器，讓一般使用者可以透過網路來下載或上傳。他的重要是在異質性電腦之間，以及遠距離的檔案共享。
![](https://i.imgur.com/HLiWvHd.png =80%x)
    > 監控連線: 21 port，傳輸資料: 20 port
1. FTP 檔案傳輸系統採用 **主從式模式**，FTP伺服器端隨時監視埠口 21(TCP/21) 是否有連線要求，FTP 客戶端需要連線時，便由著名埠口 21 連結到 FTP 伺服器
	> 主從式: client 向 server 發 request 才會有 response

2. 伺服器端同意連線後(驗證使用者及使用密碼)，便建立並保持著控制連線，以便隨時間換訊息，當需要傳輸檔案時，再建立資料連線，傳輸後立即釋放該資料連線，一般伺服器端地連線資料連線都建在埠口 20(20/tcp)
3. 雙方透過資料連線來存取各自檔案系統（File System）中的檔案

### DNS
> UDP: 大部分時候 
> TCP: :one:當封包過大時 :two:要確保此 DNS 資料庫資料和其他 DNS 相同時

![](https://i.imgur.com/1cP3OFF.png =80%x)

- UDP 協議： DNS 查詢的資料包較小、機制簡單; UDP 協議的額外開銷小、有著更好的性能表現。

- TCP 協議： DNS 查詢由於 DNSSEC 和 IPV6 的引入迅速膨脹，導致DNS回應經常超過 MTU (傳輸單元最大值)造成資料的分片和丟失，我們需要依靠更加可靠的 TCP 協定完成資料的傳輸。
    > 隨著 DNS 查詢中包含的資料不斷增加，TCP 協定頭以及三向交握帶來的額外開銷比例逐漸降低，不再是佔據總傳輸資料大小的主要部分

- 一般情況皆使用 UDP，因為在查找網址時較講求速度，就算掉包了再重送就好
> 注意！DNS 可能會同時使用 TCP 與 UDP 協定。
- UDP 封包大小較小，資料大小超過 512 位元組的限制時會被截斷，如果從 DNS 得到回應，3~5 秒後會使用 TCP 重送。
> TCP 會對封包
- DNS 區域轉送 (Zone Transfer)，DNS 要確保資料庫(主 DNS 與副 DNS)資料相同，當有變動時，會用區域轉送來保持資料一致，此時會用 TCP 傳送。

---

## TCP/IP 統整

| 層級 |  資料型態   |  負責事項   | 常見協定 | 傳送依據 |
| -------- | --- | --- | -------- | -------- |
|   Application	|    message    |   定義應用程式如何提供服務  |    HTTP, FTP, DNS, SMTP, SSH      |          |
|    Transport| segment    |  負責傳輸過程的流量控制、錯誤處理、資料重送等工作。   |   TCP, UDP, RTP, SCTP |   port   |
|    Internet(Network)  |  packet	|   決定資料如何傳送到目的地。  |  IP, ICMP |    IP Address      |
| Data Link     |  frame |  負責網路對硬體的溝通。   |  Ethernet、Wifi  | MAC Address     |

:::success
### 常見服務對應的 port
| Port number | 服務 |
| --- | --- |
| 21 | FTP（File Transfer Protocol，檔案傳輸協定）|
| 22 | SSH（Secure Shell Protocol，加密式連線）|
| 23 | Telnet （遠端連線伺服器軟體）|
| 25 | SMTP （簡單郵件傳輸協議）|
| 53 | DNS （Domain Name Server，功能變數名稱伺服器）|
| 80 | HTTP （HyperText Transport Protocol，超文本傳輸協定），用在 www|
| 443 | HTTPS (超文字安全傳輸通訊協定是 HTTP 的安全版本) |
:::

![image](https://hackmd.io/_uploads/S1aB7eaxA.png)

---

## 懶人包
:::success
我(Host A)要寄水果(Message)到嘉義布袋給我爸(Host B)
:arrow_down:
TCP 幫我拆成蘋果、香蕉、葡萄三個 Segment
IP Address 加上目的地**嘉義**，起點**南投**、寄件人與收件人，Segment 包成 Packet
MAC Address 加上目的地**布袋**，起點**埔里**，Packet 包成 Frame
:arrow_down:
我大叫讓埔里郵局(Switch)收到消息之後幫我送Frame，大叫就是 Broadcast 廣播
:arrow_down:
埔里郵局看了我的Frame，發現**南投**裡面沒有地方叫**布袋**(目的地網卡卡號不在 LAN 區域網路)，要到**其他縣市**(WAN 外網)，所以送到南投大郵局(Router A)
:arrow_down:
因為我要送的地方在**嘉義**不在**南投**，南投大郵局(Router A)透過地圖(路由表)算出最短路徑(路由演算法)，指定郵差幫我送到嘉義大郵局(Router B)，這種指定傳送的方式稱為 Unicast 單播
:arrow_down:
嘉義大郵局(Router B)幫我轉送到布袋郵局(Switch)
:arrow_down:
布袋郵局(Switch)廣播叫我爸來領貨

:+1::+1::+1::+1::+1:

---

我(Host A)要寄一盒刀片到草屯~~分局~~某田性少年(Host B)
:arrow_down:
TCP 幫我拆成一片一片的刀片，Segment
IP Address 加上目的地**南投**，起點**南投**、寄件人與收件人，Segment 包成 Packet
MAC Address 加上目的地**草屯**，起點**埔里**，Packet 包成 Frame
:arrow_down:
我大叫讓埔里郵局(Switch)收到消息之後幫我送Frame
:arrow_down:
埔里郵局(Switch)看了我的Frame，發現**南投**裡面有地方叫草屯(目的地網卡卡號在 LAN 區域網路)，所以直接寄到草屯郵局(Switch)
:arrow_down:
草屯郵局(Switch)看了IP與MAC Address，確實是寄到這，廣播收件人
:arrow_down:
田少年獲得刀片

:::

---

# Ch.3 Network Security
## DDoS
![image](https://hackmd.io/_uploads/SkW6ssvxA.png)

1. 阻斷服務攻擊（DoS攻擊）的目的是通過大量非法請求淹沒目標，導致Website、Server或其他網路資源的功能中斷。
2. 在分佈式阻斷服務（DDoS）攻擊中，直接攻擊受害者的程式通常被稱為機器人（bots）或殭屍電腦。這些是由更大的受感染機器網路組成，稱為機器人網（botnet），這些機器同時發送大量流量或請求以壓倒目標系統。
3. 在此背景下用於攻擊的受感染電腦集合被稱為“botnet”。這些機器通常被惡意軟體感染，使它們能夠在擁有者不知情的情況下被遠程控制。
4. 控制botnet的人通常被稱為“bot-master”或“bot-herder”，這個人可以命令botnet執行惡意活動，包括DDoS攻擊、發送垃圾郵件和竊取資料。
5. 在DDoS攻擊的背景下，攻擊者向botnet中的受感染電腦（bots）發送消息或命令。然而，這些命令的最終目標是攻擊者打算攻擊受害者的Server或基礎設施。
6. 機器人能夠從botmaster處接收更新的命令和軟體，botmaster能夠根據需求調整網路行為和部署各種類型的攻擊，以及通過改變策略來逃避檢測。
7. 分佈式阻斷服務（DDoS）攻擊的步驟通常包括：
    :::spoiler 攻擊的步驟
   - **招募**：透過釣魚攻擊、利用漏洞或嵌入可下載文件的惡意軟體來感染多台電腦，創建botnet。
   - **控制**：攻擊者建立對botnet的控制，使用命令和控制（C&C）server，使得遠程指揮受感染的機器成為可能。
   - **執行**：攻擊者向botnet發送命令以啟動攻擊。每個機器人向目標系統發送請求，如HTTP請求或TCP連接請求。
   - **擴展**：在某些攻擊中，惡意流量被擴展，增加其效力。例如，使用開放的DNS或NTP server的擴展效應。
   - **影響**：目標server或網絡因大量請求而壓倒，導致服務速度降低或造成服務中斷。
   - **持續**：攻擊通常會持續一段時間，或間歇性重複，以持續阻斷服務或利用談判勒索。
    :::

### 應對DDoS攻擊的防範方法，可參考使用CDN
[CDN](https://www.cloudflare.com/zh-tw/learning/cdn/what-is-a-cdn/)

---

## 其他攻擊
:::spoiler 點擊展開
### Malware Attacks
> 泛指任何惡意程式
#### Vulnerabilities and Patch
> 可藉由特殊攻擊或一連串攻擊，鎖定並攻擊存在缺陷的程式

### Viruses and Worms
#### Viruses
> 需要連接到目標程式

#### Worms 
> 一個能獨立存在的惡意程式

#### Typical Propagation Vectors
> 泛指透過硬體連接或惡意軟體的攻擊手段，如USB-Killer

#### Directly propagating
> 可讓被感染的電腦做為病毒跳板及帶原者攻擊其他設備

#### Mobiles Code on Webpage
> 一種存在於網頁原始碼中的惡意程式

#### Trojan Horses
> 偽裝成無法辨識為病毒的木馬程式

#### Downloaders
> 啟動後會自動下載大量惡意或非惡意的檔案，嚴重占用儲存空間

### Payloads
> 專為造成嚴重傷害而生的惡意程式，能清除目標電腦的所有資料，亦或是透過遭感染的電腦對其他電腦發動攻擊

### Attack on Human Judgment
#### Social Engineering
> 惡意連結

#### Phishing(Physical fishing) Attacks
> 釣魚網站

#### Credit Card Number Theft
#### Identity Theft
> 竊取個資
:::

---

## Defend - Protecting dialogues cryptography
> Cryptography 運用數學函式的密碼學來保護資料

### Host-to-Host Visual Private Networks(VPNs)

**SSL/TLS**是 Webserver VPN中最常見的加密系統。**SSL/TLS**最初由Netscape創建為安全套接字層 **Secure Socket Layer（SSL）**。後來，IETF 接管了這個標準，將其重新命名為傳輸層安全性 **Transport Layer Security（TLS）**。今天它仍然被兩種名稱稱呼，因此我們稱之為**SSL/TLS**。

當我們使用 SSL/TLS，網址的URL開頭將變成 "**https://**"，這時TCP的port號將從 **80** 變成 **443**

:::info
## Appendix - 加密式連線
- 將人看得懂的原始資料，經過演算法加密，變成人看不懂的亂碼後進行傳輸，而當接收端收到資訊想查閱時再進行解密。
> 情境例子：我為了不想讓周遭的人聽到我跟朋友的交談內容，我把我講的話翻譯成獨創語言，之後說給聽得懂獨創語言的朋友聽

### 常見加密方式
> 所以對稱，非對稱各自優缺差別在哪裡

#### 對稱式加密
- 接收端與發送端皆有相同的密鑰,用來做加密
![image](https://hackmd.io/_uploads/SyRVhQg0p.png)

REF
>REF_AES
>REF_DES

#### 非對稱式加密
- 一位使用者會有兩隻金鑰
    - 公開金匙（Public Key）:可給指定對象
    - 私密金鑰（Private Key）:自己保留用
>簡稱公鑰，私鑰

- 利用其中一隻進行加密，則一定要用另外一隻進行解密
    - 公鑰加密私鑰解密
    - 私鑰加密公鑰解密
    > 兩模式皆可
    > 就像兩人持有不同的翻譯機
    > 我先拿了中翻英的系統加密，但一定要拿英翻中的系統才能解密
    > 但公鑰是拿來給別人用的，所以私鑰加密公鑰解密這件事不會拿來加密訊息
    > 加密數位簽章
- ![image](https://hackmd.io/_uploads/HkPL2QxA6.png)

>Hash雜湊函數
>簡單來說就是加上了寄件者的簽章，而將Hash過的訊息當做簽章
- 到收件方除了利用自己的私鑰解密，也要用寄件者的公鑰進行簽章確認
    - 就像是針對資料加密後再上一層指紋鎖
- 流程 
- ![image](https://hackmd.io/_uploads/SJf_27x0a.png)

    - 兩個雜湊數值相同即可證明是寄件人本人傳送
    > REF_流程
   
REF_加密
:::

---

## Firewalls
### Limitations of Stateful Packet Inspection (SPI) Firewalls

![image](https://hackmd.io/_uploads/S1ETyIWZA.png)

For TCP, only packets with SYN segments attemp to open a connection.

![image](https://hackmd.io/_uploads/SkhR_XdlR.png)

> What will the SPI firewall do if the destination host is 10.47.122.79 and the service is 80?

Ans: Rule 2
> What will the SPI firewall do if the destination host is 10.47.122.79 and the service is 25?

Ans: Rule 1
> What packets will match the third row?

Ans: Brain not braining:x:

![image](https://hackmd.io/_uploads/r1aajmugA.png)

> What if the internal IP address is 128.171.34.5, the external IP address is 60.3.5.75 and the source and destination ports are 4747 and 25?

Ans: Not matched to either row. The packet will dropped and loaded.
> What if the internal IP address is 128.171.34.9, the external IP address is 60.3.5.75 and the source and destination ports are 4747 and 25?

Ans: Brain not braining:x:

### Next-Generation Firewall (NGFW) Operation (server)
> 傳統SPI firewalls 僅會觀察 IP Address 和 Ports 號，但Next-Generation Firewall (NGFW)還會對封包做細部的檢查，如下

#### Deep Packet Inspection(DPI)
> 對封包做深度檢查，DPI會檢查封包的所有東西，如Application Layer的messages、Transport Layer的segment、IP version, source IP address, destination IP address, time-to-live, etc.

#### Application Awareness
> NGFWs能夠識別經過網絡的應用程式（例如Facebook、YouTube或企業應用），這個技術很重要的原因是大部分傳輸都會用到 80port，一家公司可能會限制Youtube僅能佔用 80ports 5%的流量。

#### Intrusion Detection System (IDS) Instrusion Protection System (IPS) Functionality
> 入侵偵測(IDS)系統主要功能在負責監聽網路封包，依據預先設定的安全策略(Security Policy)，對網路與系統的運行狀況進行監測，當發現異常，自動發出警訊通報給網管人員，記錄各種攻擊企圖、攻擊行為或者攻擊結果。
> 入侵防護(IPS)系統則化被動為主動，當發現網路異常封包或行為時，系統除發送警訊通報給網管人員，並立即採取必要的處置措施，例如阻斷來源IP。

#### Reputation Management
> 白名單黑名單

---

# Ch.4 Network and Security Management
## Network Quality of Service (QoS)
![image](https://hackmd.io/_uploads/ryW2zfceC.png)
1. 頻寬： 連結速度。QoS 可以告訴路由器如何使用頻寬。例如，將特定頻寬量指派給不同流量類型的不同佇列。
2. 遺失： 由於封包遺失而消失的資料量，這通常是因為網路壅塞所導致。QoS 可讓組織判斷在此情況發生時，要捨棄哪些封包。
3. 抖動： 由於壅塞導致網路封包的速度不穩，可能導致封包延遲和不按順序到達。這可能會導致傳送的音訊和視訊發生失真或斷訊。
4. 延遲： 封包從來源到目的地所花費的時間。這通常會受到佇列延遲的影響，即在壅塞期間封包傳輸前在佇列中等待。QoS 可讓組織為特定類型的流量建立優先順序佇列，藉此避免發生這種情形。

### Rated speed v.s. Throughput
**Rated speed** 是網路供應商聲稱提供的速度，**Throughput** 則是實際速度
> You are in a Wi-Fi hot spot with 20 other people. The access point router is rated as following the 802.11ac standard with options providing 300 Mbps. Throughput is about 50%. At a certain moment, you and four others are sending and receiving. What individual throughput are you likely to receive?

Ans: 30 Mbps

### Service Level Agreements (SLAs)
> 服務水準協議 (SLA) 是一種網路供應商向客戶簽署的合約，保證其提供的網路具有一下幾種特性

#### Guarantees specify worst cases (no worse than)
- Lowest speed (e.g., no worse than 1 Mbps)
- Maximum latency (e.e., no more than 125 ms)
- SLAs are like insurance policies

#### Often written on a percentage basic
> 用百分比做為標準

- No more than 100 Mbps 99.5% of the time
- 想要提高百分比這個合約就會越來越貴

#### Residential services are rarely sold with SLA guarantees
> 通常僅有大型企業網路會需要簽訂SLA協議

---

## Network design 待補

---

## Strategic security planning principles
> "Security is a process, not a product."

### The Plan-Protect-Respond Cycle
![image](https://hackmd.io/_uploads/Sk951LWZA.png)

---

## Centralized Network Management
### The Simple Network Management Protocol (SNMP)

Simple Network Management Protocol (SNMP) 是一種用於網路管理的協議。它被設計用來管理和監控網路設備（如Router, Switch, Servers等）上的數據。SNMP 提供了一個標準化的框架，通過它可以從網絡上的設備收集數據，監控和管理這些設備的運行狀況，並在發生異常時發出警報。

![image](https://hackmd.io/_uploads/BkkZVPh7R.png)

1. **Manager**：在 Network Operations Center（NOC），有一台名為Manager的電腦。Manager管理著大量的設備，例如Router, Switch, Servers等。


2. **Agent**：Manager並不直接與被管理的設備對話。每個被管理的設備都有一個Agent，Agents可以是硬體、軟體或兩者兼有。Manager與Agent對話，Agent則與被管理的設備對話。

3. **Management Information Base (MIB)**：NOC會使用 SNMP 不斷從被管理設備收集資料，並將這些資料放在MIB，使 NOC 管理員能夠了解網路的流量情況。

4. **Command**：SNMP 的常用指令
    - **GET**：用來從Agent獲取資料。
    - **SET**：用來設置Agent中的變數值。
    - **TRAP**：Aggent主動發送給Manager的異常或狀態改變通知。

---

## Centralized Security Management

防火牆管理員使用一個集中化的系統來設定和管理所有的安全規章，所有的安全規章都會儲存在一個集中化的防火牆策略服務器上。

![image](https://hackmd.io/_uploads/Sy3ATDnmA.png)

這個集中化的策略確保所有防火牆都遵循同一套規則，減少了策略分散管理所帶來的風險和錯誤。

當需要更新安全規章時，管理員只需在集中化的系統中進行修改，所有相關的防火牆都會自動接收到更新並進行應用，這大大提高了管理效率和策略的一致性。

---

# Ch.5 Ethernet (802.3) Switched LANs
## Ethernet physical layer standards
![image](https://hackmd.io/_uploads/r1p2FM9eC.png)

不同的實體介面，如:光纖(Optical fiber)、雙絞線(Twisted pair)等。其中**無遮蔽雙絞線**(Unshielded twisted-pair cables, **UTP**)取代同軸電纜成為主流。UTP由四對不同顏色的傳輸線互相纏繞所組成，被廣泛用於電腦網路，但由於使用過長的UTP電纜傳輸資料會引致訊號衰減問題，但其價格較光纖和同軸電纜低，因此UTP主要用作短途傳輸，一般不多於100米。

![image](https://hackmd.io/_uploads/SyB4UWSeA.png)

**RJ45**也取代AUI成為電腦跟雙絞線之間的連接器插頭，也被稱為**8P8C**(8 position 8 contact)意思是8個位置（Position，指8個凹槽）、8個觸點（Contact，指8個金屬接點）

![image](https://hackmd.io/_uploads/ByGFIZrxA.png)

### 雙絞線類型 (Twisted pair)
由兩條相互絕緣的導線按照一定的規格互相纏繞（一般以順時針纏繞）在一起，兩條線搭載著相同但相反的訊號，受到相同的noise干擾，在receiver端對這兩條做相減，noise就會被cancel掉。有許多類型:

| Name | Standard | Bandwidth | Speed    | UTP Category              | Length     | Notes                |
| ---- | ---------- | -------- | --- | ------------------------- | ---------- | -------------------- |
| Cat5 | 100BASE-TX & 1000BASE-T | 100MHz | 100 Mbps | Category 5e, 6, or higher | 100 meters | 最常用的乙太網電纜   |
| Cat5e | 100BASE-TX & 1000BASE-T & 2.5GBASE-T | 100MHz | 1 Gbps   | Category 5e, 6, or higher | 100 meters | Cat5增強版本             |
| Cat6 | 10GBASE-T & 5GBASE-T  | 250MHz | 10Gbps   | Category 6                | 55 meters  | 仍為四對雙絞線、RJ45 |
| Cat6A | 10GBASE-T  | 500MHz | 10Gbps   | Category 6A               | 100 meters |  |

### 命名規則
* **開頭數字**：傳送速率，10:10Mbits/s; 10G:10Gbits/s
* **BASE**：基頻Baseband，幾乎所有802.3標準都是基頻乙太網路
* **T**：Twisted pair; **X**：有X通常代表光纖，如:1000BASE-SX、-LX、-BX10 ; **5**:若為數字則代表傳輸距離，再乘100公尺

## 待補

---

# Ch.6 Wireless LANs I
## 待補

---

## 802.11 WLAN Operation
### Wireless Access Points

### Basic Service Sets (BSSs)

### Extend Service Sets (ESSs), Handoffs and Roaming

### Media Access Control
> 遵照 802.11 (WLAN) 標準的MAC在訪問遵循兩種機制，第一種是**CSMA/CA+ACK**，這是**強制性**的，**Access points**與**Hosts**皆要有此機制，第二種是RTS/CTS，非必要

>　CSMA/CA+ACK

#### Carrier Sense Multiple Access (CSMA)
- Carrier Sence (CS) : 在傳送資料之前，MAC會先檢查廣播頻道是否空閒。這稱為「Carrier Sense」。
- Multiple Access (MA) : 談的是讓很多人共同來使用的資訊通道，而彼此不互相干擾，因此必須以多工技術（multiplex）架構來提供。

#### Collision Avoidance (CA)

當多個設備同時要使用頻道時，考量到封包延遲過久會被判定為傳送失敗，CA會隨機決定多個設備的使用時間，減少多個設備同時開始傳送資料的機會，從而減少碰撞的可能性，一種簡單暴力但沒效率的演算法。
> 像是隨機決定秒數的十字路口號誌，當綠燈那方的車輛皆通過後，紅燈那方仍須等待號誌燈切換(稱為Dead time)，是不是很沒效率？

#### Acknowledgment (ACK)
> 請見 Ch.2 Transport layer

- 當傳送封包後，接收端在收到封包並確認無誤後，會傳送一個回應（ACK）給發送端，表示接收到ACK表示資料包已成功傳送和接收，沒有發生碰撞。
- 如果發送端在設定的期限（會考量 CA 介入的時間）內未收到ACK，它將認為傳送失敗（可能是由於碰撞或其他問題），並會重新嘗試傳送封包。

#### Request to Send/Clear to Send (RTS/CTS)
> TCP的SYN/ACK，當兩個host要建立連線時，一方會先傳送SYN，當另一方收到後會回傳SYN/ACK，之後前者會再傳送ACK，完成三項交握。

套到RTS/CTS，當兩個host要連線時，一方會傳送 **RTS** 訊息，另一方收到後會回傳 **RTS** 訊息並廣播 **CTS** 訊息，當**Access Points**收到有人廣播 **CTS** 訊息後，**Access Points**會限制其他 hosts 封包的傳送，除了新的 **RTS** 請求及**非使用 RTS/CTS(使用CSMA/CA)** 進行封包傳遞以外，其餘 Hosts 必須等待廣播 **CTS** 方傳送完封包，才能繼續傳遞封包。

![image](https://hackmd.io/_uploads/B1oYxqDZC.png)

所以比起**CSMA/CA**，**RTS/CTS**更沒效率，還會降低**Thoughput**
**RTS/CTS** 主要在兩個host都能聽到**Access point**但彼此聽不到對方的情況下有用。使用 **CSMA/CA+ACK** 時，這兩個站點可能會同時傳輸。**RTS/CTS** 消除了這種情況。

---

# Ch.7 Wireless LANs II
## The 802.11i(WPA2) WLAN Security Standard
> 按照加密強度由小到大

### 停用密碼

![image](https://hackmd.io/_uploads/rkhNX9wWA.png)
[Source](https://s.yimg.com/ny/api/res/1.2/18TOxeU5dq7NnRGEookweQ--/YXBwaWQ9aGlnaGxhbmRlcjt3PTk2MDtoPTYwMDtjZj13ZWJw/https://media.zenfs.com/ko/cool3c_598/bdbac1e38eade86266ae0bae2b1d40a7)

### Wire Equivalent Privacy (WEP)
> 別名 802.11 WLANs，是 802.11i (WPA2) 的前身

初期 Wi-Fi 遵循安全的技術標準，IEEE聲稱使用 WEP 的Wi-Fi跟使用有線網路一樣能保障資料安全，然而1997年發布後隨即被破解，駭客只要竊聽久一點即可得到加密規律，因此 WEP-40 與 WEP-104 遭到淘汰。

### Wireless Protected Access (WPA-X)
> 目前最廣泛使用的技術標準，簡單來說就是要密碼啦

#### WPA 1
修正 WEP 一些弱點，一種替代 WEP 過渡標準，但有些無線設備無法使用

#### WPA 2
目前最慣用的標準，幾乎能在所有設備上使用，最常見規範就是網路密碼要8個字以上，**本章重點**

![image](https://hackmd.io/_uploads/SyvS99PbC.png)

技術上來說已經非常安全了，但有淺在的 Human security 風險
> 密碼無法破解，但可以被洩漏，所以叫 Pre-Shared
解法就是Ch.5 提到的**802.1x**, identify identity
![image](https://hackmd.io/_uploads/ryKLey9ZR.png)


#### WPA 3
2018年發布，更強的標準

---

## Beyond 802.11i(WPA 2) Security
> 就算一家企業完全遵照802.11i標準，仍有三種可能受攻擊的風險

### Rogue Access Points 流氓接入點
![image](https://hackmd.io/_uploads/rJkwby5-A.png)

流氓接入點是指無線訪問點，該無線訪問點已安裝在一安全網絡上，然而卻沒有得到本地網絡管理員的明確授權，無論是由好心的員工還是由惡意攻擊者添加的，流氓接入點是整個系統防禦最弱的突破口。

![image](https://hackmd.io/_uploads/SkHHu1cb0.png)
[Source](https://www.google.com/url?sa=i&url=https%3A%2F%2Feen.extremenetworks.com%2F152307-beware-of-the-rogues&psig=AOvVaw0utmc6von4VRPJ0xgMlLT7&ust=1714273049727000&source=images&cd=vfe&opi=89978449&ved=0CBIQjRxqFwoTCMCEh_Wy4YUDFQAAAAAdAAAAABAE)

### Evil Twin Access Points and Vitual Private Networks
#### Evil Twin Access Points 邪惡的雙胞胎

![image](https://hackmd.io/_uploads/r1Su9kqb0.png)

攻擊者可透過建立**假的 AP(Access Points)**，最常以免費WiFi出現，他們通常具有非常強的訊號，以此引誘受害者連接，當受害者連接到**假的 AP** 後，**假的AP** 會自動連接到**正確的 AP**，讓受害者誤以為連接一切正常，但此時受害者傳出的封包都會被攻擊者監聽。

![image](https://hackmd.io/_uploads/HJxNYkqZA.png)
[Source](https://blog.pulsarsecurity.com/what-is-an-evil-twin-and-how-do-you-spot-one)

與上述攻擊法相同，但 Evil Twin Attack 的攻擊者僅是竊聽封包，而第三個攻擊則是主動攻擊受害者，攻擊者可以攔截、轉送、解鎖加密的封包，甚至將受害者的封包加密使得對方無法解密。也就是**中間人攻擊(Man-in-the-middle Attacks)**。

![image](https://hackmd.io/_uploads/rJdvElqWR.png)

中間人攻擊非常難防範，除非中間人主動攻擊，受害者與真正的AP皆無法得知中間人的存在，目前最有效能防範主動攻擊的方法是VPN。

#### Vitual Private Networks 虛擬私有網路
> ~~SurfShark VPN~~

![image](https://hackmd.io/_uploads/BJG8Sz5ZA.png)

在 VPN 中，Client 端和 Server 使用一個從未傳遞的Key(Un-shared key)對所有通訊進行加密。當 Client 端發送消息時，它首先用 VPN 密鑰加密資料，然後再用 Client 端與 Evil Points 共享的密鑰加密一次。當 Evil Points 收到資料時，雖然它可以使用與 Client 端共享的密鑰對其進行解密。然而，它無法讀取資料，因為資料仍然使用 Pre-share key 進行加密。保持了機密性。

## 802.11 Wi-Fi Wireless LAN Management

---

## Bluetooth

---

## Other Local Wireless Technologies
### Near Field Communication (NFC)
> 專門設計用於極短距離傳輸的技術

### Radio Frequency ID

---

# Ch.8 TCP/IP Internetworking I
## IP Routing

- IP 位址可以一分為二，一段是 Network ID，一段是 Host ID
    - 網路位址（Network ID）
        - 位於IP的前端部分，用來辨識所屬的網路
            - 暨大是 `163.22.0.0`
    - 主機位址（Host ID）
        - 位於IP 的後端部分，用來辨識網路上的各個裝置
            - 暨大學校網站 `163.22.12.20`
            - 只要在暨大網段裡面的網路都是 `163.22.x.x`

### IP address 的等級( Class )
早期只有一些大型的網路，例如 ARPANET，32 bits 的 IPv4 address 只會由 8 bits 的 Network ID 和剩下的 24 bits 的 Host ID 組成。

這使獨立的網路的數量不能太多（最多254個），在區域網路概念出現的時候，顯得不足夠了。 


- 為了方便管理與識別，IP 可分為五種等級（Class），但一般會使用到的是 Class A、B、C 三種等級，以 Network ID 長度區分，分別使用在大、中、小型網路

![image](https://hackmd.io/_uploads/rkF2QmJ86.png)

- Network ID 和 Host ID 的長度分配
    - 大型的網路應該使用較短的 Network ID，才有比較多的 Host ID，小型的網路應該使用較長的 Network ID
- Class A
    - 政府機關、國家級研究單位
    - Network ID 8 bits 最多 256-2 個
    - Host ID 24 bits 可以分給 16777216-2 台主機
- Class B
    - 大型企業、電信業者、學術單位
    - Network ID 16 bits
    - Host ID 16 bits，可以分給 65536-2 台主機

- Class C
    - 一般企業、家庭
    - Network ID 24 bits
    - Host ID 8 bits，可以分給 256-2 台主機

:::info
2^n - 2
- n 是所用的位數，減 2 是因為第一個和最後一個位址都是無效的
- \*.\*.\*.00000000 此段網路第一個 IP，代表此區段網路 Subnet
- \*.\*.\*.11111111 最後一個 IP，用作 Broadcast
:::

:::success
### 計算Net ID and Host ID
- Net ID：`IP` AND `Net mask`
- Host ID： `IP` AND `~Net mask`
#### Q:有一IP Address:3.4.5.6為classA，請問Net ID、Host ID為何？
- NetID:`3.0.0.0`

| IP Address | 3.4.5.6 |
| - | - |
|Binary|`00000011.00000100.00000101.00000110` |
|Netmask|`11111111.00000000.00000000.00000000`|
|AND|------------------------------------------|
|Net ID|`00000011.00000000.00000000.00000000`|
- Host ID:`0.4.5.6`

| IP Address | 3.4.5.6 |
| - | - |
|Binary|`00000011.00000100.00000101.00000110` |
|~Netmask|`00000000.11111111.11111111.11111111`|
|AND|------------------------------------------|
|Host ID|`00000000.00000100.00000101.00000110`|

練習：有一IP Address:192.168.38.26 為class c ，請問net id 、host ip 為何?

Default Mask: 255.255.255.0
Net ID: 192.168.38
Host IP: 26

練習：有一IP Address:130.48.93.73為classB,請問NetID,HostID為何

`ipcalc`
:::
- Public ip / Private ip 
    - ClassA、B、C 中都保留了一些Private IP， 不能直接連上Internet 的 IP
        - Class A : 10.0.0.0~10.255.255.255 
        - Class B : 172.16.0.0~172.31.255.255 
        - Class C : 192.168.0.0 ~192.168.255.255 
>保留 IP 地址 : 169.254.0.0到169.254.255.255 
>沒有辦法取得有效的 ip 時,自動分配

### Subnet 子網路
- 切割網段 => 先決定想要分配的主機數：

    - Class C 網路為例：
        - 網路遮罩： 11111111.11111111.11111111.**00000000** => 255.255.255.0

### NetMask(子網路遮罩)
- 由一串連續的1，加上一段連續的0
  > 例如：11111111 11111111 11111111 00000000
    > 通常寫作：255.255.255.0

:::success
### 計算Net ID and Host ID
- Net ID：`IP` AND `Netmask`
- Host ID： `IP` AND `~Netmask`
> FIXME: 用「保留幾個 bit 的講法」
#### Q:有一 IP Address:3.4.5.6 為 class A，請問 Net ID、Host ID為何？

class A 有 8 bits Network ID, 24 bits Host ID
Netmask 是 11111111.00000000.00000000.00000000
8 個 bits 的 1，那就保留

- Net ID:`3.0.0.0`
- Host ID:`0.4.5.6`

:::info
1. 有一 IP Address：192.168.38.26 為 class c，請問 Default Mask、Net ID、Host ID 為何？

2. 有一 IP Address：130.48.93.73 為 class B,請問 Default Mask、NetID、HostID 為何？
:::

### IP 的種類：主要分為兩種
剛才是有拆解 IP，至於哪裡可以應用呢？
1. public IP (公共 IP 或公開 IP 位址)：
    - 簡單來說我們能看到的所有網站
2. private IP (私有 IP 或保留 IP 位址)：
    - 當初設計 IPv4 時，預設保留給內部網路設定用的 IP 區段。
    - 無法在公開網路上使用，只能在家裡、實驗室等等地方使用。
    
    每個 class 裡都預留了一段作為 private，提供給用戶或企業來設定規劃自己的區域網路：
    - Class A：10.\*.\*.\*，一組 Class A
    - Class B：172.16.\*.\*, 172.17.\*.\*..., 172.31.\*.\*，共 16 組 Class B
    - Class C：192.168.0.\*, 192.168.1.\*..., 192.168.255.\*，共 256 組 Class C

:::success
作業：下列哪幾個是屬於 private IP，需要透過 IP 分享或偽裝才能夠連上 Internet？

1. 172.15.1.1
2. 192.28.1.1
3. 10.100.1.1
4. 172.20.1.1
5. 192.168.5.1
6. 61.5.5.1

:::

:::info
分類網路（Classful Addressing），是引入 **CIDR** 之前在網際網路中使用的技術，但 class a, class b, class c 這樣的分類仍不夠彈性。

試想我們家裡有一台 router，被分類到最小的 class c，我們家裡可能最多只有 10 台需要連網的設備，然而 class c 仍然給了我們 254 台的空間作使用，這樣就浪費了 244 台空間。

在意識到這個問題後，工程師們發布了新的技術 **CIDR**，取代分類網路只能以 8 bits 為單位分類 class 的問題，簡單來說就是沒有硬性規定 Host ID 只能是 16 or 8 bits，可以是 10 bits，又或是以上面 10 台為例，就可以切出 28 bits 的 Net ID，剩下 4 bits 共 16 台就可以涵蓋我們需求了。

:::

---

## How Routers Process Packets
### 比較 Switching 與 Routing 
![image](https://hackmd.io/_uploads/BkvfYgcMR.png)

![image](https://hackmd.io/_uploads/SyFmtxcMC.png)

1.  **設備與操作**：
    
    -   **Switching**：第一張圖中的 Switch 1 有一個Switching Table，它記錄了哪個 MAC 地址與哪個Port相關聯。當數據到達某個Port時，Switch查看其 MAC 地址，並根據Table將數據轉發到正確的Port。
    -   **Routing**：第二張圖中的 Router A 有一個Routing Table，它記錄了不同的 IP 地址範圍應該通過哪個Interface轉發。當接收到一個Packet時，路由器檢查目的 IP 地址，然後根據Table決定通過哪個Interface和下一路由器轉發Packet。

### Routing table

![image](https://hackmd.io/_uploads/HkdnqgcfA.png)

---

## The internet Protocol Version 4 (IPv4) Fields

![image](https://hackmd.io/_uploads/HJXMpgqz0.png)

### ICMP 網際網路控制訊息協定
>是IP的輔助協議，屬於TCP/IP的3.5層
* IP傳輸
    * **保障** 封包的定址和路由功能
    * **不保障** 封包在傳送過程中發生的問題，例如：中間的網路可能因故障或其他問題因而導致封包的損壞或丟失。
      > 寫地址但不保證郵差把信送到
* ICMP 是IP 的輔助協定，確保設備是否在線上、報告錯誤以及進行網路診斷
    * 在IP routing 的過程中發生錯誤，例如：router找不到適合的路徑、無法成功送出封包
      > IP負責郵寄信件，ICMP則是郵差的通知服務 
* 常見ICMP工具
    * Ping
    * Traceroute

![image](https://hackmd.io/_uploads/B1Wq5eqMR.png)
> Windows: tracert [ip]



## IP Version 6 (IPv6)

---

## UDP(User Datagram Protocol)
- 僅提供傳輸基本功能，負責處裡封包要傳送到哪個 Port
![image](https://hackmd.io/_uploads/B1sTLJF-Jg.png)

- 追求即時性且能容忍一些封包丟失的情況（盡力傳遞）
    - 串流服務、視訊、音訊

![image](https://hackmd.io/_uploads/SkCeYaVQT.png)

---

## TCP
- 可靠的傳輸方式—>保障資料完整性
    - 連線導向 (Connection-Oriented)：傳輸資料前先建立連線，協調參數(用於資料確認與重送、流量控制)
    > 利用三項交握建立連線
    - 資料確認與重送：確認目的端是否收到已送出的資料 
    - 流量控制：視情況調整資料傳輸的狀況，盡量減少資料的流失

### TCP Header

![image](https://hackmd.io/_uploads/rJuLsS_L6.png)

- SourcePort(來源埠號):
長度為 16 bits，用來記錄來源主機的 port

- DestinationPort(目的埠號):
長度為 16 bits，用來紀錄目的主機的 port

- SequenceNumber(序列號):
長度為 32 bits，用來記錄每個封包的序號。當 TCP 資料太大時(大於 IP 封包的容許程度)就必須進行分段，利用 Sequence Number 讓接收端組合資料

- AcknowledgmentNumber(確認號)：
長度為 32 bits，接收端確定之前傳遞的封包已被正確收下

:::spoiler Code (Control Flags, 控制標誌碼):
長度 6 bits，用來控制訊息的傳遞。此欄位共 6 bits 分別代表 6 種不同功能的控制碼，只要該位元被設定為 1，表示此封包內有包括該訊息。

- URG(Urgent，緊急):
若為1表示該封包為緊急資料，接收端應該要緊急處理，並使 Urgent Point 欄位被啟用。

- ACK(Acknowledge，確認回應):
若為1表示該封包為回應封包，具回應確認功能，確認 Acknowledge Number 欄位中所指定的順序號碼。

- PSH(Push，推送):
若為1表示要求對方立即傳送緩衝區內的其他對應封包，無須等待緩衝區滿了才送。

- RST(Reset，重設):
若為1表示連線被立即結束(強迫性)，無需等待終止確認手續，且發送端已斷線。

- SYN(Synchronous，同步):
若為1表示發送端通知對方要求建立連線。

- FIN(Finish，完成):
若為1表示傳送結束，通知對方資料傳輸完畢，是否同意斷線。發送者還在連線中等待對方回應。
:::
:::spoiler 其他
- Window（視窗大小）:
代表「接受視窗」(receive window) 的大小，用來控制封包流量，告訴對方目前本身還有多少緩衝器(Receive Buffer)可以接收封包。

- Checksum（檢查碼）：
確定所收封包是否在傳輸過程中出現錯誤

- UrgentPoint（緊急資料指標）：
指出緊急資料在 TCP 資料的哪裡
ex. Urgent Pointer = 3 :arrow_right: TCP 資料的 0~3 個 bytes 是緊急資料
:::

### Three-way Open
![image](https://hackmd.io/_uploads/H1YbyiVbJe.png)

| SYN | SYN, ACK |
| -------- | -------- |
| ![image](https://hackmd.io/_uploads/BJ-ogoNWkg.png) | ![image](https://hackmd.io/_uploads/Bkihlo4Z1g.png) |

![image](https://hackmd.io/_uploads/HkjqoX77p.png)

#### 資料確認與重送
- A 傳送 packet1 給 B
- B 回應 ACK 封包給 A
- 如果A在時間內沒有收到B的ACK封包A就會重新傳送 packet 給 B

### Closing
![image](https://hackmd.io/_uploads/S1Z5jbcMC.png)

---

# Ch.9 TCP/IP Internetworking II
> 從此章開始，我們的角色從 Client 變成 Server 管理者

## Core TCP/IP Management Tasks
### IP Subnet Planning
:::success
- 為了方便管理與識別，IP 可分為五種等級（Class），但一般會使用到的是 Class A、B、C 三種等級，以 Network ID 長度區分，分別使用在大、中、小型網路
- Network ID 和 Host ID 的長度分配
    - 大型的網路應該使用較短的 Network ID，才有比較多的 Host ID，小型的網路應該使用較長的 Network ID
- **同一個網域**：在同一個物理網段內，主機的IP 具有相同的 NetWork ID，並且具有獨特的Host ID

> 假設企業被分配到 Class B 的ip 位址,六萬多部(2^8* 2^8)電腦連接在同一個網路中會導致效率低落,若只連接十幾部電腦,會造成浪費
* 將分配到的網路切割成規模較小的子網路，再分配給多個實體網路
:::

#### The N = 2^b - 2 Rule
> A network subnet, or host part cannot be all 0s or 1s.
> 00000000.00000000:x:
> 11111111.11111111.11111111:x:
> If a part is b bits long, it can represent **2^b − 2 networks**, subnets, or hosts.

![image](https://hackmd.io/_uploads/SJ7Wp77mR.png)

### NAT(Network Address Translation)
NAT 是一種實現內網主機與外網通訊的方法，它會在IP封包通過路由器或防火牆時重寫來源IP地址或目的IP位址的技術，NAT在真實的網絡環境中隨處可見，主要是為了處理兩個問題：

1.  IPv4地址不夠用，IP地址只有32位，最多能提供 2^32 組(42億)，NAT技術可讓本地的電腦設備，分享共同的公有IP位址
2.  安全問題。使用NAT後，可以把主機隱藏在內網中，不會讓真實的IP位址曝露，防止遭到駭客入侵

![image](https://hackmd.io/_uploads/SyPPMHXmC.png)

當封包從外部主機到達時，它們的目標IP位址欄位是60.5.9.8，目標 ports 欄位是4444。NAT防火牆在 Translation Table 中尋找這些值，用 Internal values 取代 External values，並將它們傳送到客戶端PC。

圖9-3 NAT為什麼安全
攻擊者可能會在公司的防火牆外安裝嗅探程式(sniffer)，這個程式能讀取從公司發出的所有資料包。但有了NAT，竊聽者只能取得假的（External）IP位址和ports。理論上，如果攻擊者能夠立即發動攻擊，它可以向外部IP位址和連接埠號碼傳送封包，NAT防火牆將會將它們傳遞給內部主機。然而，攻擊者很少能立即採取行動，而且NAT表中的記錄最多只會保持活躍幾分鐘。儘管NAT操作簡單，但它提供了相當多的安全性。

為了支援NAT，IANA 宣告了三個只能在公司內部使用的 private IP 位址範圍：
- 10.x.x.x
- 192.168.x.x
- 172.16.x.x到172.31.x.x
:::success
| Network ID            | Assigned bits | Remaining bits | default NetMask | Class |
| --------------------- | ------------- | -------------- | --------------- | --- |
| 00001010              | 8 bits        | 24 bits        | 255.0.0.0       | Class A |
| 11000000.1010100      | 16 bits       | 16 bits        | 255.255.0.0     | Class B |
| 10011010.0001\-\-\-\- | **8+4 bits**  | 20 bits        | 255.240.0.0     | Class B |
:::
192.168.x.x最有名，因為它允許公司分別使用255.255.0.0和255.255.255.0的network和sub net mask。不過，其他兩個私有IP位址範圍也被廣泛使用。

### DNS(Domain Name System)
![image](https://hackmd.io/_uploads/HyT54bvE0.png)

1.  **DNS請求消息**：
    -   來源主機（在圖中左側的電腦）向DNS發送請求，請求解析主機名稱"daikine.pukanui.com"的IP地址。這是查找過程的起始點。
2.  **轉發DNS請求**：
    -   Hawaii.edu的DNS server收到請求後發現自己不知道，於是它將請求轉發到負責“pukanui.com”這個域的 Authoritative DNS server。
3.  **DNS響應消息**： 
    -   Authoritative DNS server查找到"daikine.pukanui.com"的IP地址為"60.32.6.87"，並將這個響應消息發送回Hawaii.edu的DNS server。
4.  **傳送DNS響應消息**： 
    -   Hawaii.edu的DNS server接收到Authoritative DNS server提供的IP地址後，將這個資訊發送給最初發請求的來源主機。

### SNMP(Simple Network Management Protocol)

SNMP 包括如Manager、Agent和MIB，詳細請看Ch.4 Network and Security Management的筆記。

---

## Securing Internet Transmission
### Virtual Private Network
:::spoiler 第七章筆記
:::success
![image](https://hackmd.io/_uploads/BJG8Sz5ZA.png)

在 VPN 中，Client 端和 Server 使用一個從未傳遞的密鑰對所有通信進行加密。當 Client 端發送消息時，它首先用 VPN 密鑰加密消息，然後再用 Client 端與 Evil Points 共享的密鑰加密一次。當 Evil Points 收到消息時，雖然它可以使用與 Client 端共享的密鑰對其進行解密。然而，它無法讀取消息，因為消息仍然使用 Pre-share key 進行加密。保持了機密性。
:::

### IPsec VPNs

IPsec（Internet Protocol Security）是一組協議用於在 Internet Layer 提供加密和認證的安全通訊。它確保Packet的數據完整性、數據來源認證以及數據保密。IPsec廣泛用於虛擬私人網路（VPN）之間的安全通訊，包括企業網絡之間或企業網路與遠程用戶之間的連接。

![image](https://hackmd.io/_uploads/r1tPmzDV0.png)

### IPsec Transport Mode
在Transport Mode下，IPsec僅加密Packet的部分內容，不包括IP header。主要用於端到端的通訊，例如兩台主機之間的加密連接。
- 實現真正的端對端加密，保護了數據的隱私性和完整性。
- 成本高，因為需要在每台主機上配置Digtal Certificate。
- 防火牆無法過濾加密的流量，可能對網路監控和管理造成困難。

### IPsec Tunnel Mode
Tunnel Mode加密整個Packet（包括IP header）並將其封裝在一個新的Packet中。這常用於Gateway到Gateway或主機到Gateway的通訊，例如VPN。

- 經濟高效，因為不需要在每個端點進行複雜的配置。
- 容易於大規模部署，適合企業和大型組織。
- 但不提供端到端的安全性，只在Gateway間提供安全保護。

### Remote-Site-Access and Site-to-Site VPNs
### IPsec Security Associations and Policy Servers
### SSL/TLS VPNs

![image](https://hackmd.io/_uploads/B1mAJuh7C.png)

---

# Ch.10 Carrier Wide Area Networks (WANs)
## Lans and Wans (and Mans)
### LANs versus MANs and WANs
![image](https://hackmd.io/_uploads/S1vGWiBE0.png)
> LANs 存在於公司的場地內，而 WANs連接組織內不同的地點或組織之間。

### Carrier WAN Components and Business Uses
![image](https://hackmd.io/_uploads/Bk_9WjrV0.png)

### The Telephone System
![image](https://hackmd.io/_uploads/HyAoZsBER.png)

## Residential Wired Internet Access

---

# Ch.11
### send and recieve of mail
|         | protocol |
| --------| ---------|
| send    | SMTP     |
| recieve | POP, IMAP|