一直向前,不要回頭。
二話不說,即知即行。
三分熱度,無法達標。
四荒八極,躲到虛擬。
五體投地,自尊不計。
六問三推,藉口一堆。
七老八十,終身學習。
八方風雨,也要前進。
九五之尊,抱負崇高。
$1 前言
CWMP (TR-069) 的基本原則之一是 CPE Client永遠是聯線的發起者,但ACS依然有許多 TR-069 連接請求,CPE收到之後,開始會話。這通常在ACS有事的時候,必須立即聯繫 CPE 時使用,例如ACS系統想要將一個新的服務,導入到設備上的時候,通常要主動發起連線。
TR069標準文件中的Annex K中,定義了讓ACS使用XMPP來啟動與Device連線的方法。
$1.1 STUN的使用
在最初設計CWMP的時候,主要執行於客戶端的Gateway。由於這些設備可直接在 Internet 上擁有合法的的IP地址,因此如果讓設備提供一個公開可訪問的 URL,ACS便可以輕易的發出請求(Request),如此便輕易的將TR-069 連接請求傳送到網路設備。
基本的連接請求是通過HTTP GET 方法對CPE 指定的URL 完成的(這個URL 需要在每個Inform 訊息(Message)中發送給ACS,以便ACS 始終知道當前的URL 是什麼)。成功後,設備使用Inform 方法的事件列表中的6 CONNECTION REQUEST事件啟動 CWMP 會話。
然而,隨著越來越多的設備可以通過 TR-069 進行管理,位於Gateway後面的裝置越來越多,這些裝置要透過NAT Mapping,才能提供一個可以連接URL。
TR-069 的 Annex G文件中,定義了一種使用 STUN (Session Traversal Utilities for NAT)協議的方法,以允許這些NAT之後的設備,通過網關接受 HTTP GET 請求。
但STUN 並不是最好的解決方案。最大的問題是STUN使用 UDP,ACS並不能保證它的Request可以到達Device。
$1.2使用來XMPP 來繞過 NAT
隨著更新協議的出現,Broadband Forum的TR-069 開發人員開始使用(XMPP: eXtensible Messaging and Presence Protocol ) 建立一個 Message Bus,以允許發生連接請求可以隨時發生。並在Annex K of TR-069 Amendment 5中進行了完整的定義。
要使用此功能,CPE必須支援CWMP Data Model 的 XMPPBasic:1 和 XMPPConnReq:1 profile。
詳細的定義請參考以下連結:https://cwmp-data-models.broadband-forum.org/tr-157-1-8-0.html#R.TR-069a5
在解釋如何工作之前,先要對XMP的工作與訊息傳遞格式,作一些基礎性的說明。
$2. XMPP名詞解釋
$2.1 JabberID : XMPP的識別位址寫法
簡稱JID(Jabber Identifier or JabberID)。JabberID由三個主要元素構成。node、domain、resource。格式與e-Mail類似,為 user@domain/resource
常見樣子如下: alex@example.com/home
下面是一個例子:t004@of3/663f243
|
格式 |
意義 |
說明 |
|
t004 |
node |
node就是帳戶名稱。在Query的時候,也可以是聊天室。 |
|
Of3 |
Domain
|
domain在JabberID中大部分指的是伺服器名稱,有時我們也會寫成短名稱如of3.xmpp.tti.tv只寫 of3 |
|
663f243 |
Resource |
在JabberID中的resource部分,大部分時候它代表XMPP
Client端連線的識別,每個連線的client會賦予唯一的resource作為識別。 |
|
type |
說明 |
|
get |
用於請求資訊,類似於HTTP Get |
|
set |
提供資訊或請求,類似於HTTP
POST/PUT |
|
result |
回應請求,類似於HTTP 200 |
|
error |
錯誤資訊 |
OpenSync由十九個獨立的程式組成,每個程式有其獨立的功能。由於功能上的相關性,可以分為以下四組,並且依照順序啟動。當然如果熟悉了之後,可以有選擇地不要啟動列為”Optional”的管理程式。這取決於完整系統定義的功能。
下面就是這些程式的簡單說明,之後每一個Manager會有專章進行討論:
DM (診斷經理)是第一個需要啟動的程式。它負責啟動其餘的OpenSync管理器,並有選擇性監控它們。這裡說的選擇性是DM有兩個程式介面,可以在啟動與停機時,呼叫廠商掛上的監控程式。
DM除了啟動其他管理程式外,如果這些管理程式掛了,他還會產生 Crash Report,裡面會記錄當機時間、程式的PID、當掉的理由等等;這些報告會透過MQTT送到雲端的系統中。除了本機之外,DM也可以收集網路節點的當機資訊(例如何時當機、當機頻率等等)。
CM2負責建立主幹(Backhaul)連接,並通過IPv4或IPv6保持與雲端管理系統的連接。CM使用以下步驟來與雲端管理系統連接:
1. 上行網路(Uplink)的選擇,依照設備類型(Gateway or Extender)有不同的方法):
− Gateway: 對於網關設備,上行鏈路始終是電纜端口(以太網,光纖,同軸電纜等)。在這種情況下,不使用特殊邏輯,僅監視與控制器的連接。
− Extender: 在這種情況下,CM要選擇適當的上行鏈路端口,也許是有線端口(RJ45)或Wi-Fi Backhaul。
2.從AWLAN_Node OVS表中的redirector_addr得到 host name的IP地址。
3.建立與 redirector的連接。
4.通過 redirector 得到雲端管理系統的IP地址。
5.將CM連接到雲端管理系統。
6.監視鏈路穩定性 (會不會一直重複發生斷線的狀況)。
這個功能叫做Guest Network,就是家裡面如果有客人來,例如客人、佣人、褓姆臨時要上網,你不想把家裡密碼給客人使用,就可以用這個功能。
Captive Portal是一個啟動頁面,會在訪客用戶設備上自動打開,提示他們通過開放的訪客Wi-Fi登錄,登錄成功之後就可以上網。由於此功能在應用程程層次上執行,因此節點(Node)和控制器(Controller)必須包括在較低層上建立適當連接方法。此節點獲得用戶憑據後,即可使用AAA Server來做客戶端管理。
CPM在OpenSync設備上扮演代理服務的角色,該服務可對在Wi-Fi網路切割獨立的部分,對第三方(來賓)的客戶端裝置上進行身份驗證。來賓客戶端設備通過外部Captive Portal服務器進行身份驗證。
CPM具有以下角色:
− 識別需要進行身份驗證的流量。
− 將流量路由到代理服務。
− 將代理服務從收到的HTTP port 80流量傳遞到雲端系統中運行的UAM (Universal Access Method) / NAS服務。
如果對於這裡運作有疑問,下面連接有不錯的範例與解釋:
https://help.keenetic.com/hc/en-us/articles/360000501439-Captive-portal
CPM 預設是關閉的。
WAN Orchestrator(WANO)負責裝置的Internet連線。WANO啟用設備WAN Port,並啟動必要的服務以啟用Internet連接。
以下是WANO連接網路的步驟:
(1). 建立連接界面:WANO支持以下接口:以太網、VLAN和PPPoE。
(2). 端口角色檢測和WAN探測:
a. WANO自動配置Ethernet Port,並設定Port角色,這裡會啟用自動檢測功能,找出以下三種角色的其中之一:WAN 連接、Ethernet 主幹、Ethernet的延伸。
b. 在WAN設置之前,啟動保全機制,並啟用防火牆規則。
C. 在可用的WAN接口上,啟動的WANO probing (探針):
- 在設備上沒有對WAN進行的設定的話,WANO會預設為DHCP探測。
- 如果裝置設定為靜態IP地址,WANO探測已知的互聯網主機。
- WAN設定為PPPoE或VLAN。
(3).網路配置:WANO負責在設備上進行WAN後續設定。
WM2負責Wi-Fi子系統(例如VAP (Virtual Access Point)、SSID /密碼、主幹(Backhaul)、Channel等)的設置和配置。WM2還負責監視Wi-Fi狀態和客戶端連接/斷開連接。
一開始啟動的時候,WM2會讀取當前設備的配置,並更新相關的Config和State表。雲端管理系統使用型號名稱的無線頻率與介面接口,來正確設置無線裝置的參數。WM2具有以下角色:
- 在以下表中的資訊不匹配時,呼叫Target API來進行設備設定:
- Wifi_Radio_Config與Wifi_Radio_State
- Wifi_VIF_Config與Wifi_VIF_State
- 通過Wifi_Associated_Clients Table,報告已連接的Client與其Metadata。
- 每當STA VIF 連接狀態改變的時候,更新Wifi_Master_State表中的port_active欄位,並通知CM。這功能用於Wi-Fi Extender的啟動和上行網路連接設定。
NM負責管理所有與網路相關的配置和網路狀態報告,這是功能比較多的Manager。主要功能包含:
NM可以管理OVS 橋接器、傳統橋接器 (缺少HomePass™之類的功能)、網絡接口及其配置、Wi-Fi接口 (Access Point 和 Station)。
Cloud schema是使用擴充的OVSDB schema,該schema已經提供了配置OVS橋接器的所有必要方法。但有時Bridge裝置的上傳介面是Wi-Fi,但如果不與Wi-Fi層進行互動,則無法完全配置Wi-Fi接口。NM在Wi-Fi管理部分必須要與WM偕同一致以提供完整的功能。
Netfilter 一個User Space的Linux公用程式,使用iptable來控制封包與流向(Data Flow)。NFM藉由 Netfilter 提供以下功能:
− 封包過濾(Packet filtering),防火牆功能(Firewalling)
− 封包的紀錄(Packet logging)
− 封包的排隊(Packet queueing)
− 封包的處理)Packets mangling) (例如依照封包的標頭和標記做一些特別的處理)。
− 網路和端口地址轉換(Network and port address translation)
− 讀取、解析NFLOG數據包,然後用JSON格式,透過MQTT發送給雲端系統。
QoS 設定網路封包的處理先後順序,例如語音、視訊要有優先通過,以維持比較好的用戶體驗。這些設定包含:
− Queue的先後順序(Queue priorities)。
− 保留給Queue的最大頻寬(Maximum queue bandwidth)。
− 封包的優先順序(Packet prioritization)。
QM負責緩衝來自SM、BM和FCM的MQTT訊息。即使Up Link連接斷開(例如主幹網路瞬時故障、ISP服務中斷等等),也嘗試不丟棄任何訊息。訊息使用Google的protocol buffers進行編碼。報告內的多條訊息將合併為一條訊息。 其他管理器使用Unix Socket與QM進行通信。
Google的protocol buffers 請參考一下連結:
https://developers.google.com/protocol-buffers/docs/proto
統計管理器(SM)負責處理所有有關於無線網路的統計請求(Request),並將結果發送到雲端管理系統。當MQTT用於數據平面時,配置通過OVSDB完成。
以下用一個收集客戶端的頻率為例,來說明說明收集和發送統計信息的過程(不是真實的統計數據,僅是用來舉例說明用的):
雲端管理系統可以設置了一個計時器,以10秒的頻率,收集一次客戶端的頻率信息,另一個計時器用於每120秒發送一次客戶端報告。如果發生Timeout,便呼叫Target Layer(API) 測量客戶端裝置的頻率。
Target Layer(API) 也許會呼叫Kernel API讀取相關數值。Target Layer(API)還負責將其測量的數據資料結構轉換為SM期望的格式(格式定義於OpenSync的Data Pipeline(簡寫為DPP) Library中)。
各種量測值會存儲到報告中,也會與其他量測的數據合併在一起,並可進行進一步處理和操作。當報告的計時器timeout時,該報告被發送到QM (Queue Manager),QM 將來自不同管理器的報告合併為一個報告,透過MQTT發送到雲端管理平台。
負責根據每個客戶端的配置、Wi-Fi信號/雜訊的強度和雲端管理系統提供的觸發條件(Trigger),將Wi-Fi裝置引導到不同的頻段(2.4GHz or 5GHz稱之為band steering)或不同的AP(稱之為Client Steering)。這是Smart Mesh之中最基本的功能。
Log Manager負責根據Cloud請求(logpull)收集和上載裝置的日誌和系統信息,並依照日誌的嚴重性設定處理的模組。
PM負責:
- 設備GUI和雲端管理系統之間的暱稱同步。
- 雲端管理系統通知設備凍結(Parental Control功能)(OpenFlow must disabled)
- 通過調節風扇轉速來進行設備的熱度管理
- 設備的LED管理。
Exchange manager 主要執行OVSDB 與其他管理系統之中交換資料(例如與 TR-069/369 之間)。基本上這是一個雙向的同步功能(e.g., OVSDB <-> TR-181)。
收到來自雲端管理系統的觸發後,UM確保設備韌體升級過程完成。 雲端管理系統為所選客戶位置上的所有節點精心安排了韌體升級過程。
雲端管理系統使用以下命令啟動更新:
- - 可用的韌體image URL
- - 雲端管理系統期望韌體下載的下載時間(例如半夜三點開始下載升級)。
- - 韌體密碼(如果韌體image已加密) (可選)
每次韌體image下載成功之後,設備都會通過OVSDB AWLAN_Node Table的upgrade_status欄位報告成功。此時,雲端管理系統將更新升級計時器。計時器更新之後,設備開始升級韌體過程。
如果升級成功,則設備將通過upgrade_status 欄位再次報告成功。雲端管理系統隨即進行設備重啟。
LTE管理器(LTEM)負責在檢測到Internet中斷後,將網路流量從WAN切換到LTE備份。LTEM會監視WAN Link是否發生L2或L3中斷,並在發生WAN中斷時向LTE接口添加預設路由。當WAN接口恢復聯機時,LTEM刪除LTE路由,網路流量再次回到WAN接口。
LTEM還負責在網路切換的時候,為LTE接口添加和刪除DNS Entry。
由於想做Opensync,所以決定由基本的核心開始研讀,這核心就是Open vSwitch (簡寫為OVS)。
如果說硬體的Ethernet Switch大家都懂,OVS就是軟體的交換器(switch),所以所有硬體交換器的功能,OVS都有支援。
那有甚麼好處? 那就是說Switch功能可以不斷更新。因為硬體買了就買了,如果有新的功能出來,就只能丟掉,買新的硬體。但是軟體Switch只要更新軟體,便有新功能了。
此外目前在雲端的環境之中,VM的使用是常見的,雖然作業系統早就可以虛擬化了,但是實體網路介面還是有許多介面,因此OVS也可以輕易地提供許多有彈性地應用。下面這張由Wiki抄過來的圖,可以極大化的說明OVS的功能。
但雖然OVS是設計給分散式網路使用,但是更多的應用是利用OVS來在一個機器上建立一堆虛擬機器,然後便可以透過OVS這虛擬的交換器,用標準的網路協定來進行溝通。
下面列一下OVS的功能:
上圖當中,利用網路封包之中的 Ethernet Header + IP + L4 (Port #)來做出Hash Key,Switch便用Hash結果來決定封包要走哪一條網路介面。
下面是 OVS 的系統架構圖,接下來會逐一說明圖中各模組的功能。在此架構圖中,我們看到三個主要的橘色的方塊,這是主要的三個元件: Datapath、vswitchd、ovsdb。分別說明如下:
下面依照圖中數字,說明一下資料流程:
(1) 網路卡在混雜模式下,讀取所有來自Etehrnet的封包,送給 Datapath Module。
(2) Datapath Module檢查封包,將需要處理的封包送交 vswicthd deamon處理。
(3) OpenFlow 是數據鏈路層協定(Data Link Layer Protocol),主要控制Switch或Router的轉發原則(forwarding plane),藉此設定網路封包所走的網路路徑。OVS做為一個軟體Switch,vswitchd 同樣支援OpenFlow Protocol,用來設定路由。
(4) 發現需要處理的封包,vswitchd 會更新Flow table。
(5) 如果封包不需要處理,vswitchd 通知 Datapath。
(6) 考慮到如果每一次封包的傳導都要詢問一次 OpenFlow 將導致網路的延遲與沒有效率,已經得知的規則將記錄在 flow table 中,供之後的封包使用。Flow Table每次更新都會通知 Datapath Module。
(7) Datapath 可以根據更新的 flow table來傳導封包。
其他還有一些ovs的管理介面,有以下幾隻程式:
− ovs-dpctl: 用來配置 Datapath (OVS Kernel 模組)。
− ovs-ofctl: 查詢和控制 OpenFlow 的規則 (policy)。
− ovsdb-tool: ovsdb 的設定工具。
− ovs-vsctl: 查詢和更新 vswitchd 的配置。
上圖之中,還有一個方塊是sFlow,這是一個網路常常使用的流量分析工具,通常在L2 Switch上面會有SFlow Agent,就可以讓sFlow collectors 讀取資料,然後來做一些分析。OVS上面也有支援 sFlow agent的功能。詳細資料可以參考一下的連結:
https://docs.openvswitch.org/en/latest/howto/sflow/
10GPON的基本知識
由於知識不足,決定還是由PON開始我們的討論。PON (Passive Optical Network): 被動式光纖網路的簡寫。是一種一對多的光纖傳輸和訊號分配技術,下行採用廣播方式,上行採用時分多址接入方式,可以靈活地組成樹枝狀、星狀或是匯流排等等不同的網路拓撲。
PON的歷史與發展如下:
ITU-T G.983
大約在1995年的時候,ITU制定了這個標準,主要給第一代的光線網路系統ATM(非同步傳輸模式)來使用,APON/BPON可以提供622 Mbps (OC-12)的下載頻寬和155Mbps的上傳頻寬,這速度對於仍在使用撥接網路1995時代,無異於天文數字。
APON(非同步傳輸模式PON, ATM Passive Optical Network)。這是最早的光網路標準,記得當初都使電信公司的主幹線在使用,例如兩家ISP要連起來,就用APON,其實比較像光纖的專線。
BPON(寬頻PON,Broadband Passive Optical Network):很快地,就發現現實面APON有許多的不足,舉例來說,光纖拉到大樓之後,也許很多家公司需要共享這條光纖的頻寬,於是BPON就出來了。新標準增加了WDM,用來做頻寬分享,同時有許多容錯的設計。BPON也訂了一個管理介面的標準OMCI。由於頻寬需要分接,於是出現了OLT與 ONU/ONT這樣的設備定義。
IEEE 802.3ah
轉眼到了2014年,這是經過Internet的泡沫,網際網路網的速度已經不可同日而語,基於銅線技術的ADSL由2000年開始,大力的推廣與普及,但是這技術有速度侷限線性。
這事後有專家提出,何不將Ethernet的技術應用到光纖網路上? 於是EPON (Ethernet Passive Optical Network)便出現。這概念上非常如意了解,就是用光纖取代網路線的概念。除了速度之外,也可以傳送非常遠的距離。(雙絞線Ethernet只能拉100公尺遠)。這是一個為使用乙太網路包資料的IEEE/EFM標準。所以802.3ah是IEEE 802.3標準的一部分。
不知道為什麼? 這技術只有在日本比較流行,其他地方沒有推起來。
ITU-T G.984
2004年的時候AT&T開始了光速計畫 (Lightspeed Project),採用了PON作為標準技術。主要應用是IPTV,我們公司很幸運的參與了這個計畫,負責提供IP STB。
2008年的時候,GPON便出現了,顧名思義GPON就是Gigabit Passive Optical Network的簡寫,除了速度達到Gigabit之外,也增加了安全性和可選擇的第二層協定(就是說ATM、GEM、Ethernet通吃的意思)。至此大約有十年的時間都是GPON的天下。
IEEE P802.3av (10G-EPON)
事實在GPON發展的同時,就有專家展開10G-EPON的定義,工作由2016年開始,到了2009年便完成802.11av的規格。基本上,規格向下相容802.3ah (EPON)。10G-EPON將使用不同的波長的光束給10G,所以兩種標準可以使用同一條光纖來傳輸。
ITU-T G.987 (10G-PON)
ITU這邊也沒有閒著,2010年終於推出的新的10GPON標準,叫做G.987,或者叫做 XG-PON。規格非為兩種:
第一種是非對稱式10G-PON(稱之為XG-PON1),提供最大下載10Gbps,上傳2.5 Gbps的傳輸速度。
第二種是對稱式10G-PON(稱之為XG-PON2),上下的速率均為10 Gbps,但是在ONT上需要更昂貴的突發模式雷射(Burst Mode Laser)來支持10Gbps的上行傳輸速度,在2010的時候,價格是GPON的90倍,到了2020年,還是有20倍的價差。
ITU-T G.9807.1 (XGS-PON)
由於XG-PON2的成本問題,2016年,ITU-T G.9807.1又發表了另外一個對稱式10G-PON標準,稱之為XGS-PON。至此大勢底定XGS-PON成為主流。