转自:http://bbs.ednchina.com/BLOG_ARTICLE_172025.HTM

(3)容错操作

先来看一下容错的规则定义。

* 复位应答后,第一个数据块是由终端发往IC卡的,而且只能是一个I块或S块。
   
   * 若终端不希望使用长度为32Byte的IFSD初始值,则应向IC卡发送一个S块(IFS请求),S块(IFS请求)的PCB应具有值CI以表明是一个改变IFSD的请求。INF域包含一个字节,其值表示在所要求的IFSD的字节数,取值为0x20-0xFE。IC卡应向终端回送一个S块(IFS响应),确认终端更改IFSD的大小,其中S块(
IFS响应)的PCB应为0xE1,INF域应具有与请求改变S块的INF域相同的值。

* 若IC卡希望改变在复位应答后制定的IFSC的大小,应向终端发送一个S块(IFS请求),S块(IFS请求)的PCB应具有值CI以表明是一个改变IFSD的请求。INF域包含一个字节,其值表示在所要求的IFSD的字节数,取值为0x10-0xFE。终端应向IC卡回送一个S块(IFS响应),确认终端更改IFSD的大小,其中S块(
IFS响应)的PCB应为0xE1,INF域应具有与请求改变S块的INF域相同的值。

* 若要改变节点地址,由终端发出的第一个SAD和DAD将被设定为整个卡片操作过程中要使用的值。若不采用节点地址,则将其设为零。

* 卡片操作过程中,只有满足以上定义的块才能相互传送。半双工块传输协议包含了终端和IC卡之间传送的情况。当发送方传送完一个完整的数据块后,就应切换到接收状态。

* 当接收方所收到的字符数与LEN和EDC的值一致时,接收方取得发送权。

* 若接收方需要确认由发送方传来的I块,则应在回送给发送方的I块序列号中指明。若使用链接,则在R块的序列号中指明(链接的最后一个数据块除外)。

* 若响应中收到的I块序列号与前一个已收到的I块序列号不同,发送方即可认为I块已被确认。若前面没有收到过I块,响应中的I块序列号应该是0。

* 在链接情况下,当响应中收到的R块的序列号与已确认的I块序列号不同时,发送方即可认为I块已被确认。

* 若IC卡需要比BWT长的时间来处理已收到的I块,则应发送一个等待时间扩展请求S块(WTX请求),其中之一的INF域包含有1Byte的二进制整数,其值为所请求的BWT值的倍数。终端应发送一个INF中具有相同值的等待时间扩展请求S块(WTX响应),以表示对延时请求的确认。取得的时间从S块(WTX响应)的最后一个字符的上升沿开始算起。

* S块总是配对使用的,一个S请求总是对应一个S响应块。

如果出现不满足以上定义的情况,则终端和IC卡将检测到错误。

(4)链接

当发送方需要传送的数据长度超过IFSC和IFSD所定义的字符数时,就要将其分成几个连续的I块。传送多个I块数据时,使用链接功能。

I块的链接由PCB的b6位编码定义。
    b6=0表示是块链的最后一块
    b6=1表示后面还有后续的数据块

由此可知,b6=1的任何一个I块都需要被一个R块确认。

如果接收正确,对应b6=0的链上的最后一个数据块会被一个I块确认。否则,就会被一个R块确认。

* 链接规则
  
    IC卡和TTL都支持链接,链接只能沿一个方向进行,其规则如下。

a.当终端是接收方时,只要来自IC卡的每个块的长度不大于IFSD字节,终端应能够接收一组链接的I块。

b.当终端是接收方时,如果IC卡发送的I块的长度大于IFSD,终端应通过发送一个R块来表示拒绝,R块的PCB的b1~b4位的值为2。

c.当IC卡为接收方时,只要来自终端的每个块的长度不大于IFSD字节,IC卡应能够接收一组链接的I块。

d.当IC卡是接收方时,如果终端发送的I块的长度大于IFSD,IC卡应通过发送一个R块来表示拒绝,R块的PCB的b1~b4位的值为2。

e.当IC卡是发送方时,IC卡应能发送每个块长度不大于IFSD字节的链接I块。

f.当终端是发送方时,终端应能发送每个块长度不大于IFSD字节的链接I块。

* 链接块的构造

C-APDU包含在I块的INF域中,并从TTL传送到IC卡。如果一个C-APDU因太长而不能放在一个数据块中时,可以通过如下的方法用几个链接块传送。

Block (1) 
             CLA  INS  P1  P2  LC  Data  Data 
    Block (2)- Block (n-1)
             Data   Data   Data 
    Block (n) 
             Data   Data   Data    LC

如果由 IC 卡回送的数据和状态码因太长而不能放在一个块中,可以按照下述方法通过几个I块来处理。

Block (1)- Block (n-1)
             Data   Data   Data 
    Block (n) 
             Data   Data   Data    SW1  SW2

示例只是针对命令一种情况,仅显示链接块的 INF 域。每个块还有一个头域和一个尾域。如果IC卡是发送方,全部链接块都应包含一个长度范围1到IFSD字节的INF域。如果终端是发送方,则包含一个长度范围1到IFSC字节的INF域。

2.5 T="1协议的错误检测与纠错"

TTL应能检测以下错误:

* 传输错误(非法的奇偶校验和EDC错误)或BWT超时; 
    * 同步失调(字符数目的超出或不足); 
    * 协议错误; 
    * 终止链接块请求。

按照下述方法进行错误恢复:

方法1:TTL以下列的次序按照下述技术方法进行纠错。

* 块的重发; 
    * 使IC卡触点处于静止状态。

方法2:IC卡以下列的次序按照下述技术方法进行纠错。

* 块的重发; 
    * 处于不响应状态。

错误处理和更正要满足如下规则。在任意一种情况下,当发送一个R块时,低半字节必须按照定义给定一个合适的值。

a.当IC卡在复位应答后接收到的第一个块无效时,就应回送一个R块给TTL,并置b5=0和NAD=0。

b.如果TTL发送的任何块在BWT时间内没有得到IC卡的响应,TTL将通过使IC卡的触点处于静止状态来结束卡片操作过程。

c.如果响应I块的无效块被收到,发送方应发送一个R块,其中的b5位设为期望I块的编号。

d. 如果响应R块的无效块被收到,发送方应重发R块。

e.如果响应 S 块(XX请求)的 S(XX响应)块没有收到,发送方应重发一个 S(XX请求)块。

f.如果响应 S(XX响应)块的应答中收到无效块,发送方应发出一个 R 块,b5 位设为下一个期望I块的编号。

g.如果TTL连续三次发送一个块,或IC卡连续两次发送一个块,而没有得到一个有效的响应,TTL将通过使IC卡的触点处于静止状态来结束卡片操作过程。如果对于某些终端需要支持同步,它可以在结束卡片操作过程前通过发送一个S块(再同步请求)从IC卡获得一个有效的响应S块(再请求响应)来实现同步。

h.在传输前,如接收方检测到传输不足或超出时,应等待一段时间(取 CWT 和BWT的最大值)。

i. IC卡最多连续三次发送一个S(IFS请求)块,以便从TTL上得到一个有效的S(IFS响应)块。三次尝试失败后,IC卡即进入接收状态。

j. TTL 一般主动发送一个 S(放弃请求)块。如果 TTL 从 IC 卡收到一个 S(放弃请求)块,TTL将通过使IC卡的触点处于静止状态来结束卡片操作过程。

特别注意,在具体的应用中,不一定要求终端和IC卡支持交易中止功能。如果终端或IC卡需要交易中止的话,可以通过发送一个S块(放弃请求)来进行,此时,如果接收方不支持交易中止功能的话,可能会收到一个无效的响应,但终端将仍然结束卡片的操作过程。

IC卡的传输协议(2)-块传输协议T=1续【转】的更多相关文章

  1. ISO7816协议的块传输协议

    1.块传输协议中的前三个字节是强制必须有的 NAD节点地址: 当终端支持多个卡槽,终端和这些卡槽以总线的方式通讯时,该字节有用,其他情况下,默认为0 bit1-3:定义了源地址 bit5-7:定义了目 ...

  2. IC卡的传输协议(2)-块传输协议T=1【转】

    转自:http://bbs.ednchina.com/BLOG_ARTICLE_172024.HTM 2.4 块传输协议T=1 T=1协议中,在TAL和IC卡之间传送的命令.R-APDU和传输控制信息 ...

  3. 智能IC卡与终端(读卡器)之间的传输协议

    1.有两种协议 T=0,异步半双工字符传输协议 T=1,异步半双工块传输协议 终端一般都支持这两种协议,IC卡可以选择支持其中的一种.(因为终端可能需要面对各种类型的卡片,所以必须两种协议都支持,而卡 ...

  4. IC卡的传输协议(3)【转】

    转自:http://bbs.ednchina.com/BLOG_ARTICLE_172027.HTM 3.终端传输层         本节描述了在终端和 IC 卡之间传输的命令和响应 APDU 的机制 ...

  5. IC卡的传输协议(1)-字符传输协议T=0【转】

    转自:http://bbs.ednchina.com/BLOG_ARTICLE_172022.HTM 在异步半双工传输协议中,主要定义了终端为实现传输控制和特殊需要发出的命令及这些命令的处理过程. 在 ...

  6. ISO14443-4块传输协议的实现

    ISO1444-3块传输协议主要用于应用数据的传输,其实现如下: unsigned char Apdu(unsigned char *comm,unsigned short len,unsigned ...

  7. Android网络编程系列 一 TCP/IP协议族之传输层

    这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 传输层中有TCP协议与UDP协议. 1.UDP介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,U ...

  8. HTTP协议之分块传输与分段编码

    目录 数据的分块传输 数据的分段编码(transfer-encoding) 前置知识:HTTP协议 数据的分块传输 我们都知道http协议是由TCP协议封装而来的应用层协议.我们和服务器之间的每次ht ...

  9. IP协议和网络传输中的封装与分用。

    关于七层模型和四层模型可以参考这个:http://www.cnblogs.com/xcywt/p/5027277.html 因为四层模型用的比较多,这里只拿四层模型来分析. 1.四层模型中的最下层是链 ...

随机推荐

  1. selenium 的安装使用

    直接pip安装 pip install selenium 默认是火狐浏览器,需要安装下面网址的软件,解压后加入到环境变量中就可以了 https://github.com/mozilla/geckodr ...

  2. NO8——排序

    //sort #include<algorithm> bool cmp(const int a,const int b) { return a>b;//降序排列 } //qsort ...

  3. http短连接大量time wait解决方案

    tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”,长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接 ...

  4. MD5消息摘要算法

    Message Digest 5(消息摘要算法)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护. MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩" ...

  5. could not read column value from result set:

    错误描述: INFO [http-apr-8080-exec-26] (NullableType.java:203) - could not read column value from result ...

  6. SpringBoot 入门学习(HelloWord)

    前置知识 1.会利用 maven 构建项目 2.了解 Spring 注解 3.了解 RESTful API 的基本理论 4.SpringBoot 是 SpringMVC 的升级版,但两者没有必然的联系 ...

  7. hihocoder 后缀自动机专题

    一.后缀自动机基本概念的理解 1.首先后缀自动机的状态是由子串的endpos来决定的 子串的endpos是指一个子串可以在原字符串的哪些位置进行匹配, endpos构成的不同集合划分成不同的状态 关于 ...

  8. 【题解】CQOI2017老C的键盘

    建议大家还是不要阅读此文了,因为我觉得这题我的解法实在是又不高效又不优美……只是想要记录一下,毕竟是除了中国象棋之外自己做出的组合dp第一题~ 首先如果做题做得多,比较熟练的话,应该能一眼看出这题所给 ...

  9. [洛谷P1892]团伙

    题目大意:有n个人,关系为:朋友的朋友是朋友,敌人的敌人是朋友.如果是朋友就在一个团队内,是敌人就不在,现在给出一关系,问最多有多少团伙.题解:并查集,建反集,如果是朋友,就把他们的并查集合并:如果是 ...

  10. [洛谷P2604][ZJOI2010]网络扩容

    题目大意:给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求: 1.在不扩容的情况下,1到N的最大流: 2.将1到N的最大流增加K所需的最小费用. 题解 ...