# 計算機網路筆記-ch4
data plane : 處理資料傳輸
control plane : 路徑規劃
network layer protocols is in **<font color=red>every hosts and routers</font>**.
routers:
* 檢查所有經過的datagram的header
* 將datagrams從input port送到正確的output port
### two key network-layer function
#### forwarding
將packets從router's input link 送往合適的router's output link
(像在旅行中決定下個路口往哪走)
#### routing
決定packets從來源到目的地的路線
(規劃整體旅行起點到終點的路線)(產出如routing algorithm一樣的表來做導航)
#### Data plane
* local
* per-router function
* 決定datagram如何從router的 input port 傳到 output port
#### Control plane
* network-wide logic
* 決定datagram從來源host傳遞到目的地host的路徑
* 法1: traditional routing alogrithms(由router執行)
* 法2: software-defined networking(SDN) (由遠端的server執行)
##### traditional routing algorithm

每個routers互相收集彼此的資訊,每個routers在各自的利用routing algorithm來計算出local forwarding table。
#### software-defined networking(SDN)

藉由遠端的控制器來計算forwarding table, 並且安裝在每個router上
### Network-layer service model

在best effort模型中,是沒有甚麼保證(頻寬、遺失、順序、時間容許)的,從上層收到segment就封裝送出去了。如需要任何保障,只要transport layer做就可以解決了。
#### best-effort service
* 較簡單
* 適合real-time application(如:語音對話、直播影音等)
## Inside a router

routing, management control plane(software) 須花較多時間
forwarding data plane(hardware) 非常快速
### Input port function

Decentralize Switching:
* 利用header去forwarding table尋找適合的output port
* 假如datagrame到達的速率大於forwarding到switch fabric的速率,就會發生queueing
* destination-based forwarding : 根據destination IP address 去forward
* generalized forwarding : 根據header中其他的值去判斷如何forward
### Longest prefix matching
在查表時,要選取destination IP address的 prefix 與表中項目中相符合最長的那一項。
### Switching fabrics
* 將 packet 從 input link 傳輸到合適的 output link
* 假設每個input port的傳輸速率是R,今天有N個input link,則理想的switching rate是N*R

#### Switching via memory
最初的generation router,
由一般電腦來完成,先將送進來的封包複製到處理器的記憶體中,處理器找出適當的輸出埠,再複製到輸出埠的緩衝區。
* 由電腦的CPU來決定output link
* 需先複製到記憶體中
* 速度會受限於memory的頻寬
#### Switching via bus
不需要處理器的介入,input port會在封包加一個標籤,指定要傳送出去的output port,並由shared bus傳到每個output port,output port判斷該標頭是不是指自己,是的就保留,不是則捨棄。<font color=red>**同一時間只有一個封包可以跨過bus,所以封包交換速度會受限於匯流排速度**</font>。
#### Switching via interconnection network
利用<font color=red>**棋盤式交換結構**</font>(crossbar switch),若有N個輸入埠、N個輸出埠,會由2N條匯流排(N條水平、N條垂直)形成此結構,而<font color=red>**交換結構控制器可以決定那些是斷開或閉合,此結構便可以實現同一時間轉送多個封包的功能**</font>。
### input port queuing
* 當switch fabric的速度比input port傳入的速度慢,input port就會發生queuing 甚至是 loss。
* head-of-the-line(HOL) blocking : <font color=red>**排在前面的datagram阻止其他也在排隊,但在後面的datagram前進**</font>。
* 
### output port queuing

* 當今天datagram到達output port的速率大於output link的transmission rate,則會需要先將datagram buffer起來。(buffering when arrival rate via switch exceeds output line speed)
* Scheduling discipline : 選擇正在queueing的datagram進行傳送(擁有優先權的人可以享受到更好的效能)。
* queueing (delay) and loss due to output port buffer overflow!
### Buffer Management
Drop
* 當buffer滿的時候
* tail drop : drop掉正準備到達的packet(tail尾巴)
* priority: 依優先的順序drop甚至是remove掉在output port buffer的packet
Marking
* router可以將congestion的訊號標記在packet,讓host知道(ECN、RED)
### Packet Scheduling
決定該要先送出哪個在buffer上的封包
#### FCFS
* first-come-first-served
#### Priority
* 進入buffer(queue)時會先分類
* 任何header裡的資訊都可以成為分類的依據
* 會優先傳送優先權高的封包
* 如果兩個封包來自同一個優先權分類,則用FCFS決定誰先傳

#### Round Robin(RR)
* 進入buffer(queue)時會先分類
* 任何header裡的資訊都可以成為分類的依據
* 會輪流的傳送每一個分類的封包

#### Weighted Fair Queueing(WFQ)
* 進入buffer(queue)時會先分類
* 任何header裡的資訊都可以成為分類的依據
* 原理跟round robin很像,一樣都會輪流傳送每一個class的封包
* 但差別在於每個class都有自己的權重
* 會根據每個class的權重大小來決定這個class被輪到後一次可以傳送多少的封包,而不是像RR一樣,每次輪到每個分類都是傳一樣的份量


### Network Neutrality
保護所有的網路使用者都能不受限制的友善且合法的發言、創造與競爭。
* no blocking : 不要去阻擋合法友善的內容、應用程式或是服務
* no throttling : 不能去損壞或是降級合法友善的網路傳輸
* no paid prioritization : 不能去從事買賣網路優先權
## IP : the Internet Protocol
### IP addressing
#### IP address : 用來識別<font color=red>host與router interface</font>的32-bit識別碼
#### interface : host或router與physical link的連接點
* router通常有多個interfaces
* host通常有一個或兩個interfaces(乙太+無線網路)
### Subnet
裝置與裝置間的interface不需要經由中間路由器就能相連的裝置
##### subnet part : 在相同subnet的裝置,IP address有相同的high order bits
##### host part : 有自己獨有的low order bits
將router或host的interface分離,分離出的那塊孤立的區塊就是subnet
#### Ip addressing : CIDR
CIDR : Classes InterDomain Routing
* address中subnet部分的<font color=red>長度是隨意的</font>
* address format: a.b.c.d/x, x是subnet部分的長度
### DHCP : Dynamic Host Configuration Protocol(為應用層的協定)
目的:可讓想加入網路的host被server動態地分配IP address
* 同個IP可以不同時地分配給不同的host,因為可以將IP分配可以當下有需要的人,而不是IP永遠固定給某一台不是隨時在上網的host,這能減輕IP位置不夠的問題。
DHCP 細節:
* host broadcast <font color=red>**DHCP discover**</font>訊息
* DHCP server 用<font color=red>**DHCP offer**</font>回應host,並告知host可以取得的IP adrress資訊
* host 用<font color=red>**DHCP request**</font>請求取得IP address
* DHCP server 用<font color=red>**DHCP ack**</font>確認
大部分 DHCP server 是被建置在router內,服務router所連接的子網路。

DHCP 還可傳遞IP位址外的資訊:
* 離client最近的router的IP位址
* 離client最近的DNS server的name跟IP位址
* network mask

DHCP流程:
1. host發出的DHCP REQUEST msg被<font color=red>UDP、IP與Ethernet</font>一層一層向下封裝
2. Ethernet frame 在 LAN 中broadcast(設destination IP address為255.255.255.255)
3. 被有DHCP server的router接收,然後一層一層的往上傳遞到DHCP協定
-----
4. DHCP server將要給client的IP位址、最接近的routerIP位址與最近的DNS名子與IP位址寫入DHCP ACK內
## 如何得到IP位址
1. 取得固定IP位址,然後將host寫死
2. DHCP
Q: 網路如何得到subnet part of IP位址
A: 向ISP租用ISP所擁有的IP位址
ISP會分配ISP所被分配到的address space(網段)給client,
如今天有n個組織向ISP租用網路,ISP會將他被分配到的IP位址區塊進行切割,切割成n等分給這n個組織去使用。
### 位址分配屬於階層式
* route aggregation(聚合) : router可以設定條件(如:200.23.16.0/20開時的傳給我),讓封包透過階層式的傳遞,傳到正確的目的地。
* 而封包會選擇符合條件最多(最長)的router
### 那ISP如何取得網段
ICANN : Internet Coperation for assigned Names and Numbers
ICANN 會分配IP位址給5個regional registries(RRs)(區域網路註冊機構,是管理世界上某特定地區Internet資源的組織)
IPV4已經不夠用,但可以藉由NAT可以暫時解決IP位址不夠的問題。
而IPV6有128個bit,為未來將設法普及的定址方法,短時間內應該不會出現位址不夠分配的問題。
## NAT : network address translation
NAT,能讓在區域網路內的所有裝置共同使用一個IPv4(Internet Protocol version 4)的IP位址來對外界做連線。

<font color=blue>**Same source NAT IP address, but different <font color = red>source port numbers</font>.**</font>
### 優點
* 只需要跟ISP租用一個IP,就能使私人區域網路能跟網際網路連線
* 當區域網路內更改了其中一個host的IP位址,不需要告知外界
* 如果換了另一家ISP的服務(換了IP),也不用改變區域網路裡的IP位址
* 可以讓外界無法直接地存取區域網路裡的裝置,對網路安全有幫助
### 如何實現
當要將封包傳出區域網路時,router會將原封包的來源端NAT IP address與port number改成用戶被ISP分配到的IP address,並產生出一個新的port number。而router會將NAT IP address與原本的port number跟其對應到的source IP address與新的port number存入NAT translation table中。當router收到要傳給原host的封包時,router會依照NAT table將IP位址與新的port number換成NAT IP address與原本的port number。

### NAT的爭議
* router"應該"只處理網路層的功能
* IP位址短缺問題應該由IPv6解決
* 違背end-to-end原則
* client無法連接在NAT區域網路裡的server
之所以NAT還是一直被使用,是因為NAT已經廣泛應用在我們的家裡或是各個機構中
## IPv6
* 32-bit的IPv4快分配完了
* 固定的40-byte的header,加速了forwarding
* 可以讓其他網路層做流量處理
## datagram格式

* flow label : 同筆資料給予相同的label,可用來做流量控制及統計
與IPv4的比較:
* 由於沒有checksum,所以可以加速處理資料
* no fragmentation/reassembly
* no options
### Tunneling
由於不是所有的router都更新成使用IPv6的版本,
所以tunneling是將IPv6的datagram放入IPv4 datagram裡的payload欄位中,在IPv4的routers中做傳遞。(封包放在封包內做傳遞)
* 廣泛用於4G/5G中,因為4G/5G是使用IPv6

## Generalized forwarding : match plus action
* match+action : 先match到達的封包的header(可以是網路層、傳輸層或是鏈結層)的bits再採取行動
* destination-based forwarding : forward based on dest. IP位址
* generalized forwarding :
* 其他的header資訊都可以作為下一個行動的依據
* 可以做很多其他的動作 : drop/copy/modify/log packet
#SDN : software-defined networking
### Flow table abstraction
* flow : 可以是在link layer, network layer, transport layer裡header所定義的值
* generalized forwarding : simple packet-handling rules
* match : pattern values in packet header fields(看網路層、鏈結層或傳輸層的headers裡一項或是多項的值是否match)
* actions : 將match的packet進行drop, forward, modify, matched packet 或 send matched packet to controller的動作。
* priority : 可以控制封包的優先順序
* counters : 可以算總共用了多少的bytes或packets(計算user的用量)

## OpenFlow
OpenFlow,一種位於data link layer的protocol,能夠控制switch或router的forwarding plane,藉此改變packets所走的網路路徑。


#### 透過match+action實現了不同裝置的功能
* Router
* match : longest destination IP prefix
* action : forward out a link
* Firewall
* match : IP address and TCP/UDP port numbers
* action : permit or deny
* Switch
* match : destination MAC address
* action : forward or flood
* NAT
* match : IP address and port
* action : rewrite address and port
###### tags: `計算機網路`