NFC 的协议叫做 NCI(NFC Controller Interface),是无线通信的一个协议,既然是无线通信的协议,可以套用 OSI分层协议描绘的认知模型来理解。

OSI分层协议

android nfc不同协议解析 nfc协议分几种_android nfc不同协议解析

应用层:网络操作系统和具体应用程序
表示层:数据语法的转换、数据的传送
会话层:建起两端之间的会话关系,并负责数据的传送
传输层:负责错误的检查与修复,以确保传送的质量 TCP(报文)
网络层:提供了编制方案 IP(数据包)
数据链路层:物理层传来的未经处理的位数据包装成帧数据
物理层:网线 网卡 接口等物理设备

将 NFC 的 NCI 协议往 OSI7层协议上面一套,NFC的三种使用场景对应技术如下:

android nfc不同协议解析 nfc协议分几种_nfc_02

三种使用场景下的协议

卡模拟

可以看到 4、5、6 都没有涉及,7也为各种支付方式自己实现。

所以在卡模拟的情况下,在物理层(射频、耦合),数字链路层,网络层 之上,就是各个应用(比如 paypass、paywave)的实现。

android nfc不同协议解析 nfc协议分几种_android nfc不同协议解析_03

读卡器

这个读写模式,涉及到了 OSI 中的每一层。

android nfc不同协议解析 nfc协议分几种_数据_04

点对点

这个双向模式也是 OSI 中的每一层都涉及了。

NFC技术上使用了 基于 ISO 18092 的 NFC-DEP,有别于其他的 LLCP,SNEP。

在会话层的 NDEF 部分是读写模式 与 点对点 都有用到。

android nfc不同协议解析 nfc协议分几种_OSI_05

LLCP: (logical link control protocol,逻辑链路控制协议)基于IEEE 802.2的规范。某种程度上依然算是层2实现的紧凑协议。初衷是可以更好的支持小应用的有限数据传输,所以应用必须要小,单位时间传输的数据量非常小。另外LLCP的涉及也是为了支持一些网络协议如OBEX,TCP/IP啥的。

SNEP: (Simple NDEF exchange protocol)专门为P2P设计的,就是为了P2P 的时候使用NDEF交换信息。

另外提一下,读写模式上 NFC 使用的是 ISO-DEP(基于ISO 14443),P2P使用的是NFC-DEP(基于 ISO 18092)。

补充

关于 ISO 14443 和 ISO 18092 协议

ISO14443分为4部分,硬件主要了解前两部分,软件和应用开发则需要了解后两部分ISO14443-3和ISO14443-4。
ISO14443-1定义了IC卡的物理特性。
ISO14443-2定义了频率、射频能量、编码等内容。
ISO14443-3定义了TypeA/TypeB的初始化和防冲突机制。其中Mifare 1就只到这一层。
ISO14443-4定义了卡片的数据传输协议。

ISO 18092 是为NFC制定的协议,其中介绍了 P2P 通讯中的 Active 模式和 Assive 通信模式。实际上其中包含了 14443 协议和非国际标准的 Felica 通讯协议。