何晨暉,鄭紫微
(寧波大學(xué)通信技術(shù)研究所,浙江寧波315211)
近場通信設(shè)備間的P2P通信設(shè)計與實現(xiàn)
何晨暉,鄭紫微
(寧波大學(xué)通信技術(shù)研究所,浙江寧波315211)
為實現(xiàn)不同近場通信(NFC)設(shè)備間的互通,以NFC設(shè)備的點對點通信(P2P)為研究對象,設(shè)計并實現(xiàn)基于Android平臺的NFC移動終端與讀卡器之間的點對點(P2P)通信方案。NFC移動終端與讀卡器以NFC數(shù)據(jù)交換格式(NDEF)的數(shù)據(jù)為通信單元,在簡單NDEF交換協(xié)議的基礎(chǔ)上,一方作為客戶端發(fā)送傳輸消息請求,另一方作為服務(wù)器對客戶端的請求做出響應(yīng)。通過應(yīng)用協(xié)議數(shù)據(jù)單元中的命令-響應(yīng)消息對使NFC移動終端與讀卡器進(jìn)行交互。測試結(jié)果表明,NFC移動終端與NFC讀卡器均可以主動給對方發(fā)送消息,較好地實現(xiàn)了兩者之間的P2P通信。
安卓平臺;近場通信;點對點通信;移動終端;讀卡器;應(yīng)用協(xié)議數(shù)據(jù)單元
近場通信(Near Filed Communication,NFC)是近年來新興的一種半雙工通信技術(shù)[1]。相對于藍(lán)牙、紅外線、Zigbee等傳統(tǒng)通信技術(shù),NFC技術(shù)具有低功耗、低成本、便捷迅速、安全性高的優(yōu)勢[2-3],因此NFC技術(shù)應(yīng)用于移動支付、門禁、電子票務(wù)、身份認(rèn)證等領(lǐng)域具有廣闊的應(yīng)用前景。在智能手機廣泛普及的今天,智能手機與NFC技術(shù)的結(jié)合將開創(chuàng)全新的生活方式,給人們生活帶來極大便利。
NFC設(shè)備有3種工作模式[1]:(1)讀寫模式, NFC設(shè)備充當(dāng)讀卡器對NFC標(biāo)簽進(jìn)行讀/寫操作[4];(2)卡模式,NFC設(shè)備模擬成NFC標(biāo)簽被讀卡器讀/寫數(shù)據(jù)[5];(3)點對點(Peer to Peer,P2P)模
式,2個NFC設(shè)備都處于主動模式進(jìn)行通信[6]。本文主要針對NFC設(shè)備的P2P模式展開討論,研究并實現(xiàn)NFC移動終端與NFC讀卡器之間的P2P通信。
NFC論壇制定了一系列的標(biāo)準(zhǔn)來規(guī)范NFC技術(shù)。NFC數(shù)據(jù)交換格式(NFC Data Exchange Format, NDEF)[7]規(guī)定了NFC通信時的數(shù)據(jù)封裝格式。簡單NDEF交換協(xié)議(Simple NDEF Exchange Protocol, SNEP)[8]規(guī)定了NFC P2P模式下2個NFC設(shè)備通信的規(guī)范。與讀卡器通信還有專屬的應(yīng)用協(xié)議數(shù)據(jù)單元(Application Protocol Data Unit,APDU)命令,通過不同的數(shù)據(jù)交換命令可以使讀卡器做出不同操作。
2.1 NFC數(shù)據(jù)交換格式
NDEF規(guī)定了2個NFC設(shè)備或者NFC設(shè)備與NFC標(biāo)簽之間數(shù)據(jù)交換時的數(shù)據(jù)封裝格式。NDEF機制中數(shù)據(jù)封裝格式以NDEF消息形式存在,NDEF消息由若干個NDEF記錄組成。一條NDEF消息對包含的NDEF記錄數(shù)量是沒有限制的,第一個NDEF記錄由MB(Message Begin)標(biāo)志位標(biāo)記,最后一個NDEF記錄由ME(Message End)標(biāo)志位標(biāo)記。一個NDEF記錄中有3種參數(shù):有效負(fù)載長度,有效負(fù)載類型,有效負(fù)載標(biāo)識符。這3種參數(shù)用來描述該條NDEF記錄中的有效負(fù)載,有效負(fù)載中的內(nèi)容是用戶實際讀/寫的數(shù)據(jù)。通常一條NDEF消息由多個NDEF記錄組成,因此,完整的數(shù)據(jù)是分散放在每個NDEF記錄中的有效負(fù)載內(nèi)。
2.2 NFC數(shù)據(jù)交換協(xié)議
SNEP是一個應(yīng)用層協(xié)議,適用于2個NFC設(shè)備處于P2P模式時,用NDEF格式數(shù)據(jù)交換信息的情況。圖1為SNEP通信模型。SNEP客戶端發(fā)送一個請求到SNEP服務(wù)器,請求消息包括協(xié)議版本、請求操作、消息主體長度、消息主體。SNEP服務(wù)器接收到請求后對SNEP客戶端做出響應(yīng),響應(yīng)的消息包括協(xié)議版本、成功/失敗狀態(tài)碼、消息主體長度、消息主體。SNEP通信時的單條數(shù)據(jù)除了消息主體外的部分統(tǒng)稱為消息頭,消息主體中存放的是NDEF格式封裝的消息。SNEP消息主體對NDEF消息數(shù)量是有限制的,最大數(shù)量不超過232-1。如果消息長度超過單個SNEP消息的容量,SNEP消息就會被分段傳輸。圖2為SNEP請求與響應(yīng)分段交換的模型。為讓接收方知道分段消息的字節(jié)數(shù),第1個片段必須要包含完整的SNEP消息頭。SNEP客戶端發(fā)出第1個請求片段后,SNEP服務(wù)器響應(yīng)“繼續(xù)”,SNEP客戶端才能將剩余的片段請求發(fā)送給服務(wù)器。如果SNEP服務(wù)器不希望處理剩下的SNEP請求,SNEP服務(wù)器將響應(yīng)“拒絕”,此時,客戶端與服務(wù)器之間的連接會強制斷開。SNEP服務(wù)器的分段響應(yīng)過程也是相同原理。在實際通信中, SNEP請求和SNEP響應(yīng)中只有其中一個分段傳輸也是可能的。
圖1 SNEP通信模型
圖2 分段信息交換模型
2.3 APDU命令-響應(yīng)消息對
應(yīng)用協(xié)議數(shù)據(jù)單元(Application Protocol Data Unit,APDU)是智能卡與讀卡器之間通信的最小信息單元[9]。APDU命令-響應(yīng)消息對分成APDU命令和APDU響應(yīng)。根據(jù)ACR122U NFC Reader API[10]的闡釋,NFC移動設(shè)備與讀卡器ACR122U通信實際是和讀卡器中的PN532芯片通信,本文采用直接傳輸將數(shù)據(jù)包發(fā)送到NFC移動設(shè)備或NFC讀卡器。讀卡器發(fā)送的APDU命令頭是:0xff 0x00 0x00 0x00 0xii,其中,ii表示數(shù)據(jù)域字節(jié)數(shù)。ACR122U讀卡器處于Target模式,在APDU命令后跟隨命令碼。0xd4 0x8c代表對讀卡器初始化;0xd4 0x86代表讀卡器讀取數(shù)據(jù);0xd4 0x8e代表讀卡器寫入數(shù)據(jù)[11]。根據(jù)不同的數(shù)據(jù)交換命令,ACR122U讀卡器能與NFC移動設(shè)備進(jìn)行P2P通信。
ACR122U讀卡器在發(fā)送APDU命令后NFC移動設(shè)備回饋的APDU響應(yīng)會有2個字節(jié)的響應(yīng)后綴
SW1,SW2。根據(jù)響應(yīng)后綴,讀卡器可以判定APDU命令執(zhí)行的成功與否。0x90 0x00代表操作成功完成;0x63 0x7f代表PN532命令有誤;0x63 0x00代表操作失?。?1]。讀卡器通過對響應(yīng)后綴的判定來決定下一步操作,成功則取出實際傳輸?shù)臄?shù)據(jù),失敗則拋出異常。
2.4 Android Beam簡介
Android Beam是Android 4.0后開發(fā)的一個功能,目的是實現(xiàn)NFC移動設(shè)備間的數(shù)據(jù)交換。當(dāng)2個NFC設(shè)備間要傳數(shù)據(jù)時,先保證設(shè)備沒有鎖屏,然后將2個NFC設(shè)備背靠背貼近,此時發(fā)送數(shù)據(jù)的NFC設(shè)備會有“觸摸即可發(fā)送”的提示,當(dāng)用戶點擊屏幕時待傳輸數(shù)據(jù)即發(fā)送到另一個NFC設(shè)備[12]。為實現(xiàn)NFC移動設(shè)備與讀卡器的P2P通信,Android Beam是必不可少的。
本文提出實現(xiàn)NFC移動終端與NFC讀卡器之間P2P通信的方法。P2P通信的實現(xiàn)分成2個部分:移動終端發(fā)送數(shù)據(jù)到讀卡器,讀卡器發(fā)送數(shù)據(jù)到移動終端。
3.1 P2P通信客戶端的實現(xiàn)
客戶端的開發(fā)環(huán)境是Eclipse4.3.2,ADT22.0.1, Android4.0,jdk-7-windows-i586。測試用的NFC移動終端型號是Nexus 4,操作系統(tǒng)Android 4.4。
客戶端主要用到的包有4個[13-14]:(1)android.nfc.NfcAdapter包,處理NFC操作的輔助類; (2)android.nfc.NfcEvent包,產(chǎn)生的事件對象通常作為其他方法的參數(shù),比如適配器的參數(shù);(3)android.nfc.NdefRecord包,產(chǎn)生NDEF記錄;(4)android.nfc.NdefMessage,創(chuàng)建標(biāo)準(zhǔn)NDEF格式消息。
3.1.1 客戶端數(shù)據(jù)發(fā)送
移動終端向讀卡器發(fā)送的數(shù)據(jù)是NDEF格式消息,而一條NDEF消息是由若干NDEF記錄組成的。以下是生成NDEF消息的部分代碼:
為使NDEF格式消息正確發(fā)送需要實現(xiàn)2個接口:(1)CreateNdefMessageCallback實現(xiàn)接口,在主線程調(diào)用setNdefPushMessage Callback()方法,當(dāng)NFC移動終端貼近讀卡器,應(yīng)用會自動創(chuàng)建一條NDEF消息。(2)OnNdefPushCompleteCallback實現(xiàn)接口,在主線程調(diào)用setOnNdefPushCompleteCall back()方法,可以監(jiān)聽NDEF消息是否發(fā)送成功,通?;卣{(diào)后的處理操作是在子線程中完成。
3.1.2 客戶端數(shù)據(jù)接收
移動終端接收從讀卡器發(fā)送來的消息時,客戶端是通過Intent做媒介獲取數(shù)據(jù)的,再通過解析Intent中的內(nèi)容獲得實際數(shù)據(jù)。由于SNEP協(xié)議數(shù)據(jù)交換只含有NDEF格式數(shù)據(jù)[8],因此intent filter中只定義對ACTION_NDEF_DISCOVERED類型的Intent感興趣,并且可以將此類型的Action作為處理數(shù)據(jù)的判斷條件。以下是處理接收數(shù)據(jù)的部分代碼:
3.2 P2P通信服務(wù)器的實現(xiàn)
服務(wù)器的開發(fā)環(huán)境是jdk-7-windows-i586, Eclipse4.3.2。測試用讀卡器型號是ACR122U。使用時,讀卡器通過USB口連接PC端。
服務(wù)器主要用到的包:(1)javax.smartcardio.Card包,創(chuàng)建卡對象,以及通過該包獲得卡對象的基本屬性; (2)javax.smartcardio.CardChannel包,創(chuàng)建卡信道對象,使讀卡器與智能卡建立連接;(3)javax.smartcardio.CardTerminal包,創(chuàng)建終端對象,在該包獲得讀卡器信息;(4)javax.smartcardio.CommandAPDU包,構(gòu)建APDU命令;(5)javax.smartcardio.ResponseAPDU包,構(gòu)建APDU響應(yīng)[13-14]。
3.2.1 服務(wù)器數(shù)據(jù)發(fā)送
讀卡器向移動終端發(fā)送消息是主動發(fā)送SNEP請求的過程。圖3為讀卡器發(fā)送消息的流程。當(dāng)讀卡器收到“發(fā)送”命令時,讀卡器首先進(jìn)行初始化,初始化內(nèi)容包括讀卡器模式、協(xié)議版本、超時參數(shù)等基本信息。讀卡器發(fā)出SNEP請求后,當(dāng)?shù)玫揭苿咏K端的“成功”響應(yīng)后,讀卡器發(fā)送實際消息。讀卡器確認(rèn)移動終端成功接收到消息后,中斷與移動終端的連接。
圖3 讀卡器發(fā)送消息流程
3.2.2 服務(wù)器數(shù)據(jù)接收
移動終端向讀卡器發(fā)送消息是讀卡器被動接收SNEP請求的過程。圖4為讀卡器接收消息的流程。當(dāng)讀卡器收到“接收”命令時,讀卡器首先進(jìn)行初始化,初始化內(nèi)容跟讀卡器發(fā)送消息類似。由于此時發(fā)送SNEP請求的一方為移動終端,讀卡器需在初始化后等待與移動終端的連接請求,若連接成功,讀卡器將繼續(xù)等待移動終端發(fā)送的SNEP請求。下一步,讀卡器對接收到的內(nèi)容做判斷,若接收的內(nèi)容長度大于5,則被認(rèn)為是移動終端發(fā)送的實際消息。讀卡器發(fā)出命令“請求已收到”,且讀卡器在確認(rèn)回復(fù)“成功”后,斷開與移動終端的連接。
圖4 讀卡器接收消息流程
圖5為讀卡器向移動終端發(fā)送消息的過程。
圖5 讀卡器向移動終端發(fā)送消息的示意圖
圖5(a)為讀卡器發(fā)送SNEP請求,觸發(fā)了移動終端的Android Beam。由于此時是讀卡器向移動終端發(fā)送數(shù)據(jù),因此無需在移動終端進(jìn)行“傳遞”操作,只需等待讀卡器發(fā)送完消息。圖5(b)為讀卡器傳遞的實際內(nèi)容。移動終端接收到的消息觸發(fā)了定義的Action,然后將實際內(nèi)容“Good Job!”從Intent中解析出來。
圖6為移動終端向讀卡器發(fā)送消息的過程。圖6(a)為移動終端向讀卡器發(fā)送SNEP請求觸發(fā)了Android Beam。用戶需要觸摸屏幕傳達(dá)“發(fā)送”命令,否則讀卡器將因超時得不到移動終端發(fā)送的數(shù)據(jù)。圖6(b)為讀卡器成功接收消息并且向移動終端響應(yīng)“成功”后,移動終端以Toast形式做出的提示信息。
圖6 移動終端向讀卡器發(fā)送消息的示意圖
本文研究并實現(xiàn)了基于Android的NFC移動終端與NFC讀卡器的P2P通信,從NFC數(shù)據(jù)交換格式NDEF、簡單NDEF數(shù)據(jù)交換協(xié)議、應(yīng)用協(xié)議數(shù)據(jù)單元、Android Beam 4個方面闡述了NFC P2P通信原理及方式,實現(xiàn)的移動終端與讀卡器間的P2P通信,包括移動終端發(fā)送消息給讀卡器、讀卡器發(fā)送消息給移動終端2個功能。NFC技術(shù)作為新興的通信方式與移動終端結(jié)合,在移動支付、門禁等領(lǐng)域有較大的應(yīng)用價值。測試結(jié)果表明,移動終端與讀卡器間的P2P通信,較好地實現(xiàn)消息在兩者之間的收發(fā)、應(yīng)答,為很多實際應(yīng)用提供了新的依據(jù)。下一步將主要從P2P通信傳輸數(shù)據(jù)的安全性、便利性2個方面研究NFC設(shè)備P2P通信應(yīng)用于移動支付領(lǐng)域的可行性及解決方案。
[1]Coskun V,Ozdenizci B,Ok K.A Survey on Near Field Communication(NFC)Technology[J].Wireless Personal Communications,2013,71(3):2259-2294.
[2]Pesonen J,HorsterE.NearFieldCommunication Technology inTourism[J].TourismManagement Perspectives,2012,31(4):11-18.
[3]Sharma V,Gusain P,Kumar P.Near Field Communication[C]//Proceedings of Conference on Communication and Control Systems.Washington D.C.,USA:IEEE Press,2013.
[4]IEEE.ISO/IEC l8092-2013 Information Technologytelecommunications and Information Exchange Between Systems——Near Field Communication Interface and Protocol(NFCIP-1)[S].2013.
[5]馬 捷,鄂金龍.基于近場通信的WiFi傳輸連接方案[J].計算機工程,2013,39(6):1-6.
[6]劉 翔,肖 堃.跨平臺NFC軟件棧的研究與架構(gòu)設(shè)計[J].電子科技大學(xué)學(xué)報,2014,43(1):88-94.
[7]NFC Forum.NFCDataExchangeFormat(NDEF) Technical Specification[EB/OL].[2014-04-09].http:// www.nfc-forum.org/specs/spec_list/.
[8]NFC Forum.Simple NDEF Exchange Format(SNEP) Technical Specification[EB/OL].[2014-04-09].http:// www.nfc-forum.org/specs/spec_list/.
[9]Belter I.Smart Card APDU Analysis[Z].2008.
[10]白翠翠,夏春蕾,戴曙光.非接觸式CPU卡讀寫器的設(shè)計與實現(xiàn)[J].無線電通信技術(shù),2012,(5):50-52,70.
[11]吳毓書,張寶峰,張翀斌,等.基于APDU數(shù)據(jù)交換協(xié)議的安全U盤通信模型[J].清華大學(xué)學(xué)報:自然科學(xué)版,2012,52(10):1496-1499.
[12]IEEE.ISO/IEC 7816-4-2013 Identification Cards——IntegratedCircuitCards——Part4:Organization, Security and Commands for Interchange[S].2013.
[13]Coskun V,Kerem O,Ozdenizci B.Professional NFC Application Development for Android[M].Hoboken, USA:John Wiley&Sons,Inc.,2013.
[14]石 韻.Android移動平臺中NDEF標(biāo)簽的掃描應(yīng)用研究[J].計算機光盤軟件與應(yīng)用,2014,(19): 292-294.
編輯 陸燕菲
Design and Implementation of P2P Communication Between Near Field Communication Devices
HE Chenhui,ZHENG Ziwei
(Institute of Communication Technology,Ningbo University,Ningbo 315211,China)
To achieve interconnection between different Near Field Communication(NFC)devices,Peer to Peer(P2P) communication of NFC device as the object of study,this paper designs and implements P2P communication between NFC mobile terminal and NFC reader based on Android platform.NFC mobile terminal and NFC reader takes NFC Data Exchange Format(NDEF)as the communication unit,based on the Simple NDEF Exchange Protocol(SNEP)protocol,a party is as a client to send the message transmission request,and the other is as a server to respond client request.It is to enable NFC mobile terminal interact with NFC reader through command-response message pair in Application Protocol Data Unit(APDU).Test results show that both NFC mobile terminal and NFC reader can take the initiative send messages to each other,and better achieve P2P communication between NFC mobile terminal and NFC reader.
Android platform;Near Field Communication(NFC);Peer to Peer(P2P)communication;mobile terminal;card reader;Application Protocol Data Unit(APDU)
何晨暉,鄭紫微.近場通信設(shè)備間的P2P通信設(shè)計與實現(xiàn)[J].計算機工程,2015,41(3):77-80,87.
英文引用格式:He Chenhui,Zheng Ziwei.Design and Implementation of P2P Communication Between Near Field Communication Devices[J].Computer Engineering,2015,41(3):77-80,87.
1000-3428(2015)03-0077-04
:A
:TP319
10.3969/j.issn.1000-3428.2015.03.014
國家自然科學(xué)基金資助項目(60972063);國家科技重大專項基金資助項目(2011ZX03002-004-02);浙江省杰出青年科學(xué)基金資助項目(R1110416);教育部高等學(xué)校博士學(xué)科點專項科研基金資助項目(20113305110002);寧波市科技創(chuàng)新團(tuán)隊基金資助項目(2011B81002)。
何晨暉(1989-)女,碩士研究生,主研方向:無線移動通信;鄭紫微,教授、博士生導(dǎo)師。
2014-04-16
:2014-05-12E-mail:hechenhuicn@foxmail.com