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 |
1 |
0 |
1 |
0 |
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 |