---
# System prepended metadata

title: 網概筆記

---

# Protocol Layering(協定分層)
![20190601215753579.png](https://hackmd.io/_uploads/Bkq8GsQQ6.png)


###  1. Application Layer-應用層
* 包含許多協定(HTTP、SMTP)
* 應用層的資訊封包稱為**訊息(message)**
### 2. Transport Layer-傳輸層
* 傳輸應用層的訊息(message)
* 包含TCP、UDP協定
* 傳輸層的封包稱為**區段(segment)**
#### TCP vs UDP :+1: 
> TCP(Transmission Control Protocol)
> * 提供**連線導向**(Connection-oriented service)服務
>     * 握手式(Handshaking)
>     * 全雙工連線(full-duplex connection)
> * **可靠**的資料傳輸
>    * 保證所有資料都完整送達且不會遺失
> * 將長訊息分割成短訊息傳輸
> * 有壅塞機制
>     * 可調節傳送速率
> 
> UDP(User Datagram Protocol)
> * 提供**無連線**(Connectionless service)服務
> * **不可靠**的資料傳輸
>     * 不保證所有資料都完整送達，也不保證依序送達
> * 不提供壅塞機制
> 

        
### 3. Network Layer-網路層
* 負責將資料報(datagram)移動到其他主機
* 包含IP協定
* 網路層的資訊封包稱為**資料報(datagram)**
### 4. Link Layer-連結層
* 將整個訊框(frame)從一個網路元件搬到另一個網路元件
* 服務取決於連結層協定而有所不同
* 連結層的資訊封包稱為**訊框(frame)**
### 5. Physical Layer-實體層
* 將訊框(frame)中**個別**的位元從一個節點搬到另一個節點
* 協定取決於連結的**傳輸媒介**有所不同


### OSI model
#### presentation-表現層
* 提供服務使應用程式可以解讀交換資料的意義
    * 資料壓縮、加密、解密
#### session-會議層
* 資料交換的界線標定和同步化
    * 建立檢查點

---


### Encapsulation(封裝)
每層資料包都有兩種欄位：**標頭欄位(header)**與**內容欄位(payload)**，內容通常來自上一層封包
![image.png](https://hackmd.io/_uploads/Bk8sUomXp.png)



---
# 1.Application Layer(應用層)
## Web and HTTP
### HTTP(HyperText Transfer Protocol)
* 用TCP作為傳輸協定
    * 較可靠的資料傳輸
* stateless protocol(無狀態協定)
    * 不會維護跟用戶端有關的資訊
    
#### 非永久性連線 vs 永久性連線
> Non-persistent connection(非永久性連線)
> * 透過**個別的TCP連線**來傳送
> * 總回應時間：2*RTT+傳輸時間
>    * RTT - 資料包來回往返client(客戶端)和server(伺服器)時間
>    * 2次RTT - 1次建立TCP連線、1次請求和接收物件
> 
> persistent connection(永久性連線)
> * 透過**相同的TCP連線**來傳送
>    * 保持TCP連線開啟

### cookie
讓網站能追蹤使用者，包含四項元件：HTTP**回應**訊息的標頭行、HTTP**請求**訊息的標頭行、由使用者瀏覽器管理的cookie檔、網站的後端資料庫。

### web caching(網頁快取)/proxy server(代理伺服器)
是減少伺服器負荷的一種技術，網頁快取有自己的硬碟儲存空間，可以保存最近被請求過的物件副本。

優點：
* 減少客戶端請求的回應時間
* 減少資料流
    * 降低頻寬成本
* 減少資訊網流量
    * 增加所有應用的效能

### CDNs(Contect Distribution Networks, 內容傳遞網路)
shared CDNs
Dedicated(專用) CDNs : Google、Netflix
![image.png](https://hackmd.io/_uploads/S1x87T7X6.png)

---


## Email
是一種**非同步**的通訊媒介，主要元件有：user agent、mail server、Simple Mail Transfer Protocol(SMTP)。

### SMTP
* 存放於**應用層**的網路電子郵件協定
* 使用**TCP**建立連線
* 早期使用簡單的7位元ASCII碼
* 直接連線

#### SMTP vs HTTP
兩者皆為檔案傳輸
> SMTP
> * push protocol(送出式協定)
>    * TCP由**寄件者**的主機開啟
> * 以7位元的ASCII格式編碼
> 
> HTTP
> * pull protocol(取得式協定)
>    * TCP由**接收者**的主機開啟
> * 無限制編碼格式


---

## DNS(Domain Name System, 網域名稱系統)
是一種應用層協定，它做為將主機名稱轉譯為IP位址的**分散式資料庫(distributed database)**，使用**UDP**運作(port 53)。
它也提供以下服務：主機別名、郵件伺服器別名、負載分配。
* 位於網路邊緣(Network edge)
    * 使用者不會直接使用
* 使用UDP協定連線

### 分散式資料庫(distributed database)
DNS使用大量的伺服器，以hierarchical(階層)的方式分散在世界各地。
有三類伺服器：Root DNS server、Top-level domain(TLD, 高階網域) DNS server、Authoritative DNS server。

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

左圖：遞迴式查詢(recursive guery)+循環式查詢(iterative gueries)
右圖：遞迴式查詢(recursive guery)

### DNS Cache(DNS快取)
當DNS伺服器收到對應地址的回覆，可快取在本機記憶體中，每隔一段時間會**清除**快取的資訊以改善效能延遲、減少DNS訊息量。

### DNS紀錄與訊息
Type = A，`Name`為hostname，`Value`為該主機名稱的IP位址
Type = NS，`Name`為domain(網域)，`Value`為該官方DNS伺服器的主機名稱
Type = CNAME，`Value`為主機別名為`Name`的正規主機名稱
Type = MX，`Value`為主機別名為`Name`的正規郵件伺服器名稱

---
## Video and CDN
### DASH(動態自適應串流)
* 高(低)頻寬-高(低)速率
* 允許用戶端**自由切換**不同版本
### CDN(Contect Distribution Networks, 內容傳遞網路)
管理多個分散位置中的伺服器，將影片**副本**儲存在其伺服器中。
包含私有CDN (ex.Youtube)、第三方CDN

#### CDN的兩種佈局原理
* Enter Deep
深度進入到ISP的存取網路，減少用戶與CDN伺服器的連結和路由器的數量，改善延遲和吞吐量
* bring home
透過較少數量的網站上建構大型集群將ISP帶回家，放置在IXP中，降低維護和管理

Cluster Selection Straregy(集群選擇策略)
1. 地理位置最接近的集群
缺點：地理上接近的集群在網路路徑長度下可能不是最接近的集群
2. 對集群和用戶端之間的延遲進行**即時測量**以確定最佳集群
缺點：許多LDNS(用戶的DNS伺服器)被配置為不回應
---
## socket
當socket被創建時，會被指派識別號碼(port number, 埠號)。

### 使用UDP的socket
* 在封包丟進socket之前，需要把目地端位址貼在封包上

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

### 使用TCP的socket
* 需要先**握手**(Handshaking)建立TCP連線
* TCPserver有兩個socket
    * 第一個socket：用戶端想要與伺服器通訊時，一開始接觸的點
    * 第二個socket：建立來和用戶端通訊使用
    
![image.png](https://hackmd.io/_uploads/ryvW0cV7T.png)


---


# 2.Transport Layer(傳輸層)
是分層網路架構的核心部分。傳輸層協定提供**邏輯通訊(logical communication)**-兩台主機透過路由器和連結相連，實作在終端機上，而非路由器。

### IP(Internet Protocol)
提供主機間的邏輯通訊，屬於盡力而為投遞服務，是一種不可靠的服務


---

## Multiplexing and Demultiplexing
多工需要socket有唯一識別碼，每份區段都包含特殊欄位：來源端埠號欄位(source port number field)、目的端埠號欄位(destination port number field)
*  0 ~ 1023為公認埠號(well-known port number)
### multiplexing(多工)
1. gathering(收集)：在不同的socket收集資料片段
2. Encapsulating(封裝)：將資料片段與標頭封裝在一起
3. Passing(轉交)：把區段交給**網路層**


### demultiplexing(解多工)
1. Delivering(交付)：將資料交付給正確的socket

### 無連線的多工與解多工
UDP socket由兩個數值識別：
1. **目的端IP位址**
2. **目的端port number**

由於**沒有紀錄來源端**，導致若有相同目的端的socket則無法辨別其來源。

### 連線的多工與解多工
TCP socket由四個數值識別：
1. **來源端IP位址**
2. **來源端port number**
3. **目的端IP位址**
4. **目的端port number**

---

## UDP
DNS使用UDP協定

> 更適合UDP的應用：
> *  傳送哪些資料在何時傳送
>     *  UDP沒有壅塞控制
> * 不用建立連線
>     * 沒有握手程序，不會因為建立連線而延遲
> * 無連線狀態
> * 較小的封包標頭負擔
>     * UDP只有8位元的標頭負擔
> * 例如：即時的應用程式
> 
> 缺點：丟包率較高、安全性較低

### UDP checksum(檢查和)
* 提供**錯誤偵測**的功能
* 無法保證來源端與目的端之間的連結都會提供錯誤檢查
    * end-end principle : UDP必須提供端點的錯誤偵測
* 不會採取錯誤復原的手段
![image.png](https://hackmd.io/_uploads/SkjmbnNQ6.png)


---

## TCP
* 是連線導向(Connection-oriented)的協定
* 需進行握手(handshake)程序
* 提供全雙工服務(Full-duplex service)
    * 資料可以在連線的主機之間相互流動
* 連線是點到點的
    * 傳送端-接收端
* 群播(multicasting)無法使用TCP運作

### 三次握手(three-way handshake)
1.用戶端會送出一份特殊的TCP區段
2.伺服器會回應第二份特殊的TCP區段
3.用戶端會再回應第三份特殊區段
前兩份不包含應用層資料；第三份可能會**攜帶內容(payload)**


---

# 3.Network Layer(網路層)
兩個部分：**資料層、控制層**

### forwarding(轉送) and routing(繞送)
* forwarding(轉送)：當封包抵達路由器的輸入時，路由器須將封包移到適當的輸出連結，發生時間較**短**，通常在**硬體**中實作
    * Forwarding Table
* routing(繞送)：網路層需判斷封包從傳送端到接收端的**路徑**，發生時間較**長**，通常在**軟體**中實作
    * Routing algorithm

### Control Plane(控制層)
* 轉送和繞送的功能包含在**路由器**中
* SDN(software-defined networking)：網路是軟體定義的

### 網路服務模型(network service model)
1. 投遞保障
2. 有限延遲的投遞保障
3. 依序封包投遞
4. 最低頻寬保障
5. 安全性

best-effort service(盡力而為的服務)

## 路由器內部
轉送功能(硬體)：資料層
1. input port (輸入埠)：
    執行**實體層**功能：進入路由器的終端
    執行**連結層**功能：與另一端連結層交互作用
    執行**查詢**功能
2. switching fabric (交換結構)：將輸入埠連接到輸出埠
3. output port (輸出埠)：將經由交換結構的封包儲存，並輸送到輸出連結，會執行與輸入埠相反的資料

繞送功能(軟體)：控制層
1. routing processor (繞送處理器)：執行**控制層**功能

### switching(交換)
路由器最核心部分，經由交換結構，封包由輸入埠轉送到輸出埠
1. 經由記憶體進行交換：封包從輸入埠複製到記憶體，
繞送處理器將**取出**目的端位址-**查找**轉送表-**複製**到輸出埠
2. 經由匯流排(bus)進行交換：輸入埠會透過bus直接將封包傳輸到輸出埠，不須繞送處理器的介入
3. 經由互連網路進行交換：棋盤式交換結構(crossbar switch) 可以在同一時間轉送多個封包，是非阻塞式的

### 佇列
* 佇列會在輸入埠和輸出埠產生
* 佇列增長，記憶體會耗盡，封包遺失可能發生
* 輸入佇列：棋盤式交換結構(crossbar switch)
    1.速度相同
    2.從輸入埠傳輸到輸出埠的時間等於輸入連結接收封包的時間
    3.封包以FCFS的方式移動
    
### 封包排程
*  First-come-first-served(FCFS)
    * First-in-first-out(FIFO)：以**封包抵達輸出佇列的順序**，選擇封包進行傳輸
*  Priority Queuing(優先權佇列)：**按照優先權類別**進行傳輸，相同優先權會以FIFO的方式進行選擇
    *  Non-preemptive priority gueuing：一旦封包開始傳輸就不會中斷
* Weighted Fair Queuing(WEQ)
    * Round Robin(RR) Queuing：封包按照優先權分類，並**輪流**服務各個類別
    * Work-conserving Queuing：只要有封包在佇列中等待傳輸就不會讓連結閒置
