ISO7816——T1協議簡介

(轉自:https://blog.csdn.net/twphoenix/article/details/50517069)

之前說過的T=0協議基本上相當於是透明的數據,也就是說從應用的角度看,通過T=0傳遞的TPDU數據信息大都可以直接轉換爲對應的APDU命令響應數據,“字節”是T=0協議最小的數據傳輸單元。

對於T=1協議而言,最小的數據傳輸單元是“數據塊”,這個數據塊由若干個字節組成,其中有些字節是必須的,有些字節是可選的。每個數據塊最多可以包含多少個字節(也就是數據塊的大小)可以通過三種途徑確定:

1)ATR中對應協議T=1的專有接口字節指出;
2)使用默認的值;
3)在數據傳輸過程中協商。

一個數據塊其實就是一個“數據包”,其中包頭的3個字節(NAD1字節+ PCB1字節+ LEN1字節)和包尾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協議如出一轍,而且在檢測過程中,最容易出現軟件問題的地方也正是非接觸協議這部分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章