---
tags: 電腦網路, 大二筆記
---
# 電腦網路 Chapter 1 : intro
## 啥是「協定 (Protocol)」
* 網路實體間溝通的模式
* 定義網路實體間訊息的傳遞及收取的格式及順序,及之後須採取的動作

> 例如: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) 將訊號傳遞至各個住家

* 由於同時使用了光纖和同軸電纜,這個系統常被稱為:混合光纖同軸電纜
> 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:使用時間來分割頻道

* 光纖到戶 (Fiber to the Home, FTTH)
* 衛星鏈路 (Satellite link)
### Access in the Enterprise
乙太網路 (Ethernet)、無線網路 (WiFi)
> 使用於企業、大專院校及大部分住家 <br>
* 乙太網路
* 裝置利用雙絞線連接到 **乙太網路交換機 (Ethernet Switch)**,交換機再連上更大的網路
* 常見的應用為 **區域網路 (Local Area Network, LAN)**

* 使用者可以分到 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

### 封包交換 Packet Switching
* 封包 Packet
* 資料傳遞時,需分割成一塊一塊 **封包**
* 每個封包都有 **標頭 (Header)**,用來記錄這個封包的資訊
* 封包經過每條通信線路會以該線路的最大傳輸速度傳輸
> 傳輸延遲
* 傳輸延遲 (Transmission Delay):傳輸速率 (Transmission rate) 為 **R** 的線路傳輸 **L** 位元的資料,造成的延遲為 **L/R** 秒
* 儲存並轉發傳送機制 (Store and Forward Transmission)
* 交換機必須收到完整的封包內容,才能將其發送出去

* 端到端延遲 (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)** ,交換機將選擇丟掉佇列中的某個封包或是新來的封包

* 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**

#### 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 的精神

#### 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 繼續存取網際網路

#### 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}$

* 在理想的情況下:
* $R_{s}<R_{c}$,則客戶端感受到的吞吐量為$R_{s}$
* $R_{s}>R_{c}$,則客戶端感受到的吞吐量為$R_{c}$,且封包會在路由器愈積愈多
* 因此,這段網路吞吐量就是 $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

* 客戶端感受到的吞吐量:
* 當 $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

* 攻擊者可以控制很多的來源,也就是 **殭屍網路 (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

* 在封包每往下一層,就會被安上一個標頭,形成一個新的封包,我們會說這一層封裝了上一層的封包
* 應用層傳輸到傳輸層,應用層的 **訊息** 加上傳輸層的標頭 ($H_{t}$) 組成傳輸層的 **區段**。傳輸層封裝了應用層的訊息
* 傳輸層往下到網路層,傳輸層的 **區段** 被加上網路層的標頭 ($H_{n}$),組成網路層的 **資料塊**
* 網路層往下到連接層,網路層的 **資料塊** 被加上連接層的標頭 ($H_{l}$),組成連接層的 **訊框**
* 我們可以看到,每一層的封包都分成 **標頭 (Header)** 和 **負載 (Payload)**
> 負載為來自上一層的整個封包
* 封包往上層傳時,就會被 **拆裝 (Deencapsulation)**,將自己層的標頭拆除,再傳到上層