# 計算機網路筆記-ch5 Control plane : 決定封包從來源端送到目的地的路徑。 * per-router control (傳統) * logically centralized control (software defined networking) ## Routing protocol 決定來源端到目的地的經過routers的good paths * path : 一串routers packet從給定的初始來源遍歷到最終目標host * good : 最少的cost,最快,最不塞 ### routing algorithm 分類(<font color=orange>我認為必考</font>) ![](https://i.imgur.com/Rpp709V.png) ## Link state ### Dijkstra's link-state routing algorithm * centralized : 每個node都知道網路中所有link的cost(成本) * 藉由link state broadcast實現 * 所有node擁有的資訊是一樣的 * 計算從來源node到所有其他node的最小成本路徑(least cost paths) * 會給予所有的node forwarding table * iterative : 經過k個迴圈,可以得到到k個目的地的最小成本路徑 ![](https://i.imgur.com/kD7gCY7.png) ![](https://i.imgur.com/v7FyYwq.png) #### discussion * 每個router都需要<font color=red>broadcast</font>自己的link state資訊給其他 n router #### route oscillation(震盪性) 如果將流量擁塞設為link cost,則會發生震盪的情形。 ![](https://i.imgur.com/wkb5q0Q.png) ## Distance Vector * 每次循環時,在直接相鄰的節點(鄰居)之間進行訊息交換 * 根據 Bellman-Ford (BF) equation ![](https://i.imgur.com/U3JAkO1.png) ![](https://i.imgur.com/23Bk3j7.png) ### KEY idea * 每個節點會不時的傳遞自己distance vector estimate給鄰居 * 假設x節點收到鄰居傳的新DV estimate,x會藉由B-F equation去更新自己的DV * 以上動作會一直重複做(重複交換訊息、更改自己的DV),直到x算出真的對其他node的真正最小成本路徑 ### each node 以下三點重複循環: 1. 等待local link cost的改變或是鄰居傳來新的DV 2. 根據鄰居傳來的DV重新計算自己的DV 3. 如果重新計算的DV有改變,則會通知並傳給鄰居 每個節點是iterative與不同步的,他們各自的迭代取決於: * local link cost的改變 * 鄰居傳來新的,改變過後的DV 每個節點也是分散式與self-stopping: * node只會在必要的時候(自己DV有更新的時候)通知自己的鄰居自己的改變 * node假如沒有收到通知,就不會有動作(action taken) ### link cost change cost突然由 * 大變小,是可以順利正常運作的 * 小變大,可能會造成無限loop(分散式的問題) EX: ![](https://i.imgur.com/A4YTNQm.png) 由於Z的DV告訴Y只需5就能到X,Y就會更新自己的DV(Y到X走Z,花6), Z會再由Y更改自己的DV(Z到X改成7),......無限循環,count-to-infinity ## 比較LS跟DV complexity: * LS : n router, O(n^2^) * DV : 每個router收斂的時間不同 speed of convergence(收斂): * LS : 有可能會震盪,但一定會收斂 * DV : 每個node收斂時間都不同 * 可能有無限循環的問題 * count-to-infinity的問題 robustness(穩健性,可靠度): * LS * 可能會broadcst到不正確的link cost * 每個router都只計算自己的table * DV * 可能會傳遞不正確的最短路徑資訊 * 錯誤可能會藉由鄰居交換慢慢傳開 ## intra-ISP routing : OSPF 目前的路由研究都太過理想化了,事實上無法做到每個router地位相同 * 現在的路由器已經太多了,根本沒辦法儲存所有的目的地到routing table中 * 方法:可將routers匯集至“autonomous systems” (AS) 自治系統 (a.k.a. domains) AS (Autonomous System):自治系統,是指在網際網路中,一個(有時是多個)實體管轄下的所有IP網路和路由器的組合,它們對網際網路執行共同的路由策略。 intra-AS (aka "intra-domains"): routing在同一個AS裡 * 所有在AS裡的router只能跑同一個 intra-domain protocol * 在不同AS的router可以跑不同的intra-domain routing protocol * gateway router : 在所屬的AS的邊緣,連接其他AS的router inter-AS (aka "inter-domain"): * gateways perform inter-domain routing (as well as intra-domain routing) 被intra 與 inter-AS routing 演算法配置的forwarding table : * intra-AS routing 決定在AS裡的dest. * inter-AS & intra-AS 決定外部的dest. ### OSPF(Open Shortest Path First) routing * Open : 公開的 * 使用link-state * 每個router都會廣播自己的OSPF link-state給所有在AS裡的routers * 可有多種的link costs,如參考bandwidth或是delay * 每個router都會有完整的網路拓譜,利用Dijkstra’s去計算forwarding table #### 階層式的OSPF two-level 階層: local area, backbone * link-state只廣播在area中或是backbone中 * 每個node只有自己area的網路拓譜 ![](https://i.imgur.com/LXU8fJf.png) * area border routers: * 統整在area中與目的地的距離,廣播到backbone中 * local routers: * 廣播 LS in area only * 計算在area中的路由 * 經由area border router去跟外界傳遞封包 * boundary router: * 連接其他AS的router ### inter-AS routing : BGP * BGP (Border Gateway Protocol) * 可讓subnet去告訴其他網路說 "我在這裡" * EBGP (Exterior BGP): * 跟鄰居AS交換訊息用 * IBGP (Interior BGP): * 跟自己AS內部的router交換訊息用 * 透過 TCP 連線,傳遞BGP訊息 * 所有的ASs 皆用同一個 inter-AS routing protocol * glues the thousands of ISPs in the Internet together * 透過得到AS鄰居傳來的prefix資訊,得知新的可傳達的目的地與傳遞到該目的地的路徑 * router可能會收到許多不同routers給的特別一個prefix,router會run a BGP route-selection procedure * #### BGP path advertisement ![](https://i.imgur.com/TlcWrhE.png) ![](https://i.imgur.com/pHIVJDz.png) 1. AS3會傳一個BGP訊息("AS3, X")給AS2,告訴AS2 X存在且在AS3裡面 2. 接著AS2會傳BGP訊息("AS2, AS3, X")給AS1,可以經由AS2到AS3找到X * 藉由這個方式,AS不只可以知道X的存在,也可以知道到達X的路徑。 1. gateway router 3a 會先傳遞<font color=red>eBGP</font>訊息("AS3, X")給2c 2. gateway router 2c接著會傳遞<font color=red>iBGP</font>訊息("AS3, X")給所有在AS2裡的router 3. gateway router 2a接著會傳遞<font color=red>eBGP</font>訊息("AS2, AS3, X")給1c 4. gateway router 1c接著會傳遞<font color=red>iBGP</font>訊息("AS2, AS3, X")給所有在AS1裡的router #### Determining the Best Routes ##### Based on policy ![](https://i.imgur.com/rFkhpaY.png) router可能收到同一個prefix但是是透過不同的路徑傳輸,如1c收到3a與2a送的eBGP訊息,皆是告訴1c有目的地x。 * 根據policy, 1c會選擇 path AS3,x,然後藉由iBGP廣播這個path給AS1裡的router * 可以import policy去決定要走哪條路徑或是要拒絕還是接收廣播訊息 * 可用policy來決定要不要廣播路徑與目的地給其他gateway router,可能是取決於其他AS有沒有付費 ##### Hot potato routing ![](https://i.imgur.com/eNXgjrB.png) * 選擇有最小intra-domain cost的local gateway #### BGP selection 可以依照以下條件選擇路徑: * policy決定 * 最短的AS路徑(AS-PATH) * 最近的NEXT-HOP(cost最小的local gateway router) router : hot potato routing * 其他額外的標準 #### 藉由廣播實踐policy : ISP例子 ![](https://i.imgur.com/V7l2vKd.png) * 真實的policy例子 * 當ISP可以選擇不告訴其他ISP業者自己的存在,就可以不用幫忙傳遞封包 * 如圖,當A告訴B與C("W, A"),B可以選擇不要告訴C("W, A, B"),這樣C就沒辦法透過B來幫忙傳遞封包 * 如圖,如果X不想幫助B傳封包到C,X就會不告訴B C的存在 ## SDN control plane 為什麼要用中心化的control plane: * 易於管理與更改,且使用上比較彈性 * table-based forwarding * 集中運算,再分配給routers * 讓網路的管理(如:流量管理、特別的傳送路徑)是可以程式化彈性控制的 SDN 分為三層: ![](https://i.imgur.com/Toy2S62.png) * network-control apps * SDN controller * Data-plane switches ### Data-plane switches * 快速簡單,做forwarding的硬體 * 會被安裝controller已計算好的flow(forwarding) table * 會有table-based switch control的API(如:OpenFlow) * 會有跟controller溝通的protocol(如:OpenFlow) ### SDN Controller (network OS) * 保留網路狀態、switch的資訊(分散式的database) * 藉由northbound API去與上層的network-control app作互動 * 藉由southbound API去與下層的network switch作互動 * 用分散式系統,表現出好的性能、延展性、容錯性 ### network-control apps * control的腦袋 * 利用control function去使用SDN conrtoller 提供的 lower-level service 跟 API * 未綁定的(unbundled),可以透過第三方去提供,可以自己去安裝或是更新想用的app ## OpenFlow protocol * 運行在controller 與 switch 之間 * 利用TCP來交換訊息 * OpenFlow分為三種類別: * controller-to-switch * asynchronous(switch to controller) * symmetric(雜的,各式各樣的) * 與Openflow API不同 * Openflow API是用來標明generalized forwarding action ### controller-to-switch messages * feature : controller 詢問(queries) switch 的 features * configure : controller 詢問或設定 switch 的 配置參數(configuration parameters) * modify-state : 新增、刪除或改變OpenFlow tables裡的flow 項目 * packet-out : controller可以傳送特定的封包給特定的switch做處理 ### switch-to-controller message * packet-in : 將指定封包傳給controller * flow-removed : switch把flow table裡的entry刪掉 * port status : switch 告訴controller目前的狀態 藉由OpenFlow訊息的傳輸,就可以不去程式化switches ### 範例 1. S1, 遇到狀況會用OpenFlow status訊息通知controller 2. SDN controller收到訊息後,會更新link-status資訊 3. 當link status改變時,Dijkstra's路由演算法會被呼叫 4. Dijkstra's路由演算法會存取controller裡網路圖與state資訊等資料,接著計算新的路由 5. link state routing app會再與SDN contoller裡的flow table做互動,計算新的flow table 6. controller再利用OpenFlow去安裝新的table到switch上 ![](https://i.imgur.com/uGI0jKv.png) ### SDN的挑戰 * control plane是非常可靠、有延展性的分布系統 * 滿足即時、可靠、安全 * 延展性:可以控制超過一個AS * 在5G時代非常重要 ## ICMP : Internet control message protocol * 用在hosts與routers在網路資訊上的溝通 * 如 error reporting 錯誤回報 : 無法接觸到的host, network, port, protocol * 傳出request/reply(被ping使用) * ICMP訊息藉由IP datagram傳遞 ping : 一種電腦網路工具,用來測試封包能否透過IP協定到達特定主機。ping的運作原理是向目標主機傳出一個ICMP的請求回顯封包,並等待接收回顯回應封包。程式會按時間和成功回應的次數估算遺失封包率(丟包率)和封包往返時間(網路時延,Round-trip delay time)。 ### Traceroute and ICMP 來源端會傳送UDP segment到目的地端,並在第一次將ICMP訊息裡的TTL設為1,第二次將TTL設為2,依此類推,直到真的傳達到目的地端為止。而在第n次傳送的第n個被傳送到的router會將TTL=0的封包丟棄,並回傳一個ICMP訊息(TTL expired),而來源端可藉由ICMP訊息得到router的IP跟name,且還可以計算RTTs。當對終封包傳達到目的地或是找不到目的地時整個trace結束。 ## network management, configuration ![](https://i.imgur.com/eOXMovQ.png) * 管理伺服器 * 網路管理protocol * 用來讓management server query, configure 與管理deivce * 用來讓device通知server事情 * 被管理的device * 裝備著可被管理的硬體與軟體元件 * Data * 裝置的state, configuration data, .... ### SNMP : Simple Network Management Protocol * 可以set或query device data(MIB:management information base) * 有兩種方式傳遞MIB資訊或指令: * request/response mode (皆為manager request, agent response) * trap mode (agent-to-manager, 通知管理server一些特殊事件) ###### tags: `計算機網路`