blob: 52e5b676e3619a559bc3310c17704bb6110a2f4b [file] [log] [blame]
Alexander Afanasyeve2800232013-11-27 02:24:14 +00001.. _Name:
Alexander Afanasyeveee8c252013-11-21 23:22:41 +00002
3Name
4----
5
Alexander Afanasyev1ac33462014-03-14 15:27:07 -07006An NDN Name is a hierarchical name for NDN content, which contains a sequence of name components.
Alexander Afanasyeveee8c252013-11-21 23:22:41 +00007
8NDN Name Format
9~~~~~~~~~~~~~~~
10
11We use a 2-level nested TLV to represent a name.
12The Type in the outer TLV indicates this is a Name.
Alexander Afanasyev7feb49c2014-03-14 17:06:58 -070013All inner TLVs have Type either NameComponent, NumberComponent, or ImplicitSha256DigestComponent, indicating that the name component is a generic name component, number, or implicit digest.
14There is no restriction on the Value field in a name component, but empty value is not allowed:
Alexander Afanasyeve2800232013-11-27 02:24:14 +000015
16::
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000017
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070018 Name ::= NAME-TYPE TLV-LENGTH
19 (NameComponent | NumberComponent | ImplicitSha256DigestComponent)*
20
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000021 NameComponent ::= NAME-COMPONENT-TYPE TLV-LENGTH BYTE+
22
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070023 NumberComponent ::= NUMBER-COMPONENT-TYPE TLV-LENGTH
24 nonNegativeInteger
25
26 ImplicitSha256DigestComponent ::= IMPLICIT-SHA256-DIGEST-COMPONENT TLV-LENGTH(=32)
27 BYTE{32}
28
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000029.. % 0 or many name components in name
30.. % 0 or many bytes in name component
31
32
Alexander Afanasyev7feb49c2014-03-14 17:06:58 -070033``NameComponent`` is a generic name component, containing any application defined value.
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070034
Alexander Afanasyev7feb49c2014-03-14 17:06:58 -070035``NumberComponent`` is a component that carries a non-negative integer.
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070036
37``ImplicitSha256DigestComponent`` is an implicit SHA256 digest component.
38
39
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000040NDN URI Scheme
41~~~~~~~~~~~~~~
42
43For textual representation, it is often convenient to use URI to represent NDN names.
44Please refer to RFC 3986 (URI Generic Syntax) for background.
45
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070046- The scheme identifier is ``ndn``.
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000047
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070048- Component types have the following URI representations:
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000049
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070050 * ``NameComponent``
51
52 When producing a URI from an NDN Name, only the generic URI unreserved characters are left unescaped.
53 These are the US-ASCII upper and lower case letters (A-Z, a-z), digits (0-9), and the four specials PLUS (+), PERIOD (.), UNDERSCORE (\_), and HYPHEN (-).
Alexander Afanasyev7feb49c2014-03-14 17:06:58 -070054 All other characters are escaped using either the percent-encoding method of the URI Generic Syntax.
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070055
Alexander Afanasyev7feb49c2014-03-14 17:06:58 -070056 To unambiguously represent name components that would collide with the use of . and .. for relative URIs, any component that consists solely of one or more periods is encoded using three additional periods.
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070057
58 * ``NumberComponent``
59
Alexander Afanasyev7feb49c2014-03-14 17:06:58 -070060 Number components start with ``number=`` prefix (case sensitive), following with textual representation of the number.
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070061 For example, ``number=10`` represents a NumberComponent with encoded value of 10.
Alexander Afanasyev7feb49c2014-03-14 17:06:58 -070062 The number must be decimal and should be without leading zeros.
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070063
64 * ``ImplicitSha256DigestComponent``
65
Alexander Afanasyev7feb49c2014-03-14 17:06:58 -070066 Implicit SHA256 digest component starts with ``sha256digest=`` prefix (case sensitive), following the digest represented as a sequence of 32 hexadecimal numbers.
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070067 For example, ``sha256digest=893259d98aca58c451453f29ec7dc38688e690dd0b59ef4f3b9d33738bff0b8d``
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000068
69- The authority component (the part after the initial ``//`` in the familiar http and ftp URI schemes) is not relevant to NDN.
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070070 It should not be present, and it is ignored if it is present.
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000071
72Implicit Digest Component
73~~~~~~~~~~~~~~~~~~~~~~~~~
74
75The Name of every piece of content includes as its final component a derived digest that ultimately makes the name unique.
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070076This digest may occur in an Interest Name as an ``ImplicitSha256DigestComponent`` and MUST appear as the last component in the name.
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000077This final component in the name is never included explicitly in the Data packet when it is transmitted on the wire.
78It can be computed by any node based on the Data packet content.
79
80The **implicit digest component** consists of the SHA-256 digest of the entire Data packet without the signature component. Having this digest as the last name component enables us to achieve the following two goals:
81
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070082- Identify one specific Data packet and no other.
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000083
84- Exclude a specific Data packet in an Interest (independent from whether it has a valid signature).
85
86Canonical Order
87~~~~~~~~~~~~~~~
88
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070089In several contexts in NDN packet processing, it is useful to have a consistent ordering of names and name components.
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000090
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070091The order between individual name components is defined as follows:
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000092
Alexander Afanasyev7feb49c2014-03-14 17:06:58 -070093- Any ``ImplicitSha256DigestComponent`` is less than any ``NumberComponent``, which is less than any ``NameComponent``
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000094
Alexander Afanasyev1ac33462014-03-14 15:27:07 -070095::
96
97 ImplicitSha256DigestComponent < NumberComponent < NameComponent
98
99- The order for the same type components is such that:
100
101 * If *a* is shorter than *b* (i.e., has fewer bytes), then *a* comes before *b*.
102
103 * If *a* and *b* have the same length, then they are compared in ASCII lexicographic order (e.g., ordering based on memcmp() operation.)
Alexander Afanasyeveee8c252013-11-21 23:22:41 +0000104
105For Names, the ordering is just based on the ordering of the first component where they differ.
106If one name is a proper prefix of the other, then it comes first.
107
Alexander Afanasyev1ac33462014-03-14 15:27:07 -0700108..
109 While the above defines generic order of any NDN names, :ref:`Interest selector <Selectors>` ``ChildSelector`` does not take into account the implicit digest componen, unless all other components are equal.
110
111
Alexander Afanasyeveee8c252013-11-21 23:22:41 +0000112Changes from CCNx
113~~~~~~~~~~~~~~~~~
114
115- The name encoding is changed from binary XML to TLV format.
116
117- The discussions on naming conventions and the use of special markers inside NameComponents are removed from packet specification, and will be covered by a separate technical document
118
119.. (\cite{NamingConvention}).
120
121- Deprecated zero-length name component.
Alexander Afanasyev1ac33462014-03-14 15:27:07 -0700122
123- Number and implicit digest use dedicate TLV types