Internet DRAFT - draft-mosko-icnrg-ccnxfragmentation
draft-mosko-icnrg-ccnxfragmentation
ICNRG M. Mosko
Internet-Draft PARC, Inc.
Intended status: Experimental July 1, 2015
Expires: January 2, 2016
CCNx End-To-End Fragmentation
draft-mosko-icnrg-ccnxfragmentation-01
Abstract
This document specifies an end to-end fragmentation protocol for
breaking a Content Object into several smaller pieces in order to fit
within a network MTU. The fragmentation protocol does not provide a
secure binding of the fragments to the original object. This is left
to the receiving endpoint. Midpoints may only serve fragments from
their cache if they have assembled and verified the complete Content
Object.
Status of this Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 2, 2016.
Copyright Notice
Copyright (c) 2015 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
Mosko Expires January 2, 2016 [Page 1]
Internet-Draft CCNx TLV July 2015
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3
2. Protocol Description . . . . . . . . . . . . . . . . . . . . . 4
2.1. Interest Fragmentation . . . . . . . . . . . . . . . . . . 5
2.2. Content Object Fragmentation . . . . . . . . . . . . . . . 6
3. Packet Formats . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1. Interest Header . . . . . . . . . . . . . . . . . . . . . 7
3.2. Content Object Header . . . . . . . . . . . . . . . . . . 8
4. Cache Considerations . . . . . . . . . . . . . . . . . . . . . 9
5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 10
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11
7. Security Considerations . . . . . . . . . . . . . . . . . . . 12
8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 13
8.1. Normative References . . . . . . . . . . . . . . . . . . . 13
8.2. Informative References . . . . . . . . . . . . . . . . . . 13
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 14
Mosko Expires January 2, 2016 [Page 2]
Internet-Draft CCNx TLV July 2015
1. Introduction
This document specifies an end-to-end fragmentation protocol for
breaking a Content Object into several smaller pieces in order to fit
within a network MTU. The fragmentation protocol does not provide a
secure binding of the fragments to the original object. This is left
to the receiving endpoint. Midpoints may only serve fragments from
cache if they have assembled and verified the complete Content
Object.
Packets are represented as 32-bit wide words using ASCII art.
Because of the TLV encoding and optional fields or sizes, there is no
concise way to represent all possibilities. We use the convention
that ASCII art fields enclosed by vertical bars "|" represent exact
bit widths. Fields with a forward slash "/" are variable bitwidths,
which we typically pad out to word alignment for picture readability.
TODO -- we have not adopted the Requirements Language yet.
1.1. Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119].
Mosko Expires January 2, 2016 [Page 3]
Internet-Draft CCNx TLV July 2015
2. Protocol Description
The principle of operation for fragmentation in CCNx 1.0 is that
intermediate systems should not have to fragment packets. An
Interest message is always fragmented to the minimum MTU size and the
forward path's MTU size is recorded in the Interest message so that a
system sending back a Content Object can fragment it to the the
correct size for the path. An intermediate system's Content Store
may store only pre-fragmented objects and respond only if those
fragments satisfy the requirements of an Interest's MTU, otherwise it
will be considered a cache miss.
Because the Interest is the path discovery mechanism for Content
Objects, all Interests MUST carry an InterestFragmentationHeader that
includes information about the forward path's MTU so the reverse path
MTU may be known at the node responding with a Content Object.
The minimum MTU required is 1280 octets. Any system implementing a
physical layer with a smaller MTU must implement link fragmentation,
for example using a PPP layer over the small MTU network.
Systems MUST create fragment streams in the most compressed packing.
That is, all fragments except the last MUST be fragmented to the same
size. This means that all Interests are fragmented to 1280 bytes
except the last fragment. A Content Object may be fragmented to any
size no more than the path MTU discovered, but all fragments except
the last MUST be the same size. This ensures that any two fragment
streams of the same Content Object with the same MTU have the same
representation.
When an end system creates a fragment stream, it generates a 64-bit
number for the FragmentStreamID. This number identifies a contiguous
stream of fragments and allows an end system to use the
FragmentStreamID for reassembly. An intermediate system uses the
FragmentStreamID of a Content Object to ensure that only one stream
of Content Object fragments follow a reverse PIT entry.
A system SHOULD use a random number for an Interest's
FragmentStreamID. This avoids easy denial-of-service attacks by
replying with junk for known fragment stream IDs. A fragmented
Content Object carries both its own FragmentStreamID, which SHOULD be
based on the ContentObjectHash, and the corresponding Interest
FragmentStreamID to facilitate matching on the reverse PIT path.
If the Maximum Path MTU of a Content Object fragment is larger than
the supported MTU on an egress interface, the fragment stream should
be dropped on that interface, even if some of the fragments fit
within the MTU.
Mosko Expires January 2, 2016 [Page 4]
Internet-Draft CCNx TLV July 2015
Fragments are identified by a serial counter FragNum, which ranges
from 0 - 63. Forwarders and end systems should drop duplicate
fragments, identified by the tuple {FragmentID, FragNum}.
If all fragments are not received within a system-dependent timeout,
a system re-assembling fragments should timeout. If the re-assembly
of an Interest times out before the PIT entry, the PIT entry on the
local system should be removed to allow a new fragment stream to
arrive. If the re-assembly of a Content Object times out, the
received fragments bitmask of the PIT should be cleared to allow a
new stream of Content Objects to arrive.
2.1. Interest Fragmentation
If an Interest does not fit with 1280 bytes, then it must be
fragmented to fit within 1280 bytes. There is no path MTU discovery
for Interests.
As an Interest goes through the FIBs, it records the minimum path MTU
based on the egress interface's MTU. A Content Object sent in
response must be fragmented to less than or equal to the minimum path
MTU. A forwarder may choose to put 1280 in the Minimum Path MTU
field even if it supports larger MTUs.
Interests follow the FIB and all fragments of an Interest (i.e. the
same fragment id) should follow the same FIB choices. If at a later
time a similar interest arrives with a smaller minimum path MTU, it
should be forwarded even though it is similar, to ensure that a
returned Content Object is fragmented to a size that satisfies the
Interest's path.
A forwarding node must examine the Interest name to determine its
forwarding. This requires that the forwarding node re-assemble the
front of the Interest to examine the name. In a typical case, this
means that the node must receive fragment 0 to have enough prefix
name components to compute the route. A system MAY discard out-of-
order fragments after fragment 0 during this re-assembly, and once
fragment 0 arrives and the system constructs a PIT entry with the
routing, it should send a control message along the Fragment Stream
ID's reverse path to cause the source to resend the interest stream,
which can now be forwarded out of order. Or, it may buffer out-of-
order fragments.
A system that receives an Interest encapsulated in a packet larger
than 1280 octets must discard it.
Mosko Expires January 2, 2016 [Page 5]
Internet-Draft CCNx TLV July 2015
2.2. Content Object Fragmentation
When forwarding a Content Object along the reverse path of the PIT, a
fragment stream may only be forwarded along reverse PIT entries for
which it satisfies the reverse path minimum MTU.
A PIT entry should only be removed once all fragments of a fragment
stream pass through, or it times out. Because the FragCnt is limited
to 63, a system may match a first stream's Fragment ID and use a
single 64-bit mask.
A Content Object is fragmented based on the Interest minimum path
MTU. It carries an "Maximum Fragment MTU" field set to the maximum
fragment size, which must be no more than an Interest's minimum path
MTU. Because a fragment stream may only satisfy PIT entries with
larger or equal minimum path MTU, all fragments must carry the
Object's fragmentation size. An intermediate node may, for example,
receive the last fragment first, so even if fragments were packed to
maximum size, the forwarder could not infer which PIT entries the
object satisfies without know the fragment stream's fragmentation
size
Mosko Expires January 2, 2016 [Page 6]
Internet-Draft CCNx TLV July 2015
3. Packet Formats
End-to-end fragmentation uses a hop-by-hop TLV header for
fragmentation. There is one header for Interests and one header for
Content Objects.
+--------+-----------+----------------------+-----------------------+
| Type | Abbrev | Name | Description |
+--------+-----------+----------------------+-----------------------+
| %x0006 | T_INTFRAG | Interest | Hop-by-hop |
| | | fragmentation header | fragmentation header |
| | | (Section 3.1) | for Interests. |
| | | | |
| %x0007 | T_OBJFRAG | Content Object | Hop-by-hop |
| | | fragmentation header | fragmentation header |
| | | (Section 3.2) | for Content Objects. |
+--------+-----------+----------------------+-----------------------+
Table 1: Hop-by-hop Header Types
Both fragmented Interests and Content Objects use the fields FragCnt
and FragNum. The count is the number of fragments in the message,
which has a minimum of 1. FragNum is the 0-based fragment number.
Sequential fragment numbers represent sequential byte boundaries of
the original object.
3.1. Interest Header
The field FragmentStreamID identifies a contiguous stream of
fragments. It SHOULD be a random number.
The field PathMinimumMTU is updated per-hop to measure the minimum
path MTU of the interest's reverse path.
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| T_INTFRAG | LENGTH |
+---------------+---------------+---------------+---------------+
| FragmentStreamID |
| |
+---------------+---------------+---------------+---------------+
| PathMinimumMTU | X X | FragCnt | X X | FragNum |
+---------------+---------------+---------------+---------------+
Mosko Expires January 2, 2016 [Page 7]
Internet-Draft CCNx TLV July 2015
3.2. Content Object Header
The field FragmentStreamID identifies a contiguous stream of
fragments for the Content Object. It SHOULD be derived from the
Content Object's hash, so two objects with the same Fragment Stream
ID represent the same fragmented object.
The field InterestStreamID is the Fragment ID of the corresponding
Interest that the object is answering. This allows PIT matching
without having to reconstruct the Content Object. It makes Content
Objects specific to a given Interest similarity hash.
The field ObjectMaximumMTU is the maximum size of any fragment in the
fragment stream. This allows a forwarder to match a content object
fragment stream against a reverse path MTU size and not send a
fragment stream that will not fit down a path.
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| T_OBJFRAG | LENGTH |
+---------------+---------------+---------------+---------------+
| FragmentStreamID |
| |
+---------------+---------------+---------------+---------------+
| ObjectMaximumMTU | X X | FragCnt | X X | FragNum |
+---------------+---------------+---------------+---------------+
| InterestStreamID |
| |
+---------------+---------------+---------------+---------------+
Mosko Expires January 2, 2016 [Page 8]
Internet-Draft CCNx TLV July 2015
4. Cache Considerations
Objects should be reassembled before sending from cache, to ensure
all fragments exist at the cache.
Single fragment Interests may be satisfied from cache. A system may
choose to reassemble Interests to try and answer from cache. If a
cache miss, the original fragment stream should be forwarded.
Mosko Expires January 2, 2016 [Page 9]
Internet-Draft CCNx TLV July 2015
5. Acknowledgements
Mosko Expires January 2, 2016 [Page 10]
Internet-Draft CCNx TLV July 2015
6. IANA Considerations
TODO: Work with IANA to define the type space for: Hop-by-hop header
types.
All drafts are required to have an IANA considerations section (see
Guidelines for Writing an IANA Considerations Section in RFCs
[RFC5226] for a guide). If the draft does not require IANA to do
anything, the section contains an explicit statement that this is the
case (as above). If there are no requirements for IANA, the section
will be removed during conversion into an RFC by the RFC Editor.
Mosko Expires January 2, 2016 [Page 11]
Internet-Draft CCNx TLV July 2015
7. Security Considerations
All drafts are required to have a security considerations section.
See RFC 3552 [RFC3552] for a guide.
Mosko Expires January 2, 2016 [Page 12]
Internet-Draft CCNx TLV July 2015
8. References
8.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
8.2. Informative References
[CCN] PARC, Inc., "CCNx Open Source", 2007,
<http://www.CCNx.org>.
[RFC3552] Rescorla, E. and B. Korver, "Guidelines for Writing RFC
Text on Security Considerations", BCP 72, RFC 3552,
July 2003.
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
IANA Considerations Section in RFCs", BCP 26, RFC 5226,
May 2008.
Mosko Expires January 2, 2016 [Page 13]
Internet-Draft CCNx TLV July 2015
Author's Address
Marc Mosko
PARC, Inc.
Palo Alto, California 94304
USA
Phone: +01 650-812-4405
Email: marc.mosko@parc.com
Mosko Expires January 2, 2016 [Page 14]