This section outlines the realization of various nSFF forwarding operations in
Section 5.6. Although the operations in
Section 5 utilize the notion of name-based transactions in general, we exemplify the operations here in
Section 5 specifically for HTTP-based transactions to ground our description into a specific protocol for such name-based transaction. We will refer to the various steps in each of the following subsections.
Figure 4 shows the protocol layers based on the high-level architecture in
Figure 3.
+-------+ +------+----+ +----+-----+
|App | | | | +--------+ | | |
|HTTP | |--------> | | NR | |nSFF----->|--
|TCP |->| TCP |nSFF| +---/\---+ | | TCP | |
|IP | | IP | | || | | IP | |
+-------+ +------+----+ +---------+ +---------+ +----------+ |
| L2 | | L2 |->|Forwarder|-->|Forwarder|-->| L2 | |
+-------+ +------+----+ +---------+ +---------+ +----------+ |
SF1 nSFF1 nSFF2 |
+-------+ |
| App |/ |
| HTTP | -----------+
| TCP |\
| IP |
| L2 |
+-------+
SF2
The nSFF component here is shown as implementing a full incoming/outgoing TCP/IP protocol stack towards the local SFs, while implementing the nSFF-NR and nSFF-nSFF protocols based on the descriptions in
Section 6.2.3.
For the exchange of HTTP-based SF transactions, the nSFF terminates incoming TCP connections as well as outgoing TCP connections to local SFs, e.g., the TCP connection from SF1 terminates at nSFF1, and nSFF1 may store the connection information such as socket information. It also maintains the mapping information for the HTTP request such as originating SF, destination SF, and socket ID. nSFF1 may implement sending keep-alive messages over the socket to maintain the connection to SF1. Upon arrival of an HTTP request from SF1, nSFF1 extracts the HTTP Request and forwards it towards the next node as outlined in
Section 6.2. Any returning response is mapped onto the suitable open socket (for the original request) and sent towards SF1.
At the outgoing nSFF2, the destination SF2/Host is identified from the HTTP request message. If no TCP connection exists to the SF2, a new TCP connection is opened towards the destination SF2 and the HTTP request is sent over said TCP connection. The nSFF2 may also save the TCP connection information (such as socket information) and maintain the mapping of the socket information to the destination SF2. When an HTTP response is received from SF2 over the TCP connection, nSFF2 extracts the HTTP response, which is forwarded to the next node. nSFF2 may maintain the TCP connection through keep-alive messages.
In this section, we present three key aspects of operations for the realization of the steps in
Section 5.6, namely, (i) the registration of local SFs (for
Step 3 in
Section 5.6), (ii) the forwarding of SFC packets to and from local SFs (for Steps
3,
4, and
10 in
Section 5.6), (iii) the forwarding to a remote SF (for Steps
5,
6, and
7 in
Section 5.6) and to the NR as well as (iv) for the lookup of a suitable remote SF (for
Step 7 in
Section 5.6). We also cover aspects of maintaining local lookup information for reducing lookup latency and other issues.
Forwarding between the distributed nSFFs as well as between nSFFs and NRs is realized over the operator network via a path-based approach. A path-based approach utilizes path information provided by the source of the packet for forwarding said packet in the network. This is similar to segment routing albeit differing in the type of information provided for such source-based forwarding as described in this section. In this approach, the forwarding information to a remote nSFF or the NR is defined as a "path identifier" (pathID) of a defined length where said length field indicates the full pathID length. The payload of the packet is defined by the various operations outlined in the following subsections, resulting in an overall packet being transmitted. With this, the generic forwarding format (GFF) for transport over the operator network is defined in
Figure 5 with the length field defining the length of the pathID provided.
+---------+-----------------+------------------------//------------+
| | | // |
| Length | Path ID | Payload // |
|(12 bits)| | // |
+---------+-----------------+--------------------//----------------+
-
Length (12 bits): Defines the length of the pathID, i.e., up to 4096 bits
-
Path ID: Variable-length bit field derived from IPv6 source and destination address
For the pathID information, solutions such as those in [
Reed2016] can be used. Here, the IPv6 source and destination addresses are used to realize a so-called path-based forwarding from the incoming to the outgoing nSFF or the NR. The forwarders in
Figure 4 are realized via SDN (software-defined networking) switches, implementing an AND/CMP operation based on arbitrary wildcard matching over the IPv6 source and destination addresses as outlined in [
Reed2016]. Note that in the case of using IPv6 address information for path-based forwarding, the step of removing the TE at the outgoing nSFF in
Figure 4 is realized by utilizing the provided (existing) IP header (which was used for the purpose of the path-based forwarding in [
Reed2016]) for the purpose of next-hop forwarding such as that of IP-based routing. As described in
Step 8 of the extended nSFF operations, this forwarding information is used as traffic encapsulation. With the forwarding information utilizing existing IPv6 information, IP headers are utilized as TE in this case. The next-hop nSFF (see
Figure 4) will restore the IP header of the packet with the relevant IP information used to forward the SFC packet to SF2, or it will create suitable TE information to forward the information to another nSFF or boundary node. Forwarding operations at the intermediary forwarders, i.e., SDN switches, examine the pathID information through a flow-matching rule in which a specific switch-local output port is represented through the specific assigned bit position in the pathID. Upon a positive match in said rule, the packet is forwarded on said output port.
Alternatively, the solution in [
BIER-MULTICAST] suggests using a so-called BIER (Binary Indexed Explicit Replication) underlay. Here, the nSFF would be realized at the ingress to the BIER underlay, injecting the SFC packet header (plus the Network Service Header (NSH)) with BIER-based traffic encapsulation into the BIER underlay with each of the forwarders in
Figure 4 being realized as a so-called Bit-Forwarding Router (BFR) [
RFC 8279].
Given that the proposed solution operates at the "named-transaction" level, particularly for HTTP transactions, forwarding between nSFFs and/or NRs
SHOULD be implemented via a transport protocol between nSFFs and/or NRs in order to provide reliability, segmentation of large GFF packets, and flow control, with the GFF in
Figure 5 being the basic forwarding format for this.
Note that the nSFFs act as TCP proxies at ingress and egress, thus terminating incoming and initiating outgoing HTTP sessions to SFs.
Figure 6 shows the packet format being used for the transmission of data, being adapted from the TCP header. Segmentation of large transactions into single transport protocol packets is realized through maintaining a "Sequence number". A "Checksum" is calculated over a single data packet with the ones-complement TCP checksum calculation being used. The "Window Size" field indicates the current maximum number of transport packets that are allowed in-flight by the egress nSFF. A data packet is sent without a "Data" field to indicate the end of the (e.g., HTTP) transaction.
Note that, in order to support future named transactions based on other application protocols, such as Constrained Application Protocol (CoAP), future versions of the transport protocol
MAY introduce a "Type" field that indicates the type of application protocol being used between SF and nSFF with "Type" 0x01 proposed for HTTP. This is being left for future study.
+----------------------------------------------+
| 16 bits | 16 bits |
+----------------------------------------------+
| Sequence number |
+----------------------------------------------+
| Checksum | Window Size |
+----------------------------------------------+
| ... |
| Data (Optional) |
+----------------------------------------------+
Given the path-based forwarding being used between nSFFs, the transport protocol between nSFFs utilizes negative acknowledgements from the egress nSFF towards the ingress nSFF. The transport protocol negative Acknowledgment (NACK) packet carries the number of NACKs as well as the specific sequence numbers being indicated as lost in the "NACK number" field(s) as shown in
Figure 7.
+-----------------------+----------------------+
| 16 bits | 16 bits |
+----------------------------------------------+
| Number of NACKs | +
+----------------------------------------------+
| NACK number |
+----------------------------------------------+
+ ... NACK number +
+----------------------------------------------+
If the indicated number of NACKs in a received NACK packet is nonzero, the ingress nSFF will retransmit all sequence numbers signaled in the packet while decreasing its congestion window size for future transmissions.
If the indicated number of NACKs in a received NACK packet is zero, it will indicate the current congestion window as being successfully (and completely) being transmitted, increasing the congestion window size if smaller than the advertised "Window Size" in
Figure 6.
The maintenance of the congestion window is subject to realization at the ingress nSFF and left for further study in nSFF realizations.
As outlined in Steps
3 and
10 of
Section 5.6, the nSFF needs to determine if the SF derived from the Name-Based Network Locator (nNLM) is locally reachable or whether the packet needs to be forwarded to a remote SFF. For this, a registration mechanism is provided for such local SF with the local nSFF. Two mechanisms can be used for this:
-
SF-initiated: We assume that the SF registers its Fully Qualified Domain Name (FQDN) to the local nSFF. As local mechanisms, we foresee that either a Representational State Transfer (REST-based) interface over the link-local link or configuration of the nSFF (through configuration files or management consoles) can be utilized. Such local registration events lead to the nSFF registering the given FQDN with the NR in combination with a system-unique nSFF identifier that is being used for path-computation purposes in the NR. For the registration, the packet format in Figure 8 is used (inserted as the payload in the GFF of Figure 5 with the pathID towards the NR).
-
-
-
+---------+------------------+----------------+
| | | |
| R/D | hash(FQDN) | nSFF_ID |
| (1 bit) | (16 bits) | (8 bits) |
+---------+------------------+----------------+
-
R/D: 1-bit length (0 for Register, 1 for Deregister)
-
hash(FQDN): 16-bit length for a hash over the FQDN of the SF
-
nSFF_ID: 8-bit length for a system-unique identifier for the SFF related to the SF
-
-
We assume that the pathID towards the NR is known to the nSFF through configuration means.
-
The NR maintains an internal table that associates the hash(FQDN), the nSFF_id information, as well as the pathID information being used for communication between nSFFs and NRs. The nSFF locally maintains a mapping of registered FQDNs to IP addresses for the latter using link-local private IP addresses.
-
Orchestration-based: In this mechanism, we assume that SFC to be orchestrated and the chain to be provided through an orchestration template with FQDN information associated to a compute/storage resource that is being deployed by the orchestrator. We also assume knowledge at the orchestrator of the resource topology. Based on this, the orchestrator can now use the same REST-based protocol defined in option 1 to instruct the NR to register the given FQDN, as provided in the template, at the nSFF it has identified as being the locally servicing nSFF, provided as the system-unique nSFF identifier.
There are two cases of local SF forwarding, namely, the SF sending an SFC packet to the local nSFF (incoming requests) or the nSFF sending a packet to the SF (outgoing requests) as part of Steps
3 and
10 in
Section 5.6. In the following, we outline the operation for HTTP as an example-named transaction.
As shown in
Figure 4, incoming HTTP requests from SFs are extracted by terminating the incoming TCP connection at their local nSFFs at the TCP level. The nSFF
MUST maintain a mapping of open TCP sockets to HTTP requests (utilizing the URI of the request) for HTTP response association.
For outgoing HTTP requests, the nSFF utilizes the maintained mapping of locally registered FQDNs to link-local IP addresses (see
Section 6.2.2, option 1). Hence, upon receiving an SFC packet from a remote nSFF (in
Step 9 of
Section 5.6), the nSFF determines the local existence of the SF through the registration mechanisms in
Section 6.2.2. If said SF does exist locally, the HTTP (+NSH) packet, after stripping the TE, is sent to the local SF as
Step 10 in
Section 5.6 via a TCP-level connection. Outgoing nSFFs
SHOULD keep TCP connections open to local SFs for improving SFC packet delivery in subsequent transactions.
When executing Steps
3 and
10 in
Section 5.6, the SFC packet will be delivered to the locally registered next hop. As part of the HTTP protocol, responses to the HTTP request will need to be delivered on the return path to the originating nSFF (i.e., the previous hop). For this, the nSFF maintains a list of link-local connection information, e.g., sockets to the local SF and the pathID on which the request was received. Once receiving the response, nSFF consults the table to determine the pathID of the original request, forming a suitable GFF-based packet to be returned to the previous nSFF.
When receiving the HTTP response at the previous nSFF, the nSFF consults the table of (locally) open sockets to determine the suitable local SF connection, mapping the received HTTP response URI to the stored request URI. Utilizing the found socket, the HTTP response is forwarded to the locally registered SF.
In Steps
5,
6,
7, and
8 of
Section 5.6, an SFC packet is forwarded to a remote nSFF based on the nNLM information for the next hop of the nSFP.
Section 6.2.5.1 handles the case of suitable forwarding information to the remote nSFF not existing, therefore consulting the NR to obtain suitable information.
Section 6.2.5.2 describes the maintenance of forwarding information at the local nSFF.
Section 6.2.5.3 describes the update of stale forwarding information. Note that the forwarding described in
Section 6.2.1 is used for the actual forwarding to the various nSFF components. Ultimately,
Section 6.2.5.4 describes the forwarding to the remote nSFF via the forwarder network.
The nSFF communicates with the NR for two purposes: namely, the registration and discovery of FQDNs. The packet format for the former was shown in
Figure 8 in
Section 6.2.2, while
Figure 9 outlines the packet format for the discovery request.
+--------------+-------------+ +--------+-----------------//--------+
| | | | | // |
| hash(FQDN) | nSFF_ID | | Length | pathID // |
| (16 bits) | (8 bits) | |(4 bits)| // |
+--------------+-------------+ +--------+-------------//------------+
Path Request Path Response
For Path Request:
-
hash(FQDN): 16-bit length for a hash over the FQDN of the SF
-
nSFF_ID: 8-bit length for a system-unique identifier for the SFF related to the SF
For Path Response:
-
Length: 4-bit length that defines the length of the pathID
-
Path ID: Variable-length bit field derived from IPv6 source and destination address
A path to a specific FQDN is requested by sending a hash of the FQDN to the NR together with its nSFF_id, receiving as a response a pathID with a length identifier. The NR
SHOULD maintain a table of discovery requests that map discovered (hash of) FQDN to the nSFF_id that requested it and the pathID that is being calculated as a result of the discovery request.
The discovery request for an FQDN that has not previously been served at the nSFF (or for an FQDN whose pathID information has been flushed as a result of the update operations in
Section 6.2.5.3) results in an initial latency incurred by this discovery through the NR, while any SFC packet sent over the same SFP in a subsequent transaction will utilize the nSFF-local mapping table. Such initial latency can be avoided by prepopulating the FQDN-pathID mapping proactively as part of the overall orchestration procedure, e.g., alongside the distribution of the nNLM information to the nSFF.
Each nSFF
MUST maintain an internal table that maps the (hash of the) FQDN information to a suitable pathID. As outlined in
Step 7 of
Section 5.6, if a suitable entry does not exist for a given FQDN, the pathID information is requested with the operations in
Section 6.2.5.1 and the suitable entry is locally created upon receiving a reply with the forwarding operation being executed as described in
Section 6.2.1.
If such an entry does exist (i.e.,
Step 6 of
Section 5.6), the pathID is locally retrieved and used for the forwarding operation in
Section 6.2.1.
The forwarding information maintained at each nSFF (see
Section 6.2.5.2) might need to be updated for three reasons:
-
An existing SF is no longer reachable: In this case, the nSFF with which the SF is locally registered deregisters the SF explicitly at the NR by sending the packet in Figure 6 with the hashed FQDN and the R/D bit set to 1 (for deregister).
-
Another SF instance has become reachable in the network (and, therefore, might provide a better alternative to the existing SF): In this case, the NR has received another packet with a format defined in Figure 7 but a different nSFF_id value.
-
Links along paths might no longer be reachable: The NR might use a suitable southbound interface to transport networks to detect link failures, which it associates to the appropriate pathID bit position.
For this purpose, the packet format in
Figure 10 is sent from the NR to all affected nSFFs, using the generic format in
Figure 5.
+---------+-----------------+--------------//----+
| | | // |
| Type | #IDs | IDs // |
| (1 bit) | (8 bits) | // |
+---------+-----------------+----------//--------+
-
Type: 1-bit length (0 for Nsff ID, 1 for Link ID)
-
#IDs: 8-bit length for number of IDs in the list
-
IDs: List of IDs (Nsff ID or Link ID)
The pathID to the affected nSFFs is computed as the binary OR over all pathIDs to those nSFF_ids affected where the pathID information to the affected nSFF_id values is determined from the NR-local table maintained in the registration/deregistration operation of
Section 6.2.2.
The pathID may include the type of information being updated (e.g., node identifiers of leaf nodes or link identifiers for removed links). The node identifier itself may be a special identifier to signal "ALL NODES" as being affected. The node identifier may signal changes to the network that are substantial (e.g., parallel link failures). The node identifier may trigger (e.g., recommend) purging of the entire path table (e.g., rather than the selective removal of a few nodes only).
It will include the information according to the type. The included information may also be related to the type and length information for the number of identifiers being provided.
In cases 1 and 2, the Type bit is set to 1 (type nSFF_id) and the affected nSFFs are determined by those nSFFs that have previously sent SF discovery requests, utilizing the optional table mapping previously registered FQDNs to nSFF_id values. If no table mapping the (hash of) FQDN to nSFF_id is maintained, the update is sent to all nSFFs. Upon receiving the path update at the affected nSFF, all appropriate nSFF-local mapping entries to pathIDs for the hash(FQDN) identifiers provided will be removed, leading to a new NR discovery request at the next remote nSFF forwarding to the appropriate FQDN.
In case 3, the Type bit is set to 0 (type linkID) and the affected nSFFs are determined by those nSFFs whose discovery requests have previously resulted in pathIDs that include the affected link, utilizing the optional table mapping previously registered FQDNs to pathID values (see
Section 6.2.5.1). Upon receiving the node identifier information in the path update, the affected nSFF will check its internal table that maps FQDNs to pathIDs to determine those pathIDs affected by the link problems and remove path information that includes the received node identifier(s). For this, the pathID entries of said table are checked against the linkID values provided in the ID entry of the path update through a binary AND/CMP operation to check the inclusion of the link in the pathIDs to the FQDNs. If any pathID is affected, the FQDN-pathID entry is removed, leading to a new NR discovery request at the next remote nSFF forwarding to the appropriate FQDN.
Once Steps
5,
6, and
7 in
Section 5.6 are being executed,
Step 8 finally sends the SFC packet to the remote nSFF, utilizing the pathID returned in the discovery request (
Section 6.2.5.1) or retrieved from the local pathID mapping table. The SFC packet is placed in the payload of the generic forwarding format in
Figure 5 together with the pathID, and the nSFF eventually executes the forwarding operations in
Section 6.2.1.