Internet DRAFT - draft-aitken-ipfix-unobserved-fields
draft-aitken-ipfix-unobserved-fields
IPFIX Working Group P. Aitken
Internet-Draft Cisco Systems, Inc.
Intended Status: Standards Track 4 July 2014
Expires: July, 2015
Reporting Unobserved Fields in IPFIX
draft-aitken-ipfix-unobserved-fields-03
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), its areas, and its working
groups. Note that other groups may also distribute working
documents as Internet-Drafts.
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."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html
This Internet-Draft will expire in July 2014.
Copyright Notice
Copyright (c) 2014 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.
<Aitken> Expires July 2015 [Page 1]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
Abstract
The IPFIX protocol is designed to export information about
observations, and lacks a method for reporting that observations
are unavailable. This document discusses several methods for
reporting when fields are unavailable, reviews the advantages
and disadvantage of each, and recommends methods which should be
used.
Conventions used in this document
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].
Table of Contents
1. Introduction ............................................ 3
2. Terminology ............................................. 4
2.1 New Terminology ........................................ 4
3. Potential Methods ....................................... 4
3.1 Zero-valued counters ................................... 4
3.2 Multiple Templates ..................................... 5
3.3 CommonProperties ....................................... 6
3.4 Default Values ......................................... 7
3.4.1 Default of Zero ...................................... 7
3.4.2 Default of all-ones ................................. 7
3.4.3 General default value ............................... 8
3.4.4 Field-specific default values........................ 8
3.5 "observedFieldsIndicator" bitfield ..................... 9
3.6 Length of Zero ......................................... 10
3.7 Size field ............................................. 10
3.8 Structure data lists ................................... 11
3.8.1 Status list ......................................... 11
3.8.2 Observed field list ................................. 11
3.8.3 Combined field and status list ...................... 12
4. Conclusion .............................................. 12
5. New Information Elements ................................ 13
6. Security Considerations ................................. 13
7. IANA Considerations ..................................... 13
8. References .............................................. 14
8.1 Normative References ................................... 14
8.2 Informative References ................................. 14
9. Acknowledgements ........................................ 14
10. Author's Address ....................................... 14
<Aitken> Expires July 2015 [Page 2]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
TODO: would it be useful to define two new fields for reporting
the start and end time of a period during which no observations
were made?
TODO: how do these methods work with structured data and MIBs?
1. Introduction
The IPFIX information model [RFC7012] contains a wide variety of
fields [IANA-IPFIX], which are not always present in all
traffic. For example, ICMP type and code. Indeed, some fields
are mutually exclusive. For example, IPv4 / IPv6 address fields;
UDP / TCP port numbers.
When an IPFIX Metering Process monitors a field, it only reports
whenever appropriate traffic is seen. ie, whenever the Observed
Traffic Stream [RFC5476] contains the field to be metered. No
output is generated whenever the monitored field is not present.
The IPFIX protocol lacks a method for the Metering Process to
actively express that although certain fields were being
monitored, no relevant observations were made, that a particular
field is not applicable, or that a value could not be calculated
for a derived field. Therefore the Collecting Process cannot
know whether the Metering Process was actively monitoring the
field, and can only infer from the lack of export that no
relevant observations were made.
Further, when a Metering Process monitors a combination of
fields, some may be present while others are not. Therefore the
Metering Process may observe values for some fields, though not
for others.
The IPFIX Protocol [RFC7011] requires the Exporting Process to
employ a number of templates in order to export these
combinations, using one template for each observed combination
of fields. Since the number of templates required grows
exponentially with the number of field combinations, the
templates can quickly become unmanageable. Indeed, just a few
sets of mutually exclusive fields are sufficient to exhaust the
template number space.
Clearly the IPFIX protocol [RFC7011] requires a method for the
Metering Process to actively express that although fields were
being monitored, no relevant observations were made.
<Aitken> Expires July 2015 [Page 3]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
Note that there are several cases where an observation may not
be available for a given field:
1. Unavailable / Not applicable:
The monitored field was not present in, or not applicable
to, the observed traffic.
eg, when RTP SSRC is requested for a TCP flow.
2. Not Calculated:
Although the required fields exist, something is preventing
the calculation from occurring. For example, not enough
data has been collected to calculate a TCP round-trip time.
This document discusses various potential methods for reporting
such unobserved fields, reviews the advantages and disadvantages
of each, and recommends suitable methods as an extension to the
IPFIX Protocol [RFC7011].
2. Terminology
IPFIX-specific terminology used in this document is defined in
Section 2 of the IPFIX protocol specification [RFC7011]. As in
[RFC7011], these IPFIX-specific terms have the first letter of a
word capitalized when used in this document.
2.1 New Terminology
Unobserved Field
A field which a Metering Process is metering, but for which
no traffic has been seen or no data is available.
<Aitken> Expires July 2015 [Page 4]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
3. Potential Methods
This section discusses and evaluates various possible methods
for reporting Unobserved Fields.
3.1 Zero-valued counters
This method exports counters with a value of zero to indicate
that no traffic was observed.
For example, the following data records use zero-valued counters
to indicate that no traffic was observed from the specified
source or sent to the specified destination:
. sourceIPv4Address = n.n.n.n, packetTotalCount = 0
. destinationIPv4Prefix = n.n.n.n, packetTotalCount = 0
. bgpSourceAsNumber = nnnn, octetTotalCount = 0
. destinationTransportPort = pppp, octetTotalCount = 0
. protocolIdentifier = P, octetTotalCount = 0
Clearly this only works for specific addresses, address
prefixes, Autonomous systems, port numbers, protocols. The
method is not suitable for exhaustively reporting all addresses,
prefixes, Autonomous Systems, ports, or protocols from which no
traffic was sent or received.
Therefore, while this is a useful method, it addresses a
different problem. It does not meet the requirement of being
able to report unobserved fields and is therefore not a
solution.
3.2 Multiple Templates
The NetFlow v9 [RFC3954] and IPFIX [RFC7011] protocols are both
template based. Templates express which fields are present in
the exported Data Records.
When no value has been observed for a particular field, a new
template is generated without that corresponding Information
Element. Thus the Unobserved Field is simply omitted from the
export. ie, no values are exported for unobserved fields.
<Aitken> Expires July 2015 [Page 5]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
While this prevents an incorrect or misleading value from being
exported for the Unobserved Field, it may require a great many
Templates to be created. The number may soon become
unmanageable, or may exceed the Template number space -
especially when the Metering Process is metering a large number
of mutually-exclusive fields.
The IPFIX template number space is a little less than 16 bits
(256 through 65535 = 65280 templates), so the combinations of 16
different unobserved fields will exhaust the number space.
Eg, IPv4 and IPv6 traffic require separate templates, in order
to report either sourceIPv4Address and destinationIPv4Address,
or sourceIPv6Address and destinationIPv6Address.
Again, udpSourcePort and udpDestinationPort are mutually
exclusive with tcpSourcePort and tcpDestinationPort. Although
this may be mitigated by using the generic sourceTransportPort
and destinationTransportPort Information Elements together with
the protocolIdentifier, not all traffic is port based. Eg, these
port fields are mutually exclusive with icmpTypeCodeIPv4 and
icmpTypeCodeIPv6.
A final example is the MPLS label stack. Depending how many MPLS
labels are present in the Observed Traffic Stream, up to ten
different templates may be required, containing the ten MPLS
label stack Information Elements, mplsTopLabelStackSection
through mplsLabelStackSection10.
The main issue with this method is that since no data is
exported about unobserved fields, the Collecting Process cannot
tell whether the field was not being observed by the Metering
Process, or was being observed but no relevant traffic was seen.
Eg, if mplsLabelStackSection is not exported, the Collecting
Process is unable to determine whether MPLS traffic is being
actively monitored and no relevant traffic was seen, or MPLS
traffic is not being monitored.
Therefore this method does not meet the requirement of being
able to report unobserved fields and is therefore not a
solution.
<Aitken> Expires July 2015 [Page 6]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
3.3 CommonProperties
Common Properties divides Data Records into a core part in which
the fields are always observed, and additional parts according
to which other fields are observed. These are exported using the
method described in [RFC5473].
One template is required to express which fields are present in
the core, and one Template is required for each combination of
additional fields. Since multiple templates are required, the
number of Templates may soon become unmanageable or may exceed
the Template number space as discussed in section 3.2 above.
Although Common Properties [RFC5473] isn't specified for
NetFlow v9 [RFC3954], there is no technical reason preventing
this.
The main issue with this method is that again, like the Multiple
Templates case above, no data is exported about Unobserved
Fields - so the Collecting Process cannot tell whether the field
was not being observed, or was being observed but no relevant
traffic was seen.
Therefore this method does not meet the requirement of being
able to report unobserved fields.
3.4 Default Values
With this method, a single Template specifies all the fields
which the Metering Process was asked to observe, regardless of
whether values were observed and are available for each of the
fields. Fields for which no value was observed, or for which the
value is unavailable, are exported with a default value. The
default value can be of several kinds as discussed below.
Note that multiple default values are required if it's necessary
to distinguish between the "not applicable" and "not required"
cases. In general, both cases may be represented by a single
value.
Since only one template is used, this scheme is trivial to
implement and works for both NetFlow v9 [RFC3954] and IPFIX.
Specific default values are discussed in the following sections.
<Aitken> Expires July 2015 [Page 7]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
3.4.1 Default of Zero
All unobserved fields are exported with the value zero. This has
the advantage that neither the Exporting Process nor the
Collecting Process needs any extra knowledge about the field.
However, if zero is a valid value for the field, it will be
impossible to distinguish an unobserved field from a real
observation. Eg, when reporting the number of lost packets,
packetsLost = 0 seems to indicate that no traffic was lost, when
it may be intended to indicate that there is no relevant
information to report. Even IP addresses of 0.0.0.0 and 0::0 are
valid representations. And zero is a valid value for
icmpTypeCodeIPv4 (indicating echo reply).
Therefore, although this method reports unobserved fields, it's
not always possible to determine whether or not the field was
observed. Therefore this method is not a suitable solution.
3.4.2 Default of all-ones
The "Default of all-ones" method is similar to the "Default of
Zero" method discussed above, except that the all-ones value
(0xFF, 0xFFFF, 0xFFFFFFFF, etc) is used for each Unobserved
Field.
Such values are often, though not always, reserved and therefore
may more clearly indicate whether or not the field was observed.
However, this method has the additional disadvantage that the
default value for Unobserved Fields changes with the size of the
field. Eg, 255 for 8-bit fields, 65535 for 16-bit fields, etc.
Additionally, field sorting is impacted without additional logic
to recognise the "all-ones" value, since "unobserved" appears as
the topmost value.
For this reason, and because these values are not always
reserved, this method is not a suitable solution.
<Aitken> Expires July 2015 [Page 8]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
3.4.3 General default value
This method is similar to the "Default of Zero" and "Default of
all-ones" methods discussed above, except that another non-zero,
non-0xFF...FF default value is used for each Unobserved Field.
Eg, a repeating pattern of ASCII space (0x20), or a hex number
such as "0xD15AB1ED".
However, it seems impossible to choose a value which would never
appear in a real observation, both for existing Information
Elements and for new Information Elements defined in future.
Eg, although "0XD15AB1EDD15AB1ED" may be quite unlikely, that's
not enough to give a robust indication. Further, "0XD15A" is
possible (eg, port 53594) and "0xD1" has a 1-in-256 chance of
incorrectly indicating that a one-octet field was unobserved.
Therefore this method is not a suitable solution.
3.4.4 Field-specific default values
Each field is provided with a special "unobserved" value, which
is outside the normal range of observed values. This value may
vary from field to field.
When no value is observed for the field, it's exported with the
"unobserved" value.
Eg, to report that the flow direction is not relevant to the
current flow, the flowDirection Information Element could be
exported with any value other than 0 (ingress) or 1 (egress).
Similarly, to report that the IP version is not relevant to the
current flow, the ipVersion Information Element could be
exported with a value between 10 and 15 (see [IANA-VERSION]).
Since the "unobserved" value is outwith the normal range of
values for the field, it is possible to distinguish an
unobserved field from a real observation.
However, both the Exporting Process and the Collecting Process
need extra knowledge about each individual field.
Further, not all Information Elements have a suitable value. Eg,
counter, time, and process ID Information Elements may use their
entire range of bits.
Therefore this method suffers from the same problem as the other
"Default Value" methods above, and is not a suitable solution.
<Aitken> Expires July 2015 [Page 9]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
3.5 "observedFieldsIndicator" bitfield
With this method, a single template contains Information
Elements for all the fields which the Metering Process was asked
to observe.
Additionally, the Template contains an "observedFieldsIndicator"
bitfield similar to the "flowKeyIndicator" (see [IANA-IPFIX]
173), in that each bit corresponds to one Information Element
in the flow record. Each bit in this field indicates whether or
not a value was observed for the corresponding Information
Element within the Data Record.
For each Data Record, the Collecting Process examines the
"observedFieldsIndicator" bitfield to discover which fields were
observed and which were unobserved within that Data Record.
Unobserved fields may therefore be exported with any value,
since they will be disregarded.
Since it uses only one template, this scheme is trivial to
implement and works for both NetFlow v9 [RFC3954] and IPFIX.
However, mediators MUST understand the "observedFieldsIndicator"
bitfield and correctly interpret it. eg, if the mediator is
aggregating Data Records, it MUST pay attention to the bitfield
in order to disregard data for unobserved fields. Additionally,
if fields are added to or removed from the Flow Record, bits in
the bitfield must be shifted accordingly. Therefore this
requires changes to IPFIX record processing.
Note that if the "observedFieldsIndicator" bitfield is sent in
an IPFIX Options Record, it expresses which fields are valid in
that Options Data Record. It's not possible to use option
scoping to report the "observedFieldsIndicator" bitfield for any
other Record.
Although this method clearly reports unobserved fields, it's
limited to a simple binary indication of whether or not a value
was observed. It's not possible to give a reason, or to
distinguish "Unavailable", "Not applicable" and "not calculated"
as discussed in section 1.
Provided that the simple boolean indication is sufficient, this
method provides a good solution.
This method requires a new "observedFieldsIndicator" Information
Element, as specified in section 5, "New Information Elements".
<Aitken> Expires July 2015 [Page 10]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
3.6 Length of Zero
This method exports a single Template containing Information
Elements for all the fields which the Metering Process was asked
to observe. Fields for which no value was observed are exported
using IPFIX variable-length encoding [RFC7011], with a length of
zero. Therefore unobserved fields are actively indicated.
Fields which may be unobserved must be anticipated ahead of time
and specified in the Template using IPFIX variable-length
encoding [RFC7011].
While this method only requires a single Template, it doesn't
work for NetFlow v9 export [RFC3954] since NetFlow v9 doesn't
support variable-length encoding.
It also does not address the not-applicable versus
not-calculated case discussed in section 3.5, which may be
needed for some fields.
However, provided that the simple boolean indication is
sufficient, and especially when variable-length encoding is
already being used for the field, this method provides a good
solution.
3.7 Size field
With this method, a single Template contains Information
Elements for all the fields which the Metering Process was asked
to observe.
In addition, a "size" or "count" field is added to the Template,
indicating how many of the fields are valid.
Eg, the Template contains mplsTopLabelStackSection,
mplsLabelStackSection2, ..., mplsLabelStackSection10.
Additionally, mplsLabelStackDepth is provided, indicating how
many of the MPLS label elements are valid.
Clearly this method is field-specific. Instead, the solution
should use a structured data list as discussed in section 3.8
below. Therefore this method is not recommended.
<Aitken> Expires July 2015 [Page 11]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
3.8 Structure data lists
With this method, a single template contains Information
Elements for all the fields which the Metering Process was asked
to observe. A list is appended to each Data Record to provide
more information about the fields in the Template.
Several types of list are possible as described below.
3.8.1 Status list
A new Information Element defines the status of each field. Eg,
observed, unavailable, not applicable, not calculated. One
status is provided per Information Element.
A status list is encoded using a basicList as described in
[RFC6313], and the list is appended to the Data Record.
This method is similar to the "observedFieldsIndicator" bitfield
discussed in section 3.5, with the advantage that more
information is available about each field.
However, this method suffers from the same mediator issue. ie,
the list must be understood by mediators, and must be modified
when a mediator adds fields to, or removes fields from, the Data
Record.
With one octet per status, the Data Record is not overly
burdened.
While this method offers some advantage over the
"observedFieldsIndicator" bitfield discussed in section 3.5, it
is not recommended.
<Aitken> Expires July 2015 [Page 12]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
3.8.2 Observed field list
A list of informationElementIndex, indicating which of the
elements in the Template contains valid values, is appended to
each Data Record.
Elements which appear in the Template but not in the list were
not observed, not applicable, or could not be calculated.
Since informationElementIndex is 16 bits long, this method
produces a list which is twice as long as that in section 3.8.1
above.
Since the order of the fields in the list is unimportant, when a
mediator adds fields to the Data Record, the list can simply be
extended. Therefore the mediator issue is mitigated to some
extent.
However, it's not possible to tell why a particular Information
Element is not available.
Since the "Combined" method discussed in section 3.8.3 below
offers a better solution, this method is not recommended.
3.8.3 Combined field and status list
This method combines the status and field list from sections
3.8.1 and 3.8.2, by exporting a subTemplateList containing
{informationElementIndex, status} pairs.
Therefore this method produces a list which is thrice as long as
that in section 3.8.1 above. Additionally, a further template is
required to encode the {informationElementIndex, status} pair.
The status makes it possible for the Collecting Process to
understand why a particular Information Element is not
available.
Since the order of the fields in the list is unimportant, when a
mediator adds fields to the Data Record, the list can simply be
extended. Therefore the mediator issue is mitigated to some
extent.
This method is the most flexible and informative of all the
structured data solutions. However, it incurs a penalty of an
additional template to export the subTemplateList. Therefore
this method is not recommended.
Not-TODO: could be implemented as two parallel basicLists, or a
basicList of a new "Element+Status" IE.
<Aitken> Expires July 2015 [Page 13]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
4. Conclusion
Several methods of encoding "unobserved" fields have been
presented. Each has pros and cons.
The only methods which satisfactorily meet the requirements are
the "observedFieldsIndicator" bitfield in section 3.5, and the
"Length of Zero" method in section 3.6.
These methods may be combined in order to report when no value
is available for a given export field.
In the general case, the "observedFieldsIndicator" bitfield
method specified in section 3.5 should be used.
However, when IPFIX variable-length encoding can be used, or is
already being used, the "Length of Zero" method specified in
section 3.6 may be used.
Therefore this document specifies an extension to the IPFIX
protocol [RFC7011], such that a variable-length encoding with a
length of zero indicates that no value was available for the
corresponding Information Element.
The ability to indicate Unobserved Fields conveys an additional
benefit: the ability for the Metering Process to indicate that
it has begun to monitor a new flow, but does not yet have
anything to export. Therefore, all the fields are unobserved.
<Aitken> Expires July 2015 [Page 14]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
5. New Information Elements
This document defines the following new IPFIX Information
Elements:
observedFieldsIndicator
Description:
This bit field indicates which of the Information Elements
within a Data Record have been observed. Each bit of the
observedFieldsIndicator represents an Information Element
in the Data Record with the n-th bit representing the n-th
Information Element.
A bit set to value 1 indicates that the corresponding
Information Element was observed and contains a valid
value. A bit set to value 0 indicates that the
corresponding Information Element was not observed and
contains an invalid value. The Information Element value
SHOULD be set to zero, and MUST be disregarded by the
Collecting Process.
Information Elements which have no observedFieldsIndicator
bit MUST contain a valid value.
If the Data Record contains more than 64 Information
Elements, the corresponding Template SHOULD be designed
such that all unobserved fields are among the first 64
Information Elements, because the observedFieldsIndicator
only contains 64 bits. If the Data Record contains less
than 64 Information Elements, then the bits in the
observedFieldsIndicator for which no corresponding
Information Element exists MUST have the value 0.
Abstract Data Type: unsigned64
Data Type Semantics: flags
ElementId: TBD1
6. Security Considerations
No additional security considerations are introduced in this
document. The same security considerations as for the IPFIX
protocol [RFC7011] apply.
7. IANA Considerations
Additional Information Elements to be allocated in the
[IANA-IPFIX] registry per section 5, "New Information Elements."
<Aitken> Expires July 2015 [Page 15]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
8. References
8.1 Normative References
[RFC7011] Claise, B., Ed., Trammell, B., Ed., and P. Aitken,
"Specification of the
IP Flow Information Export (IPFIX) Protocol
for the Exchange of Flow Information",
STD 77, RFC 7011, September 2013.
[RFC2119] S. Bradner, Key words for use in RFCs to Indicate
Requirement Levels, BCP 14, RFC 2119, March 1997
8.2 Informative References
[RFC7012] Claise, B., Ed., and B. Trammell, Ed.,
"Information Model for
IP Flow Information Export (IPFIX)",
RFC 7012, September 2013.
[RFC5473] Boschi, E., Mark, L., and B. Claise, "Reducing
Redundancy in IP Flow Information Export (IPFIX) and
Packet Sampling (PSAMP) Reports",
RFC 5473, March 2009.
[RFC5476] Claise, B., Ed., "Packet Sampling (PSAMP)
Protocol Specifications", RFC 5476, March 2009.
[RFC3954] Claise, B., Ed., "Cisco Systems NetFlow Services
Export Version 9", RFC 3954, October 2004.
[RFC6313] Claise, B., Dhandapani, G., Aitken, P., and S. Yates,
"Export of Structured Data in IP Flow Information
Export (IPFIX)", RFC 6313, July 2011.
[IANA-IPFIX] http://www.iana.org/assignments/ipfix/ipfix.xml
[IANA-VERSION]
http://www.iana.org/assignments/version-numbers/ver
sion-numbers.xml
9. Acknowledgements
Thanks to Aamer Akhter and Luca Deri for initial review and
feedback, to Andrew Johnson for the lists method, and to Jan
Novak, Andrew Johnson, Colin McDowall, and Dana Blair for
reviewing the draft and providing feedback.
<Aitken> Expires July 2015 [Page 15]
Internet-Draft <Reporting Unobserved Fields in IPFIX> July 2014
10. Author's Address
Paul Aitken
Cisco Systems, Inc.
96 Commercial Quay
Commercial Street
Edinburgh, EH6 6LX, United Kingdom
Phone: +44 131 561 3616
Email: paitken@cisco.com
<Aitken> Expires July 2015 [Page 16]