深入理解7816(4)---关于T=1
之前说过的T=0协议,基本上相当于是透明的数据,也就是说从应用的角度看,通过T=0传递的TPDU数据信息大都可以直接转换为对应的APD命令响应数据,“字节”是T=0协议最小的数据传输单元。
对于T=1协议而言,最小的数据传输单元是“数据块”,这个数据块由若干个字节组成,其中有些字节是必须的,有些字节是可选的。每个数据块最多可以包含多少个字节(也就是数据块的大小)可以通过三种途径确定:
1)ATR中对应协议T=1的专有接口字节指出;
2)使用默认的值;
3)在数据传输过程中协商。
一个数据块其实就是一个“数据包”,其中包头的3个字节(NAD 1字节 + PCB 1字节 + LEN 1字节)和包尾1个或者2个字节(如果采用LRC校验就是 1字节,采用CRC校验就是 2字节)是必须的,中间的信息数据域INF则是可选的。其中NAD代表节点地址,基本不用,可以设置为“00”;PCB代表协议控制字节,用来指明数据块的类型(分为:传递信息域数据的I-块,应答响应的R-块,负责通讯参数协商的S-块)、序列号、是否存在后续的链接块、是否有校验错误、额外超时等待请求、信息数据域大小的协商等。
和T=0协议最明显的不同是,T=1协议按照OSI的参考模型进行了分层,分别是:物理层、数据链路层和应用层。物理层主要是数据字符的传输,数据链路层主要是数据块的传输,而应用层主要是APDU的交互传输。APDU的交互与数据字符的传输,这些和T=0协议里面描述的大体相同,关键的就是数据链路层定义的数据块传输。因为这个数据链路层的定义,使得T=1协议基本具备了可以实现复杂网络数据传输的全部特征,相比而言T=0协议简直就等同于“裸传”了。
数据链路层主要进行的是3类数据块的交互传输,基本的原则是:第一个数据块一定是从终端发给卡片的I-块或者S-块;I-块可以用R-块或者I-块来应答,而S-块的请求只能用S-块的响应来应答;I块和R-块会包含有“0”和“1”的序列号,序列号的初始值为“0”,重新同步之后也是再次从“0”开始,之后在“0”和“1”之间交替切换;如果一条应用数据大于数据块信息域的最大长度,则需要分割为若干个链接的数据块来传输;和T=0协议卡片发送“0x60”类似,如果卡片需要较长时间进行命令处理,可以用延长等待时间的WTX请求S-块让终端继续等待;一旦传输过程中出现错误,可以通过数据块重发、重新同步、卡片复位等动作来进行纠错。
对于各种正常和异常数据传输的处理,7816定义了若干的规则(rules)明确而详细地说明了终端和卡片在数据块传输过程中应该遵循的流程。
在实际应用中,接触式卡片遵循7816 T=1协议的不是很多,但是非接触的14443 T=CL协议,在数据传输方面和7816的T=1协议如出一辙,而且在检测过程中,最容易出现软件问题的地方也正是非接触协议这部分。
深入理解7816(4)---关于T=1的更多相关文章
- 深入理解7816(3)-----关于T=0 【转】
本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0102vcyp.html 深入理解7816(3)-----关于T=0 卡片和终端之间的数据传输是通过命令响应 ...
- 深入理解7816(1)---- 关于F/D和etu【转】
本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0101gkss.html 深入理解7816(1)---- 关于F/D和etu 对于刚接触智能卡的工程师来说, ...
- 深入理解7816(2)---关于ATR【转】
本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0102vcrk.html 深入理解7816(2)---关于ATR 智能卡(此处主要指接触式CPU卡)本身始终 ...
- 深入理解7816(3)-----关于T=0
卡片和终端之间的数据传输是通过命令响应的方式进行的,卡片只能被动地接收命令,并且给出响应.所有的命令都是以命令头开始,而该命令被完整地执行后(无论结果对错),必须以包含状态字(SW1 SW2)的响应结 ...
- 深入理解7816(1)---- 关于F/D和etu
对于刚接触智能卡的工程师来说,在阅读7816-3规范的时候,常常被其中的一些术语迷惑,读起来会觉得有些别扭.尤其是在看到复位应答中的F和D设置,以及对应的etu的时候,会觉得有些复杂和难以理解. 其实 ...
- 深入理解7816(5)-----关于文件DF/EF/MF/FID/AID/SFI
刚开始接触CPU卡的时候,对于各种文件.应用的定义容易模糊不清,通常不能准确地界定什么是文件?什么是应用?DF和EF的区别真的就像计算机里的目录和文档那样吗?FID.AID.SFI这些概念都在什么时候 ...
- 深入理解7816(2)---关于ATR
智能卡(此处主要指接触式CPU卡)本身始终处于被动的状态,所以终端设备在和智能卡进行数据交互的时候,需要首先给智能卡发指令,智能卡才会对应地给出应答.而智能卡告诉终端的第一句话就是ATR,亦即“复位应 ...
- 理解CSS视觉格式化
前面的话 CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应 ...
- 彻底理解AC多模式匹配算法
(本文尤其适合遍览网上的讲解而仍百思不得姐的同学) 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移.根节点状态记为0状态,表示起 ...
随机推荐
- JavaScript方法undefined/null原因探究及闭包简单实现
昨天一个刚写前端不久的同学发消息问这个问题(如下图): HTML代码为(省略部分代码): <head> <script src="test.js">< ...
- 2015.9.11模拟赛 codevs 4159【hzwer的迷の数列】
题目描述 Description hzwer找了一个人畜无害的迷の数列…… 现在hzwer希望对这个数列进行一些操作,请你来回答hzwer的问题. 操作一:查询第i个数的大小 操作二:把第i个数的大小 ...
- 《深度解析SDN》学习小结
SDN(软件定义网络),顾名思义,通过软件来控制或驱动整个网络.SDN的核心概念有两个,第一是转发面与控制面的分离:第二是开放的可编程接口.另外,SDN强调集中式控制,通过软件来控制整个网络,但这并不 ...
- JSP入门:介绍什么是JSP和Servlet(转)
转自:http://developer.51cto.com/art/200907/134506.htm JSP入门:什么是jsp? JSP(Java Server Pages)是由Sun Micros ...
- PHP各版本之间差异
PHP5.3 __toString 魔术方法不再接受参数. 魔术方法 __get, __set, __isset, __unset, and __call 应该总是公共的(public)且不能是静态的 ...
- Javascript:数组和字符串的相互转化
中午吃饭的时候,和室友讨论前端的问题,然后一个有趣的问题被抛出来: javascript用什么方法可以把“hello world”位置反转输出,即输出:"dlrow olleh"? ...
- MySQL 二进制日志(Binary Log)
同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分. MySQL有几种不同的日志文件.通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志能够帮助我们定位mysqld ...
- xss漏洞校验
Xss(跨站脚本攻击)大家应该已经都有所了解,下面讲讲怎样查找xss漏洞吧. 确定xss漏洞的基本方法是使用攻击字符串来验证的,例如”><script>alert(document. ...
- Android设置里面默认存储器选项(default write disk)的实现
原生的Android设置里面没有默认存储器的选项,可是MTK偏偏加上了这个功能,可能MTK认为这个比較实用吧,所以,他们在原生的基础上面做了改动.加上了这个功能.可是高通平台没有这个功能.相对MTK来 ...
- 高性能Java Web 页面静态化技术
package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache ...