• 沒有找到結果。

支援具網路感知應用程式的中介軟體之設計與實作

N/A
N/A
Protected

Academic year: 2021

Share "支援具網路感知應用程式的中介軟體之設計與實作"

Copied!
122
0
0

加載中.... (立即查看全文)

全文

(1)國立交通大學 資訊科學與工程研究所 碩 士 論 文 支援具網路感知應用程式的中介軟體之設計與 實作 Design and Implementation of a Middleware for Network-Aware Applications. 研 究 生:許凱程 指導教授:曾建超. 教授. 中 華 民 國 九 十 五 年 六 月.

(2) 支援具網路感知應用程式的中介軟體之設計與實作 Design and Implementation of a Middleware for Network-Aware Applications. 研 究 生:許凱程. Student:Kai-Cheng Hsu. 指導教授:曾建超. Advisor:Chien-Chao Tseng. 國 立 交 通 大 學 資 訊 科 學 與 工 程 研 究 所 碩 士 論 文. A Thesis Submitted to Institute of Computer Science and Engineering College of Computer Science National Chiao Tung University in partial Fulfillment of the Requirements for the Degree of Master in. Computer Science June 2006 Hsinchu, Taiwan, Republic of China. 中華民國九十五年六月.

(3) 支援具網路感知應用程式的中介軟體之設計與實作 研究生:許凱程. 指導教授:曾建超. 國立交通大學資訊學院資訊科學與工程研究所 摘. 要. 本論文設計和實作出一個軟體發展架構,讓程式開發人員在此架 構上可以方便地開發具網路感知的應用程式。 近年由於各種行動運算技術的普及化,現今市面上多數的可攜式 裝置如筆記型電腦、平板電腦、個人數位助理或是智慧型手機皆已具 備存取網際網路的能力。不僅如此,在這些裝置同時配備多種無線網 路接取介面也成為潮流,包括有線的區域網路、無線的區域網路、 GPRS,甚至是 PHS 或是 3G。當使用者在不同的網路漫遊時,行動 裝置可能切換至異質網路,對應用程式而言,由於網路狀態(頻寬、 延遲、網際網路位址等)不再和以往一樣的固定了,所以應用程式需 要根據網路狀態來調整自己的行為模式。 而現今要開發具網路感知的應用程式可能需要應用程式自己週 期性的發出系統呼叫,以取得底層網路的資訊 (例如 IP 位址、路由 表狀態或連線狀況),可是網路狀態的改變不會如此頻繁,而且頻繁 的發出系統呼叫可能會造成系統多餘的負荷。但是如果發出系統呼叫 的週期太長則會讓應用程式無法及時反應網路的改變。 -i-.

(4) 此外,在多網路模組的裝置上,需要一個行動管理員根據網路情 況負責換手決策的動作,而行動管理員的程式撰寫者通常都需要去處 理協定堆疊的狀態,以往處理網路的程式碼會根據不同的系統而使用 不同的系統呼叫,可是這樣對於程式開發人員而言,直接使用系統呼 叫是很容易出錯的,而且撰寫好程式也不易移植,有可能同樣的換手 策略,在別的系統上就要重寫了。 為了解決以上的問題,本論文提出了中介軟體的解決方法,並且 在 Linux 系統上實作。在此中介軟體中我們定義了取得協定堆疊資料 和改變協定堆疊內部狀態的程式界面,也提供了事件通知機制,讓應 用程式可以在網路狀態改變時直接被通知。以在 Linux 系統上操作協 定堆疊而言,程式開發人員使用本中介軟體提供的程式界面所需撰寫 的程式碼比直接採用系統呼叫來的簡潔。此外,我們只需將本論文的 中介軟體移殖到別的系統,對於完全採用本中介軟體所提供界面發展 的應用程式,毋需作任何修改即可移植到其它的作業系統上。而架構 在本中介軟體之上的應用程式只需修改該應用程式額外使用系統呼 叫的部分就可以跟著移植到別的系統。. - ii -.

(5) Design and Implementation of a Middleware for Network-Aware Applications Student:Kai-Cheng Hsu. Advisor:Dr. Chien-Chao Tseng. Institute of Computer Science and Engineering College of Computer Science National Chiao Tung University ABSTRACT. In this thesis we design and implement a software framework for programmers to develop network-aware applications on mobile devices with multiple interfaces. As wireless network and mobile technologies advance, nowadays most mobile devices on the market, such as notebooks, tablet PCs, PDAs, or smart phones, may be equipped with more than one network interfaces, such as wired LAN, wireless LAN, GPRS, PHS or 3G adaptors. Therefore, a mobile device may attach to different networks as it moves. As consequence, the applications running on the mobile device may encounter a network environment that varies more than ever, such as changes in bandwidth, delays, or even IP addresses. In order to tackle such network fluctuations, network-aware applications that can adapt themselves to the changes in network connectivity have now become a major research topic in recent years. A network-aware application may need to issue system calls periodically to retrieve lower-layer network information, such as IP - iii -.

(6) addresses, Routing Table Entries and Link Connection Statuses. However network environment statuses may not change frequently and short intervals between system calls may result in wasting system resources for redundant information. On the other hand, with long intervals between system calls, applications can not react to network changes promptly. Furthermore, a mobile device with multiple interfaces needs a mobility manager to monitor interface connectivity statuses and perform handover decision accordingly. However, in order to acquire network statuses and conduct a handover, a mobility manager needs to use system calls to communicate with underlying network protocol stacks. The use of system calls not only is error-prone but also makes applications not portable. Therefore we need to rewrite the mobility manager for a different system even if it uses the same handoff policy. In this thesis we present the design and implementation of a software platform for the development of network-aware applications on Linux. The platform adopts a middleware approach to the above problems. The middleware provides application programming interfaces for the applications to interact with the underlying protocol stack and interfaces to acquire network statuses and manage the interfaces. Besides, the platform also provides an event notification mechanism for an application to register interested events of network environment changes and for the middleware to notify the application immediately when an event of interest occurs. Our implementation results show that the codes of protocol stack interaction and interface control is much more concise when using our middleware than using the system calls in Linux directly. - iv -.

(7) Furthermore, by porting our middleware on another system, we can port an application program on the system without any modification to the application program if the application program uses solely the interfaces provided by our middleware.. -v-.

(8) 誌 謝 首先我要感謝我的指導教授—曾建超博士,讓我作了許多計畫的 實作經驗,讓我有了這篇論文的研究方向以及提供我一個良好且自由 的研究環境,同時要向我的論文口試委員:曹孝櫟 博士與王讚彬 博 士及紀光輝 博士致上謝意,感謝他們在百忙中撥冗細心地審查我的 論文並提供寶貴的參考意見,使此研究成果表現的臻至完善。此外, 還要感謝實驗室的同學、學長姐以及學弟妹在我碩士生涯中給我支持 及鼓勵,謝謝你們。 同時也感謝我的家人在我碰到困難或遭遇挫折之時給我精神上 與實質上的協助,他們在我最困難的時候給我的支持是我奮鬥下去的 原動力。. - vi -.

(9) 目 錄 中文摘要.........................................................................................................................i 英文摘要...................................................................................................................... iii 誌謝...............................................................................................................................vi 目錄..............................................................................................................................vii 圖目錄...........................................................................................................................xi 表目錄........................................................................................................................ xiii 第一章 緒論..................................................................................................................1 1.1 研究動機.........................................................................................................1 1.2 研究目標.........................................................................................................2 1.3 章節簡介.........................................................................................................3 第二章 背景知識介紹..................................................................................................4 2.1 中介軟體簡介 (Middleware).........................................................................4 2.2 多個網路的整合.............................................................................................6 2.3 跨層設計簡介 (Cross Layer Design) ............................................................8 2.4 具網路感知應用程式簡介...........................................................................11 2.5 Linux下使用者空間和核心空間的訊息交換機制 ......................................12 2.5.1 procfs (/proc filesystem) .....................................................................12 2.5.2 ioctl 系統呼叫 ...................................................................................13 2.5.3 Netlink socket .....................................................................................14 第三章 相關研究........................................................................................................18 3.1 IEEE 802.21 Media Independent Handover Services....................................18 3.2 Gollum (Toward Open and Unified Link-Layer API) ...................................20 3.3 Linux平台上驅動程式層網路事件通知機制 ..............................................21 第四章 支援網路感知之中介軟體設計與架構........................................................24 4.1 目標與問題定義...........................................................................................24 4.2 系統概觀.......................................................................................................25 4.2.1 控制 (Control) 、查詢 (Query) 及事件 (Event) 介面 ................26 4.2.2 行動管理員 (Mobility Manager)......................................................27 4.2.3 WinME的應用程式界面 (Middleware API).....................................28 4.2.4 WinME的核心元件............................................................................28 4.3 網路事件通知機制.......................................................................................30 4.4 網路事件及命令定義...................................................................................34 4.4.1 事件定義............................................................................................34 4.4.2 命令定義............................................................................................36 4.5 應用程式界面 (API) 設計 .........................................................................40 4.5.1 傳送事件資訊的資料結構win_event structure................................41. - vii -.

(10) 4.5.2 事件初始化的程式界面win_init( )...................................................42 4.5.3 註冊感興趣事件的程式界面 win_event_register( ) .......................43 4.5.4 檢查事件發生的程式界面win_check_event( )................................44 4.5.5 包裝控制及查詢動作的命令資料結構 win_cmd structure............44 4.5.6 執行命令的程式界面win_do_cmd( ) ...............................................46 第五章 WinME在Linux作業系統下的實作 .............................................................48 5.1 軟硬體需求...................................................................................................48 5.2 查詢和控制命令的實作...............................................................................48 5.3 事件通知機制的實作...................................................................................51 5.3.1 事件服務元件....................................................................................51 5.3.2 系統底層的網路事件........................................................................53 5.3.3 網路層事件........................................................................................54 5.3.4 NETDEV_XXX 相關事件................................................................55 5.3.5 其它的事件........................................................................................56 第六章 成果及貢獻....................................................................................................59 6.1 與其它系統比較...........................................................................................63 6.2 使用WinME開發應用程式指引..................................................................64 6.2.1 簡易換手策略程式............................................................................64 6.2.2 架構在SIP上的VoIP 程式 ................................................................64 6.2.3 FTP 程式............................................................................................64 第七章 結論與未來工作............................................................................................66 7.1 結論...............................................................................................................66 7.2 未來工作.......................................................................................................66 參考文獻......................................................................................................................68 附錄A. 中介軟體WinME說明文件 ...........................................................................73 A.1. 命令.............................................................................................................73 A.1.1. 系統命令..........................................................................................73 A.1.1.1. GET_ALL_NETWORK_INTERFACE .............................73 A.1.1.2. GET_BATTERY_POWER .................................................74 A.1.2. 硬體驅動程式命令..........................................................................74 A.1.2.1. A.1.2.2. A.1.2.3. A.1.2.4. A.1.2.5. A.1.2.6. A.1.2.7. A.1.2.8.. SET_POA............................................................................74 GET_POA...........................................................................75 POA_SCAN ........................................................................76 GET_SIGNAL_STRENGTH .............................................76 SET_SIGNAL_THRESHOLD ...........................................77 GET_SIGNAL_THRESHOLD ..........................................78 SET_SIGNAL_AVOID_PINGPONG_VALUE .................78 GET_SIGNAL_AVOID_PINGPONG_VALUE.................79. - viii -.

(11) A.1.2.9. SET_MTU...........................................................................79 A.1.2.10. GET_MTU ........................................................................80 A.1.2.11. GET_MAC_ADDRESS....................................................80 A.1.2.12. GET_BANDWIDTH ........................................................80 A.1.2.13. GET_STATISTICS ...........................................................81 A.1.3. 網路層命令......................................................................................83 A.1.3.1. A.1.3.2. A.1.3.3. A.1.3.4. A.1.3.5. A.1.3.6. A.1.3.7. A.1.3.8.. SET_STATIC_IP.................................................................83 SET_IP_BY_DHCP............................................................83 GET_IP ...............................................................................84 SET_NETMASK ................................................................84 GET_NETMASK................................................................84 SET_BROADCAST ...........................................................85 GET_BROADCAST...........................................................85 SET_DEFAULT_GATEWAY .............................................86. A.1.3.9. GET_DEFAULT_GATEWAY ............................................86 A.1.3.10. SET_ ROUTING_TABLE ................................................87 A.1.3.11. GET_ROUTING_TABLE ................................................88 A.1.4. 傳輸層命令......................................................................................89 A.1.4.1. A.1.4.2. A.1.4.3. A.1.4.4. A.1.4.5. A.1.4.6. A.1.4.7. A.1.4.8. A.1.4.9. A.1.4.10.. REGISTER_TCP_TX_STATE_EVENT ............................89 GET_TCP_TX_STATE ......................................................90 SET_TCP_TX_STATE .......................................................90 GET_TCP_RETX_TIMEOUT ...........................................90 SET_TCP_RETX_TIMEOUT............................................91 GET_TCP_RTT ..................................................................91 SET_TCP_RTT...................................................................92 GET_TCP_RECV_WIN.....................................................92 SET_TCP_RECV_WIN......................................................93 GET_TCP_CONG_WIN ..................................................93. A.1.4.11. SET_TCP_CONG_WIN ...................................................93 A.2. 事件.............................................................................................................94 A.2.1. 系統事件..........................................................................................94 A.2.1.1. NETDEV_REGISTER........................................................94 A.2.1.2. NETDEV_UNREGISTER..................................................95 A.2.1.3. NETDEV_CHANGENAME ..............................................96 A.2.2. 硬體驅動程式事件..........................................................................96 A.2.2.1. NETDEV_UP......................................................................96 A.2.2.2. NETDEV_DOWN ..............................................................97 A.2.2.3. NETDEV_REBOOT...........................................................98. - ix -.

(12) A.2.2.4. NETDEV_CHANGEMTU .................................................98 A.2.2.5. NETDEV_CHANGEADDR...............................................98 A.2.2.6. LINK_UP ............................................................................99 A.2.2.7. LINK_DOWN...................................................................100 A.2.2.8. POA_SCAN_COMPLETE...............................................100 A.2.2.9. SIGNAL_STRENGTH_THRESHOLD ...........................102 A.2.3. 網路層事件....................................................................................102 A.2.3.1. IP_CHANGE ....................................................................102 A.2.3.2. DEFAULT_GATEWAY_CHANGE .................................103 A.2.3.3. ROUTING_TABLE_CHANGE .......................................104 A.2.4. 傳輸層事件....................................................................................105 A.2.4.1. TCP_TX_STATE_CHANGE............................................105. -x-.

(13) 圖 目 錄 Figure 2-1 中介軟體概觀.............................................................................4 Figure 2-2 雙網手機漫遊示意圖..................................................................7 Figure 2-3 傳統的無線行動網路架構..........................................................9 Figure 2-4 TCP/IP protocol stack ..................................................................9 Figure 2-5 跨層設計概念示意圖[22]....................................................10 Figure 2-6 Netlink Message Format ............................................................15 Figure 2-7 rtnetlink 訊息格式 ....................................................................17 Figure 3-1 802.21 Overview[30] ............................................................19 Figure 3-2 ULLA API和相關事件查詢、中介軟體關係圖示 ..................21 Figure 3-3 Linux平台上驅動程式層網路事件通知機制的系統元件架構 和關係[32].............................................................................................23 Figure 4-1 中介軟體概觀............................................................................25 Figure 4-2 事件描述子和事件佇列等關系................................................32 Figure 4-3 事件傳送順序圖........................................................................33 Figure 4-4 訊號強度和訊號門檻等關係圖................................................38 Figure 4-5 NETDEV_REGISTER事件的 value 格式 ..............................42 Figure 4-6 IP_CHANGE 事件的 value 格式...........................................42 Figure 4-7 GET_ALL_NETWORK_INTERFACE的value格式................46 Figure 4-8 SET_STATIC_IP 的 param 格式 ............................................46 Figure 5-1 win_do_cmd和中介軟體等序列圖...........................................50 Figure 5-2 Event Service和應用程式通訊的實作方式 .............................52 Figure A-1 GET_ALL_NETWORK_INTERFACE的pv_value格式 .........73 Figure A-2 SET_POA 的 pv_param 格式 ................................................74 Figure A-3 802.11 網路下,SET_POA 的 pv_param 格式 ................75 Figure A-4 GET_POA 的 pv_value 格式.................................................75 Figure A-5 802.11 網路下,GET_POA 的 pv_value 格式 ....................76 Figure A-6 訊號強度和訊號門檻等關係圖 ...............................................77 Figure A-7 SET_SIGNAL_THRESHOLD的 pv_param 格式..................78 Figure A-8 SET_SIGNAL_AVOID_PINGPONG_VALUE的pv_param格式 .....................................................................................................................78 Figure A-9 SET_MTU 的 pv_param 格式 ...............................................79 Figure A-10 GET_STATISTICS的pv_value格式 .......................................82 Figure A-11 SET_STATIC_IP 的 pv_param 格式 ...................................83 Figure A-12 SET_NETMASK 的 pv_param 格式...................................84 Figure A-13 SET_BROADCAST 的 pv_param 格式..............................85 Figure A-14 GET_DEFAULT_GATEWAY 的 pv_value 格式 ................86. - xi -.

(14) Figure A-15 SET_ROUTING_TABLE 的 win_cmd 欄位 ......................87 Figure A-16 GET_ROUTING_TABLE 的 pv_value 格式 ......................88 Figure A-17 TCP State Machine ..................................................................89 Figure A-18 SET_TCP_TX_STATE 的 pv_param 格式..........................90 Figure A-19 SET_TCP_RETX_TIMEOUT 的 pv_param 格式 ..............91 Figure A-20 SET_TCP_RETX_TIMEOUT 的 pv_param 格式 ..............92 Figure A-21 SET_TCP_RECV_WIN 的 pv_param 格式 ........................93 Figure A-22 SET_TCP_CONG_WIN 的 pv_param 格式 .......................94 Figure A-23 NETDEV_REGISTER 的 pv_value 格式 ...........................95 Figure A-24 NETDEV_REGISTER 的 pv_value 格式 ...........................95 Figure A-25 NETDEV_CHANGENAME 的 pv_value 格式 ..................96 Figure A-26 NETDEV_REGISTER 的 pv_value 格式 ...........................97 Figure A-27 NETDEV_DOWN 的 pv_value 格式 ..................................97 Figure A-28 NETDEV_REGISTER 的 pv_value 格式 ...........................98 Figure A-29 NETDEV_CHANGEMTU 的 pv_param 格式....................98 Figure A-30 NETDEV_CHANGEADDR 的 pv_value 格式 ..................99 Figure A-31 LINK_UP 的 pv_value 格式................................................99 Figure A-32 LINK_DOWN 的 pv_value 格式 ......................................100 Figure A-33 POA_SCAN_COMPLETE 的 pv_value 格式...................101 Figure A-34 802.11 網路下,POA_SCAN_COMPLETE 的 pv_value 格 式...............................................................................................................101 Figure A-35 SIGNAL_STRENGTH_THRESHOLD 的 pv_value 格式 ...................................................................................................................102 Figure A-36 IP_CHANGE 的 pv_value 格式 ........................................103 Figure A-37 DEFAULT_GATEWAY_CHANGE 的 pv_value 格式 .....103 Figure A-38 ROUTING_TABLE_CHANGE 的 pv_value 格式 ...........104. - xii -.

(15) 表 目 錄 Table 2-1 各種常見異質無線網路的相關資訊[8] .................................6 Table 2-2 使用 ioctl 操作網路設備的 MTU ...........................................13 Table 2-3 include/linux/netlink.h 中關於 protocol 的定義部份..............14 Table 2-4 netlink表頭的定義 ......................................................................15 Table 2-5 include/linux/rtnetlink.h關於廣播事件的定義部份...................16 Table 2-6 屬性表頭ratttr 的定義................................................................16 Table 4-1 同步事件處理的程式架構 .........................................................32 Table 4-2 非同步事件處理的程式架構 .....................................................33 Table 4-3 事件傳送順序圖的各步驟描述 .................................................33 Table 4-4 一般常見網路界面的 MTU ......................................................38 Table 4-5 win_event資料結構的定義.........................................................41 Table 4-6 win_event_init 的原型 ...............................................................42 Table 4-7 win_event_register 的原型.........................................................43 Table 4-8 win_event_register 的傳回值.....................................................43 Table 4-9 win_check_event 原型 ...............................................................44 Table 4-10 win_check_event的傳回值 .......................................................44 Table 4-11 win_cmd的資料結構定義.........................................................45 Table 4-12 wn_do_cmd 的原型 (prototype)..............................................47 Table 4-13 win_do_cmd 傳回值 ................................................................47 Table 5-1 win_do_cmd的虛擬碼 ................................................................49 Table 5-2 Figure 5-1 的各步驟說明............................................................50 Table 5-3 win_check_event 在 Linux下實作程式碼................................53 Table 5-4 rtnetlink 在核心中 notifier block的部分程式碼 ......................56 Table 5-5 修改過的rtnetlink核心程式碼....................................................56 Table 5-6 送LINK_UP、LINK_DOWN事件的核心程式碼.....................58 Table 6-1 Linux 下使用 rtnetlink socket 新增一個資料到路由表中的程 式碼片段.....................................................................................................59 Table 6-2 使用WinME 所提供的程式界面新增一個資料到路由表中的程 式碼片段.....................................................................................................62 Table A-1 GET_ALL_NETWORK_INTERFACE的win_cmd欄位說明...73 Table A-2 GET_BATTERY_POWER的win_cmd欄位說明 ......................74 Table A-3 SET_POA 的 win_cmd 欄位說明 ...........................................74 Table A-4 802.11 網路下,SET_POA 的 pv_param 格式欄位說明 .....75 Table A-5 GET_POA 的 win_cmd 欄位說明 ..........................................75 Table A-6 802.11 網路下,GET_POA 的 pv_value 格式欄位說明......76 Table A-7 POA_SCAN的win_cmd欄位說明 .............................................76. - xiii -.

(16) Table A-8 GET_SIGNAL_STRENGTH 的win_cmd 欄位 ......................77 Table A-9 SET_SIGNAL_THRESHOLD 的win_cmd 欄位 ....................78 Table A-10 GET_SIGNAL_THRESHOLD 的win_cmd 欄位..................78 Table A-11 SET_SIGNAL_AVOID_PINGPONG_VALUE 的win_cmd 欄 .....................................................................................................................78 Table A-12 GET_SIGNAL_AVOID_PINGPONG_VALUE的win_cmd欄位 說明.............................................................................................................79 Table A-13 一般常見網路界面的 MTU....................................................79 Table A-14 SET_MTU 的win_cmd 欄位..................................................79 Table A-15 GET_MTU 的win_cmd欄位說明 ...........................................80 Table A-16 GET_MAC_ADDRESS 的 win_cmd 欄位...........................80 Table A-17 GET_BANDWIDTH 的 win_cmd 欄位 ...............................80 Table A-18 GET_STATISTICS 的 win_cmd 欄位...................................82 Table A-19 SET_STATIC_IP 的 win_cmd_ 欄位說明 ............................83 Table A-20 SET_IP_BY_DHCP 的 win_cmd 欄位 .................................83 Table A-21 GET_IP 的 win_cmd 欄位.....................................................84 Table A-22 SET_NETMASK 的 win_cmd 欄位 .....................................84 Table A-23 GET_NETMASK 的 win_cmd 欄位.....................................85 Table A-24 SET_BROADCAST 的 win_cmd 欄位.................................85 Table A-25 GET_BROADCAST 的 win_cmd 欄位................................86 Table A-26 SET_DEFAULT_GATEWAY 的 win_cmd 欄位 ..................86 Table A-27 GET_DEFAULT_GATEWAY 的 win_cmd 欄位..................86 Table A-28 SET_ROUTING_TABLE 的 win_cmd 欄位 ........................87 Table A-29 GET_ROUTING_TABLE 的 win_cmd 欄位 .......................88 Table A-30 REGISTER_TCP_STATE_EVENT 的 win_cmd 欄位.........89 Table A-31 GET_TCP_TX_STATE 的 win_cmd 欄位............................90 Table A-32 SET_TCP_TX_STATE 的 win_cmd 欄位 ............................90 Table A-33 GET_TCP_RETX_TIMEOUT 的 win_cmd 欄位 ................91 Table A-34 SET_TCP_RETX_TIMEOUT 的win_cmd 欄位 ...................91 Table A-35 GET_TCP_RTT 的 win_cmd 欄位 .......................................92 Table A-36 SET_TCP_RTT 的win_cmd 欄位 ..........................................92 Table A-37 GET_TCP_RECV_WIN 的 win_cmd 欄位 ..........................92 Table A-38 SET_TCP_RECV_WIN 的win_cmd 欄位.............................93 Table A-39 GET_TCP_CONG_WIN 的 win_cmd 欄位 .........................93 Table A-40 SET_TCP_CONG_WIN 的win_cmd 欄位 ............................94 Table A-41 NETDEV_REGISTER 的 win_event 欄位...........................95 Table A-42 NETDEV_UNREGISTER 的 win_event 欄位 .....................95 Table A-43 NETDEV_CHANGENAME 的 win_event 欄位..................96. - xiv -.

(17) Table A-44 NETDEV_UP 的 win_event 欄位 .........................................97 Table A-45 NETDEV_DOWN 的 win_event 欄位..................................97 Table A-46 NETDEV_REBOOT 的 win_event 欄 ..................................98 Table A-47 NETDEV_CHANGEMTU 的 win_event 欄位 ....................98 Table A-48 NETDEV_CHANGEADDR 的 win_event 欄位 ..................99 Table A-49 LINK_UP 的 win_event 欄位 ...............................................99 Table A-50 LINK_DOWN 的 win_event 欄位 ......................................100 Table A-51 LINK_DOWN 的 win_event 欄位 ......................................100 Table A-52 POA_SCAN_COMPLETE 的 win_event 欄位 ..................100 Table A-53 SIGNAL_STRENGTH_THRESHOLD 的 win_event 欄位 ...................................................................................................................102 Table A-54 IP_CHANGE 的 win_event 欄位........................................103 Table A-55 DEFAULT_GATEWAY_CHANGE 的 win_event 欄位.....103 Table A-56 ROUTING_TABLE_CHANGE 的 win_event 欄位...........104 Table A-57 TCP_TX_STATE_CHANGE 的 win_event 欄位 ...............105. - xv -.

(18) 第 一 1 章 緒論. 1.1 研究動機 隨著網路科技的蓬勃發展,以無線的方式隨時隨地存取網際網路的資料,已 是目前隨處可見的應用。現今可搭載多個網路模組的手持裝置也日漸普遍,如一 般常見的雙模 (WLAN、GPRS) 手持裝置。因此目前的環境已經可以讓使用者 在不同的地點使用不同的方式連上網路。 為了讓使用者可以方便地在不同網路間作切換,我們需要一個行動管理員來 做智慧型換手決定。在以往行動管理員的程式開發者需要根據不同的系統撰寫額 外的程式碼來處理路由表的設定、協定堆疊的設定及硬體的控制等…。而且這對 程式員而言都是不小的負擔。 實際上這些機制都是可以抽離出來的,我們只需要給開發人員一個簡單易用 的程式設計界面。讓底層系統相關的部份由中介軟體處理掉,如此行動管理員的 開發人員就可以需專注於換手策略 (Policy) 的設計而不用擔心系統相關的控制 程式碼是如何運作和撰寫。而且若可以用一個統一的應用程式界面將系統底層部 分隱藏起來,對於程式開發者而言就不用花額外的時間去處理各種系統的相關程 式碼,可以專注在本身程式邏輯的開發。若程式開發者又對該系統不熟悉,則程 式出錯的機率將會大大的提高,使用中介軟體開發應用程式可以降低程式處理系 統部分出錯的機會 [1]。 現今使用者已經可以在同質或異質網路間換手,我們也可以說現今的使用者 比已往更具移動性。也因此使用者所處的網路狀態和已往只是固定使用一個網路 大不相同了。所以應用程式需要對網路的狀態有所感知,如此應用程式才可以根 據不同的網路狀態來調整本身的行為,讓使用者有較佳的使用經驗。. -1-.

(19) 有的應用程式會需要知道使用者是否切換了網路。如 VoIP 的程式,如果該 VoIP 程式可以知道使用者目前切換到別的網路,該 VoIP 程式就可以重新和通話 方建立連線。而使用此 VoIP 軟體使用者就不用特別處理換網路時的動作而且也 不會感覺到使用上的不方便。 FTP 客戶端程式也是另一個例子,在沒有網路的時候,它可以先暫停下載, 等到有網路可用時,它就可以繼續下載原本沒下載完的檔案。 為了使應用程式可以擁有這些特性,網路狀況的事件通知機制是必要的。因 此我們也會設計和實作此機制。. 1.2 研究目標 本論文的研究目標是發展一個應用程式開發平台,可以讓程式設計者使用該 平台來開發具網路感知的應用程式。藉著本論文所發展的平台,可以加速程式設 計者對於行動通訊裝置的網路介面管理、漫遊與具網路感知的應用軟體的開發。 該平台會以中介軟體的形式來開發,藉著中介軟體的形式,期望該平台可以 作到與作業系統的獨立性。 為了到達目標,以下列出各個子目標 z 應用程式設計界面的定義 „ 具可擴充性 „ 簡單易用的界面 z 事件通知機制 „ 事件的定義 „ 跨層的事件通知 „ 處理事件的方式. -2-.

(20) 1.3 章節簡介 本篇論文在稍後的章節編排與簡述如下:第一章描述本篇論文的研究動機, 以及本篇論文希望達到的目標。第二章為背景知識概述,包含中介軟體簡介、跨 層信號簡介、具網路感知應用程式介紹、程式化換手策略、多網路整合及 Linux 下使用者空間和核心空間的訊息交換機制相關討論及研究。第三章則為介紹與本 論文相關的文獻,包括目前正在制定的兩個標準 IEEE 802.21 及 Toward Open and Unified Link-Layer API,和本實驗室之前對於在 Linux 事件通知機制的相關 研究。第四章接著說明我們所開發的整合平台之系統架構與其內各個軟體元件。 第五章便介紹我們實作本系統的各個細節,包含了軟硬體架構、各元件互動機 制,及核心修改部份。第六章將介紹我們所開發出來的中介軟體成果及貢獻。其 中包括如何開發具網路感知的應用程式的範例,我們會舉出一個簡單的換手策略 程式和兩個使用者常用的應用程式 VoIP 及 FTP。最後,第七章對本論文做出總 結,以及未來的研究方向。. -3-.

(21) 第 二 2 章 背景知識介紹. 2.1 中介軟體簡介 (Middleware) 根據 [1]的定義,中介軟體屬於軟體層,它是藉於作業系統上層、應用程 式下層間的軟體。. Figure 2-1 中介軟體概觀. 對於程式設計者而言,中介軟體提供比作業系統更高階的系統函式和系統支 援,因此使用中介軟體來開發程式有以下幾點好處: z 所開發出來的程式更具移植性 z 讓程式設計員更有生產力 z 可以降低系統相關程式碼錯誤的機會 藉著中介軟體提供較高階的系統函式,中介軟體可以遮蔽許多系統上不同的 異質性。 以下列舉出一些可以藉由中介軟體所遮蔽掉異質性的情況: z 中介軟體可以遮蔽掉各種的網路存取技術 „ 如:數位電視的開發 (訊號可以透過各種不同的方式接收). -4-.

(22) z 中介軟體可以遮蔽掉不同作業系統的異質性 „ 如:Java Virtual Machine z 中介軟體可以遮蔽掉不同的程式語言 „ 如:Java RMI 本論文以中介軟體的方式來發展平台,其中一個目的就是為了遮蔽掉不同作 業系統的異質性。 程式開發人員可以使用以下各種不同的方法來使用中介軟體來開發軟體。 z 中介軟體提供函式庫和程式設計界面 „ 如:Linda、本論文提供的方法 z 從一開始就提供程式設計語言 „ 如:Java 和 Java Virtual Machine z 提供介面定義語言 (Interface Definition Language) 用來映射到程式語言 „ 如: CORBA 接下來再來介紹各種不同的中介軟體類型: z Distribute Tuples:(a, b, c, d, e) „ Relational Database, SQL „ Linda and Tuple spaces z Remote Procedure Call (RPC) „ 使得遠端的函式可以在本地端被查詢 z Message-Oriented Middleware (MOM) „ 程式開發員藉著訊息和中介軟體溝通 „ 本論文所實作出的中介軟體屬於此類 z Distributed Object Middleware „ 使得遠端的物件可以在本地端被查詢 „ CORBA. -5-.

(23) „ DCOM/SOAP/.NET „ Java RMI 在 [2][3][4][5][6][7]都有提出以中介軟體來解決異質網路漫 遊、換手和開發具網路感知應用程式的解決方案。. 2.2 多個網路的整合 目前有愈來愈多的網路存取技術的出現,從早期的Ethernet有線網路到現今的 802.11 無線區域網路,和個人行動數據服務的GPRS以及 3G、PHS等,及最近標 準剛剛定好,產品正要開始上市的 802.16WiMAX無線網路。Table 2-1 顯示了目 前常見的不同無線網路存取技術的標準、最大傳輸速率和使用頻帶。 Table 2-1 各種常見異質無線網路的相關資訊 [8]. Network. Standard. Data rate. Cellular Networks. GSM data (2G) GPRS (2.5G) UMTS (3G). 9.6 kbps 14 – 128 kbps up to 2Mbps. 900/1800/1900 MHz “ “. WLAN. IEEE 802.11b IEEE 802.11a IEEE 802.11g IEEE 802.11n. 1, 2, 5.5, 11 Mbps 1 – 54 Mbps “ 100 – 540 Mbps. 2.4 GHz 5 GHz 2.4 GHz 2.4, 5 GHz. Bluetooth. IEEE 802.15.1. 721 kbps (BT 1.1) 2 – 20 Mbps (BT 2.0). 2.4 GHz. WiMAX. IEEE 802.16c. 134 Mbps. 10 – 66 GHz. -6-. Frequency band.

(24) 現今無論是筆記型電腦,平板電腦,個人數位助理或是智慧型手機在硬體上 都已具備搭配雙網甚至是多個網路模組的能力。但是目前的製造廠商都只是試圖 將多種網路模組 (如 WLAN 和 GPRS) 加到裝置上,可是彼此的網路模組是互相 獨立的,雖然隨著硬體環境的成熟,使用者可以順暢地在不同的網路下漫遊日趨 可能。但目前缺乏網路模組自動交遞 (Handoff) 與管理機制,同時也未提供網路 模組的互動機制,所以目前使用者還沒有辦法有效率地在不同網路間換手。因此 藉著本論文所提出的開發平台可以幫助開發廠商快速地發展異質網路間的換手 管理程式。 目前常見雙網手機就是無線區域網路與個人行動數據服務的整合架構 [9] [10],過去也有許多文獻在探討各種不同異質網路間的整合 [4][5][11] [12][13][14][15]。 Figure 2-2 顯示了一個搭載WLAN及GPRS網路模組的手機在異質網路間的漫. Ro am. in g. 遊。. WLAN Online Call. GPRS /PHS. Dual Mode Handset. Figure 2-2 雙網手機漫遊示意圖. -7-.

(25) 當使用者在不同的異質網路間換手時,會受到影響的就是各個網路應用程 式,因為在不同的網路間換手時,正在通訊的兩個應用程式間的會談 (Session) 會斷掉。所以在過去有各種方法被提出用來保持應用程式會談的持續性 (Session Continuity) 如SIP[16]及Mobile IP[17]。可是不論是 SIP 或著是 Mobile IP 都會遇到一個問題,就是負責掌控SIP或Mobile IP的程式如何得知使用者切換網 路了呢?過去這一部份都是由使用者自行下達指令來告訴SIP作Re-Invite的動作 或通知Mobile IP作Binding Update的動作,不過這顯然不符合使用者的方便性。 因此本論文所提供事件通知機制可以幫助架構在SIP的程式得知使用者切換網路 的事件後馬上作Re-Invite的動作,或是控制Mobile IP的Daemon得知使用者切換 網路的事件後直接作Binding Update的動作,對於多個異質網路的整合有極大的 幫助。. 2.3 跨層設計簡介 (Cross Layer Design) Figure 2-3 顯示出一個傳統的無線行動網路的架構。在此架構之下,標準的網路 堆疊協定 (e.g. TCP/IP[18]) 會被實作在各個點上 (e.g. Base station、Access Point、Mobile Device) ,以此保證該系統可以在目前已發展成熟的網路上使用。. -8-.

(26) Figure 2-3 傳統的無線行動網路架構. 參考 Figure 2-4 傳統的協定堆疊是以階層 (layer) 的方式設計和實作的,藉著 分層可以清楚地將各層需要實作的功能抽象分離出來。因此各層間不需互相知道 其它層的狀態,只要把自己該層的事情作好就行了。. Figure 2-4 TCP/IP protocol stack. 但在 [19]中有提到依據分層所設計的協定堆疊在無線行動網路的環境下運 作起來是沒有效率的,這起因於無線網路連結的不穩定性及行動裝置天生就沒辦 法搭載太多的資源。 在過去已經有許多想要藉由跨層回饋 (Cross Layer Feedback) 來增進目前協 定堆疊效能的研究。如早期的研究在有線網路上 [20][21]顯示在不同的協 定層中傳遞資訊對增進網路效能是十分有效。. -9-.

(27) 跨層回饋的機制是指在協定堆疊中每個不同的協定層間可以互相的互動,以 下舉出幾個例子。 z TCP 層可將封包遺失的資訊告知 Application 層,這樣 Application 就可以 根據這些資訊來調整自己發送封包的速率。 z Link/MAC 層可以調整 Physical 控制的 power 大小來控制 bit-error rate。 z Link 層重傳封包的次數可以當作是目前 Channel 的狀況的測量,TCP 層可 以藉著該資訊調整 retransmission timer。 z Application 層也可以藉著 Link 層得知目前 Link 的好壞來調整封包發送 速度率。 在 [22]篇文章中提到在目前現有在使用的協定堆疊以及網路架構都沒有納 入多重介面的特性作為考量,在該篇文章之中也提及,在進行垂直換手的時候 (Vertical Handoff) ,由於不同網路接取技術的特性相差很多,因此會對系統效能 造成很大的傷害。由於如此,該篇文章認為應該存在著跨層 (Cross-Layer) 的通 知機制,使得驅動程式的事件可以傳達至協定堆疊內的各層,如 Figure 2-5。 Figure 2-5 顯示了許多資訊可以在協定堆疊內的不同層中傳遞,如Security、QoS、 Mobility及Wireless link adaptation。. Figure 2-5 跨層設計概念示意圖 [22]. - 10 -.

(28) 行動漫遊機制時通常會遇到一個嚴重的問題,就是行動管理程式缺乏底層網 路的資訊,而不能做有效的行動管理。而在異質網路間換手時會產生嚴重延遲, 以至於不能提供良好的服務品質。然而這類行動管理程式通常是使用者空間的應 用程式,傳統上,介面管理程式會週期性的發出系統呼叫,以取得底層介面的資 訊 (例如網路介面的種類、頻寬或連線狀況)。但是,由於網路介面的狀態改變 可能不會如此的頻繁,因此頻繁的發出系統呼叫可能會造成系統多餘的負荷。此 外,在需要快速換手的情況下,行動管理程式必須對網路介面的狀態改變做出迅 速的反應,而在傳統的狀況下,網路介面狀態更新的頻率取決於程式發出系統呼 叫的頻率,發出系統呼叫的頻率愈高,就愈容易得到即時的資訊,當然對系統的 負荷也就愈大。 因此本論文導入了跨層網路設計的概念,能提供底層網路資訊給使用者空間 的行動管理程式或其它應用程式,並透過我們設計的事件觸發機制,讓相關程式 能夠快速地被告知底層網路的改變,並做出適當的反應,進而提供良好的服務品 質。. 2.4 具網路感知應用程式簡介 可以根據目前所處網路狀態來調整本身行為的應用程式稱為具網路感知的應 用程式。 具網路感知的應用程式也算是一種跨層設計的應用,只是把協定堆疊各層的 資訊都傳達給應用層。而用來處理異質網路間換手的行動管理員程式也是屬於具 網路感知的應用程式,因為行動管理員程式若是無法得知網路情況,則行動管理 員程式如何作有效的換手?最低限度也必需要知道每張網路界面卡的連線狀 態、連線品質、訊號強度等資訊,這樣行動管理員才可用取得的資訊來做決定要 使用哪個網路。. - 11 -.

(29) 傳統的網路程式設計是不知道底層的網路狀態的,所以我們會常常看到 FTP 或 Email 的程式,在連線失敗後會設一個計時器,等到時間倒數完了再試一次, 是嘗試及錯誤 (try & error) 的作法。但如今在多模行動裝置下,使用者也會比以 往更具有移動性,因此再用過去的方式來設計網路應用程式,會顯得沒有效率。 如果在一開始設計網路應用程式的時候就納入網路底層狀態的考量,相信所開發 出來的程式會更適合以後擁有高度移動性的使用者。如影像串流客戶端 (Video Streaming Client) 的應用程式如果有辦法得知目前連線網路的頻寬狀態,該客戶 端應用程式就可以通知影像串流伺服器 (Video Streaming Server) 根據客戶端目 前的頻寬來調整撥放的品質。 現今也有許多關於具網路感知應用程式方面的研究文獻,可參考 [3][23] [24][25][26][27][28]。. 2.5 Linux 下使用者空間和核心空間的訊息交換機制 核心可以通過各種不同的方式將核心內部的訊息提供給使用者程式。本節將 介紹 Linux 系統下使用者程式與核心溝通的機制。. 2.5.1 procfs (/proc filesystem). 這是一個虛擬檔案系統,通常掛載在 /proc 目錄下。核心透過檔案的方式將 核心內部訊息傳遞給使用者空間的程式。因為是以檔案的形式存在,因此我們可 以用 cat 或著是 more 指令來讀取核心訊息。甚至可以用導向符號 “>"將訊息 傳遞給核心。. - 12 -.

(30) 2.5.2 ioctl 系統呼叫. iotcl (輸入/輸出控制)系統呼叫可以用來操作一個檔案描述子。ioctl 通常用來 作一些設備的特殊操作。ioctl 也可以用來操作 socket 描述子來控制網路,在一 些網路管理程式上就是使用 ioctl 來操作 socket 描述子來控制網路,如 ifconfig 和 route 等。 讓我們以 ifconfig 為例子。ifconfig 就是使用 ioctl 與核心溝通的。如果系統 管理員輸入命令 “ifconfig eth0 mtu 1250"來修改 eth0 設備的 mtu。ifconfig 首 先打開一個 socket,並根據系統管理員的輸入初始化一個數據結構,然後把這數 據結構傳給 ioctl。修改 mtu 的命令為 SIOCSIFMTU。 Table 2-2 使用 ioctl 操作網路設備的 MTU. struct ifreq data; fd = socket(PF_INET, SOCK_DGRAM, 0); /* 初始化 “data" 資料結構,用於改變 MTU */ err = ioctl(fd, SIOCSIFMTU, &data); 接著介紹 ioctl 的命令規則,如在路由表新增路由的命令,SIOCADDRT,可 以被分解為 SIOC ADD RT。它強調兩件事情:ADD 表示要添加一些東西,而 RT 表是添加的為路由表內容。大多數的命令都遵循這個規則。有時,如果一個 對象既可以讀,又可以寫,相對應的命令名字就會有多個選項:G 表示 GET (讀 取)、S 表示 SET (設置) 。如在網路卡上取得和新增 IP 位址的命令就分別是 SIOCGIFADDR 和 SIOCSIFADDR。 與網路相關的 ioctl 命令的定義在 include/linux/sockios.h 中。設備驅動程式 也可以自己定義新的私有命令,命令編號的範圍從 SIOCDEVPRIVATE 到 SIOCDEVPRIVATE+15。. - 13 -.

(31) 2.5.3 Netlink socket. RFC3549[29]所描述的Netlink socket是使用者空間的程式和核心交換訊息 也是最常用的方式。Netlink socket 可以使用標準的 socket API開啟、關閉,接 收和發送訊息。 讓我們來看一下 socket 系統函式的原型: int socket(int domain, int type, int protocol) domain 參數指定了 socket 是在哪個 domain 下進行通訊。 type 參數通常為則指定了該 socket 資料傳輸的類型,如 SOCK_STREAM 提 供了有順序的、可靠性、有雙方連線基礎的資料傳輸類型,而 SOCK_DGRAM 則提供無順序、不可靠的資料傳輸類型。 protocol 參數指定了在該 domain 下的 socket 是要採用何種協定。 Netlink 使用PF_NETLINK domain,type 為 SOCK_DGRAM,並且定義了幾 種不同的 protocol,每一種 protocol都會對應到不同的核心組件。如 NETLINK_FIREWALL被防火牆所使用。Netlink 的 protocol列表在 include/linux/netlink.h文件中定義,名稱為 NETLINK_XXX。Table 2-3 顯示了一 部分的定義。而之後會介紹的rtnetlink則為 NETLINK_ROUTE的protocol。 Table 2-3 include/linux/netlink.h 中關於 protocol 的定義部份. #define NETLINK_ROUTE … #define NETLINK_FIREWALL. 0 3. /* Routing/device hook. */. /* Firewalling hook */. 如同一般的 IP 訊息有 IP 表頭一樣,Netlink 的訊息也有 Netlink 的表頭。. - 14 -.

(32) Figure 2-6 Netlink Message Format. Table 2-4 顯示了 netlink 的表頭的定義,這邊比較重要欄位的是 nlmsg_type, 這個 2 bytes 的欄位定義了接在netlink表頭後面資料要如何解釋。 Table 2-4 netlink 表頭的定義. struct nlmsghdr { u32 nlmsg_len;. /* Length of message including header */. u16 nlmsg_type; /* Message content */ u16 nlmsg_flags; /* Additional flags */ u32 nlmsg_seq; /* Sequence number */ u32 nlmsg_pid; /* PID of the process that opened the socket */ }; 在 netlink socket 中,所要傳送訊息都需要指定端點的 id,而端點 id 通常是 用打開 socket 的使用者程式的 PID (process identification) 來表示,而 0 通常就代 表核心。 netlink 的一個特性就是可以發送單點和廣播的訊息:即目標端點可以是使用 者空間的程式的 PID 或著是廣播的 id。Linux 核心中已經定義了幾個廣播的 id, 用於發送特定事件的通知,如果使用者空間的程式對某類事件感興趣,可以把 PID 註冊到相對應的廣播 ID 中。 廣播ID的定義在 include/linux/rtnetlink.h中,名字類似 RTMGRP_XXX,可參 考 Table 2-5。其中RTMGRP_IPV4_ROUTE和RTMGRP_NEIGH兩組廣播ID,分 別用於通知路由表和L3 及L2 的更改資訊。. - 15 -.

(33) Table 2-5 include/linux/rtnetlink.h 關於廣播事件的定義部份. #define RTMGRP_LINK #define RTMGRP_NOTIFY. 1 /* Link 相關事件 */ 2 /* notify chain 相關事件 */. #define RTMGRP_NEIGH …. 4 /* 附近鄰居相關事件 */ 0x10 /* IPv4 Address 相關事件 */ 0x40 /* 路由表相關事件 */. #define RTMGRP_IPV4_IFADDR #define RTMGRP_IPV4_ROUTE …. rtnetlink 是架構在 netlink 上的訊息,要使用 rtnetlink 的訊息就是在開 netlinksocket 時以 NETLINK_ROUTE 作為 protocol 的參數。 rtnetlink 也有自己的訊息分類,每個分類都有自己的屬性 (Attribute) 資料, 不同的屬性資料需要根據目前所收到的 rtnetlink 訊息為哪一類來解釋。每個屬 性資料前面也會有個屬性表頭,用於告知後面接的屬性資料的解釋。 Table 2-6 顯示了屬性表頭的定義,rta_len表示後面接的資料長度,rta_type表示 要如何解釋後面接的屬性資料。 Table 2-6 屬性表頭 ratttr 的定義. struct rtattr { unsigned short rta_len; unsigned short rta_type; } 而目前收到的訊息類型就定義在 netlink 表頭的 nlmsg_type 欄位中。以下列 出目前 rtnetlink 所擁有的部分訊息分類: z LINKS „ 關於網路界面卡的訊息 z ADDRESSES . 關於網路界面卡上 IP 位址的訊息 z ROUTES „ 關於網路路由表的訊息. - 16 -.

(34) z NEIGHBORS „ 關於 ARP Table 的訊息 z RULES „ 關於路由規則的訊息 z DISCIPLINES „ 網路佇列相關訊息 z CLASSES „ 網路傳輸分類相關訊息 z FILTERS „ 網路傳輸過濾器相關訊息. Figure 2-7 rtnetlink 訊息格式. Figure 2-7 顯示了 rtnetlink架構在netlink上的訊息格式,我們可以看到它就只是 一連串帶著屬性的資料而已。而前面有一個 rtnetlink 的表頭。rtnetlink 的表頭 也是會根據不同的rtnetlink訊息類型而有不同的解釋方式。 本論文的事件通知機制和系統有關的部份就是架構在 rtnetlink 下,我們去擴 充 Linux 核心下的 rtnetlink 功能來達到我們所定義的各種事件通知。 與 Linux 其它使用者空間與核心空間的訊息交換機制相比,比如和 ioctl 相 比,netlink 的一個優勢就是可以初始化一個傳輸過程而不僅僅只是對使用者空間 程式的請求返回應答訊息。在 netlink 下,使用者空間應用程式和核心層間是有 連線狀態存在的,所以核心空間有訊息產生時可以直接傳送給使用者空間,而 ioctl 的呼叫返回模式是沒辦法作到由核心主動傳送訊息給使用者空間程式的。. - 17 -.

(35) 第 三 3 章 相關研究. 3.1 IEEE 802.21 Media Independent Handover Services 關於本節更詳細的內容可以參考 [30]。 在 2004 年 3 月 IEEE 802.21 工作小組正式成立,802.21 是由 Intel 所主導之規 格,其目的為使行動裝置在不同網路之間漫遊時,提供相關異質網路技術界接, 且能自動選擇最好用的網路連接類型,並無縫隙地切換通訊路徑。 802.21 之核心在於 Media Independent Handover Function (MIHF) ,其主要功 能在將資料連接層中之 802.11,802.16 或 Cellular 等不同無線技術之 MAC、PHY, 用一共同介面將資料成功切換至網路架構中 Layer 3 以上之層級。 Figure 3-1 顯示整個 802.21 整體架構,MIHF共定義了三個不同的服務:Media Independent Events Service (MIES)、Media Independent Command Service (MICS) 與Media Independent Information Service (MIIS). - 18 -.

(36) Figure 3-1 802.21 Overview[30]. 整個 MIH Function 運作,首先在使 Layer2 之不同網路技術透過 MIES 向上傳 遞,而上層如 SIP、IPv4、及 IPv6 等也可透過 MICS 往下層傳達命令,最後透過 MIIS 提供 MIFH 實體層能夠發現在搜尋範圍內之訊息。 透過 802.21 能讓聲音 (Voice) 及影像 (Video) 等講求及時 (Real-time) 之應 用可依環境所需速度適時切換至所需網路,而不產生訊號延遲現象。 目前在 IEEE 802 之各種傳輸技術中,並沒有無縫隙界接之機制,因此在 802.11 技術已成熟及 802.16 技術也已問世,802.21 所扮演的角色將趨於重要。將 Wi-Fi、 WiMAX 及 WWAN 之間透過其 MIH、Information Service 及 Smart Trigger 等三大 802.21 重要功能,順利將異質網路間訊號順利串接,也將左右整合三大網絡之終 端產品發展。. - 19 -.

(37) 3.2 Gollum (Toward Open and Unified Link-Layer API) 關於本節更詳細的內容可以參考 [31]及 http://www.ist-gollum.org/。 GOLLUM (Generic Open Link-Layer API for Unified Media Access) 是從 2004 年 9 月開始,目前仍在進行中的研究計畫。這個計畫的目標在於發展創新的與網 路程式相關的中介軟體、及程式介面,用來解決應用程式設計在異質無線行動網 路下所衍生的問題。 GOLLUM 計劃研究和設計一套公開的、獨立於作業系統的 Link-Layer API (ULLA; Universal Link Layer API),用來統一應用程式及作業系統存取和設定不 同有線及無線網路的介面。有了統一的 link-layer 存取介面,應用程式設計將不 再需要熟悉大量現存不同無線攫取技術的 API,對於行動網路應用程式的開發將 會是一大福因。統一的應用程式設計介面,也會增進異質無線網路使用之間的相 容性和也會使應用程式在不同無線攫取技術下移植更容易進行。GOLLUM 計劃 的目標便是設計一套具有彈性和新型提供行動相關資訊和事件功能的應用程式 介面,用來簡化無線網路應用程式的開發,提供未來更具智慧和創意的無線應用。 由本節和上一節的介紹,我們可以知道在未來行動裝置可以搭載各種不同的 網路模組的趨勢下,各大廠商都積極發展獨立於不同網路模組的應用程式界面, 用來將網路界面卡的異質性隱藏起來,並且也提供事件通知機制,讓上層的協定 可以快速地知道底層網路界面的狀態。. - 20 -.

(38) Figure 3-2 ULLA API 和相關事件查詢、中介軟體關係圖示. Figure 3-2 顯示了各種不同的無線網路存取技術可以經由 ULLA 整合起來。 Gollum 和 802.11 一樣也都處於發展階段,目前只有提出一個整體的大架構, 對於程式界面或著 Link Layer 的事件都還未有詳細定義的文件。. 3.3 Linux 平台上驅動程式層網路事件通知機制 [32]是本實驗室之前所發展的系統。該系統將網路介面相關的狀態改變利用 類似傳統UNIX作業系統上的信號 (signal) 機制通知使用者空間的程式,並且修 改了排程的演算法,使得使用者空間程式不必一再地發出系統呼叫,加快對於網 路介面狀態改變的處理,以增進系統效能。 該系統之實作可以分為三個主要部分:. - 21 -.

(39) z 事件通知部分 (Event notification) z 行程管理 (process management) z 排程器 (scheduler) 當網路驅動程式相關訊息發生以後,該系統的目標是由核心空間直接切換至 使用者空間來執行。也就是說,在行程從核心空間回到使用者空間之前,該系統 會去檢查是否有該行程所註冊的事件發生,當有註冊的事件發生時,系統會先執 行該行程所註冊的對應處理函式,接下來,利用系統呼叫返回核心空間,並且在 該系統呼叫內回覆原來所應該執行行程的硬體環境 (hardware context) 。 關於使用者空間和核心空間的切換,該系統利用了 Linux 下的兩種堆疊 – 核心模式堆疊 (kernel mode stack) 和使用者模式堆疊 (user mode stack) ;核心模 式堆疊主要作用有兩點,記錄使用者硬體環境 (hardware context) 以及存放程序 敘述子。 當要跳至使用者空間執行行程註冊的回叫 (Callback) 函數之前,因為在 Linux 中每次由核心空間返回使用者空間都會將核心模式堆疊清空,如此一來, 當使用者由回叫函數返回核心空間時,原本用以執行一般程式碼的硬體環境會消 失;因此該系統將核心模式堆疊中的硬體環境存至別的地方,以免原本的硬體環 境消失,因此,該系統將原本的硬體環境儲存在使用者模式的堆疊中,等到由回 叫函數返回後,再將其復原。 系統核心內的關係如 Figure 3-3 所示。當網路事件發生時,通用驅動程式 (Generic Driver Layer)會去呼叫 Event Handler,Event Handler 就會去更改核心用 來處理程序的資料結構,通知有事件發生,當排程器排到該程序時會先檢查是否 有事件發生,有的話,就會去執行程序所註冊的回叫函式。. - 22 -.

(40) Figure 3-3 Linux平台上驅動程式層網路事件通知機制的系統元件架構和關係 [32]. - 23 -.

(41) 第 四 4 章 支援網路感知之中介軟體設計與架構 本章將介紹本論文所提的支援具網路感知應用程式的中介軟體設計架構。我 們將此中介軟體命名為 WinME。. 4.1 目標與問題定義 本論文的主要目標是發展一個應用程式平台,讓程式設計者可以用來開發具 網路感知的應用程式,因此我們有以下的子目標: z 應用程式可以取得網路資訊 „ 應用程式可以主動要求網路相關資訊。 z 當網路狀態改變時,應用程式可以被通知 „ 應用程式可以被動的被通知事件的產生,不需要去使用系統呼叫輪詢網 路狀態是否改變。 z 程式設計者可以只註冊自己感興趣的事件 z 程式設計者開發網路程式時不需擔心網路相關的系統程式碼 z 行動管理員程式可以控制協定堆疊各層的資訊 (e.g. 設定 IP 位址等…) 為達以上的目標,我們會有以下的問題: z 應用程式如何取得網路資訊? z 如何提供事件驅動機制? z 程式界面的定義。 z 如何去控制協定堆疊和網路界面卡? 接下來的章節將會介紹我們的系統如何完成以上的目標及解決上面所提及的 問題。. - 24 -.

(42) 4.2 系統概觀. Figure 4-1 中介軟體概觀. Figure 4-1 顯示了整個WinME的架構,我們可以很清楚看到應用程式透過WinMe 所提供的程式界面去對系統底層的網路作存取的動作。這邊也有跨層設計的概 念,我們將位於應用層下層協定堆疊的資訊直接傳達給使用者空間的應用程式, 使用者空間的應用程式也可以直接將資訊傳遞給協定堆疊的底層。 我們將這些資訊都拉上使用者空間的應用程式的好處是我們在控制底層網路 時可以有較大的彈性,完全取決於程式設計員的設計方式。以行動管理員來說, 行動管理員的決策很可以很複雜的,也可能會常常更動,這時候要求效率而把換 手決策作進核心內就顯得不適當。. - 25 -.

(43) 當一個 802.11 的網路界面卡和無線接取點連上線後,會產生一個 Link UP 的 事件,並且會帶上 ESSID 等資訊,我們知道當連結上之後需要給網路界面卡設 定 IP 位址。 讓我們來考慮兩種情況: 一種情況是 802.21[30]的MIH Function,在這個情形之下Link UP的事件會 傳達給網路層(Network Layer),此時網路層也許就直接把IP位址設定到網路界面 卡上。 另一種情況就是使用 WinME,在這個情形之下,Link UP 的事件會傳達給應 用程式,應用程式經過決策後,可能決定使用 DHCP 取得 IP 位址,或經由使用 者設好的 Profile 決定 IP 位址,然後再把 IP 位址設定到網路界面卡上。 很明顯地,第一種情況的效能會比較好,可是沒有彈性,而今 802.21 的也尚 未成為標準,而且要達到第一種情形,我們還必須更改核心中關於協定堆疊的程 式碼,使其可以支援 MIH Function。我們認為關於換手的策略應該在使用者空間 的應用程式作決定,本論文並不關心行動管理員程式是如何作換手決策的,本論 文只是提供一個程式開發平台,讓行動管理員程式的撰寫者可以方便地開發和處 理網路間的換手策略。本論文提供的只是一個機制 (Mechanism),而程式的策略 (Policy) 就交給應用程式的開發者。 接下來的小節中,我們會介紹 WinME 中的各個元件。. 4.2.1 控制 (Control) 、查詢 (Query) 及事件 (Event) 介面. 應用程式透過 WinME 所提供的應用程式介面來使用控制、查詢和事件介面。. - 26 -.

(44) 控制界面是用來控制協定堆疊或網路界面的狀態,如設定網路位址、增加路 由表欄位、更改預設閘道或叫無線網路卡去掃描鄰近的接取點 (Point Of Attachment) 等…。 查詢界面則提供應用程式用於查詢目前的網路資訊,如連線訊號強度、目前 網路頻寬、網路卡的狀態等。像 VoIP 的程式在一開始啟動時可能會需要知道目 前連線網路卡的 IP 位址,然後再用此 IP 位址去 SIP Server 註冊。 事件介面將網路事件提供給應用程式,如 Link UP、Link Down、IP Change 等事件。這對網路換手的效能很重要,有了這個介面之後應用程式就不需要去輪 詢底層的網路狀態來判斷事件是否發生。. 4.2.2 行動管理員 (Mobility Manager). 使用 WinME 所提供的程式界面來管理底層的硬體或網路狀態。也因為如此 行動管理員的設計者可以只需要專注於換手策略 (Policy) 的設計,而無需去關 心底層是如何的運作。 行動管理員也可能包含使用者圖形界面 (GUI) 讓使用者來設定換手策略相 關的資料,或顯示出目前網路狀態。 最簡易的雙網 (802.11 WLAN and GPRS) 行動管理員,它可能是以無線區域 網路作為連線優先,當有無線區域網路時,就將預設閘道設成無線區域網路下的 預設閘道,在沒有無線區域網路訊號的範圍下,就將預設閘道設成個人行動通訊 GPRS 下的預設閘道。所以我們是藉著更改預設閘道來達到選擇網路界面卡的效 果。. - 27 -.

(45) 4.2.3 WinME 的應用程式界面 (Middleware API). 讓程式開發者使用這些界面來與 WinME 溝通,協助開發應用程式。 4.2.4 WinME 的核心元件. 本節會介紹 WinME 核心中的各個元件說明。 4.2.4.1 網路資訊儲存體 (Network Information Storage). 用來存放所量測的網路資訊,如網路頻寬、訊號強度、網路界面卡的 IP 位址 等。雖然資訊有可能會過時,不過在當有很多不同的應用程式來查詢同一份資料 時,WinME 就可以快速地回應應用程式。有的資訊可能會常常變動的 (如訊號 強度),我們就會設一個新鮮時間 (Fresh Time),如果應用程式下達取得訊號強度 的資訊,而這個資訊又過期的話,WinME 就會去跟底層取得資訊。至於不常變 動的資訊 (e.g. IP 位址),則 WinME 會在收到底層 IP 位址改變的事件時,就會 更改相對應的資訊。 此元件存在的目的就是為了快速地回應使用者程式的查詢要求,使得 WinME 不需要每當使用者程式要求一個網路資訊時,都要去跟系統底層要求一遍。. 4.2.4.2 網路觀察者 (Network Monitor). 週期性的去觀察網路狀態,如訊號強度、網路卡資訊等資料….。觀察到的結 果會存入網路資訊儲存體中。. - 28 -.

(46) 4.2.4.3 網路測量程式 (Network Measurement Daemon). 可產生封包來測量目前的網路頻寬。測量的結果會存入網路資訊儲存體中。 此元件在雖然在本論文中有納入WinME的設計,可是在實作上本論文並沒有實 作該元件,因為關於頻寬的測量本身就是一個值得討論的研究議題 [33][34] [35][36]。或許可以在未來實作出這一個元件。 4.2.4.4 事件服務元件 (Event Service). 此元件提供應用程式事件處理機制,和處理底層的網路事件。應用程式可以 透過 WinME 的程式界面來跟此元件註冊感興趣的事件,而網路底層的事件會先 通知事件服務元件後,然後再由該元件再將訊號分送給感興趣的應用程式。 4.2.4.5 中介軟體轉接器 (Middleware Adapter). 這部份實作了所有和作業系統有關的程式碼 (如系統呼叫)。可用於幫助整個 WinME 的移植(porting)。 4.2.4.6 驅動程式轉接器 (Driver Adapter). 定義好驅動程式要提供的界面,讓 WinME 可以直接使用這個界面來對網路 硬體作溝通。這有點像是 802.21 的 MIH 提供的部分機制,不過在 802.21 尚未 成為標準前,我們只能自己先這樣作,如果未來 802.21 成為標準,而且核心內 也實作的話,驅動程式轉接器有機會用 802.21 取代掉。. - 29 -.

(47) 4.3 網路事件通知機制 本論文所提出的系統中,事件通知機制可以說是十分重要的部份。有了這個 機制,應用程式就可以快速地反應網路狀態的變化,也不用像過去傳統的設計一 樣,週期的使用系統呼叫來輪詢網路狀態,造成系統不必要的負擔。 由於應用程式並不會對每個網路事件都感興趣,所以 WinME 提供讓應用程 式註冊事件的功能。有了註冊事件的功能之後,接下來是當事件發生時應用程式 如何得知?WinME 提供兩種得知事件的方法,我們把他們分別稱為同步處理和 不同步處理。 在同步處理事件的架構下,網路事件發生時,會被送到應用程式的事件佇列 中。而程式在執行的過程需要自己去檢查是否有網路事件的發生,有的話再進行 事件的處理。雖然這也算是一種輪詢機制,不過這是只有在使用者空間的應用程 式層去輪詢是否有事件發生,和以往下達系統呼叫輪詢網路界面的資訊在意義上 是完全不同的。 在非同步的處理事件架構下,應用程式在和WinME註冊事件時需要提供事件 處理者 (Event Handler),此時WinME會幫該應用程式開一個執行緒並且用應用 程式所提供的事件處理者來處理事件。所以原本的應用程式可以專注於本身的工 作,當有事件產生時,對應的執行緒就就被喚醒起來處理該事件。這種處理事件 的方式類似之前本實驗室所提的以信號方式處理事件的系統 [32]。 接下來介紹 WinME 對事件通知的設計概念。. - 30 -.

(48) 當程式設計人員想要使用 WinME 的事件通知機制時,需先作初始化的動作, 在作完初始化的動作後,WinME 會配置一個事件佇列 (Event Queue) 給應用程 式,並且返回一個事件描述子 (Event Descriptor) ,所以每個事件描述子都對應 著一個事件佇列,應用程式藉著事件描述子來存取事件佇列,像是註冊感興趣的 事件或檢查是否有事件發生。由以上的描述可以知道應用程式可以不止有一個事 件佇列,應用程式可以有多個事件佇列,可能有的想要用非同步處理,有的想要 同步處理,或著應用程式對於不同的事件要在不同的檢查(如在程式中某個點檢 查 LinkDown 的事件,而再程式中另一個點檢查 IP 位址改變的事件)。 當應用程式作完初始化的動作得到事件描述子後,再來就是要註冊該事件佇 列感興趣的事件,當網路事件發生時,也只有註冊過的事件才會被放到事件佇列 中。 Figure 4-2 顯示了該應用程式有兩個事件描述子,事件描述子一註冊了 Link Up、Link Down、NETDEV_UP的事件,並且對應的事件佇列中有一個Link UP 的事件未處理。而事件描述子二註冊了 IP Change及Default Gateway Change的事 件,而該對應的事件佇列則有 IP Change事件未處理。. - 31 -.

(49) Figure 4-2 事件描述子和事件佇列等關系. 接著介紹本論文WinME的設計如何作到之前所提及的同步和非同步的處理 事件方法。應用程式決定要使用同步 (自行檢查事件的產生) 和非同步 (交由執 行緒來處理事件) 在事件一開始初始化就決定好了。如果在事件一開始初始化的 時候有提供事件處理者,就表示該事件描述子所註冊的事件都是採用不同步的方 式作處理。反過來說,如果一開始初始化事件的時候,沒提供事件處理者的話, 就表示該事件描述子所註冊的事件都是以同步的方式作處理。Table 4-1 和 Table 4-2 分別顯示了兩種處理事件方式的程式碼。 Table 4-1 同步事件處理的程式架構. /* event initialization, get event_descriptor */ /* win_event_init ‘s param is NULL, means synchronous mode */ event_descriptor = win_event_init(NULL); /* register interesting events */ win_event_register(event_descriptor, NETDEV_UNREGISTER); win_event_register(event_descriptor, IP_CHANGE); … /* check if events happen */ if(win_check_event(event_descriptor, wevent) == R_HAVE_EVENT) ... - 32 -.

(50) Table 4-2 非同步事件處理的程式架構. /* Event Handler */ /* When event happen, thread will call this procedure */ void my_event_handler(struct win_event* wevent) { printf(“Event Happen!!\n”); } int main() { … /* Programmers don’t need to check if event happen*/ event_descriptor = win_event_init(my_event_handler); win_event_register(event_descriptor, NETDEV_UNREGISTER); win_event_register(event_descriptor, IP_CHANGE); …. } 本節的最後將介紹事件的派發過程。當系統底層網路事件產生時,全部都會 送到WinME的事件服務元件 (Event Service),然後事件服務元件再根據應用程式 所註冊的事件,把事件傳送給各個應用程式。Figure 4-3 顯示了事件傳送的流程。. Figure 4-3 事件傳送順序圖. Figure 4-3 的各個步驟詳述如下: Table 4-3 事件傳送順序圖的各步驟描述. 步驟. 描述. 1. Event Happen. 系統網路底層的有事件產生,將事件傳送給中介軟體內的 事件服務元件。. 2. check_reg_event. 事件服務元件檢查哪些應用程式有註冊過該事件。. 3. Dispatch Event. 把事件傳達給有註冊的應用程式。. - 33 -.

(51) 4.4 網路事件及命令定義 本節將簡單介紹本論文所提 WinME 所定義的事件和控制查詢命令。 我們將事件和命令分成以下四大類: z 系統層 „ 和系統有關的事件和命令。(e.g. 電池電量) z 驅動層 „ 和網路卡驅動程式有關的事件和命令。(e.g. Link Up event) z 網路層 „ 和網路層有關的事件和命令。 (e.g. IP Change Event) z 傳輸層 „ 和傳輸層有關的事件和命令。(e.g. SET_TCP_RETX_TIMEOUT). 4.4.1 事件定義. 以 NETDEV 開頭的事件,表示 [32]中所支援的事件。 4.4.1.1 系統層事件. z NETDEV_REGISTER „ 新的網路界面卡被加入到系統當中。 z NETDEV_UNREGISTER „ 網路界面卡從系統中移除。 z NETDEV_CHANGENAME „ 網路界面卡在系統內部的名稱改變了。. - 34 -.

數據

Figure 2-3 傳統的無線行動網路架構
Figure 2-5 跨層設計概念示意圖 [22]
Table 2-5 include/linux/rtnetlink.h 關於廣播事件的定義部份
Figure 3-3 Linux平台上驅動程式層網路事件通知機制的系統元件架構和關係 [32]
+7

參考文獻

相關文件

接收器: 目前敲擊回音法所採用的接收 器為一種寬頻的位移接收器 其與物體表

可以看出和 critical-damped 和 over-damped case 因為阻泥太強,都連 原點都回不去。但 over-damped 的圖線在 critical-damped 之上,i.e.,over- damped

工作內容與進度:部長需在二籌前規 畫好洄瀾週時布置攤位與宣傳的東西 ( 如攤位價目表,小海報,可掛於單車 的小宣傳表之類

‡ RFID 運作原理是透過一片小型硬體的無線射頻辨識技 術晶片( RFID chips),利用內含的天線來傳送與接

(Embedded System)為主,主要也都以 Linux 軟體平台來運作。對 EPON ONU Client 端,可以透過 GUI 介面選單來設定其所要運作的功能,配合 Linux 軟體與

此外,由文獻回顧(詳第二章)可知,實務的車輛配送路線排程可藉由車 輛路線問題(Vehicle Routing

無線感測網路是個人區域網路中的一種應用,其中最常採用 Zigbee 無線通訊協 定做為主要架構。而 Zigbee 以 IEEE802.15.4 標準規範做為運用基礎,在下一小節將 會針對 IEEE

其實 Eclipse 本身只是一個平台,因為眾多外掛的支持讓 Eclipse 具有廣 大的支援性,其中也支援本論文的 android 開發研究,許多 android