Transcript 投影片1
Speaker : Kai-Jia Chang
Adviser :Quincy Wu
Date : 9/28
NCKU,Institute of Computer Science and
Information Engineering
Sheng-Fu Su
1
IEEE 802.15.4 標準
ZigBee 無線網路通訊協定
Linux Networking Subsystem
實作與難題
Reference
2
3
IEEE 802.15.4 低速率無線個人區域網路標準(LRWPANs, low-rate Wireless Personal Area
Networks)的制訂目標主要是滿足低功率消耗、低
資料傳輸並符合實作複雜度低、短距RF 傳輸等需
求, 這些特性也說明了IEEE 802.15.4 的網路設備
會比較適用於小型、供電能力有限且價格便宜的解
決方案上。
4
IEEE 802.15.4 的PHY 負責以下工作:
◦
◦
◦
◦
◦
◦
啟動與關閉無線電收發器
無線頻道訊號能量偵測
連線品質指示
CSMA-CA 空閒頻道評估
頻道頻率選擇
資料傳輸與接收
5
IEEE 802.15.4 MAC 子層管理所有存取實體無線
電頻道的動作, 並負責下列工作:
◦ 當裝置被設定為 Coordinator 時,負責產生網路信標
(beacon)
◦ 利用信標作同步
◦ 支援 PAN association 與disassociation
◦ 支援裝置加密措施
◦ 參與頻道存取的 CSMA-CA 機制
◦ 處理與維護 GTS 機制
◦ 在兩個對等的 MAC 實體間提供一個可靠的鏈路
6
ZigBee 標準包含有NWK 層(Network layer)、APS
子層(Application Support sublayer)、
ZDO(ZigBee Device Object)、Application
Framework、SSP(Security Service Provider)與
一些Profiles。主要會簡介NWK、APS、ZDO 與
ZigBee Device Profile。
7
NWK 負責網路層工作, 使用IEEE 802.15.4 MAC 所提供的服務
來完成工作,並提供資料收送與管理兩種服務給上層呼叫使用。
NWK 最重要的工作就是實行ZigBee 網路功能與了解週遭網路狀
況,本論文主要實作的重點就在NWK。
APS 是負責傳輸層工作, 使用NWK 所提供的資料傳輸服務, 並
提供ZDO管理服務與Application Framework 資料傳輸服務。
Multiplexing 是APS 重要的工作, 提供上層應用程式取用網路資
料傳輸服務的Endpoint 號碼, 搭配網路位址, 這樣在兩個通訊
端點間才能達到多工的需求, 讓多個應用程式可排程使用APS,
而不是整個APS 只能由一個應用程式所獨占使用。Binding 是
APS 供的另一個重要功能, 一個Binding 好的應用程式可以用僅
有來源Endpoint 號碼的封包, 來通知所屬Binding Table 擁有
者去幫它傳遞完整封包給複數節點上的應用程式, 就某種程度上
來說這是個可以讓某方省電的方法。
8
ZDO 則是整個ZigBee 網路裝置的控制中心,會取用NWK 與APS 的
管理服務, 並搭配ZigBee Device Profile(ZDP)的規範, 向
Application Framework(AF)提供ZDO Public Interface(ZPUI),AF
可以透過ZPUI 向ZDO 要求進行ZDP 規範的動作,如查找遠端節點的
MAC 位址等。ZDO 包含五大物件,分別對應到五種重要的管理行為,
如下表:
9
Linux Networking Subsystem (簡稱LNS), Linux 網路子系統是目前
Linux核心中主要的網路協定層模型, 大多數的Linux 網路功能都是依照
LNS 來設計開發, 目前有支援TCP/IP、X.25、AppleTalk、IPX、IrDA 與
Bluetooth 等數十種網路協定。這篇論文作者設計ZigBee 網路協定層是仿照
TCP/IP 那一套流程來設計,如圖:
10
上 層 LNS 包含Socket Interface 與Protocol Driver
兩大部分。
這 部 分 主 要 是 以 BSD Socket 呈現給user space
的應用程式設計者使用,BSD Socket 提供了一層標準
的抽象化網路溝通流程, 有socket()、bind()、
connect()、accept()、recvfrom()、sendto()等
API(Application Programming Interface) ;在BSD
Socket 下一層則是各種網路協定層的實作(也就是
Protocol Driver),且自身需包含一個與BSD Socket
溝通的Socket這層Socket 的主要功能是在將各種不同
網路協定層的資料傳遞機制整合對應到BSD Socket 的
API。這兩層Socket 合稱為Socket Interface。
11
LNS 最上層是應用程式層,Linux 核心是採用BSD Socket 與之互動, 應用程式層
以上其實可以再另外設計很多層, 不過在此只將BSD Socket 以上全部視為應用
程式層。接下來則是傳輸層與網路層, 也就是前文所介紹的Protocol Driver。最
下層則是資料連結與實體層, 其中有包含net_device、MAC 子層與網路裝置驅
動程式。
12
第一道難題:NWK 與MAC 的互動機制不順暢
◦ 實 作 時 所 遇 到 的 第 一 道 難 題 , 就 是 NWK 與IEEE
802.15.4 有著非常緊密的關係, 很多NWK 服務都會直接
去使用MAC 的service primitives。
◦ 除了重置裝置之外,其他管理功能並不會直接透過net_device
去使用下層服務。目前絕大部分的Linux 網路裝置都
是依靠ioctl 來實現裝置管理或網路管理的功能。
◦ 將n e t _ d e v i c e 之外多加一層L RW P A N 抽象裝置層,
NWK 使用的所有MAC 服務命令都封裝成資料封包,經由
net_device傳遞給LRWPAN 的lrwpan_hard_xmit()後再傳遞給
驅動程式解封裝, 再由驅動程式向ZigBee 網路裝置呼叫
MAC 服務命令;當網路裝置執行完MAC 服務命令後,再將
confirm 訊息重新封裝,丟給LRWPAN 虛擬裝置,讓它回傳
給NWK。
13
第二道難題:額外動作造成超時
◦ 由 於 採 用 LRWPAN 虛擬裝置的關係,在驅動程式端和NWK 中都
需另外花時間封裝額外的資料, 因此有部份ZigBee 標準中規範的
時限, 就有可能因為這些額外的動作造成不該出現的超時狀況。
不過 NWK 本身只有在NLME-LEAVE 時會比較注重時
間,大部分都是下參數給MAC 層, 時間超過的話,
MAC 會通知或自行處理。
14
第三道難題:Interrupt Context 認知不清
◦ 這 問 題 來 自 於 作者 在 設 計 NWK 時,並未對核心
中的interrupt context 有清楚的認知。核心中有支援
相當多同步機制, 常被用到有spinlock_t 與semaphore,
大部分的MAC 呼叫都得等上一段時間才能完成, 且大
部分的NWK 服務都是被ZDO 這個kernel thread 來呼
叫, 所以剛開始設計時都讓NWK 使用rw_semaphore 讓
ZDO 去休眠, 等候confirm 來喚醒ZDO。當然這是有
問題的, 因為有部份工作是處理來自MAC 的
indication, 然後response 它, 這時候是在
interrupt context, 所以不能使用rw_semaphore。
這部份會在以後改進。
15
第四道難題:NLME-LEAVE 與MLME 系列服
◦ NLME-LEAVE 會成為問題, 主要是由於文件中對其流程
敘述的很煩雜, 且流程圖又模糊不清, 不同人閱讀同樣
段落後, 可能會得到完全不同的認知。 NWK 在呼叫
MLME 系列服務的時候能比較像函式呼叫。而不是像標準
文件中講述的那樣在request 後某個時間點, 再呼叫
confirm 來確認回覆狀況。
◦ 基本上將MLME 系列呼叫改成函式呼叫方式是沒什麼大問
題的, 只要能正確運作就可以, 實作上採取不同方式設
計是說的過去的。
16
The Design and Implementation of the ZigBee
Protocol Driver in Linux- NCKU, Institute of
Computer Science and Information
Engineering,Sheng-Fu Su
17