---
# System prepended metadata

title: 電腦網路概論
tags: [NCKU]

---

# 電腦網路概論
###### tags: `NCKU`

## Chapter 1 Introduction

### 常見縮寫
* ISP：網路服務供應商 Internet Service Provider (e.g. 中華電信)
* TCP：傳輸控制協定 Transmission Control Protocol
* UDP：使用者資料包協定 User Datagram Protocol

### 常見設備
#### 數據機 (modem, modulator-demodulator)
是一個能將**數位訊號**調變到**類比訊號**進行傳輸，並解調收到的**類比訊號**為**數位訊號**的電子裝置。

#### 路由器 (router)
提供**路由**與**轉送**兩種重要機制：
* 路由：決定**封包**於host到host之間的傳輸路徑的**過程**
* 轉送：將路由器**輸入端**的**封包移送至**適當的路由器**輸出端**

路由的工作在**OSI網路模型**的**網路層**

### 何謂協定 (Protocol)?
> **Protocol** defines the **format**, **order** of **messages sent and received** among network entities, and **actions taken** on message transmission, receipt.

**協定**定義了網路實體之間**發送和接收**消息的**格式**、**順序**，以及對消息傳輸、接收所**採取的動作**。

**協定**是一種標準化的溝通規範，它描述了通訊系統中的**通訊規則、數據格式、錯誤檢測和糾錯機制**，以確保通訊雙方能正確地解讀和處理訊息。

### TCP/IP Model 封裝名稱
* 傳輸層
    * TCP表頭+資料：**TCP 區段 (TCP Segment)**
    * UDP表頭+資料：**UDP 資料包 (UDP Datagram)**
* 網路層
    * IP表頭+資料：**IP 資料包 (IP Datagram)** 或 **封包 (packet)**
* 鏈結層
    * 鏈結層表頭+資料+(表尾)：**訊框 (Frame)**


### 封包傳輸
#### 封包延時 Packet delay
$$
d_{nodal} = d_{proc} + d_{queue} + d_{trans} + d_{prop}
$$
- $d_{nodal}$：節點總延時
- $d_{proc}$：節點處理延時
    - 檢查錯誤
    - 判斷輸出線路
    - 通常時間 < microsecs
- $d_{queue}$：排隊延時
    - 等待傳輸
- $d_{trans}$：傳輸延時，將封包推向線路的時間
    - $L$：封包長度 (bits)
    - $R$：傳輸速率(bits/sec)
    - $d_{trans} = L/R$
- $d_{prop}$：傳播延時，實體線路的傳播時間
    - $d$：實體線路長度
    - $r$：傳播速率
    - $d_{prop} = d/r$

#### 封包排隊延時 Packet queueing delay
- $a$：平均封包到達速率
- $L$：封包長度 (bits)
- $R$：傳輸速度 (bit transmission rate)

==**traffic intensity**==
$$
\frac{L \cdot a}{R}:\frac{\text{arrival rate of bits}}{\text{service rate of bits}}
$$
當值大於0.7 $\Rightarrow$ **high queueing delay**
![](https://i.imgur.com/pefFUVB.png)


#### 封包丟失 Packet loss

## Chapter 2 Application Layer

### 常見縮寫

- TLD：Top-Level-Domain
- RTT：Round-Trip Time
    - 資料從**發送端**到**接收端**再返回**發送端**的時長

### HTTP (HyperText Transfer Protocol)
- 使用**TCP**
- Port：80

```
運作流程：
    1. 客戶端初始化與伺服器的TCP連線 (80 port)
    2. 伺服端接受客戶端的TCP連線
    3. 兩端互相交換HTTP訊息
    4. 關閉TCP連線
```

#### 版本差異
|版本|差別|
|-|-|
|HTTP/1.0|1個物件、1個TCP連線，每個物件需要 2 RTT|
|HTTP/1.1|多個物件、1個TCP連線|
|HTTP/2.0||
|HTTP/3.0||

### DNS (Domain Name System)

- 使用兩者**TCP**或**UDP**傳輸
- Port：53
- 可同時發送多個請求
- 主機發送DNS請求時，會發送到 Local DNS server

#### DNS資源紀錄 Resource Record (RR)
```
格式：(name, value, type, ttl)
name：域名
ttl： Time to Live
```
|Type| Description |
|---|---|
|A|將域名解析為 **IPv4**|
|AAAA|將域名解析為 **IPv6**|
|NS|指定該域名的DNS伺服器|
|CNAME|將域名解析為另一個域名(別名)|
|MX|指定郵件伺服器的地址|
|PTR|反向DNS查詢，將IP解析為域名|


### SMTP (Simple Mail Transfer Protocol)
- 使用**TCP**
- Port：25
- 用於傳輸郵件 (push)

### IMAP (Internet Message Access Protocol)
- Port：143
- 一種郵件伺服器和郵件客戶端之間的協定
![](https://i.imgur.com/NidQsAA.png)

## Chapter 3 Transport Layer

### Principle of reliable data transfer (rdt)
|version|assumption|
|-|-|
|rdt 1.0|**reliable channel:** no bits error, no loss of packets|
|rdt 2.0|channel with **bit error**，include **ACKs、NAKs**|
|rdt 2.1|handle corrupt on ACK/NAKs，include **sequence number(0, 1)**|
|rdt 2.2|**NAK-free**，add seq# to ACK|
|rdt 3.0|channel with **errors and loss**，include **timeout**|

### Principles of congestion control
**Approaches**
* **End-end congestion control**
    * 沒有明確的回應
    * 從丟失和延遲來推斷壅塞
    * TCP 使用的方法
* **Network-assisted congestion control**
    * 路由器會有明確的回應
    * 回覆壅塞的程度或明確指示傳送速率
    * TCP ENC, ATM, DECbit protocol

### Transmission Control Protocol (TCP)

#### TCP round trip time (RTT), timeout
* 如何決定 TCP timeout 的值?
* **SampleRTT**
    * 測量將Segment送出到接收ACK的時間
    * 每次測量的值可能會差很多，所以要將先前的預測納入考慮，才能讓結果更 Smooth
* 使用 **Exponential Weighted Moving Average (EWMA)**
* **EstimatedRTT**
    * **EstimatedRTT$_1$** = $(1-\alpha)$\***EstimatedRTT$_0$** + $\alpha$\***SampleRTT$_1$**
    * $\alpha$ 通常為 0.125
* 將結果再加上**安全邊界(safety margin)**
* **TimeoutInterval$_1$** = **EstimatedRTT$_1$** + 4\***DevRTT$_1$**
    * **DevRTT**
        * Dev：Deviation 偏差
        * **SampleRTT$_1$** 對 **EstimatedRTT$_0$** 偏差的 **EWMA**
        * **DevRTT$_1$** = $(1-\beta)$\***DevRTT$_0$** + $\beta$\*$|$**SampleRTT$_1$** - **EstimatedRTT$_0$**$|$
        * $\beta$ 通常為 0.25

#### TCP Connection Management
**建立連線**
**TCP 3-way handshake**
```sequence
Note left of Client: Init seq num x
Client->Server: SYN, seq=x
Note right of Server: Init seq num y
Server->Client: ACK-SYN\nseq=y, ACK=x+1
Note left of Client: Receive SYN-ACK
Note left of Client: Send ACK for SYN-ACK
Client->Server: ACK=y+1
Note right of Server: Receive ACK
Note right of Server: Done!
```

**關閉連線**
```sequence
Client->Server: FIN
Server->Client: ACK
Server->Client: FIN
Client->Server: ACK
```

#### TCP congestion control

* AIMD
* slow start
* CUBIC
* fairness


## Network Layer Introduction

* **主要功能**
    * forwarding：將輸入的封包**導向至正確的輸出端**
    * routing：決定封包從來源端到目的端的**傳輸路徑**

* Plane
    * Data plane
        * forwarding
        * local：per-router function
    * Control plane
        * routing
        * network-wide logic

## Chapter 4 Network Layer - Data plane

* **Router architecture**
    * input ports
    * switching
    * output ports

![](https://hackmd.io/_uploads/rydVyT-P2.png)

* **Internet Protocol (IP)**
    * IP address (32 bits)
* **Dynamic Host Configuration Prorocol (DHCP)**
    * 取得IP位址

### Input ports
* **功能**
    * 使用 header fields value 和 forwarding table 找到 output port
* **forwarding**
    * destination-based forwarding (traditional)：僅透過目的IP來判斷
    * generalized forwarding：透過 header field value 來判斷

#### Longest Prefix matching
* 找相對應的前綴 (prefix)
* 若有多個，找對應最多的 (longest)

### Swtiching fabrics
* **三種主要的形式**
    * memory
    * bus
    * interconnecting network

![](https://hackmd.io/_uploads/rym5G6-D3.png)

### Output ports

* Buffering
* Scheduling discipline

#### Packet scheduling

* FCFS (first come, first served)
* Priority queue
* Round Robin
* Weighted fair queueing (WFQ)

### Internet Protocol (IP)



## Chapter 5 Network Layer - Control plane

## Chapter 6 Link Layer

### Introduction
* 用 **frame** 封裝 **datagram**，加入表頭、表尾
* 負責傳輸 **datagram** 從一個節點到另一個**物理上**鄰接的節點
* 從**發送端**到**目的端**中間的節點間，可透過不同的方式傳輸
    * 例如：將 datagram 從 A 傳到 C
    * A 到 B 用 Ethernet 傳
    * B 到 C 用 WiFi 傳
* 使用 **MAC位址** (Media Access Control Address) 來辨別**來源端**和**目的端**
* Link Layer 提供的服務有
    * **framing**：封裝資料包
    * **節點間可靠的傳輸**
    * **流量控制** (flow control)
    * **錯誤偵測** (error detection)、**錯誤糾正** (error correction)
    * **半雙工** (half-duplex)、**全雙工** (full-duplex)
        * 差別在於兩端是否能**同時互相**傳輸資料
* Link Layer 被實作在**網路介面卡**(Network Interface Card, **NIC**)或**晶片**(chip)上

### MAC address
* **48-bit**, e.g. 1A-2F-BB-76-09-AD
* **前三碼**：製造商、**後三碼**：流水號
* 印在網卡上

### Error Detection, Correction
#### Error Detection
==**不是100%可靠**==

在傳送資料(**D**)的時候，以 **bits** 的方式來看，用**演算法**對原始資料做計算產生**錯誤檢查碼**(Error Detection Code, **EDC**)，再將**EDC**加在**D**的後面並送出。

**送出的資料**
|---D---|EDC|
|-|-|

**接收到的資料**
|---D'---|EDC'|
|-|-|

將接收到的資料，用同樣的方式對 **D'** 生成EDC，再去檢查是否和 **EDC'** 相同。

:::info
**資訊冗餘** (information redundancy)
像上面的例子，在資料後面加上一些資訊，可用來**檢測一致性**和**恢復損壞的資訊**
:::

#### 奇偶校驗 (pairty checking)
![](https://hackmd.io/_uploads/HylI5YiL2.png)

#### checksum
就和前面的一樣

#### 迴圈冗餘校驗 (Cyclic Redundancy Check, CRC)

可以把一組位元想像成是一個多項式
例如，$111_2$ 的多項式就是 $x^2+x+1$、$101_2$ 就是 $x^2+1$

假設**原始資料**$M(x)$、**鑰匙**$K(x)$ ($n+1$階多項式)

計算
$$
M(x) \cdot x^n = Q(x) \cdot K(x) - R(x)
$$
$M(x) \cdot x^n$ 相當於將 $M$ 左移 $n$ 位

==實際傳送的資料是$M(x)\cdot x^n+R(x)$==
接收端只要檢查收到的資料是否能被$K(x)$整除，就能知道是否是正確的。

:::spoiler 簡報上的表示法
D：data bits
G：bit pattern (key) (r+1 bits)
R：D*$2^r$ / G 的餘數 (r bits)

傳送的資料：<D,R>=D*$2^r$+R

接收端知道 G
就可以檢查**接收到的資料**<D,R>是否能被G整除
如果算出來有餘數的話：Error Detected!
:::

### Multi Access Protocol
**多重存取協定**
* **channel partitioning MAC protocol**
    * TDMA (time division)
    * FDMA (frequency division)
    * CDMA (code division)
* **random access MAC protocol**
    * ALOHA
    * Slotted ALOHA
    * CSMA
    * CSMA/CD
* **"taking turns" protocol**
    * polling
    * token-passing
    * Bluetooth

#### TDMA

#### FDMA

#### Pure ALOHA

#### Slotted ALOHA
![](https://hackmd.io/_uploads/S1975HgPn.png)

**假設**
* 每個 frame 的大小都一樣
* 將時間分成好幾個 slot
* node 之間是同步的

當 node 接收到新的 frame，會在下一個 slot 進行傳送
* **沒有碰撞**(沒有其他node用同一個slot)：
    * 送出
* **碰撞發生**：
    * 在接下來的slot會有機率 $p$ 的機會選擇送出，直到成功送出為止

**效率**

$N$ 個節點要送出多個 frame，機率 $p$
* 一個節點成功送出的機率：$p(1-p)^{N-1}$
* 任意一個節點成功送出的機率：$Np(1-p)^{N-1}$
* 最大效率：找出 $p^*$ 使 $Np(1-p)^{N-1}$ 最大
* 得到 $p^* = 1/e = 0.37 = 37\%$

#### Carrier Sense Multiple Access (CSMA)
==CSMA/CD：CSMA with collision detection==
==CSMA/CA：CSMA with collision avoidance==

**Ethernet CSMD/CD algorithm**
1. NIC 從網路層接收 datagram 加上 frame
2. NIC 感測 channel
    * 若 **idle**：馬上送出
    * 若 **busy**：等待直到 idle 再傳送
3. 若完整送出且沒有碰撞，**Done!**
4. 若在傳輸的過程中感測到碰撞：**終止傳輸**
5. 等待一段時間，回到第 2. 步
    * **binary (exponential) backoff**
        * 在經過 $m$ 次碰撞後，NIC 會從 $\{0,1,\dots,2^m-1\}$ 裡面隨機選一個 $K$，等待 $K\cdot512$ bit times
        * bit time：NIC 彈出 1 bit 所需的時間
            * Example：10 Mbit/s NIC
            * bit time = 1 / (10 * 10^6) s = 100 ns

### Address Resolution Protocol (ARP)
==位址解析協定==

**ARP table**：存在於 **LAN** (Local Area Network) 的每一個節點中，用於 IP/MAC 之間的對照
`<IP address; MAC address; TTL>`

==用廣播的方式傳送==

#### ARP query
**Destination MAC address**：FF-FF-FF-FF-FF-FF
Ethernet frame (sent to FF-FF-FF-FF-FF-FF)
```
Source MAC: 71-65-F7-2B-08-53
Source IP: 137.196.7.23
Destination IP: 137.196.7.14
```

#### ARP response

Ethernet frame (sent to 71-65-F7-2B-08-53)
```
Target IP address: 137.196.7.14
Target MAC address: 58-23-D7-FA-20-B0
```

### Ethernet

* **Connectionless**：no handshaking
* **Unreliable**：no ACK or NAK
* **MAC protocol**：CSMA/CD with binary backoff

#### Ethernet frame structure
...

### Switch

* link-layer device
* store, forward Ethernet frames

#### Switch forwarding table
`(MAC address of host, interface to reach host, time stamp)`