何晨晖,郑紫微
(宁波大学通信技术研究所,浙江宁波315211)
近场通信设备间的P2P通信设计与实现
何晨晖,郑紫微
(宁波大学通信技术研究所,浙江宁波315211)
为实现不同近场通信(NFC)设备间的互通,以NFC设备的点对点通信(P2P)为研究对象,设计并实现基于Android平台的NFC移动终端与读卡器之间的点对点(P2P)通信方案。NFC移动终端与读卡器以NFC数据交换格式(NDEF)的数据为通信单元,在简单NDEF交换协议的基础上,一方作为客户端发送传输消息请求,另一方作为服务器对客户端的请求做出响应。通过应用协议数据单元中的命令-响应消息对使NFC移动终端与读卡器进行交互。测试结果表明,NFC移动终端与NFC读卡器均可以主动给对方发送消息,较好地实现了两者之间的P2P通信。
安卓平台;近场通信;点对点通信;移动终端;读卡器;应用协议数据单元
近场通信(Near Filed Communication,NFC)是近年来新兴的一种半双工通信技术[1]。相对于蓝牙、红外线、Zigbee等传统通信技术,NFC技术具有低功耗、低成本、便捷迅速、安全性高的优势[2-3],因此NFC技术应用于移动支付、门禁、电子票务、身份认证等领域具有广阔的应用前景。在智能手机广泛普及的今天,智能手机与NFC技术的结合将开创全新的生活方式,给人们生活带来极大便利。
NFC设备有3种工作模式[1]:(1)读写模式, NFC设备充当读卡器对NFC标签进行读/写操作[4];(2)卡模式,NFC设备模拟成NFC标签被读卡器读/写数据[5];(3)点对点(Peer to Peer,P2P)模
式,2个NFC设备都处于主动模式进行通信[6]。本文主要针对NFC设备的P2P模式展开讨论,研究并实现NFC移动终端与NFC读卡器之间的P2P通信。
NFC论坛制定了一系列的标准来规范NFC技术。NFC数据交换格式(NFC Data Exchange Format, NDEF)[7]规定了NFC通信时的数据封装格式。简单NDEF交换协议(Simple NDEF Exchange Protocol, SNEP)[8]规定了NFC P2P模式下2个NFC设备通信的规范。与读卡器通信还有专属的应用协议数据单元(Application Protocol Data Unit,APDU)命令,通过不同的数据交换命令可以使读卡器做出不同操作。
2.1 NFC数据交换格式
NDEF规定了2个NFC设备或者NFC设备与NFC标签之间数据交换时的数据封装格式。NDEF机制中数据封装格式以NDEF消息形式存在,NDEF消息由若干个NDEF记录组成。一条NDEF消息对包含的NDEF记录数量是没有限制的,第一个NDEF记录由MB(Message Begin)标志位标记,最后一个NDEF记录由ME(Message End)标志位标记。一个NDEF记录中有3种参数:有效负载长度,有效负载类型,有效负载标识符。这3种参数用来描述该条NDEF记录中的有效负载,有效负载中的内容是用户实际读/写的数据。通常一条NDEF消息由多个NDEF记录组成,因此,完整的数据是分散放在每个NDEF记录中的有效负载内。
2.2 NFC数据交换协议
SNEP是一个应用层协议,适用于2个NFC设备处于P2P模式时,用NDEF格式数据交换信息的情况。图1为SNEP通信模型。SNEP客户端发送一个请求到SNEP服务器,请求消息包括协议版本、请求操作、消息主体长度、消息主体。SNEP服务器接收到请求后对SNEP客户端做出响应,响应的消息包括协议版本、成功/失败状态码、消息主体长度、消息主体。SNEP通信时的单条数据除了消息主体外的部分统称为消息头,消息主体中存放的是NDEF格式封装的消息。SNEP消息主体对NDEF消息数量是有限制的,最大数量不超过232-1。如果消息长度超过单个SNEP消息的容量,SNEP消息就会被分段传输。图2为SNEP请求与响应分段交换的模型。为让接收方知道分段消息的字节数,第1个片段必须要包含完整的SNEP消息头。SNEP客户端发出第1个请求片段后,SNEP服务器响应“继续”,SNEP客户端才能将剩余的片段请求发送给服务器。如果SNEP服务器不希望处理剩下的SNEP请求,SNEP服务器将响应“拒绝”,此时,客户端与服务器之间的连接会强制断开。SNEP服务器的分段响应过程也是相同原理。在实际通信中, SNEP请求和SNEP响应中只有其中一个分段传输也是可能的。
图1 SNEP通信模型
图2 分段信息交换模型
2.3 APDU命令-响应消息对
应用协议数据单元(Application Protocol Data Unit,APDU)是智能卡与读卡器之间通信的最小信息单元[9]。APDU命令-响应消息对分成APDU命令和APDU响应。根据ACR122U NFC Reader API[10]的阐释,NFC移动设备与读卡器ACR122U通信实际是和读卡器中的PN532芯片通信,本文采用直接传输将数据包发送到NFC移动设备或NFC读卡器。读卡器发送的APDU命令头是:0xff 0x00 0x00 0x00 0xii,其中,ii表示数据域字节数。ACR122U读卡器处于Target模式,在APDU命令后跟随命令码。0xd4 0x8c代表对读卡器初始化;0xd4 0x86代表读卡器读取数据;0xd4 0x8e代表读卡器写入数据[11]。根据不同的数据交换命令,ACR122U读卡器能与NFC移动设备进行P2P通信。
ACR122U读卡器在发送APDU命令后NFC移动设备回馈的APDU响应会有2个字节的响应后缀
SW1,SW2。根据响应后缀,读卡器可以判定APDU命令执行的成功与否。0x90 0x00代表操作成功完成;0x63 0x7f代表PN532命令有误;0x63 0x00代表操作失败[11]。读卡器通过对响应后缀的判定来决定下一步操作,成功则取出实际传输的数据,失败则抛出异常。
2.4 Android Beam简介
Android Beam是Android 4.0后开发的一个功能,目的是实现NFC移动设备间的数据交换。当2个NFC设备间要传数据时,先保证设备没有锁屏,然后将2个NFC设备背靠背贴近,此时发送数据的NFC设备会有“触摸即可发送”的提示,当用户点击屏幕时待传输数据即发送到另一个NFC设备[12]。为实现NFC移动设备与读卡器的P2P通信,Android Beam是必不可少的。
本文提出实现NFC移动终端与NFC读卡器之间P2P通信的方法。P2P通信的实现分成2个部分:移动终端发送数据到读卡器,读卡器发送数据到移动终端。
3.1 P2P通信客户端的实现
客户端的开发环境是Eclipse4.3.2,ADT22.0.1, Android4.0,jdk-7-windows-i586。测试用的NFC移动终端型号是Nexus 4,操作系统Android 4.4。
客户端主要用到的包有4个[13-14]:(1)android.nfc.NfcAdapter包,处理NFC操作的辅助类; (2)android.nfc.NfcEvent包,产生的事件对象通常作为其他方法的参数,比如适配器的参数;(3)android.nfc.NdefRecord包,产生NDEF记录;(4)android.nfc.NdefMessage,创建标准NDEF格式消息。
3.1.1 客户端数据发送
移动终端向读卡器发送的数据是NDEF格式消息,而一条NDEF消息是由若干NDEF记录组成的。以下是生成NDEF消息的部分代码:
为使NDEF格式消息正确发送需要实现2个接口:(1)CreateNdefMessageCallback实现接口,在主线程调用setNdefPushMessage Callback()方法,当NFC移动终端贴近读卡器,应用会自动创建一条NDEF消息。(2)OnNdefPushCompleteCallback实现接口,在主线程调用setOnNdefPushCompleteCall back()方法,可以监听NDEF消息是否发送成功,通常回调后的处理操作是在子线程中完成。
3.1.2 客户端数据接收
移动终端接收从读卡器发送来的消息时,客户端是通过Intent做媒介获取数据的,再通过解析Intent中的内容获得实际数据。由于SNEP协议数据交换只含有NDEF格式数据[8],因此intent filter中只定义对ACTION_NDEF_DISCOVERED类型的Intent感兴趣,并且可以将此类型的Action作为处理数据的判断条件。以下是处理接收数据的部分代码:
3.2 P2P通信服务器的实现
服务器的开发环境是jdk-7-windows-i586, Eclipse4.3.2。测试用读卡器型号是ACR122U。使用时,读卡器通过USB口连接PC端。
服务器主要用到的包:(1)javax.smartcardio.Card包,创建卡对象,以及通过该包获得卡对象的基本属性; (2)javax.smartcardio.CardChannel包,创建卡信道对象,使读卡器与智能卡建立连接;(3)javax.smartcardio.CardTerminal包,创建终端对象,在该包获得读卡器信息;(4)javax.smartcardio.CommandAPDU包,构建APDU命令;(5)javax.smartcardio.ResponseAPDU包,构建APDU响应[13-14]。
3.2.1 服务器数据发送
读卡器向移动终端发送消息是主动发送SNEP请求的过程。图3为读卡器发送消息的流程。当读卡器收到“发送”命令时,读卡器首先进行初始化,初始化内容包括读卡器模式、协议版本、超时参数等基本信息。读卡器发出SNEP请求后,当得到移动终端的“成功”响应后,读卡器发送实际消息。读卡器确认移动终端成功接收到消息后,中断与移动终端的连接。
图3 读卡器发送消息流程
3.2.2 服务器数据接收
移动终端向读卡器发送消息是读卡器被动接收SNEP请求的过程。图4为读卡器接收消息的流程。当读卡器收到“接收”命令时,读卡器首先进行初始化,初始化内容跟读卡器发送消息类似。由于此时发送SNEP请求的一方为移动终端,读卡器需在初始化后等待与移动终端的连接请求,若连接成功,读卡器将继续等待移动终端发送的SNEP请求。下一步,读卡器对接收到的内容做判断,若接收的内容长度大于5,则被认为是移动终端发送的实际消息。读卡器发出命令“请求已收到”,且读卡器在确认回复“成功”后,断开与移动终端的连接。
图4 读卡器接收消息流程
图5为读卡器向移动终端发送消息的过程。
图5 读卡器向移动终端发送消息的示意图
图5(a)为读卡器发送SNEP请求,触发了移动终端的Android Beam。由于此时是读卡器向移动终端发送数据,因此无需在移动终端进行“传递”操作,只需等待读卡器发送完消息。图5(b)为读卡器传递的实际内容。移动终端接收到的消息触发了定义的Action,然后将实际内容“Good Job!”从Intent中解析出来。
图6为移动终端向读卡器发送消息的过程。图6(a)为移动终端向读卡器发送SNEP请求触发了Android Beam。用户需要触摸屏幕传达“发送”命令,否则读卡器将因超时得不到移动终端发送的数据。图6(b)为读卡器成功接收消息并且向移动终端响应“成功”后,移动终端以Toast形式做出的提示信息。
图6 移动终端向读卡器发送消息的示意图
本文研究并实现了基于Android的NFC移动终端与NFC读卡器的P2P通信,从NFC数据交换格式NDEF、简单NDEF数据交换协议、应用协议数据单元、Android Beam 4个方面阐述了NFC P2P通信原理及方式,实现的移动终端与读卡器间的P2P通信,包括移动终端发送消息给读卡器、读卡器发送消息给移动终端2个功能。NFC技术作为新兴的通信方式与移动终端结合,在移动支付、门禁等领域有较大的应用价值。测试结果表明,移动终端与读卡器间的P2P通信,较好地实现消息在两者之间的收发、应答,为很多实际应用提供了新的依据。下一步将主要从P2P通信传输数据的安全性、便利性2个方面研究NFC设备P2P通信应用于移动支付领域的可行性及解决方案。
[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软件栈的研究与架构设计[J].电子科技大学学报,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卡读写器的设计与实现[J].无线电通信技术,2012,(5):50-52,70.
[11]吴毓书,张宝峰,张翀斌,等.基于APDU数据交换协议的安全U盘通信模型[J].清华大学学报:自然科学版,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标签的扫描应用研究[J].计算机光盘软件与应用,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)
何晨晖,郑紫微.近场通信设备间的P2P通信设计与实现[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
国家自然科学基金资助项目(60972063);国家科技重大专项基金资助项目(2011ZX03002-004-02);浙江省杰出青年科学基金资助项目(R1110416);教育部高等学校博士学科点专项科研基金资助项目(20113305110002);宁波市科技创新团队基金资助项目(2011B81002)。
何晨晖(1989-)女,硕士研究生,主研方向:无线移动通信;郑紫微,教授、博士生导师。
2014-04-16
:2014-05-12E-mail:hechenhuicn@foxmail.com