본문 바로가기
Wireless Network/NFC

NDEF - Well-known type - URI

by 개Foot/Dog발?! 2014. 9. 21.

URL : http://blog.startnfc.com/entry/NDEF-WKT-U


.....


URI, URL, URN

URI (Uniform Resource Indicator)는 URL(Uniform Resource Locator)과 URN(Uniform Resource Name)을 모두 포함해서 이르는 말입니다. URL은 다들 알고 있는 것 처럼, 인터넷 상의 특정 리소스를 가리키는 주소입니다. 몇 개를 예로 들면 이렇습니다.


.....


URL은 이렇게 'http', 'ftp' 등의 프로토콜과 서버 주소, 그리고 리소스 파일 위치 등으로 구성됩니다. 'mailto'나 'tel' 처럼, 경우에 따라 서버 주소가 필요없는 경우도 있습니다.


URN은 인터넷 상의 리소스에 대한 ID를 나타냅니다. URN은 'urn:'으로 시작하는데, 예를 들면 아래와 같습니다.


urn:isbn:8964200391 : '자바 프로그래밍 언어' 책의 ISBN

urn:ietf:rfc:2648 : RFC 2648

예를 들어 '자바 프로그래밍 언어' 책에 대한 URN은 하나 이지만, URL은 여러 개일 수 있습니다. '예스24'에도 있고, '인터파크 도서'에도 있고. 이것이 URL과 URN의 차이입니다.


WKT U(Well-known Type URI)

예를 들어 http://blog.startnfc.com 을 NDEF 레코드로 만들어보겠습니다. URI는 NFC Forum Well-known type (줄여서 WKT) TNF를 사용해서 나타낼 수 있습니다. 'NDEF' 포스트에서 설명했듯이, 페이로드 ID를 사용하지 않는다고 하면, NDEF 레코드의 형식은 아래와 같습니다. 


(레코드 헤더) (타입 길이) (페이로드 길이) (타입) (페이로드) 


WKT의 TNF는 1이고, 페이로드가 255byte보다는 작을 것이므로 SR=1 로 하면, 레코드 헤더는 아래와 같이 0xD1이 됩니다.


 MB

 ME

 CF

 SR

 IL

 TNF

 

 1

001 

0xD1 


타입은 WKT 규격에서 "U" 로 정해져 있습니다. 타입은 대소문자를 구분하고, 여기서는 대문자 U 입니다. 이것의 아스키 코드 값은 0x55 입니다. 타입이 1byte이므로, 타입 길이는 1 입니다. 여기까지 보면, NDEF 레코드는 아래와 같이 됩니다.


0xD1 0x01 (페이로드 길이) 0x55 (페이로드)


WKT U 타입의 페이로드는 1바이트의 ID 코드로 시작합니다. 이 ID 코드는 URI의 앞부분을 코드화 시킨 것인데, 예를들어 'http://'는 코드 값이 0x03입니다. 그리고 뒤에  'http://'를 제외한 나머지, 즉 'blog.startnfc.com' 을 붙입니다. 그래서 페이로드는 아래와 같이 됩니다.



 ID코드

 blog.startnfc.com

 0x03

 62 6C 6F 67 2E 73 74 61 72 74 6E 66 63 2E 63 6F 6D


이렇게 ID코드를 만든 이유는 URI의 길이를 줄이기 위한 것입니다. 

실제로 'http://blog.startnfc.com'을 그대로 쓰면 24바이트 이지만, 이렇게 NDEF 레코드 페이로드로 만들면 18바이트가 됩니다. ID 코드의 값은 규격에서 아래와 같이 정의되어 있습니다


10진수

16진수

설명

0

0x00 

 ID코드를 사용하지 않는 경우.

1

0x01

 http://www.

2

0x02

 https://www.

3

0x03

 http://

4

0x04

 https://

5

0x05

 tel:

6

0x06

 mailto:

7

0x07

 ftp://anonymous:anonymous@

8

0x08

 ftp://ftp.

9

0x09

 ftps://

10

0x0A

 sftp://

11

0x0B

 smb://

12

0x0C

 nfs://

13

0x0D

 ftp://

14

0x0E

 dav://

15

0x0F

 news:

16

0x10

 telnet://

17

0x11

 imap:

18

0x12

 rtsp://

19

0x13

 urn:

20

0x14

 pop:

21

0x15

 sip:

22

0x16

 sips:

23

0x17

 tftp:

24

0x18

 btspp://

25

0x19

 btl2cap://

26

0x1A

 btgoep://

27

0x1B

 tcpobex://

28

0x1C

 irdaobex://

29

0x1D

 file://

30

0x1E

 urn:epc:id:

 31

0x1F

 urn:epc:tag:

32

0x20

 urn:epc:pat:

33

 0x21

 urn:epc:raw:

34

0x22

 urn:epc:

35

0x23

 urn:nfc:

 36

 0x24

 urn:ucode:

 37 ~ 255

0x25 ~ 0xFF

 RFU (나중을 위해 예약되었음)

** 현재(20140921) ID 코드 최근 스펙 문서 : http://members.nfc-forum.org/apps/group_public/download.php/10949/NFCForum-TS-RTD_URI_1.0_Updated%20URI%20Identifier%20Code.doc 

구글에서 URI Identifier Code site:nfc-forum.org 라고 검색하거나 NFC forum(http://www.nfc-forum.org/)에서 해당 문서 검색하면 된다


ID코드 0x00 값은 ID코드를 사용하지 않음을 의미합니다. 따라서 'http://blog.startnfc.com'의 페이로드는 아래와 같이 나타낼 수도 있습니다.

ID코드

http://blog.startnfc.com

0x00

(16진수) 68 74 74 70 3A 2F 2F 62 6C 6F 67 2E 73 74 61 72 74 6E 66 63 2E 63 6F 6D

하지만 페이로드 크기가 25바이트로 커지기만 할 뿐, 얻을 수 있는 장점이 없습니다. 이렇게 할 이유가 전혀 없습니다. 그래서 ID 코드를 0x03 으로 사용하는 것으로 하면, NDEF 레코드는 아래와 같이 됩니다.

D1 01 12 55 03 62 6C 6F 67 2E 73 74 61 72 74 6E 66 63 2E 63 6F 6D


.....


'Wireless Network > NFC' 카테고리의 다른 글

NFC & RFID on Android  (0) 2014.09.26
NFC (Near Field Communication)  (0) 2014.09.23
NFC Forum Assigned Numbers Register  (0) 2014.09.21
NDEF NFC Forum Spec  (0) 2014.09.21
NDEF (NFC Data Exchange Format)  (0) 2014.09.20