# 計算機網路筆記-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 ![](https://i.imgur.com/PTGWLxV.png) 每個routers互相收集彼此的資訊,每個routers在各自的利用routing algorithm來計算出local forwarding table。 #### software-defined networking(SDN) ![](https://i.imgur.com/YLmdcjO.png) 藉由遠端的控制器來計算forwarding table, 並且安裝在每個router上 ### Network-layer service model ![](https://i.imgur.com/fwHBLl1.png) 在best effort模型中,是沒有甚麼保證(頻寬、遺失、順序、時間容許)的,從上層收到segment就封裝送出去了。如需要任何保障,只要transport layer做就可以解決了。 #### best-effort service * 較簡單 * 適合real-time application(如:語音對話、直播影音等) ## Inside a router ![](https://i.imgur.com/qYVUiSU.png) routing, management control plane(software) 須花較多時間 forwarding data plane(hardware) 非常快速 ### Input port function ![](https://i.imgur.com/u876gtP.png) 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 ![](https://i.imgur.com/Vw5vSvQ.png) #### 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>。 * ![](https://i.imgur.com/tfddpKC.png) ### output port queuing ![](https://i.imgur.com/krwyVPG.png) * 當今天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-in-first-out #### Priority * 進入buffer(queue)時會先分類 * 任何header裡的資訊都可以成為分類的依據 * 會優先傳送優先權高的封包 * 如果兩個封包來自同一個優先權分類,則用FCFS決定誰先傳 ![](https://i.imgur.com/gxPQPPs.png) #### Round Robin(RR) * 進入buffer(queue)時會先分類 * 任何header裡的資訊都可以成為分類的依據 * 會輪流的傳送每一個分類的封包 ![](https://i.imgur.com/7jrzUXA.png) #### Weighted Fair Queueing(WFQ) * 進入buffer(queue)時會先分類 * 任何header裡的資訊都可以成為分類的依據 * 原理跟round robin很像,一樣都會輪流傳送每一個class的封包 * 但差別在於每個class都有自己的權重 * 會根據每個class的權重大小來決定這個class被輪到後一次可以傳送多少的封包,而不是像RR一樣,每次輪到每個分類都是傳一樣的份量 ![](https://i.imgur.com/PVhTOjL.png) ![](https://www.researchgate.net/profile/Amor-Chowdhury/publication/221910737/figure/fig10/AS:669008852430851@1536515548142/The-hybrid-queuing-mechanism-consisting-of-the-WFQ-and-the-CBWFQ-regimes.png) ### 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所連接的子網路。 ![](https://i.imgur.com/r3Dxggi.png) DHCP 還可傳遞IP位址外的資訊: * 離client最近的router的IP位址 * 離client最近的DNS server的name跟IP位址 * network mask ![](https://i.imgur.com/DeRRNt3.png) 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位址來對外界做連線。 ![](https://i.imgur.com/QBhFOpY.png) <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。 ![](https://i.imgur.com/ISRikWC.png) ### NAT的爭議 * router"應該"只處理網路層的功能 * IP位址短缺問題應該由IPv6解決 * 違背end-to-end原則 * client無法連接在NAT區域網路裡的server 之所以NAT還是一直被使用,是因為NAT已經廣泛應用在我們的家裡或是各個機構中 ## IPv6 * 32-bit的IPv4快分配完了 * 固定的40-byte的header,加速了forwarding * 可以讓其他網路層做流量處理 ## datagram格式 ![](https://i.imgur.com/i6xR3SV.png) * 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 ![](https://i.imgur.com/latEhq6.png) ## 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, mathched packet 或 send matched packet to controller的動作。 * priority : 可以控制封包的優先順序 * counters : 可以算總共用了多少的bytes或packets(計算user的用量) ![](https://i.imgur.com/0A1WqSw.png) ## OpenFlow OpenFlow,一種位於data link layer的protocol,能夠控制switch或router的forwarding plane,藉此改變packets所走的網路路徑。 ![](https://i.imgur.com/Re55rcq.png) ![](https://i.imgur.com/Ejh4ZrQ.png) #### 透過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: `計算機網路`