Network Working Group | M. Boucadair |
Internet-Draft | C. Jacquenet |
Intended status: Standards Track | France Telecom |
Expires: February 22, 2014 | R. Parker |
Affirmed Networks | |
D. R. Lopez | |
Telefonica I+D | |
P. Yegani | |
Juniper Networks | |
J. Guichard | |
P. Quinn | |
Cisco Systems, Inc. | |
August 21, 2013 |
Differentiated Service Function Chaining Framework
draft-boucadair-network-function-chaining-03
IP networks rely more and more on the combination of advanced functions (besides the basic routing and forwarding functions). This document defines a solution to enforce Service Function Chaining (SFC) with minimum requirements on the underlying network.
The proposed solution allows for Differentiated Forwarding (DiffForward): packets are classified and marked at the entry point of an SFC-enabled network, and are then forwarded on a per SFC map basis.
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].
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 22, 2014.
Copyright (c) 2013 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 the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
IP networks rely more and more on the combination of advanced functions (besides the basic routing and forwarding functions). Typical examples of such functions include firewall (e.g., [RFC6092]), DPI (Deep Packet Inspection), LI (Lawful Intercept) module, NAT44 [RFC3022], NAT64 [RFC6146], DS-Lite AFTR [RFC6333], NPTv6 [RFC6296], HOST_ID injection, HTTP Header Enrichment function, TCP tweaking and optimization functions, transparent caching, charging function, load-balancer, etc.
Such advanced functions are denoted SF (Service Function) in this document.
The dynamic enforcement of a SF-derived, adequate forwarding policy for packets entering a network that supports such advanced Service Functions has become a key challenge for operators and service providers. SF-inferred differentiated forwarding is ensured by tweaking the set of Service Functions to be invoked. How to bind a flow of packets that share at least one common characteristic to a forwarding plane is policy-based, and subject to the set of SF functions that need to be solicited for the processing of this specific flow.
The overall problem space is described in [I-D.quinn-nsc-problem-statement]. A list of requirements is available at [I-D.boucadair-chaining-requirements].
This document defines a framework to enforce Service Function Chaining (SFC) with minimum requirements on the underlying network. The proposed solution allows for Differentiated Forwarding (DiffForward): packets are classified at the entry point of an SFC-enabled network, and are then forwarded according to the ordered set of SF functions that need to be activated to process these packets in the SFC-enabled network.
This document does not make any assumption on the deployment context. The proposed framework covers both fixed and mobile networks (e.g., to rationalize the proliferation of advanced features at the Gi Interface [RFC6459]).
The main objectives of the proposed framework are listed below:
The following assumptions are made:
Given the assumptions listed in Section 1.4, the rationale of the framework is as follows:
This document makes use of the following terms:
The following functional elements are defined in this document:
The administrative entity that operates a SFC-enabled domain maintains a local repository that lists the enabled SFs. This administrative entity assigns a unique SF identifier for each SF.
SF identifiers can be structured as strings or any other format. The main constraint on the format is that two SFs MUST be assigned with different identifiers. SF identifiers are case-sensitive.
A SF may be embedded in one or several SF Nodes. The SF locator is typically the IP address or the FQDN to reach a given SF Node.
The use of an IP address is RECOMMENDED to avoid any extra complexity related to the support of name resolution capabilities in SF Nodes. Resolution capabilities are supported by the PDP (Policy Decision Point). In the rest of the document, we assume a SF locator is structured as an IP address (IPv4 or IPv6).
A SF Node can be reached by one or more locators, which may therefore be bound to the same SF.
Added-value services delivered to the end-user rely on the invocation of several SFs. For each of these services, the administrative entity that operates an SFC-enabled domain builds one or several SFC Maps. Each of these maps characterizes the list of SFs to be invoked with their exact invocation order.
Each SFC Map is unambiguously identified with a unique identifier called the SFC Map Index. The SFC Map Index MUST be described as an unsigned integer.
Distinct chains can be applied for inbound and outbound traffic. The directionality of traffic is not included as an attribute of the SFC Map, but it may be implicitly described by using two SFC Maps installed and maintained in the SFC Policy Table. In such case, incoming packets would be marked with Index_1 for example, while outgoing packets would be forwarded according to a distinct SFC Map identified with Index_2.
An example of SFC Map to handle IPv6 traffic destined to an IPv4 remote server is defined as follows:
To handle incoming packets destined to the same IPv6 host, the following SFC Map can be defined:
A PDP (Policy Decision Point, [RFC2753]) is the central entity which is responsible for maintaining SFC Policy Tables (Figure 1), and enforcing appropriate policies in SF Nodes and SFC Boundary Nodes (Figure 1). PDP-made decisions can be forwarded to the participating nodes by using a variety of protocols (e.g., NETCONF [RFC6241]).
One or multiple SFC-enabled domains may be under the responsibility of the same PDP. Delimiting the scope of each SFC-enabled domain is under the responsibility of the administrative entity that operates the SF-enabled network.
o . . . . . . . . . . . . . . . . . . . . . . . o . SFC Policy Enforcement . . +-------+ . . | |-----------------+ . . +-------| PDP | | . . | | |-------+ | . . | +-------+ | | . o . . | . . . . . | . . . . . | . . . . | . . . o o . . | . . . . . | . . . . . | . . . . | . . . o . | | | | . . v v v v . . +---------+ +---------+ +-------+ +-------+ . . |SFC_BN_1 | |SFC_BN_n | | SF_1 | | SF_m | . . +---------+ +---------+ +-------+ +-------+ . . SFC-enabled Domain . o . . . . . . . . . . . . . . . . . . . . . . . o
Figure 1: SFC Policy Enforcement Scheme.
The SF Node MUST be provisioned with the following information:
Likewise, the SFC Boundary Node MUST be provisioned with the following information:
In addition to the SFC Policy Table, other SF-specific policies can be installed by the PDP (e.g., configure distinct user profiles, activate specific traffic filters, configure traffic conditioners, etc.).
Policies managed by the PDP may be statically instantiated or dynamically triggered by external means (e.g., a AAA server).
In the event of any update (e.g., define a new SFC Map, delete an SFC Map, add a new SF Locator, update classification policy), the PDP MUST forward the updated policy configuration information in all relevant SF Nodes and SFC Boundary Nodes.
Load-balancing among several SF Nodes supporting the same SF can be driven by the PDP. Indeed, the PDP can generate multiple classification rules and SFC Maps to meet load-balancing objectives.
The processing of packets by the nodes that belong to a SFC-enabled domain does not necessarily require any interaction with the PDP, depending on the nature of the SF supported by the nodes and the corresponding policies to be enforced. For example, traffic conditioning capabilities [RFC2475] are typical SF functions that may require additional solicitation of the PDP for the SF node to decide what to do with some out-of-profile traffic.
The behavior of each node of a SFC-enabled domain is specified in the following sections. We assume that the provisioning operations discussed in Section 4 have been successful (i.e., SF functions have been adequately configured according to the (service-specific) policy to be enforced).
SFC Boundary Nodes act both as a SFC Ingress Node and as a SFC Egress Node for the respective directions of the traffic.
Traffic enters a SFC-enabled domain at a SFC Ingress Node (Section 5.3) and exits the domain at a SFC Egress Node (Section 5.4).
The SFC Classifier classifies packets based on (some of) the contents of the packet header. Concretely, it classifies packets based on the possible combination of one or more header fields, such as source address, destination address, DS field, protocol ID, source port and destination port numbers, and any other information.
Each SFC Map Classification Rule MUST be bound to one single SFC Map (i.e., the classification rule must include only one SFC Map Index).
When a packet is received through an interface of the SFC Ingress Node that connects to the outside of the SFC domain, the Ingress Node MUST:
As a result of this process, the packet will be sent to an SF Node or an Intermediate Node.
When a packet is received through an interface that connects the SFC Egress Node to its SFC domain, the Egress Node MUST:
This section assumes the default behavior is each SF Node does not embed a Classifier as discussed in Section 9.4.
When a packet is received by a SF Node, the SF Node MUST:
An Intermediate Node is any node that does not support any Service Function and which is located within a SFC-enabled domain.
No modification is required to intermediate nodes to handle incoming packets. In particular, routing and forwarding are achieved using legacy procedures.
If adding the Service Chaining Header would result in a fragmented packet, the classifier should include a Service Chaining Header in each fragment.
Other fragmentation considerations will be added in a future version of the document.
When encapsulating an IP packet, the Ingress Node and each SF Node SHOULD use its Diffserv Codepoint (DSCP, [RFC2474]) to derive the DSCP (or MPLS Traffic-Class Field) of the encapsulated packet.
Generic considerations related to Differentiated Services and tunnels are further detailed in [RFC2983].
This section discusses two main protocol issues to be handled in order to deploy DiffForward.
A detailed design analysis is documented in [I-D.boucadair-chaining-design-analysis].
A SFC Map Index is an integer that points to a SFC Map.
In order to avoid all nodes of a SFC-enabled domain to be SF-aware, this specification recommends to undertake classifiers at boundary nodes while intermediate nodes forward the packets according to the SFC Map Index conveyed in the packet (SF Node) or according to typical forwarding policies (any SF-unaware node).
An 8-bit field would be sufficient to accommodate deployment contexts that assume a reasonable set of SFC Maps. A 16-bit (or 32-bit) field would be more flexible (e.g., to accommodate the requirement discussed in Section 9.3).
Instead of injecting a Map Index, an alternate solution would be to use the SSRR/LSRR IPv4 option or any similar solution to indicate a loose or strict explicit route. This alternative was not considered because of the likely dramatic impact on the processing and potential fragmentation issues that may jeopardize the overall performance of the DiffForward operation.
Injecting an 8-bit or a 16-bit field would minimize fragmentation issues.
SFC Map Indexes can be conveyed in various locations of a packet:
A SFC Ingress Node or a SF Node MUST be able to forward a packet that matches an existing SFC Map to the relevant next hop SF Node. The locator of the next SF is retrieved from the SFC Policy Table. In case the next SF Node in the list is not an immediate neighbor, a solution to force the packet to cross that SF Node MUST be supported. This document suggests the use of the IP-in-IP encapsulation scheme. Other tunneling solutions can be considered in the future.
The following deployment considerations should be taken into account:
Below are listed some deployment model examples:
Service Functions may often enforce multiple differentiated policy sets. These policy sets may be coarsely-grained or fine-grained. An example of coarsely-grained policy sets would be an entity that performs HTTP content filtering where one policy set may be appropriate for child users whereas another is appropriate for adult users. An example of finely-grained policy sets would be PCEF (3GPP Policy Control Enforcement Function) that has a large number of differentiated QoS and charging profiles that are mapped on a per-subscriber basis.
The Service Function Chaining mechanism directly support coarsely-grained differentiated policy sets and indirectly support finely-grained differentiated policy sets.
From a Service Function Chaining perspective, each coarsely-grained policy set for a Service Function will be considered as a distinct logical instance of that Service Function. Consider the HTTP content filtering example where one physical or virtual entity provides both child and adult content filtering. The single entity is represented as two distinct logical Service Functions, each with their own Service Function Identifier from a chaining perspective. The two (logical) Service Functions may share the same IP address or may have distinct IP addresses.
Finely-grained policy sets, on the other hand, would unacceptably explode the number of distinct Service Chains that were required with an administrative domain. For this reason, Service Functions that utilize finely-grained policy sets are represented as a single Service Function that has its own internal classification mechanism in order to determine which of its differentiated policy sets to apply. Doing so avoids from increasing the size of the SFC Policy Table.
The threshold, in terms of number of policies, between choosing the coarsely-grained policy or finely-grained policy technique is left to the administrative entity managing a given domain.
If SF Nodes are also configured to behave as Classifiers, the SFC Map Index is not required to be explicitly signalled in each packet. Concretely, the SFC Policy Table maintained by the SF Node includes classification rules. These classification rules are enforced to determine whether the local SF must be involved. If an incoming packet matches at least one classification rule pointing to an SFC Map in which the SF Identifier is listed, the SF Node retrieves the next hop SF from the SF Map indicated in the classification rule.
The packet is then handled by the local SF, and the SF Node subsequently forwards the packet to the next hop SF. If not, the packet is forwarded to the next hop according to a typical IP forwarding policy.
Let us consider the example shown in Figure 2. The local SF Node embeds SFa. Once classification rules and the SFC Maps are checked, the SF Node concludes SFa must be invoked only when a packet matches Rules 1 and 3. If a packet matches Rule 1, the next SF is SFC. If a packet matches Rule 3, the next SF is SFh.
+-----------------------------------------------+ | SFC Policy Table | +-----------------------------------------------+ |Local SF Identifier: SFa | +-----------------------------------------------+ |Classification Rules | | Rule 1: If DEST=IP1; then SFC_MAP_INDEX1 | | Rule 2: If DEST=IP2; then SFC_MAP_INDEX2 | | Rule 3: IF DEST=IP3; then SFC_MAP_INDEX3 | +-----------------------------------------------+ |SFC Maps | | {SFC_MAP_INDEX1, {SFa, SFC} | | {SFC_MAP_INDEX2, {SFd, SFb} | | {SFC_MAP_INDEX3, {SFa, SFh} | +-----------------------------------------------+
Figure 2: SFC Policy Table Example.
SF Nodes may be enabled in a SFC-enabled domain so that each of them has a direct adjacency with other SF Nodes. In such configuration, no specific encapsulation scheme is required to exchange traffic between these nodes.
SF Nodes use the SFC Policy Table to detect whether the local SF was already applied to the received packet (i.e., detect SF Loop). The SF Node MUST invoke the local SF only if the packet is received from a SFC Boundary Node or a SF Node having an identifier listed before the local SF in the SF Map matched by the packet. SF Loop detection SHOULD be a configurable feature.
Figure 3 shows an example of a SFC Policy Table of a SF Node embedding SFa. Assume a packet received from Locb that matches Rule 2. SFa must not be invoked because SFb is listed after SFa (see the SFC Map list). That packet will be forwarded without invoking SFa.
+-----------------------------------------------+ | SFC Policy Table | +-----------------------------------------------+ |Local SF Identifier: SFa | +-----------------------------------------------+ |SFC Maps | | {SFC_MAP_INDEX1, {SFa, SFC} | | {SFC_MAP_INDEX2, {SFd, SFa, SFb, SFh} | +-----------------------------------------------+ |SFC Locators | | Locator_SFb: Locb | | Locator_SFC: Locc | | Locator_SFd: Locd | | Locator_SFh: Loch | +-----------------------------------------------+
Figure 3: Dealing With SF Loops.
The support of this feature is OPTIONAL.
If SF loop detection is not activated in an SFC-enabled domain, the PDP may provision SF nodes with a "lightweight" SFC Policy Table. A lightweight SFC Policy Table is a subset of the full SFC Policy Table that includes:
An example of a lightweight SFC Policy Table is shown in Figure 4.
+-----------------------------------------------+ | SFC Policy Table | +-----------------------------------------------+ |Local SF Identifier: SFa | +-----------------------------------------------+ |Lite SFC Maps | | SFC_MAP_INDEX1, Next_Hop_SF = SFC | | SFC_MAP_INDEX2, Next_Hop_SF = SFb | +-----------------------------------------------+ |SFC Locators | | Locator_SFb: Locb | | Locator_SFC: Locc | +-----------------------------------------------+
Figure 4: Lightweight SFC Policy Table.
The ability of the PDP to check the liveness of each SF invoked in a service chain has several advantages, including:
In order to determine the liveness of any particular SF Node, standard protocols such as ICMP or BFD (both single-hop [RFC5881] and multi-hop [RFC5883]) may be utilized between the PDP and the SF Nodes.
For more sophisticated load-balancing support, protocols that allow for both liveness determination and the transfer of application-specific data, such as SNMP and NETCONF may be utilized between the PDP and the SF Nodes.
The support of this feature is OPTIONAL.
Required IANA actions will be discussed in future versions of the document.
Means to protect SFC Boundary Nodes and SF Nodes against various forms of DDoS attacks MUST be supported. For example, mutual PDP and SF node authentication should be supported. Means to protect SF nodes against malformed, poorly configured (deliberately or not) SFC Policy Tables should be supported.
SFC Boundary Nodes MUST strip any existing SFC Map Index when handling an incoming packet. A list of authorized SFC Map Indexes are configured in the SFC elements.
NETCONF-related security considerations are discussed in [RFC6146].
Means to prevent SF loops should be supported.
Nodes involved in the same SFC-enabled domain MUST be provisioned with the same SFC Policy Table. Possible table inconsistencies may result in forwarding errors.
Many thanks to D. Abgrall, D. Minodier, Y. Le Goff, and D. Cheng for their review and comments.
[RFC2119] | Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. |
[RFC6241] | Enns, R., Bjorklund, M., Schoenwaelder, J. and A. Bierman, "Network Configuration Protocol (NETCONF)", RFC 6241, June 2011. |