Internet DRAFT - draft-mosko-icnrg-cachecontrol
draft-mosko-icnrg-cachecontrol
ICNRG M. Mosko
Internet-Draft PARC, Inc.
Intended status: Experimental August 16, 2016
Expires: February 17, 2017
CCNx Cache Control
draft-mosko-icnrg-cachecontrol-00
Abstract
This document proposed a modification of the CCNx 1.0 cache control
directives to allow use of either absolute times or relative times by
the publisher. Intermediate caches do not require synchronized
clocks even if the publisher uses an absolute time. This document
updates the definition of the RecommendedCacheTime but leaves the
ExpiryTime as previously defined.
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 February 17, 2017.
Copyright Notice
Copyright (c) 2016 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 February 17, 2017 [Page 1]
Internet-Draft CCNx Cache Control August 2016
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3
2. Protocol Description . . . . . . . . . . . . . . . . . . . . 3
2.1. Publisher . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Content Store . . . . . . . . . . . . . . . . . . . . . . 4
2.3. Consumer . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4. Allowed Combinations . . . . . . . . . . . . . . . . . . 5
3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6
4. Security Considerations . . . . . . . . . . . . . . . . . . . 6
5. References . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.1. Normative References . . . . . . . . . . . . . . . . . . 7
5.2. Informative References . . . . . . . . . . . . . . . . . 7
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 7
1. Introduction
The current CCNx 1.0 specification [CCNSemantics] defines two cache
control directives: RecommendedCacheTime and ExpiryTime. Both use
absolute times and thus require caches have synchronized time. We
propose an extension to CCNx that allows the use of relative times
and the processing of ExpiryTime without synchronized time between
caches.
This draft does not change the semantics of ExpiryTime and
RecommendedCacheTime (RCT). ExpiryTime is the maximum time during
which a cache can respond with a ContentObject. RCT is the maximum
time during which a cache should keep a ContentObject, though any
cache may discard early or may choose to keep longer such as if it is
popular. We introduce new MaxAge and Age fields for use in relative
time expiry calculations.
This proposal is somewhat based on the HTTP/1.1 age system, but not
exactly the same due to the definitions of our existing ExpiryTime
and RecommendedCacheTime (RCT) fields. It also has different
semantics because HTTP allows for stale and fresh, while in CCNx we
have either alive or dead (expired).
To use relative times for cache control requires and Age field in the
unsigned packet headers. The Age field is incremented by a cache
when it serves a ContentObject based on its residency time in the
cache. Combining a MaxAge field from the signed portion of the
ContentObject with the Age field allows one to determine if the
Mosko Expires February 17, 2017 [Page 2]
Internet-Draft CCNx Cache Control August 2016
ContentObject is expired or not. If Age >= MaxAge, then the
ContentObject is expired.
We can use a single Age field for ContentObjects with either MaxAge
or ExpiryTime (it would not have both). If using MaxAge, then Age is
a relative time with a base of 0. If using ExpiryTime, then Age is
initialized to the current synchronized time by the publisher and
intermediate caches increment it from there.
Because the Age field is outside the signature envelope, one cannot
rely on it for trusted protocol operation. Not having it, however,
results in worse side effects than relying on the unauthenticated Age
field. If all nodes are operating correctly, we can make a correct
and live protocol using the rule that only the publisher is allowed
to decrement the age field and intermediate caches cannot decrement
it. This is not true of only having a MaxAge field without an Age
field, as a ContentObject could travel in a cycle and live for longer
than MaxAge.
We do not consider allowing an Interest to have a min-age directive.
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].
2. Protocol Description
All of these headers only control when a cache and respond with a
ContentObject. They do not affect the data plane.
o ContentObject.ExpiryTime: absolute time
o ContentObject.MaxAge: relative seconds
o PerhopHeaders.RCT: absolute time
o PerhopHeaders.Age: relative milli-seconds
We consider time in flight to be negligible compared to time in
storage or the second resolution of MaxAge and Age. If a cache has
reason to believe there is a large time in flight before a
ContentObject was received from the previous hop, it should take that
time into consideration of its residency time at the cache. For
example, a space system might know that a certain communication takes
4 minutes or a satellite system might know that one hop takes 300
msec.
Mosko Expires February 17, 2017 [Page 3]
Internet-Draft CCNx Cache Control August 2016
The RCT is re-defined to now always be relative to the Age. Once the
Age exceeds the RCT, a node SHOULD stop serving it from cache, but is
not required to stop.
2.1. Publisher
If it does not have synchronized time, it MUST NOT use ExpiryTime.
It MAY use MaxAge.
A publisher MUST NOT use both ExpiryTime and MaxAge.
When first creating a Content Object:
o If using ExpiryTime, the publisher MUST add an Age header and set
it to the current synchronized time.
o If using MaxAge, the publisher MUST add an Age header and set it
to 0.
o The RCT field, if used, is always taken as a delta from the Age
field.
o If using RCT and neither of ExpiryTime or MaxAge, the publisher
MUST add an Age field with the desired delta before the RCT. It
SHOULD use a base 0 for the Age, but MAY use any desired base.
If answering an Interest for a ContentObject that was already
created:
o It MAY use the above procedure, which essentially refreshes the
ContentObject.
o It MAY account for the elapsed time by using the current
synchronized time or relative Age, as appropriate.
The ContentStore on the publisher node operates as normal for any
ContentStore.
2.2. Content Store
In these calculations, we will assume a missing field has the value
of 0. For example, a ContentObject with an ExpiryTime has an
implicit MaxAge of 0. Remember that Age is in milli-seconds and
MaxAge is in seconds, so one should re-scale MaxAge when comparing it
to Age.
The residency_time is the rounded-up time in milli-seconds that a
ContentObject has resided in the cache. The minimum value is 1.
Mosko Expires February 17, 2017 [Page 4]
Internet-Draft CCNx Cache Control August 2016
This ensures that the Age is always increasing as it is stored and
served from a set of caches.
age_value = Age + residency_time
remaining_age = max(MaxAge - age_value, 0)
remaining_expiry = max(ExpiryTime - now, 0)
At most one of remaining_age and remaining_expiry will be positive.
Both could be 0.
remaining_life = max(remaining_age, remaining_expiry)
If remaining_life > 0, then the ContentObject may be used from cache.
Otherwise, it should be considered a cache miss.
This rule ensures that the Age field never decreases at an
intermediate cache and will try to catch up to synchronized time
whenever possible. When responding with a ContentObject from cache,
a node MUST:
o If it has synchronized time and ExpiryTime in packet, set the Age
field to max(now, Age)
o Otherwise, set the Age field to (Age + residency_time)
If the ContentStore receives the same ContentObject but with a
younger Age, it should reset its Age to the new value. This allows
the publisher to re-issue the same ContentObject with a new validity
period without re-signing and creating a new ContentObject. Because
the protocol maintains the invariant that only the publisher can
decrement the Age, the protocol should not induce permanent cycles of
ContentObjects bouncing between caches.
2.3. Consumer
If the consumer has synchronized time and the ContentObject has an
ExpiryTime, it MAY perform a validation on the ContentObject to
determine if it is out of date. Otherwise, it MAY consider the Age
field relative to the MaxAge or ExpiryTime. It is possible for a
ContentObject to expire while in flight, so a Consumer usually should
not penalize recently expired objects, though this behavior is
application dependent.
2.4. Allowed Combinations
None of these combinations require synchronized clocks at any node
and all allow a mixture of synchronized and unsynchronized clocks.
Mosko Expires February 17, 2017 [Page 5]
Internet-Draft CCNx Cache Control August 2016
No cache is required to keep a ContentObject for any amount of time.
No cache is required to discard a ContentObject after the RCT, though
it should unless it is popular. All caches must cease to respond
with a ContentObject that has expired, based either on Age to MaxAge
or Age to ExpiryTime comparison or based on comparing a synchronized
clock to the ExpiryTime. Comparing a synchronized clock to
ExpiryTime always takes precedence over the Age field to determine
expiry.
1. RCT and Age only: The RCT functions relative to Age. The
ContentObject never expires (dies) and could live in cache
forever. However, nodes would normally discard it once RCT <=
Age.
2. Age and ExpiryTime: Initialize the Age to the current
synchronized time. Intermediate caches may serve it so long as
Age < ExpiryTime.
3. Age and MaxAge: Initialize Age to 0. Intermediate caches may
serve it so long as Age < MaxAge.
4. Age and ExpiryTime and RCT: As #2, except may discard once RCT <=
Age
5. Age and MaxAge and RCT: As #3, except may discard once RCT <=
Age.
To prevent a ContentObject from being served from cache, a producer
should set the ExpiryTime to 0.
3. IANA Considerations
This memo includes no request to IANA. TODO: If this document is
submitted as an official draft, this section must be updated to
reflect the IANA registries described in [CCNMessages]
4. Security Considerations
Because the Age field is outside the security envelope, a system
relying on only relative times (MaxAge) could be susceptible to
intermediate nodes decreasing the Age and a ContentObject living
beyond the desired MaxAge. If this is highly sensitive, then a
consumer and producer could use synchronized clocks and ExpiryTime.
Mosko Expires February 17, 2017 [Page 6]
Internet-Draft CCNx Cache Control August 2016
5. References
5.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
5.2. Informative References
[CCNMessages]
Mosko, M., Solis, I., and C. Wood, "CCNx Messages in TLV
Format (Internet draft)", 2016,
<http://tools.ietf.org/html/
draft-irtf-icnrg-ccnxmessages-03>.
[CCNSemantics]
Mosko, M., Solis, I., and C. Wood, "CCNx Semantics
(Internet draft)", 2016, <http://tools.ietf.org/html/
draft-mosko-icnrg-ccnxsemantics-03>.
[CCNx] 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,
DOI 10.17487/RFC3552, July 2003,
<http://www.rfc-editor.org/info/rfc3552>.
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
IANA Considerations Section in RFCs", BCP 26, RFC 5226,
DOI 10.17487/RFC5226, May 2008,
<http://www.rfc-editor.org/info/rfc5226>.
Author's Address
Marc Mosko
PARC, Inc.
Palo Alto, California 94304
USA
Phone: +01 650-812-4405
Email: marc.mosko@parc.com
Mosko Expires February 17, 2017 [Page 7]