blob: ac887812d0d7aa6e50701e563b7baaf94fe99658 [file] [log] [blame]
Alexander Afanasyeve2800232013-11-27 02:24:14 +00001.. _Name:
Alexander Afanasyeveee8c252013-11-21 23:22:41 +00002
3Name
4----
5
Alexander Afanasyev406749e2014-03-27 18:45:26 -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.
13All inner TLVs have the same Type indicating that they each contain a name component.
Junxiao Shia0d36822014-09-21 11:32:09 -070014There is no restriction on the Value field in a name component and it may contain any byte sequence.
Alexander Afanasyeve2800232013-11-27 02:24:14 +000015
16::
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000017
18 Name ::= NAME-TYPE TLV-LENGTH NameComponent*
Junxiao Shia0d36822014-09-21 11:32:09 -070019 NameComponent ::= NAME-COMPONENT-TYPE TLV-LENGTH BYTE*
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000020
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000021
22NDN URI Scheme
23~~~~~~~~~~~~~~
24
25For textual representation, it is often convenient to use URI to represent NDN names.
26Please refer to RFC 3986 (URI Generic Syntax) for background.
27
Alexander Afanasyev406749e2014-03-27 18:45:26 -070028- The scheme identifier is ``ndn``.
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000029
Alexander Afanasyev406749e2014-03-27 18:45:26 -070030- When producing a URI from an NDN Name, only the generic URI unreserved characters are left unescaped.
31 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 (-).
32 All other characters are escaped using the percent-encoding method of the URI Generic Syntax.
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000033
Junxiao Shia0d36822014-09-21 11:32:09 -070034- To unambiguously represent name components that would collide with the use of . and .. for relative URIs, any component that consists solely of zero or more periods is encoded using three additional periods.
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000035
36- The authority component (the part after the initial ``//`` in the familiar http and ftp URI schemes) is not relevant to NDN.
Alexander Afanasyev406749e2014-03-27 18:45:26 -070037 It should not be present, and it is ignored if it is present.
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000038
39Implicit Digest Component
40~~~~~~~~~~~~~~~~~~~~~~~~~
41
42The Name of every piece of content includes as its final component a derived digest that ultimately makes the name unique.
43This digest may occur in an Interest Name as an ordinary Component (the last one in the name).
44This final component in the name is never included explicitly in the Data packet when it is transmitted on the wire.
45It can be computed by any node based on the Data packet content.
46
47The **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:
48
Alexander Afanasyev406749e2014-03-27 18:45:26 -070049- Identify one specific Data packet and no other.
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000050
51- Exclude a specific Data packet in an Interest (independent from whether it has a valid signature).
52
53Canonical Order
54~~~~~~~~~~~~~~~
55
Junxiao Shia0d36822014-09-21 11:32:09 -070056In several contexts in NDN packet processing, it is useful to have a consistent ordering of names and name components. NDN names consist of a sequence of NameComponents, and each NameComponent is a sequence of zero or more 8-bit bytes. The ordering for components is such that:
Alexander Afanasyeveee8c252013-11-21 23:22:41 +000057
58- If *a* is shorter than *b* (i.e., has fewer bytes), then *a* comes before *b*.
59
60- If *a* and *b* have the same length, then they are compared in ASCII lexicographic order (e.g., ordering based on memcmp() operation.)
61
62
63For Names, the ordering is just based on the ordering of the first component where they differ.
64If one name is a proper prefix of the other, then it comes first.