---
# System prepended metadata

title: '電腦網路 Chapter 1 : intro'
tags: [電腦網路, ' 大二筆記']

---

---
tags: 電腦網路, 大二筆記
---

# 電腦網路 Chapter 1 : intro

## 啥是「協定 (Protocol)」

* 網路實體間溝通的模式
* 定義網路實體間訊息的傳遞及收取的格式及順序，及之後須採取的動作

![Internet Protocol](https://hackmd.io/_uploads/SJpNhiY1A.gif)
    
> 例如：TCP協定 (Transmission Control Protocol) <br>
---
## 網路邊緣 Network Edge
* 由我們平常使用的電腦、手機組成
* 我們通常稱之為 **主機 (Host)** 或是 **終端系統 (End System)** 
    > 由於性質相同，我們通常會稱 Host = End System
* 而「主機」又可以分為 **用戶端 (Client)** 與 **伺服器端 (Server)** 
    > 伺服器端相對用戶端而言，有著更強大的效能，得以儲存及配發資料給所有用戶端 <br>
    > 而 **資料中心 (Data Center)** 則儲存資料及擁有多個伺服器
  
### 存取網路 Access Network
指終端系統連接到 **Edge Router** 的線路
> Edge Router：終端設備所連到的第一個路由器

### Home Access
最常見的連線方法：纜線 (Cable)、數位用戶線路 (DSL：Digital Subscriber Line)
> 通常用於住家
* Cable
    * 利用有線電視的纜線來進行網路傳輸
        > 台灣的「第四台網路」
    * 有線電視前端 (Headend) 透過光纖 (Fiber optics) 連接到匯流站 (Distribution point)，再使用同軸電纜(Coaxial cable) 將訊號傳遞至各個住家
    ![Cable Internet](https://hackmd.io/_uploads/SJyCMgj10.gif)
    * 由於同時使用了光纖和同軸電纜，這個系統常被稱為：混合光纖同軸電纜
        > HFC: Hybrid Fiber Coax <br>
        > 支持 40Mbps-1.2Gbps 下行； 30-100Mbps上行
    * 用戶們需共用上行及下行的線路，
        > * 當用戶們都有大量資料要傳輸，將會導致每個人能分配到的頻寬大幅降低 <br>
        > * 需要使用分散式多重存取協定 (distributed multiple access protocol) 來協調封包的傳輸，以避免碰撞
* DSL
    * 不同於纜線，DSL是使用電信公司的線纜
    * DSL直接使用電話線與電話總局 (Central office) 的DSLAM交換資料
        > DSLAM：數位用戶線路接取多工器 (Digital Subscriber Line Access Multiplexer)
    * 因為使用的是類比訊號，可以使用一條纜線同時傳輸網路及電話訊號，並互不干擾
    * 使用FDM將纜線分為三個部分：
        * 高頻下行頻道 (Downstream channel) 50K-1M Hz
        * 中頻上行頻道 (Upstream channel) 4K-50K Hz
        * 電話用雙向頻道 0-4K Hz
        > Frequency Division Multiplexing, FDM：使用頻率來分割頻道 <br>
        > Time Division Multiplexing, TDM：使用時間來分割頻道

    ![DSL](https://hackmd.io/_uploads/HJBZayj1R.png)

* 光纖到戶 (Fiber to the Home, FTTH)
* 衛星鏈路 (Satellite link)

### Access in the Enterprise
乙太網路 (Ethernet)、無線網路 (WiFi)
> 使用於企業、大專院校及大部分住家 <br>
* 乙太網路
    * 裝置利用雙絞線連接到 **乙太網路交換機 (Ethernet Switch)**，交換機再連上更大的網路
    * 常見的應用為 **區域網路 (Local Area Network, LAN)**
    ![Ethernet](https://hackmd.io/_uploads/rko8qxs1A.png)
    * 使用者可以分到 100Mbps-1Gbps 的存取速度
    * 伺服器則可以高達 1Gbps-10Gbps 

* 無線網路
    * 透過 **無線存取點 (Wireless Access Point)** 去存取企業內網
    * 而無線網路又可以分成兩種：
    
        | | Wireless Local Area Networks (WLANs) | Wide-area Cellular Access Networks |
        | :----: | :----: | :----: |
        | 層級 | LAN | WAN |
        | 有效距離 | 幾十公尺 | 數十公里 |
        | 技術 | IEEE 802.11 | 4G 5G |
        | 用途 | 家用或建築物中的無線網路 | 行動網路 |
        | 實現方法 | WiFi分享器 | 一堆無線基地台 |
        | 速度 | 取決於所使用的IEEE 802.11標準 | 10Mbps |
   
### 物理介質 Physical Media
在每一組送出及接收資料的機器之間，乘載位元的物理介質，我們稱之為Physical Link
* 而各種物理介質，可以分為兩種：
    | guided media | unguided media |
    | :---: | :---: |
    | 有向的介質 | 無向的介質 |
    | 沿著固體的方向傳播 | 漫無目的地在大氣或太空中傳播 |
    | 光纖、銅軸線纜 | WLANs、衛星訊號 |
    
* 各種物理介質
    * 有向介質
    
        | 名稱 | 特色 | 速度 | 用途 | 優勢 |
        | :---: | :---: | :---: | :---: | :---: |
        | 雙絞線 Twisted pair | 銅線呈螺旋狀以降低電磁干擾 | 六類雙絞線 (CAT-6) 速度可達 10Gbps | 乙太網路、DSL | 最便宜且最常用的有向介質 |
        | 同軸電纜 Coaxial cable | 銅線呈同心圓狀 | 每個頻道可有 100Mbps 的速度 | 電視網路 | 可作為共享介質，實現FDM |
        | 光纖 Fiber optic | 傳導光脈，一個光脈代表一個位元、點到點的傳輸 | 10-100Gbps | 光纖同軸混合電纜 | 高速、不受電磁干擾，適合作為長途傳輸介質 |
        
    * 無向介質
        * 地表無線電波 Terrestrial Radio Channels
            * 透過電磁波頻譜傳遞信號
            * 受環境影響
                1. 路徑損耗
                2. 遮蔽衰弱
                3. 多重路徑衰弱
                    > 訊號行經兩種以上的路徑抵達同一個接受器時，產生的建設性干涉或破壞性干涉造成訊號強度改變
                4. 干擾
                
            * 地表無線電波可分為：
                1. 短距離傳輸：無線滑鼠、鍵盤等 (45Mbps)
                2. 區域傳輸：WLANs
                3. 廣域傳輸：行動網路
                
        * 衛星訊號 Satellite Radio
            * 衛星連接多個地表上的無線電波收發器，接收某個頻段的電波，用中繼器將訊號放大後將訊號從另一個頻段送出去
            * 靜止軌道同步衛星 (Geostationary Satellites)
                * 其軌道速度等於地球自轉速度，因此衛星會待在地球上空某個點
                * 延遲非常大，高達 280ms
                * 每個頻道可提供 45Mbps 的速度
                
            * 近地軌道衛星 (Low-Earth Orbiting, LEO)
                * 軌道離地球較近，所以會繞著地球轉
                * 目前還沒被使用於存取網路
        
---
## 網路核心 (Network Core)
由路由器和交換機所形成的大網，並連接各家的End Router
![Network Core](https://hackmd.io/_uploads/Bka4dijkC.gif)

### 封包交換 Packet Switching
* 封包 Packet
    * 資料傳遞時，需分割成一塊一塊 **封包**
    * 每個封包都有 **標頭 (Header)**，用來記錄這個封包的資訊
    * 封包經過每條通信線路會以該線路的最大傳輸速度傳輸
        > 傳輸延遲

* 傳輸延遲 (Transmission Delay)：傳輸速率 (Transmission rate) 為 **R** 的線路傳輸 **L** 位元的資料，造成的延遲為 **L/R** 秒
* 儲存並轉發傳送機制 (Store and Forward Transmission)
    * 交換機必須收到完整的封包內容，才能將其發送出去
    ![Store and Forward](https://hackmd.io/_uploads/r1xXsjsJ0.png)
* 端到端延遲 (End-end Delay)：訊號源經由 N 個傳輸速度為每秒 R 位元的線路（經過 N - 1 個路由器）將一個大小為 L 的封包送給目標的延遲 (不考慮傳播延遲)：
        $$d_{end-to-end} = N\frac{L}{R}$$

    * 現在有兩個終端系統 A 和 B，中間連接一個路由器 C，路由器間傳輸速率為 R
        ```
        A ---- C ---- B
        ```
        ###### 傳播延遲 (Propagation delay) 先忽略不計，先專注在傳輸延遲 (Transmission delay) 上

        1. 假設有一個大小為 L bits 的封包要從 A 傳到 B，需要花多久的時間？
            * 我們定義 A 開始傳輸的時間為第 0 秒
            * 在 **L/R** 的時間時，封包剛好完整地傳到 C，並開始把封包往 B 傳
            * 由 C 到 B 一共花了 **L/R** 秒，因此一共有 **2L/R** 秒的延遲
            * 代入公式來看看，一共有2個線路 (N = 2)，傳輸速率均為 R，封包大小為 L bits
                $$d_{end-to-end} = \frac{2L}{R}$$
        2. 假設有三個大小為 L bits 的封包要從 A 傳到 B，請問傳輸延遲為多少？
            * 同樣的，定義 A 開始傳輸第一個封包 **p1** 的時間為第 0 秒
            * 在 **L/R** 的時間，**p1** 剛好完整傳到 C，並開始傳往 B，與此同時，因為 **p1** 已經傳輸完畢，第二個封包 **p2** 從 A 開始傳輸
            * **2L/R** 時，**p1** 到達 B，而 **p2** 到達 C且 A 開始傳輸第三個封包 **p3**
            * **3L/R** 時，**p2** 到達 B，而 **p3** 到達 C
            * **4L/R** 時，**p3** 到達 B，結束
            * 因此 $$d_{end-to-end} = \frac{4L}{R}$$
                ```
                time_____________________
                   0   |  -   |      |      
                       |  p1  |      |      
                 L/R   |  -   |  -   |      
                       |  p2  |  p1  |     
                2L/R   |  -   |  -   |  <---p1到達
                       |  p3  |  p2  |
                3L/R   |  -   |  -   |
                       |      |  p3  |
                4L/R   |      |  -   |
                       |      |      |
                    ---------------------
                       A ---- C ---- B 
                ```
            * 我們可以發現 **p1** 到達的時間為 **2L/R**，也就是 **NL/R**，而之後 **L/R** 秒 **p2** 到達，再 **L/R** 秒後 **p3**到達，於是我們可以進行推導：
    * 當訊號源經由 N 個傳輸速度為每秒 R 位元的線路將 P 個大小為 L bits 的封包送給目標時，其傳輸延遲為：第一個封包到達的時間 **NL/R** + 之後 **P - 1** 個封包各晚了 **L/R** 的時間 $$d_{end-to-end} = (N+P-1)\frac{L}{R}$$
* Queueing Delay and Packet Loss
    * 每個交換機都有一個 **輸出佇列 (Output Queue / Buffer)** 
    * 當交換機的輸入速度 (arrival rate) 大於輸出速度 (transmission rate)，輸入的封包會進入輸出佇列，等待前面的封包完成傳輸
    * 輸出佇列的大小是有限的，如果佇列已滿，但還有封包要輸入，就會造成 **掉包 (packet loss)** ，交換機將選擇丟掉佇列中的某個封包或是新來的封包
    ![Queueing](https://hackmd.io/_uploads/ryp3pRiyR.png)
    
* Forwarding Table and Routing Protocol
    * 每個封包標頭內都會紀錄目的 **IP** 位址
    * 而每個路由器都有自己的 **路由表 (Forwarding Table)** 紀錄哪條線路是通往哪一個 (哪個範圍)的IP。當有封包進來時，路由器就會經由查表的方式得知應該將封包送到哪
    * 決定封包經過的網路路徑的動作稱為 **路由 (routing)** 

        
### 電路交換 Circuit Switching
* 不同於封包交換，電路交換會為使用者建立一個專門的通路，相當於一個vip通路，不會有其他人來干擾。因此此方法資料的傳輸又快又穩定
* 當沒有資料要傳輸時 (Silent Period)，線路則會被閒置，很浪費資源
* 為了事先建立連線並維護端到端的穩定連線，電路交換需要設計的信令來協調路上的交換機
* 傳統電話就是使用電路交換的方式
* 電路交換會把一條線纜切成多個部分，有兩種方式：
    * 分頻多工 Frequency Division Multiplexing, FDM
        * 將一條線路分成多個不同頻率的頻譜，要建立通話時，就分配一個固定的頻帶
        * 這些頻帶的寬度我們稱之為 **頻寬 (Bandwidth)**
    
    * 分時多工 Time Division Multiplexing, TDM
        * 將時間分為很多個 **時段 (Time Frame)**，再把每個時段分成幾個 **時槽 (Time Slot)**
            > 下圖每四個顏色就是一個 frame，而各個顏色代表一個 slot
        * 建立通話時，就將某個時槽分配給這次連線
        * 在分時多工下，傳輸速率就是 每秒傳輸的時槽數量 * 時槽的容量
            > 某條線路使用 TDM 且每秒可以傳送 8000 個 frame，每個 frame 可以乘載 8 bits，這條線路的傳輸速率就是 8000 * 8 = 64Kbps
            
        <img src="https://hackmd.io/_uploads/HJmk2k2k0.jpg" height="400">
    
    * 假設A 電腦要經由一電路交換的網路傳送一個 640000 bits 的檔案到電腦 B，線路採 TDM，每秒可傳 24 個 slot，每條線路的傳輸速率為 1.536 Mbps，且需要花費 500ms 去建立連線，試問傳輸時間為何？
        ```
        通道的傳輸速率 = 1.536 Mbps / 24 = 64 Kbps
        傳輸時間 = 0.5 sec + 640 Kb / 64 Kbps = 10.5 sec
                     |            |
                  建立連線     傳輸花費的時間
        ```
### Packet switching versus Circuit switching
* 假設一群使用者共用 1 Gbps 的線路，使用者們會時不時會需要 100 Mbps 的使用頻寬，大概佔 10% 的時間，剩下的 90% 什麼都不做，在這個情況下：
    * 使用電路交換
        * 每個使用者使用時，都必須保留 100 Mbps 的通道，假如使用 TDM，則每一個一秒的 frame 只能被分成 10 個 slot
        * 只有 10 個 slot，所以只能提供 10 個使用者使用
        * 而使用者只有 10% 的時間會使用自己的通道，其他時間都是 Silent period，非常浪費資源
    * 使用封包交換
        * 假如現在有35個使用者，在同個時間有超過 10 個人一起傳送封包的機率為 0.0004，也就是說，一次只有 10 個人以下使用的機率為 0.9996
        * 10 個人以下使用時，使用量也不會超過 1 Gbps，因此使用上感受跟電路交換差不多
        * 由於超過 10 個人一起使用的機率極小，因此 35 人一起使用的感受也跟電路交換差不多
        :::info
        $$p_{user>10} = \sum_{i=11}^{35}(0.1)^i(0.9)^{(35-i)} = 0.00004$$
        :::
* 結論：封包交換可以支持更多使用著一起使用

### Network of Network
* 終端系統透過 **access ISP** 連接上網際網路
* 而要湊齊完整的網際網路，**access ISP** 之間也要互相連接才行
* 但要世界上所有 access ISP 連接在一起明顯是不可能的，單個 access ISP 就需要上百上千萬條線去連上世界上其他的 access ISP

#### Network Structure 1
> access ISPs + a global transit ISP
* 因此有了 **transit ISP** 這個概念
* 理論上 transit ISP 這個東東連上了世界上所有的 ISP，這樣就可以方便讓 access ISP 存取其他 ISP
* 但如此大型的機構將會難以維護，因此肯定會向 access ISP 收錢，因而形成了 access ISP 為 **消費者 (Consumer)**，transit ISP 為 **供給者 (Provider)** 的概念
* 而連上所有 access ISP 的 transit ISP，我們稱之為 **global transit ISP**
![NS 1](https://hackmd.io/_uploads/HJSXpH2yC.png)


#### Network Structure 2
> access ISPs + **global transit ISPs**
* 但既然運行 global transit ISP 能賺錢錢，一定有其他廠商也想要分一杯羹，因而造成有數個 global transit ISP
* 但是每個 transit ISP 應該要連接起來才對，不然使用 ISP B 的 access ISP 無法與使用 ISP A 的 access ISP 通訊，這樣不符合 global transit ISP 的精神
![NS 2](https://hackmd.io/_uploads/ry2NpBhJR.png)

#### Network Structure 3
> access ISPs + **reginal ISPs + tier-1 ISPs**
* 在第三代形成了三層架構，access ISP 付費連接到 reginal ISP，而 reginal ISP 再付費連接到 tier-1 ISP
* tier-1 ISP 身為架構中的最上層，其概念最為接近 global transit ISP

#### Network Structure 4
> access ISPs + reginal ISPs + tier-1 ISPs + **PoPs, multi-homing, peering and IXPs**
* Network Structure 3 還是很粗略的架構，既然 tier-1 ISP 也有得賺錢，因此也不可能只一個，要更接近實現 global transit ISP 還須加上這些元件：
    * 對等連接 peering
        * 同層級的 ISP 互相連接，這樣就不需要透過 Provider ISP 才能通訊
        * 同層級 ISP 相互連接不須要互相付錢
    * 網際網路交換中心 Internet Exchange Point, IXP
        * 將多個 ISP 相互對等連接
    * 網路服務提供點 (Point of Presence)
        * 存在除了 access ISP 的 ISP 中
        * 一組一到多個的路由器放在 Provider ISP 網路當中，提供 Costomer ISP 連線
    * 路徑多宿 multi-homing
        * 除了最高層的 tier-1 ISP，其他 ISP 都可以將自己連接到兩個以上的 Provider ISP
        * 這樣某個 ISP 出現問題，有做 multihome 的 ISP 仍可以使用其他 ISP 繼續存取網際網路
    
![NS 4](https://hackmd.io/_uploads/SJcbmUnJ0.png)

#### Network Structure 5
> access ISPs + reginal ISPs + tier-1 ISPs + PoPs, multi-homing, peering and IXPs + **content provider**
* 這就是我們如今的網際網路架構
* **Google** 就是如今 **Content Provider Network** 的先驅，其擁有 50-100 座資料中心
    * 而這些資料中心都是透過 Google 私人的 TCP/IP 網路連接，與公共網際網路隔開
    * 通常會直接連到低層的 ISP 或是 IXP，以節省給予 tier-1 ISP 的資金

## Performance: loss, delay, throughput

### Delay in Packet Switching Networks

### 處理延遲 Processing Delay $d_{proc}$
* 包含拆開並解析標頭，決定這個封包要往哪走的時間及錯誤檢測的時間
* 時間非常短，通常都是微秒等級

### 排隊延遲 Queueing Delay $d_{queue}$
* 封包被排進駐列後等待的時間
* 封包被排進佇列時：
    * 如果佇列為空，現在也沒有正在傳送封包，則排隊延遲為 0
    * 如果當前佇列很多封包，則排隊延遲就會非常大
* 跟路由器的壅塞程度和效能有關

### 傳輸延遲 Transmission Delay $d_{trans}$
* 和傳輸速率和封包大小有關
* 假設一 **L** bits 的封包要由傳輸速率為 **R** bps 的線材傳輸，傳輸延遲為： $$d_{trans}=\frac{L}{R}$$

### 傳播延遲 Propagation Delay $d_{prop}$
* 每個位元被放到線路上後，傳播到目的地經過的時間
* 受物理介質傳播速度及距離長度影響
* 假設線材長度為 **D**，物理介質的傳播速度為 **s**，則傳播延遲為： $$d_{prop}=\frac{D}{s}$$

### 節點總延遲 Nodal Delay $d_{nodal}$ $$d_{nodal}=d_{proc}+d_{queue}+d_{trans}+d_{prop}$$

:::info
### 傳輸延遲和傳播延遲的差異
我們將線材比喻為一段高速公路，則傳輸延遲比較像是車輛進入高速公路所花的時間，而傳播延遲則是車子走完這段高速公路所花的時間
:::

### Queueing Delay and Packet Loss
#### 排隊延遲 Queueing Delay
* Queueing Delay 會因為佇列狀態不同而有所差異，為了精簡化，我們定義：
    * 平均封包抵達速度為 **a** package per second
    * 封包長度 **L** bits
    * 傳輸速率 **R** bps
    * 平均抵達速率 **La** bps
    * 假設佇列長度無限大
* 流量強度 Traffic Intensity，為平均抵達速率與傳輸速率的比值 $$T = \frac{La}{R}$$
    * 當 T > 1：代表抵達速度比傳輸速度還要快，封包隊伍將無止盡增長，因此排隊延遲會趨近 **無限大**
    * 當 T 接近於 1：封包會排隊，排隊延遲較大
    * 當 T 接近於 0：代表來的封包很少，因此排隊延遲會接近 0

#### 丟包 Packet Loss
* 我們會假設佇列長度無限大，但實際上長度是有限的，當佇列被塞滿時，新的封包進不來，就會造成 **丟包 (Package Loss)**
* 流量愈強，丟包的機率就越高
* 而遭到丟包的封包會由上一層重新傳送，確保資料能夠到達目的地

### 端到端延遲 End-to-End Delay
前面我們有提到端到端延遲為：$$d_{end-to-end}=(N+P-1)\frac{L}{R}=d_{trans}(N+P-1)$$
> 經過 **N** 條 link，傳送 **P** 個封包，每個封包長度為 **L** bits 且每個 link 的傳輸速率為 **R** bps

這部分只考慮到 **傳輸延遲**，而現在加上處理延遲和傳播延遲後：$$d_{end-to-end}=(N+P-1)(d_{proc}+d_{trans}+d_{prop})$$

### 吞吐量 Throughput
* 吞吐量 Throughput 單位為 bits/sec，一共分為兩種
    * 瞬時吞吐量 instantaneous throughput：某個瞬間收到的資料量
    * 平均吞吐量 average throughput：檔案大小和總花費時間的比值，假設一個檔案大小 **F** bits，且一共花費 **T** 秒才傳輸完成，則平均吞吐量為 **F/T bits/sec**
* 下圖為一個簡單的網路，假設：
    * 伺服器和路由器間的傳輸速率為 $R_{s}$
    * 客戶端和路由器間的傳輸速率為 $R_{c}$
![Throughput](https://hackmd.io/_uploads/rkqwmPhJA.png)
* 在理想的情況下：
    * $R_{s}<R_{c}$，則客戶端感受到的吞吐量為$R_{s}$
    * $R_{s}＞R_{c}$，則客戶端感受到的吞吐量為$R_{ｃ}$，且封包會在路由器愈積愈多
    * 因此，這段網路吞吐量就是 $min\{R_{s}, R_{c}\}$，也就是 **瓶頸線路 (bottleneck link)** 的傳輸速度
    * 要傳送一個 **F** bits 的檔案，所需的時間為 $\frac{F}{min\{R_{s}, R_{c}\}}$
* 下圖有 10 對電腦和伺服器同時傳輸檔案，十條路徑共用一個線路，我們假設：
    * 每條伺服器接到網路的線路傳輸速率為 $R_{s}$ bps
    * 每條電腦接到網路的線路傳輸速率為 $R_{c}$ bps
    * 核心網路中被共用的線路傳輸速率為 $R$ bps

![螢幕擷取畫面 2024-04-05 104651](https://hackmd.io/_uploads/ByFOI16k0.png)
* 客戶端感受到的吞吐量：
    * 當 $R$ 非常大，為 $R_{s}$ 和 $R_{c}$ 的數百倍時，吞吐量仍為$min\{R_{s}, R_{c}\}$
    * 如果 $R$ 與 $R_{s}$ 和 $R_{c}$ 差不多時，$R$ 就容易成為瓶頸線路，因為 $R$ 需要平分給 10 條資料流，吞吐量就會變成$min\{R_{s}, R_{c}, \frac{R}{10}\}$

## 網路安全 Network Security
### 惡意軟體 Malware
* 電腦病毒 Virus
    * 主動感染，使用者可能不小心做了某些操作導致感染
    * 經典案例：e-mail夾帶惡意執行檔
    * 會實現自我複製，一旦檔案被執行，就會把同樣的信件及檔案發送給其他人
* 電腦蠕蟲 Worm
    * 被動感染，使用者不需要特別做甚麼就可能以被感染
    * 透過應用程式漏洞發送病毒
    * 會實現自我複製，自動尋找有相同漏洞的電腦，並將自己複製一份發送過去

### 間諜軟體 Spyware Malware
* 在使用者不知情的情況下，收集使用者個人資料的軟體，對使用著的隱私權進行破壞

### 阻斷式惡意攻擊 Denial of Service attack, DoS
* 透過合法使用者造成網路、主機或其他網路設施無法使用
* 大部分 DoS 攻擊可分為三種：
    * 漏洞攻擊 Vulnerability attack：攻擊者透過少量「精心設計」的訊息傳送到目標主機，導致主機服務中止或是死當
    * 頻寬洪水攻擊 Bandwidth flooding：攻擊者傳送大量封包至目標主機，導致頻寬被占滿，使合法的封包無法抵達
    * 連線洪水攻擊 Connection flooding：攻擊者透過與目標主機建立大量的 **TCP 半開連線** 或是全開連線使主機因為大量假連線而占用資源，最後停止接受合法連線

### 分散式阻斷式惡意攻擊 Distribute DoS attack, DDoS
![DDoS](https://hackmd.io/_uploads/rJp30Jpk0.png)
* 攻擊者可以控制很多的來源，也就是 **殭屍網路 (Botnet)**，讓每個來源都往目標發送大量的流量


### 封包分析 Packet Sniffing
* 封包分析器 Packet Sniffer
    * 紀錄所有經過的封包的副本的機器
    * 可能包含敏感的資訊，包含密碼、身份證、商業機密

### IP 位址詐欺 IP Spoofing
* 我們可以手工創造一個含有任意來源位址、封包內容、目標位址的封包
* 而 IP 位址詐欺就是編造一個假的來源地址
* 避免被位址詐欺的方法： **端點認證 (End-point Authentication)**

## Protocol Layers and Service Models
### 服務模型 Service Models
* 我們的通訊分為很多層，而每一層都提供了什麼服務給他上面那層，我們稱之為該層的 **服務模型**

### 協定堆疊 Protocol Stack
* 網際網路的協定共分為五層 (由上到下排列)：
    * 應用層 Application Layer
    * 傳輸層 Transport Layer
    * 網路層 Network Layer
    * 資料連接層 Data link Layer
    * 物理層 Physical Layer

#### 應用層 Application Layer
* 由網路應用層服務和應用層通訊協定組成，包含的協定有：
    * HTTP (HyperText Transfer Protocol)，負責網頁傳輸
    * SMTP (Simple Main Transfer Protocol)，負責 email 傳輸
    * FTP (File Transfer Protocol)，負責做檔案傳輸
* DNS (Domain Name System)是由應用層的協定實作
* 我們稱這裡發送的封包為 **訊息 (Messae)**

#### 傳輸層 Transport Layer
* 負責在 **應用程式終端 (Application Endpoint)** 之間傳遞應用層的訊息，分為兩種協定：
    * TCP (Transmission Control Protocol) 提供連結導向式 (Connect-oriented) 的服務
        * 提供可靠傳輸 (reliable delivery) 訊息一定可以到達目的地
        * 流量控制 (flow control) 控制收發兩端的傳輸速度到達一致
        * 壅塞控制機制 (congestion control) 將過長的訊息切小、壅塞時會自動降速
    * UDP (User Datagram Protocol) 提供非連結導向式的服務
        * 除了傳送訊息，不會做多餘的動作      
        <img src="https://hackmd.io/_uploads/H1uFtg61A.png" height="400">

* 傳輸層發出的封包稱為 **區段 (Segment)**

#### 網路層 Network Layer
* 網路層又稱 **IP 層** ，而我們稱這一層的封包為 **資料塊 (Datagram)**
* IP (Internet Protocol) 協定位於此層，定義資料塊有甚麼欄位，終端系統和路由器該如何解讀並做出對應動作。只要有網路層，就必須要可以運行 IP 協定
* 路由協定 (Routing Protocol) 用來決定資料塊要走哪條路到終點

#### 資料連接層 Link Layer
* 負責將資料塊由一個節點移動到另一個節點
* 連結層協定包含 **乙太網路**、**802.11 (WiFi)**
* 資料連結層的封包稱為 **訊框 (Frame)**

#### 物理層 Physical Layer
* 把資料連接層的訊框拆成一個一個位元，經由物理媒介傳輸至另一個節點

### 封裝 Encapsulation
![Encapsulation](https://hackmd.io/_uploads/r1j1ClaJA.png)
* 在封包每往下一層，就會被安上一個標頭，形成一個新的封包，我們會說這一層封裝了上一層的封包
    * 應用層傳輸到傳輸層，應用層的 **訊息** 加上傳輸層的標頭 ($H_{t}$) 組成傳輸層的 **區段**。傳輸層封裝了應用層的訊息
    * 傳輸層往下到網路層，傳輸層的 **區段** 被加上網路層的標頭 ($H_{n}$)，組成網路層的 **資料塊**
    * 網路層往下到連接層，網路層的 **資料塊** 被加上連接層的標頭 ($H_{l}$)，組成連接層的 **訊框**

* 我們可以看到，每一層的封包都分成 **標頭 (Header)** 和 **負載 (Payload)**
    > 負載為來自上一層的整個封包
* 封包往上層傳時，就會被 **拆裝 (Deencapsulation)**，將自己層的標頭拆除，再傳到上層
