The NDN Data packet is a TLV defined as follows:
Data = DATA-TYPE TLV-LENGTH Name [MetaInfo] [Content] DataSignature
The Data packet represents some arbitrary binary data (held in the optional :ref:`Content` element) together with its Name
, some additional bits of optional information (:ref:`MetaInfo`), and a digital signature (:ref:`DataSignature <DataSignature>`).
As recommended by the :ref:`TLV evolvability guidelines <evolvability>`, unrecognized non-critical TLV elements may appear in a Data packet.
However, they must not appear before the Name
element.
See :ref:`Name`.
MetaInfo = META-INFO-TYPE TLV-LENGTH [ContentType] [FreshnessPeriod] [FinalBlockId]
ContentType = CONTENT-TYPE-TYPE TLV-LENGTH NonNegativeInteger
The following ContentTypes are currently defined:
ContentType | Assigned number | Description of the content |
---|---|---|
BLOB | 0 | payload identified by the data name; this is the default ContentType |
LINK | 1 | list of delegations (see :ref:`Link`) |
KEY | 2 | public key (see :ref:`Certificate`) |
NACK | 3 | application-level NACK |
Other ContentType numbers are assigned and maintained in the NDN Packet Specification Wiki.
FreshnessPeriod = FRESHNESS-PERIOD-TYPE TLV-LENGTH NonNegativeInteger
The optional FreshnessPeriod
indicates how long a node should wait after the arrival of this data before marking it "non-fresh".
The encoded value is number of milliseconds.
Note that the "non-fresh" data is still valid data; the expiration of FreshnessPeriod
only means that the producer may have produced newer data.
If the Data packet carries a FreshnessPeriod
greater than zero, a node should initially consider it "fresh". After the Data has resided in the node for FreshnessPeriod
milliseconds, it will be marked as "non-fresh".
If the Data does not have a FreshnessPeriod
or if it has a FreshnessPeriod
equal to zero, it MUST be marked "non-fresh" immediately after processing any pending Interests.
If an Interest contains MustBeFresh
element, a content store MUST NOT return "non-fresh" Data in response to this Interest.
The effect is the same as if that "non-fresh" Data did not exist (i.e., the Interest might be matched by some other Data in the content store, or, failing that, get forwarded to other nodes).
When an exact duplicate of the "non-fresh" Data packet with a positive FreshnessPeriod
value arrives at the node, the node SHOULD re-mark it as "fresh" for the specified duration.
FinalBlockId = FINAL-BLOCK-ID-TYPE TLV-LENGTH NameComponent
The optional FinalBlockId identifies the final block in a sequence of fragments. It should be present in the final block itself, and may also be present in other fragments to provide advanced warning of the end to consumers. The value here should be equal to the last explicit name component of the final block.
Content = CONTENT-TYPE TLV-LENGTH *OCTET
The Content
element can carry any arbitrary sequence of bytes.
See :ref:`DataSignature`.