rfc9508.original | rfc9508.txt | |||
---|---|---|---|---|
ICNRG S. Mastorakis | Internet Research Task Force (IRTF) S. Mastorakis | |||
Internet-Draft University of Notre Dame | Request for Comments: 9508 University of Notre Dame | |||
Intended status: Experimental D. Oran | Category: Experimental D. Oran | |||
Expires: 29 February 2024 Network Systems Research and Design | ISSN: 2070-1721 Network Systems Research and Design | |||
J. Gibson | J. Gibson | |||
Unaffiliated | Unaffiliated | |||
I. Moiseenko | I. Moiseenko | |||
Apple Inc | Apple Inc. | |||
R. Droms | R. Droms | |||
Unaffiliated | Unaffiliated | |||
28 August 2023 | March 2024 | |||
ICN Ping Protocol Specification | Information-Centric Networking (ICN) Ping Protocol Specification | |||
draft-irtf-icnrg-icnping-12 | ||||
Abstract | Abstract | |||
This document presents the design of an ICN Ping protocol. It | This document presents the design of an Information-Centric | |||
includes the operations of both the client and the forwarder. | Networking (ICN) Ping protocol. It includes the operations of both | |||
the client and the forwarder. | ||||
This document is a product of the Information-Centric Networking | This document is a product of the Information-Centric Networking | |||
Research Group (ICNRG) of the IRTF. | Research Group (ICNRG) of the IRTF. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
evaluation. | ||||
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 https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document defines an Experimental Protocol for the Internet | |||
and may be updated, replaced, or obsoleted by other documents at any | community. This document is a product of the Internet Research Task | |||
time. It is inappropriate to use Internet-Drafts as reference | Force (IRTF). The IRTF publishes the results of Internet-related | |||
material or to cite them other than as "work in progress." | research and development activities. These results might not be | |||
suitable for deployment. This RFC represents the consensus of the | ||||
Information-Centric Networking Research Group of the Internet | ||||
Research Task Force (IRTF). Documents approved for publication by | ||||
the IRSG are not candidates for any level of Internet Standard; see | ||||
Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 29 February 2024. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9508. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. | carefully, as they describe your rights and restrictions with respect | |||
to this document. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | 1.1. Requirements Language | |||
1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.2. Terminology | |||
2. Background on IP-Based Ping Operation . . . . . . . . . . . . 4 | 2. Background on IP-Based Ping Operation | |||
3. Ping Functionality Challenges and Opportunities in ICN . . . 4 | 3. Ping Functionality Challenges and Opportunities in ICN | |||
4. ICN Ping Echo CCNx Packet Formats . . . . . . . . . . . . . . 7 | 4. ICN Ping Echo CCNx Packet Formats | |||
4.1. ICN Ping Echo Request CCNx Packet Format . . . . . . . . 7 | 4.1. ICN Ping Echo Request CCNx Packet Format | |||
4.2. Ping Echo Reply CCNx Packet Format . . . . . . . . . . . 8 | 4.2. ICN Ping Echo Reply CCNx Packet Format | |||
5. ICN Ping Echo NDN Packet Formats . . . . . . . . . . . . . . 11 | 5. ICN Ping Echo NDN Packet Formats | |||
5.1. ICN Ping Echo Request NDN Packet Format . . . . . . . . . 11 | 5.1. ICN Ping Echo Request NDN Packet Format | |||
5.2. Ping Echo Reply NDN Packet Format . . . . . . . . . . . . 12 | 5.2. ICN Ping Echo Reply NDN Packet Format | |||
6. Forwarder Handling . . . . . . . . . . . . . . . . . . . . . 13 | 6. Forwarder Handling | |||
7. Protocol Operation For Locally-Scoped Namespaces . . . . . . 15 | 7. Protocol Operation for Locally Scoped Namespaces | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | 8. Security Considerations | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 | 9. IANA Considerations | |||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 16 | 10. References | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 10.1. Normative References | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 17 | 10.2. Informative References | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 17 | Appendix A. Ping Client Application (Consumer) Operation | |||
Appendix A. Ping Client Application (Consumer) Operation . . . . 18 | Acknowledgements | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
Ascertaining data plane reachability to a destination and taking | Ascertaining data plane reachability to a destination and taking | |||
coarse performance measurements of round trip time are fundamental | coarse performance measurements of Round-Trip Time (RTT) are | |||
facilities for network administration and troubleshooting. In IP, | fundamental facilities for network administration and | |||
where routing and forwarding are based on IP addresses, ICMP echo and | troubleshooting. In IP, where routing and forwarding are based on IP | |||
ICMP echo response are the protocol mechanisms used for this purpose, | addresses, ICMP Echo Request and ICMP Echo Reply packets are the | |||
generally exercised through the familiar ping utility. In ICN, where | protocol mechanisms used for this purpose, generally exercised | |||
routing and forwarding are based on name prefixes, the ability to | through the familiar ping utility. In Information-Centric Networking | |||
ascertain reachability of names is required. | (ICN), where routing and forwarding are based on name prefixes, the | |||
ability to ascertain the reachability of names is required. | ||||
This document proposes protocol mechanisms for a ping equivalent in | This document proposes protocol mechanisms for a ping equivalent in | |||
ICN (CCNx [RFC8609] and NDN [NDNTLV]) networks. A non-normative | ICN networks (Content-Centric Networking (CCNx) [RFC8609] and Named | |||
appendix suggests useful properties for an ICN ping client | Data Networking (NDN) [NDNTLV]). A non-normative section | |||
application, analogous to IP ping, that originates echo requests and | (Appendix A) suggests useful properties for an ICN Ping client | |||
processes echo replies. | application, analogous to IP ping, that originates Echo Requests and | |||
processes Echo Replies. | ||||
In order to carry out meaningful experimentation and deployment of | In order to carry out meaningful experimentation and deployment of | |||
ICN protocols, tools to manage and debug the operation of ICN | ICN protocols, new tools analogous to ping and traceroute used for | |||
architectures and protocols are needed analogous to ping and | TCP/IP are needed to manage and debug the operation of ICN | |||
traceroute used for TCP/IP. This document describes the design of a | architectures and protocols. This document describes the design of a | |||
management and debugging protocol analogous to the ping protocol of | management and debugging protocol analogous to the ping protocol of | |||
TCP/IP, which will aid the experimental deployment of ICN protocols. | TCP/IP; this new management and debugging protocol will aid the | |||
As the community continues its experimentation with ICN architectures | experimental deployment of ICN protocols. As the community continues | |||
and protocols, the design of ICN Ping might change accordingly. ICN | its experimentation with ICN architectures and protocols, the design | |||
Ping is designed as a "first line of defense" tool to troubleshoot | of ICN Ping might change accordingly. ICN Ping is designed as a | |||
ICN architectures and protocols. As such, this document is | "first line of defense" tool to troubleshoot ICN architectures and | |||
classified as an experimental RFC. Note that a measurement | protocols. As such, this document is classified as an Experimental | |||
application is needed to make proper use of ICN Ping in order to | RFC. Note that a measurement application is needed to make proper | |||
compute various statistics, such as the variance, average, maximum | use of ICN Ping in order to compute various statistics, such as | |||
and minimum RTT values as well as loss rates. | average, maximum, and minimum Round-Trip Time (RTT) values, variance | |||
in RTTs, and loss rates. | ||||
This document is not an Internet Standards Track specification; it is | This RFC represents the consensus of the Information-Centric | |||
published for examination, experimental implementation, and | Networking Research Group (ICNRG) of the Internet Research Task Force | |||
evaluation. This document defines an Experimental Protocol for the | (IRTF). | |||
Internet community. This document is a product of the Internet | ||||
Research Task Force (IRTF). The IRTF publishes the results of | ||||
Internet-related research and development activities. These results | ||||
might not be suitable for deployment. This RFC represents the | ||||
consensus of the Information-Centric Networking Research Group of the | ||||
Internet Research Task Force (IRTF). Documents approved for | ||||
publication by the IRSG are not candidates for any level of Internet | ||||
Standard; see Section 2 of RFC 7841. | ||||
1.1. Requirements Language | 1.1. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
document are to be interpreted as described in BCP 14 [RFC2119] | "OPTIONAL" in this document are to be interpreted as described in | |||
[RFC8174] when, and only when, they appear in all capitals, as shown | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
here. | capitals, as shown here. | |||
1.2. Terminology | 1.2. Terminology | |||
This specification uses the terminology defined in [RFC8793]. To aid | This specification uses the terminology defined in [RFC8793]. To aid | |||
the understanding of readers, we additionally define the following | the reader, we additionally define the following terms: | |||
terms: | ||||
* Producer's name: The name prefix that a request must carry in | Producer's Name: The name prefix that a request must carry in order | |||
order to reach a producer over an ICN network. | to reach a producer over an ICN network. | |||
* Named Data: A synonym for a content object. | Named Data: A synonym for a Content Object. | |||
* Round Trip Time (RTT): The time between sending a request for a | Round-Trip Time (RTT): The time between sending a request for a | |||
specific piece of named data and receiving the corresponding piece | specific piece of named data and receiving the corresponding piece | |||
of named data. | of named data. | |||
* Sender: An entity that sends a request for named data or a piece | Sender: An entity that sends a request for named data or a piece of | |||
of named data. | named data. | |||
* Name of a sender: An alias of producer's name. | Name of a Sender: An alias of a producer's name. | |||
* Border forwarder: The forwarder that is the border of a network | Border Forwarder: The forwarder that is the border of a network | |||
region where a producer's name is directly routable (i.e., the | region where a producer's name is directly routable (i.e., the | |||
producer's name is present in the FIB of forwarders within this | producer's name is present in the FIB of forwarders within this | |||
network region). | network region). | |||
2. Background on IP-Based Ping Operation | 2. Background on IP-Based Ping Operation | |||
In IP-based ping, an IP address is specified by the user either | In IP-based ping, an IP address is specified by the user either | |||
directly, or via translation of a domain name through DNS. The ping | directly or via translation of a domain name through DNS. The ping | |||
client application sends a number of ICMP Echo Request packets with | client application sends a number of ICMP Echo Request packets with | |||
the specified IP address as the IP destination address and an IP | the specified IP address as the IP destination address and an IP | |||
address from the client's host as the IP source address. | address from the client's host as the IP source address. | |||
Each ICMP Echo Request is forwarded across the network based on its | Each ICMP Echo Request is forwarded across the network based on its | |||
destination IP address. If it eventually reaches the destination, | destination IP address. If it eventually reaches the destination, | |||
the destination responds by sending back an ICMP Echo Reply packet to | the destination responds by sending back an ICMP Echo Reply packet to | |||
the IP source address from the ICMP Echo Request. | the IP source address from the ICMP Echo Request. | |||
If an ICMP Echo Request does not reach the destination or the Echo | If an ICMP Echo Request does not reach the destination or the Echo | |||
reply is lost, the ping client times out. Any ICMP error messages, | Reply is lost, the ping client times out. Any ICMP error messages | |||
such as "no route to destination", generated by the ICMP Echo Request | generated in response to the ICMP Echo Request message, such as "No | |||
message are returned to the client and reported. | route to destination", are returned to the client and reported. | |||
3. Ping Functionality Challenges and Opportunities in ICN | 3. Ping Functionality Challenges and Opportunities in ICN | |||
In ICN, the communication paradigm is based exclusively on named | In ICN, the communication paradigm is based exclusively on named | |||
objects. An Interest is forwarded across the network based on the | objects. An Interest message is forwarded across the network based | |||
name prefix that it carries. Eventually, a content object is | on the name prefix that it carries. Eventually, a Content Object is | |||
retrieved either from a producer application or some forwarder's | retrieved from either a producer application or some forwarder's | |||
Content Store (CS). | Content Store (CS). | |||
IP-based ping was built as an add-on measurement and debugging tool | IP-based ping was built as an add-on measurement and debugging tool | |||
on top of an already existing network architecture. In ICN, we have | on top of an already-existing network architecture. In ICN, we have | |||
the opportunity to incorporate diagnostic mechanisms directly in the | the opportunity to incorporate diagnostic mechanisms directly in the | |||
network layer protocol, and hopefully provide more powerful | network-layer protocol and, hopefully, provide more powerful | |||
diagnostic capability than can be realized through the layered ICMP | diagnostic capability than can be realized through the layered ICMP | |||
Echo approach. | Echo approach. | |||
An ICN network differs from an IP network in at least 4 important | An ICN network differs from an IP network in at least four important | |||
ways: | ways (four of which are as follows): | |||
* IP identifies interfaces to an IP network with a fixed-length | * IP identifies interfaces to an IP network with a fixed-length | |||
address, and delivers IP packets to one or more of these | address and delivers IP packets to one or more of these | |||
interfaces. ICN identifies units of data in the network with a | interfaces. ICN identifies units of data in the network with a | |||
variable length name consisting of a hierarchical list of name | variable-length name consisting of a hierarchical list of name | |||
components. | components. | |||
* An IP-based network depends on the IP packets having source IP | * An IP-based network depends on the IP packets having source IP | |||
addresses that are used as the destination address for replies. | addresses that are used as the destination address for replies. | |||
On the other hand, ICN Interests do not have source addresses and | On the other hand, ICN Interests do not have source addresses, and | |||
they are forwarded based on names, which do not refer to a unique | they are forwarded based on names, which do not refer to a unique | |||
end-point. Data packets follow the reverse path of the Interests | endpoint. Data packets follow the reverse path of the Interests | |||
based on hop-by-hop state created during Interest forwarding. | based on hop-by-hop state created during Interest forwarding. | |||
* An IP network supports multi-path, single destination, stateless | * An IP network supports multi-path, single-destination, stateless | |||
packet forwarding and delivery via unicast, a limited form of | packet forwarding and delivery via unicast; a limited form of | |||
multi-destination selected delivery with anycast, and group-based | multi-destination selected delivery with anycast; and group-based | |||
multi-destination delivery via multicast. In contrast, ICN | multi-destination delivery via multicast. In contrast, ICN | |||
supports multi-path and multi-destination stateful Interest | supports multi-path and multi-destination stateful Interest | |||
forwarding and multi-destination delivery of named data. This | forwarding and multi-destination delivery of named data. This | |||
single forwarding semantic subsumes the functions of unicast, | single forwarding semantic subsumes the functions of unicast, | |||
anycast, and multicast. As a result, consecutive (or | anycast, and multicast. As a result, consecutive (or | |||
retransmitted) ICN Interest messages may be forwarded through an | retransmitted) ICN Interest messages may be forwarded through an | |||
ICN network along different paths, and may be forwarded to | ICN network along different paths and may be forwarded to | |||
different data sources (e.g., end-node applications, in-network | different data sources (e.g., end-node applications and in-network | |||
storage) holding a copy of the requested unit of data. This can | storage) holding a copy of the requested unit of data. This can | |||
lead to a significant variance in round-trip times, which while | lead to a significant variance in RTTs; such variance, while | |||
resulting in a more robust overall forwarding architecture, has | resulting in a more robust overall forwarding architecture, has | |||
implications for a network troubleshooting mechanism like ping. | implications for a network troubleshooting mechanism like ping. | |||
* In the case of multiple Interests with the same name arriving at a | * In the case of multiple Interests with the same name arriving at a | |||
forwarder, a number of Interests may be aggregated in a common | forwarder, a number of Interests may be aggregated in a common | |||
Pending Interest Table (PIT) entry and only one of them forwarded | Pending Interest Table (PIT) entry and only one of them forwarded | |||
onward. Depending on the lifetime of a PIT entry, the round-trip | onward. Depending on the lifetime of a PIT entry, the RTT of an | |||
time an Interest-Data exchange might significantly vary (e.g., it | Interest-Data exchange might vary significantly (e.g., it might be | |||
might be shorter than the full round-trip time to reach the | shorter than the full RTT to reach the original content producer). | |||
original content producer). To this end, the round-trip time | To this end, the RTT experienced by consumers might also vary. | |||
experienced by consumers might also vary. | ||||
These differences introduce new challenges, new opportunities and new | These differences introduce new challenges, new opportunities, and | |||
requirements in the design of an ICN ping protocol. Following this | new requirements regarding the design of an ICN Ping protocol. | |||
communication model, a ping client should be able to express ping | Following this communication model, a ping client should be able to | |||
echo requests with some name prefix and receive responses. | express Ping Echo Requests with some name prefix and receive | |||
responses. | ||||
Our goals are the following: | Our goals are as follows: | |||
* Test the reachability and the operational state of an ICN | * Test the reachability and the operational state of an ICN | |||
forwarder. | forwarder. | |||
* Test the reachability of a producer or a data repository (in the | * Test the reachability of a producer or a data repository (in the | |||
sense of whether Interests for a prefix that it serves can be | sense of whether Interests for a prefix that it serves can be | |||
forwarded to it) and discover the forwarder with local | forwarded to it), and discover the forwarder with local | |||
connectivity to (an instance of) this producer or repository. | connectivity to (an instance of) this producer or repository. | |||
* Test whether a specific named object is cached in some on-path CS | * Test whether a specific named object is cached in some on-path CS | |||
(e.g., a video segment with a name "/video/_seq=1”), and, if so, | (e.g., a video segment with the name "/video/_seq=1"), and, if so, | |||
return the administrative name of the corresponding forwarder | return the administrative name of the corresponding forwarder | |||
(e.g., a forwarder with an administrative name "/ISP/forwarder1”). | (e.g., a forwarder with the administrative name | |||
"/ISP/forwarder1"). | ||||
* Perform some simple network performance measurements, such as RTT | * Perform some simple network performance measurements, such as RTT | |||
and loss rate. | and loss rate. | |||
To this end, a ping name can represent: | To this end, a ping name can represent: | |||
* An administrative name that has been assigned to a forwarder. | * An administrative name that has been assigned to a forwarder. | |||
* A name that includes an application's namespace as a prefix. | * A name that includes an application's namespace as a prefix. | |||
* A named object that might reside in some in-network storage. | * A named object that might reside in some in-network storage. | |||
In order to provide stable and reliable diagnostics, it is desirable | In order to provide stable and reliable diagnostics, it is desirable | |||
that the packet encoding of a ping echo request enable the forwarders | that the packet encoding of a Ping Echo Request enable the forwarders | |||
to distinguish a ping from a normal Interest, while also allowing for | to distinguish a ping from a normal Interest, while diverging as | |||
forwarding behavior to be as similar as possible to that of an | little as possible from the forwarding behavior for an Interest | |||
Interest packet. In the same way, the encoding of a ping echo reply | packet. In the same way, the encoding of a Ping Echo Reply should | |||
should allow for forwarder processing as close as possible to that | minimize any processing differences from those employed for a data | |||
used for data packets. | packet by the forwarders. | |||
The ping protocol should also enable relatively robust round-trip | The ping protocol should also enable relatively robust RTT | |||
time measurements. To this end, it is valuable to have a mechanism | measurements. To this end, it is valuable to have a mechanism to | |||
to steer consecutive ping echo requests for the same name towards an | steer consecutive Ping Echo Requests for the same name towards an | |||
individual path. Such a capability was initially published in | individual path. Such a capability was initially published in | |||
[PATHSTEERING] and has been specified for CCNx and NDN in | [PATHSTEERING] and has been specified for CCNx and NDN in [RFC9531]. | |||
[I-D.irtf-icnrg-pathsteering]. | ||||
It is also important, in the case of ping echo requests for the same | In the case of Ping Echo Requests for the same name from different | |||
name from different sources to have a mechanism to avoid those | sources, it is also important to have a mechanism to avoid those | |||
requests being aggregated in the PIT. To this end, we need some | requests being aggregated in the PIT. To this end, we need some | |||
encoding in the ping echo requests to make each request for a common | encoding in the Ping Echo Requests to make each request for a common | |||
name unique, hence avoiding PIT aggregation and further enabling the | name unique, hence avoiding PIT aggregation and further enabling the | |||
exact match of a response with a particular ping packet. However, | exact match of a response with a particular ping packet. However, | |||
avoiding PIT aggregation could lead to PIT DoS attacks. | avoiding PIT aggregation could lead to PIT DoS attacks. | |||
4. ICN Ping Echo CCNx Packet Formats | 4. ICN Ping Echo CCNx Packet Formats | |||
In this section, we describe the Echo Packet Format according to the | In this section, we describe the Echo packet formats according to the | |||
CCNx packet format [RFC8569], where messages exist within outermost | CCNx packet format [RFC8569], where messages exist within outermost | |||
containments (packets). Specifically, we specify two types of ping | containments (packets). Specifically, we propose two types of ping | |||
packets, an echo request and an echo reply packet type. | packets: an Echo Request and an Echo Reply. | |||
4.1. ICN Ping Echo Request CCNx Packet Format | 4.1. ICN Ping Echo Request CCNx Packet Format | |||
The format of the ping echo request packet is presented below: | The format of the Ping Echo Request packet is presented below: | |||
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 | 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 | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | | | | | |||
| Version |PT_ECHO_REQUEST| PacketLength | | | Version |PT_ECHO_REQUEST| PacketLength | | |||
| | | | | | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | | | | | | | |||
| HopLimit | Reserved | Flags | HeaderLength | | | HopLimit | Reserved | Flags | HeaderLength | | |||
| | | | | | | | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
/ / | / / | |||
/ Path label TLV / | / Path Label TLV / | |||
/ / | / / | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | |||
| Echo Request Message TLVs | | | Echo Request Message TLVs | | |||
| | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
Figure 1: Echo Request CCNx Packet Format | Figure 1: Echo Request CCNx Packet Format | |||
The existing packet header fields have the same definition as the | The existing packet header fields have the same definition as the | |||
header fields of a CCNx Interest packet. The value of the packet | header fields of a CCNx Interest packet. The value of the packet | |||
type field is _PT_ECHO_REQUEST_. See Section 9 for the value | type field is _PT_ECHO_REQUEST_. See Section 9 for the value | |||
assignments. | assignment. | |||
Compared to the typical format of a CCNx packet header from | Compared to the typical format of a CCNx packet header [RFC8609], | |||
[RFC8569], in order to enable path steering of Echo Requests, there | there is a new optional fixed header added to the packet header: | |||
is an optional fixed header Path label TLV as specified in section | ||||
3.1 of [I-D.irtf-icnrg-pathsteering] added to the packet header: | ||||
The message format of an echo request is presented below: | * A Path Steering hop-by-hop header TLV, which is constructed hop by | |||
hop in the Ping Echo Reply and included in the Ping Echo Request | ||||
to steer consecutive requests expressed by a client towards a | ||||
common forwarding path or different forwarding paths. The Path | ||||
Label TLV is specified in [RFC9531]. | ||||
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 | The message format of an Echo Request is presented below: | |||
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 | ||||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | | | |||
| MessageType = 0x0005 | MessageLength | | | MessageType = 0x05 | MessageLength | | |||
| | | | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | |||
| Name TLV | | | Name TLV | | |||
| | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
Figure 2: Echo Request Message Format | Figure 2: Echo Request Message Format | |||
The echo request message is of type T_DISCOVERY. The Name TLV has | The Echo Request message is of type T_DISCOVERY. The Name TLV has | |||
the structure described in [RFC8609]. The name consists of the | the structure described in [RFC8609]. The name consists of the | |||
prefix that we would like to ping appended with a nonce typed name | prefix that we would like to ping appended with a nonce typed name | |||
segment (T_NONCE) as its last segment. The nonce can be encoded as a | segment (T_NONCE) as its last segment. The nonce can be encoded as a | |||
base64-encoded string with the URL-safe alphabet as defined in | base64-encoded string with the URL-safe alphabet as defined in | |||
Section 5 of [RFC4648], with padding omitted. See Section 9 for the | Section 5 of [RFC4648], with padding omitted. See Section 9 for the | |||
value assigned to this name segment type. The value of this TLV is a | value assigned to this name segment type. The value of this TLV is a | |||
64-bit nonce. The purpose of the nonce is to avoid Interest | 64-bit nonce. The purpose of the nonce is to avoid Interest | |||
aggregation and allow client matching of replies with requests. As | aggregation and allow client matching of replies with requests. As | |||
described below, the nonce is ignored for CS checking. | described below, the nonce is ignored for CS checking. | |||
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 | 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_NONCE_Type | T_NONCE_Length = 8 | | | T_NONCE_Type | T_NONCE_Length = 8 | | |||
| | | | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | |||
| | | | | | |||
| | | | | | |||
| T_NONCE_Value | | | T_NONCE_Value | | |||
| | | | | | |||
| | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
Figure 3: T_NONCE Name Segment TLV for Echo Request messages | Figure 3: T_NONCE Name Segment TLV for Echo Request Messages | |||
4.2. Ping Echo Reply CCNx Packet Format | 4.2. ICN Ping Echo Reply CCNx Packet Format | |||
The format of a ping echo reply packet is presented below: | The format of a Ping Echo Reply packet is presented below: | |||
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 | 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 | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | | | | | |||
| Version | PT_ECHO_REPLY | PacketLength | | | Version | PT_ECHO_REPLY | PacketLength | | |||
| | | | | | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | | | | | |||
| Reserved | Flags | HeaderLength | | | Reserved | Flags | HeaderLength | | |||
| | | | | | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
/ / | / / | |||
/ Path label TLV / | / Path Label TLV / | |||
/ / | / / | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | |||
| Echo Reply Message TLVs | | | Echo Reply Message TLVs | | |||
| | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
Figure 4: Echo Reply CCNx Packet Format | Figure 4: Echo Reply CCNx Packet Format | |||
The header of an echo reply consists of the header fields of a CCNx | The header of an Echo Reply consists of the header fields of a CCNx | |||
Content Object and a hop-by-hop Path label TLV. The value of the | Content Object and a hop-by-hop Path Label TLV. The value of the | |||
packet type field is PT_ECHO_REPLY. See Section 9 for the value | packet type field is PT_ECHO_REPLY. See Section 9 for the value | |||
assignments. The Path label header TLV from section 3.1 of | assignment. The Path Label header TLV (Section 3.1 of [RFC9531]) is | |||
[I-D.irtf-icnrg-pathsteering] is as defined for the echo request | as defined for the Echo Request packet. | |||
packet. | ||||
A ping echo reply message is of type T_OBJECT, contains a Name TLV | A Ping Echo Reply message is of type T_OBJECT and contains a Name TLV | |||
(name of the corresponding echo request), a PayloadType TLV and an | (name of the corresponding Echo Request), a PayloadType TLV, and an | |||
ExpiryTime TLV with a value of 0 to indicate that echo replies must | ExpiryTime TLV with a value of 0 to indicate that Echo Replies must | |||
not be returned from network caches. | not be returned from network caches. | |||
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 | 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 | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | | | |||
| MessageType = 0x0005 | MessageLength | | | MessageType = 0x06 | MessageLength | | |||
| | | | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | |||
| Name TLV | | | Name TLV | | |||
| | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | |||
| PayloadType TLV | | | PayloadType TLV | | |||
| | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
| | | | | | |||
| ExpiryTime TLV | | | ExpiryTime TLV | | |||
| | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
Figure 5: Echo Reply Message Format | Figure 5: Echo Reply Message Format | |||
The PayloadType TLV is presented below. It is of type | The PayloadType TLV is presented below. It is of type | |||
T_PAYLOADTYPE_DATA, and the data schema consists of 3 TLVs: 1) the | T_PAYLOADTYPE_DATA, and the data schema consists of three TLVs: | |||
name of the sender of this reply (with the same structure as a CCNx | ||||
Name TLV), 2) the sender's signature of their own name (with the same | ||||
structure as a CCNx ValidationPayload TLV), 3) a TLV with a return | ||||
code to indicate what led to the generation of this reply (i.e., | ||||
existence of a local application, a CS hit or a match with a | ||||
forwarder's administrative name as specified in Section 6). | ||||
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 | 1) the name of the sender of this reply (with the same structure as | |||
a CCNx Name TLV), | ||||
2) the sender's signature of their own name (with the same structure | ||||
as a CCNx ValidationPayload TLV), and | ||||
3) a TLV with a return code to indicate what led to the generation | ||||
of this reply (i.e., the existence of a local application, a CS | ||||
hit, or a match with a forwarder's administrative name as | ||||
specified in Section 6). | ||||
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_PAYLOADTYPE_DATA | Length | | | T_PAYLOADTYPE_DATA | Length | | |||
| | | | | | | | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
/ / | / / | |||
/ Sender's Name TLV / | / Sender's Name TLV / | |||
/ / | / / | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
/ / | / / | |||
/ Sender's Signature TLV / | / Sender's Signature TLV / | |||
/ / | / / | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
/ / | / / | |||
/ Echo Reply Code / | / Echo Reply Code / | |||
/ / | / / | |||
+---------------+---------------+---------------+---------------+ | +---------------+---------------+---------------+---------------+ | |||
Figure 6: Echo Reply Message Format | ||||
The goal of including the name of the sender in the echo reply is to | Figure 6: Echo Reply PayloadType TLV Format | |||
The goal of including the name of the sender in the Echo Reply is to | ||||
enable the user to reach this entity directly to ask for further | enable the user to reach this entity directly to ask for further | |||
management/administrative information using generic Interest-Data | management/administrative information using generic Interest-Data | |||
exchanges or by employing a more comprehensive management tool such | exchanges or by employing a more comprehensive management tool, such | |||
as CCNinfo [RFC9344] after a successful verification of the sender's | as CCNinfo [RFC9344], after a successful verification of the sender's | |||
name. | name. | |||
The types of the Echo Reply Code field are the following: | The types of the Echo Reply Code field are as follows: | |||
* T_ECHO_RETURN_FORWARDER: Indicates that the target name matched | T_ECHO_RETURN_FORWARDER: Indicates that the target name matched the | |||
the administrative name of a forwarder. | administrative name of a forwarder. | |||
* T_ECHO_RETURN_APPLICATION: Indicates that the target name matched | T_ECHO_RETURN_APPLICATION: Indicates that the target name matched a | |||
a prefix served by an application. | prefix served by an application. | |||
* T_ECHO_RETURN_OBJECT: Indicates that the target name matched the | T_ECHO_RETURN_OBJECT: Indicates that the target name matched the | |||
name of an object in a forwarder's CS. | name of an object in a forwarder's CS. | |||
5. ICN Ping Echo NDN Packet Formats | 5. ICN Ping Echo NDN Packet Formats | |||
In this section, we present the ICN Ping Echo Request and Reply | In this section, we present the ICN Ping Echo Request and Reply | |||
Format according to the NDN packet specification [NDNTLV]. | packet formats according to the NDN packet format specification | |||
[NDNTLV]. | ||||
5.1. ICN Ping Echo Request NDN Packet Format | 5.1. ICN Ping Echo Request NDN Packet Format | |||
An echo request is encoded as an NDN Interest packet. Its format is | An Echo Request is encoded as an NDN Interest packet. Its format is | |||
the following: | as follows: | |||
EchoRequest = INTEREST-TYPE TLV-LENGTH | EchoRequest = INTEREST-TYPE TLV-LENGTH | |||
Name | Name | |||
MustBeFresh | MustBeFresh | |||
Nonce | Nonce | |||
ApplicationParameters? | ApplicationParameters? | |||
Figure 7: Echo Request NDN Packet Format | Figure 7: Echo Request NDN Packet Format | |||
The name field of an echo request consists of the name prefix to be | The name field of an Echo Request consists of the name prefix to be | |||
pinged, a nonce value (it can be the value of the Nonce field) and | pinged, a nonce value (it can be the value of the Nonce field), and | |||
the suffix "ping" to denote that this Interest is a ping request | the suffix "ping" to denote that this Interest is a ping request | |||
(added as a KeywordNameComponent). When the "ApplicationParameters" | (added as a KeywordNameComponent [NDNTLV]). When the | |||
element is present, a parametersSha256DigestComponent is added as the | "ApplicationParameters" element is present, a | |||
last name segment. | ParametersSha256DigestComponent (Section 6) is added as the last name | |||
segment. | ||||
An echo request MAY carry a Path label TLV in the NDN Link Adaptation | An Echo Request MAY carry a Path Label TLV in the NDN Link Adaptation | |||
Protocol [NDNLPv2] as specified in [I-D.irtf-icnrg-pathsteering]. | Protocol [NDNLPv2] as specified in [RFC9531]. | |||
Since the NDN packet format does not provide a mechanism to prevent | Since the NDN packet format does not provide a mechanism to prevent | |||
the network from caching specific data packets, we use the | the network from caching specific data packets, we use the | |||
MustBeFresh element for echo requests (in combination with a | MustBeFresh TLV for Echo Requests (in combination with a | |||
Freshness Period TLV of value 1 for echo replies) to avoid fetching | FreshnessPeriod TLV with a value of 1 for Echo Replies) to avoid | |||
cached echo replies with an expired freshness period [REALTIME]. | fetching cached Echo Replies with an expired freshness period | |||
[REALTIME]. | ||||
5.2. Ping Echo Reply NDN Packet Format | 5.2. ICN Ping Echo Reply NDN Packet Format | |||
An echo reply is encoded as an NDN Data packet. Its format is the | An Echo Reply is encoded as an NDN Data packet. Its format is as | |||
following: | follows: | |||
EchoReply = DATA-TLV TLV-LENGTH | EchoReply = DATA-TLV TLV-LENGTH | |||
Name | Name | |||
MetaInfo | MetaInfo | |||
Content | Content | |||
Signature | Signature | |||
Figure 8: Echo Reply NDN Packet Format | Figure 8: Echo Reply NDN Packet Format | |||
An echo reply MAY contain a Path label TLV in the NDN Link Adaptation | An Echo Reply MAY carry a Path Label TLV in the NDN Link Adaptation | |||
Protocol [NDNLPv2] as specified in [I-D.irtf-icnrg-pathsteering], | Protocol [NDNLPv2] as specified in [RFC9531], since it might be | |||
since it might be modified in a hop-by-hop fashion by the forwarders | modified in a hop-by-hop fashion by the forwarders along the reverse | |||
along the reverse path. | path. | |||
The name of an echo reply is the name of the corresponding echo | The name of an Echo Reply is the name of the corresponding Echo | |||
request, while the format of the MetaInfo field is the following: | Request while the format of the MetaInfo field is as follows: | |||
MetaInfo = META-INFO-TYPE TLV-LENGTH | MetaInfo = META-INFO-TYPE TLV-LENGTH | |||
ContentType | ContentType | |||
FreshnessPeriod | FreshnessPeriod | |||
Figure 9: MetaInfo TLV | Figure 9: MetaInfo TLV | |||
The value of the ContentType TLV is 0. The value of the | The value of the ContentType TLV is 0. The value of the | |||
FreshnessPeriod TLV is 1, so that the replies are treated as stale | FreshnessPeriod TLV is 1, so that the replies are treated as stale | |||
data (almost instantly) as they are received by a forwarder. | data (almost instantly) as they are received by a forwarder. | |||
The content of an echo reply consists of the following 2 TLVs: | The content of an Echo Reply consists of the following two TLVs: | |||
Sender's name (with a structure similar as an NDN Name TLV) and Echo | Sender's Name (with a structure similar to an NDN Name TLV) and Echo | |||
Reply Code. There is no need to have a separate TLV for the sender's | Reply Code. There is no need to have a separate TLV for the sender's | |||
signature in the content of the reply, since every NDN data packet | signature in the content of the reply, since every NDN Data packet | |||
carries the signature of the data producer. | carries the signature of the data producer. | |||
The Echo Reply Code TLV format is the following (with the values | The Echo Reply Code TLV format is as follows (with the values | |||
specified in Section 4.2): | specified in Section 4.2): | |||
EchoReplyCode = ECHOREPLYCODE-TLV-TYPE TLV-LENGTH 2*OCTET | EchoReplyCode = ECHOREPLYCODE-TLV-TYPE TLV-LENGTH 2*OCTET | |||
Figure 10: Echo Reply Code TLV | Figure 10: Echo Reply Code TLV | |||
6. Forwarder Handling | 6. Forwarder Handling | |||
We present the workflow of the forwarder's operation in Figure 11. | We present the workflow of the forwarder's operation in Figure 11 | |||
When a forwarder receives an echo request, it first extracts the | below. When a forwarder receives an Echo Request, it first extracts | |||
message's base name (i.e., the request name with the Nonce name | the message's base name (i.e., the request name with the Nonce name | |||
segment excluded as well as the suffix "ping" and the | segment excluded as well as the suffix "ping" and the | |||
ParametersSha256DigestComponent in the case of an echo request with | ParametersSha256DigestComponent in the case of an Echo Request with | |||
the NDN packet format). | the NDN packet format). | |||
In some cases, the forwarder originates an echo reply, sending the | In some cases, the forwarder originates an Echo Reply, sending the | |||
reply downstream through the face on which the echo request was | reply downstream through the face on which the Echo Request was | |||
received. This echo reply includes the forwarder's own name and | received. This Echo Reply includes the forwarder's own name and | |||
signature and the appropriate echo reply code based on the condition | signature and the appropriate Echo Reply Code based on the condition | |||
that triggered the reply generation. It also includes a Path label | that triggered the generation of the reply. It also includes a Path | |||
TLV, initially containing a null value (since the echo reply | Label TLV, initially containing a null value (since the Echo Reply | |||
originator did not forward the request and, thus, does not make a | originator does not forward the request and thus does not make a path | |||
path choice). | choice). | |||
The forwarder generates and returns an echo reply in the following | The forwarder generates and returns an Echo Reply in the following | |||
cases: | cases: | |||
* Assuming that a forwarder has been given one or more | * Assuming that a forwarder has been given one or more | |||
administrative names, the echo request base name exactly matches | administrative names, the Echo Request base name exactly matches | |||
any of the forwarder's administrative name(s). | any of the forwarder's administrative names. | |||
* The echo request's base name exactly matches the name of a | * The Echo Request's base name exactly matches the name of a Content | |||
content-object residing in the forwarder's CS (unless the ping | Object residing in the forwarder's CS (unless the ping client | |||
client application has chosen not to receive replies due to CS | application has chosen not to receive replies due to CS hits as | |||
hits as specified in Appendix A). | specified in Appendix A). | |||
* The echo request base name matches (in a Longest Prefix Match | * The Echo Request base name matches (in a Longest Name Prefix Match | |||
manner) a FIB entry with an outgoing face referring to a local | (LNPM) manner) a FIB entry with an outgoing face referring to a | |||
application. | local application. | |||
If none of the conditions to reply to the echo request are met, the | If none of the conditions for replying to the Echo Request are met, | |||
forwarder will attempt to forward the echo request upstream based on | the forwarder will attempt to forward the Echo Request upstream based | |||
the path steering value (if present), the results of the FIB LPM | on the Path Steering value (if present), the results of the FIB LNPM | |||
lookup and PIT creation (based on the name including the nonce typed | lookup and PIT creation. These lookups are based on including the | |||
name segment and the suffix "ping" in the case of an echo request | Nonce and the suffix "ping" as name segments of the Name in the case | |||
with the NDN packet format). If no valid next-hop is found, an | of an Echo Request with the NDN packet format. If no valid next hop | |||
InterestReturn is sent downstream indicating "no route" (as with a | is found, an InterestReturn is sent downstream indicating "No Route" | |||
failed attempt to forward an ordinary Interest). | (as with a failed attempt to forward an ordinary Interest). | |||
A received echo reply will be matched to an existing PIT entry as | A received Echo Reply will be matched to an existing PIT entry as | |||
usual. On the reverse path, the path steering TLV of an echo reply | usual. On the reverse path, the Path Steering TLV of an Echo Reply | |||
will be updated by each forwarder to encode its next-hop choice. | will be updated by each forwarder to encode its next-hop choice. | |||
When included in subsequent echo requests, this Path label TLV allows | When included in subsequent Echo Requests, this Path Label TLV allows | |||
the forwarders to steer the echo requests along the same path. | the forwarders to steer the Echo Requests along the same path. | |||
------------------------------------------------------------------------ | ------------------------------------------------------------------------ | |||
FORWARD PATH | FORWARD PATH | |||
------------------------------------------------------------------------ | ------------------------------------------------------------------------ | |||
Request +------+ +-----+ +-----+(path label) +--------+(match)Request | Request +------+ +-----+ +-----+(path label) +--------+(match)Request | |||
------> |Admin |->| CS |->| PIT | ------------>| Label |-------------> | ------> |Admin |->| CS |->| PIT | ------------>| Label |-------------> | |||
| Name | +-----+ +-----+ | Lookup | | | Name | +-----+ +-----+ | Lookup | | |||
|Lookup| | | \ (no path label)+--------+ | |Lookup| | | \ (no path label)+--------+ | |||
+------+ | | \ |\(path label mismatch) | +------+ | | \ |\(path label mismatch) | |||
Reply | | | \ | \ | Reply | | | \ | \ | |||
<---------+ | v \ | \ | <---------+ | v \ | \ | |||
(base matches | aggregate \ | \ | (base matches | aggregate \ | \ | |||
admin name) | \ | \ | admin name) | \ | \ | |||
| (base \ | +------+ Request | | (base \ | +------+ Request | |||
Reply | matches +----------|---->| FIB | -------> | Reply | matches +----------|---->| FIB | -------> | |||
<---------+ cached object) | +------+ | <---------+ cached object) | +------+ | |||
| (no | | (base | | (no | | (base | |||
Interest-Return (NACK) v route)| | matches | InterestReturn (NACK) v route)| | matches | |||
<----------------------------------------------+<-------+ | local app | <----------------------------------------------+<-------+ | local app | |||
<----------------------------------------------------------+ face) | <----------------------------------------------------------+ face) | |||
Reply | Reply | |||
------------------------------------------------------------------------ | ------------------------------------------------------------------------ | |||
REVERSE PATH | REVERSE PATH | |||
------------------------------------------------------------------------ | ------------------------------------------------------------------------ | |||
Interest-return(NACK) +-----+ (update path label) Interest-Return(NACK) | InterestReturn (NACK) +-----+ (update path label) InterestReturn (NACK) | |||
<---------------------| |<----------------------------------------- | <---------------------| |<----------------------------------------- | |||
| | | | | | |||
Reply +------+ | PIT | (update path label) Reply | Reply +------+ | PIT | (update path label) Reply | |||
<------| CS |<------| |<----------------------------------------- | <------| CS |<------| |<----------------------------------------- | |||
+------+ | | | +------+ | | | |||
+-----+ | +-----+ | |||
| | | | |||
| (no match) | | (no match) | |||
v | v | |||
Figure 11: Forwarder Operation | Figure 11: Forwarder Operation | |||
7. Protocol Operation For Locally-Scoped Namespaces | 7. Protocol Operation for Locally Scoped Namespaces | |||
In this section, we elaborate on 2 alternative design approaches in | In this section, we elaborate on two alternative design approaches in | |||
cases that the pinged prefix corresponds to a locally-scoped | cases where the pinged prefix corresponds to a locally scoped | |||
namespace not directly routable from the client's local network. | namespace not directly routable from the client's local network. | |||
The first approach leverages the NDN Link Object [SNAMP]. | The first approach leverages the NDN Link Object [SNAMP]. | |||
Specifically, the ping client attaches to the expressed request a | Specifically, the ping client attaches to the expressed request a | |||
LINK Object that contains a number of routable name prefixes, based | Link Object that contains a number of routable name prefixes, based | |||
on which the request can be forwarded until it reaches a network | on which the request can be forwarded until it reaches a network | |||
region where the request name itself is routable. A LINK Object is | region where the request name itself is routable. A Link Object is | |||
created and signed by a data producer allowed to publish data under a | created and signed by a data producer allowed to publish data under a | |||
locally-scoped namespace. The way that a client retrieves a LINK | locally scoped namespace. The way that a client retrieves a Link | |||
Object depends on various network design factors and is out of the | Object depends on various network design factors and is out of scope | |||
scope of the current draft. | for this document. | |||
Based on the current usage of the LINK Object by the NDN team, a | At the time of this writing, and based on usage of the Link Object by | |||
forwarder at the border of the region where an Interest name becomes | the NDN team [NDNLPv2], a forwarder at the border of the region where | |||
routable must remove the LINK Object from incoming Interests. The | an Interest name becomes routable must remove the Link Object from | |||
Interest state maintained along the entire forwarding path is based | incoming Interests. The Interest state maintained along the entire | |||
on the Interest name regardless of whether it was forwarded based on | forwarding path is based on the Interest name regardless of whether | |||
its name or a routable prefix in the LINK Object. | it was forwarded based on its name or a routable prefix in the Link | |||
Object. | ||||
The second approach is based on prepending a routable prefix to the | The second approach is based on prepending a routable prefix to the | |||
locally-scoped name. The resulting prefix will be the name of the | locally scoped name. The resulting prefix will be the name of the | |||
echo requests expressed by the client. In this way, a request will | Echo Requests expressed by the client. In this way, a request will | |||
be forwarded based on the routable part of its name. When it reaches | be forwarded based on the routable part of its name. When it reaches | |||
the network region where the original locally-scoped name is | the network region where the original locally scoped name is | |||
routable, the border forwarder rewrites the request name and deletes | routable, the border forwarder rewrites the request name and deletes | |||
its routable part. There are two conditions for a forwarder to | its routable part. There are two conditions for a forwarder to | |||
perform this rewriting operation on a request: 1) the routable part | perform this rewriting operation on a request: | |||
of the request name matches a routable name of the network region | ||||
adjacent to the forwarder (assuming that a forwarder is aware of | ||||
those names) and 2) the remaining part of the request name is | ||||
routable across the network region of this forwarder. | ||||
The state maintained along the path, where the locally-scoped name is | 1) the routable part of the request name matches a routable name of | |||
not routable, is based on the routable prefix along with the locally- | the network region adjacent to the forwarder (assuming that a | |||
scoped prefix. Within the network region that the locally-scoped | forwarder is aware of those names), and | |||
prefix is routable, the state is based only on it. To ensure that | ||||
the generated replies reach the ping client, the border forwarder has | 2) the remaining part of the request name is routable across the | |||
also to rewrite the name of a reply and prepend the routable prefix | network region of this forwarder. | |||
of the corresponding echo request. | ||||
The state along the path depends on whether the request is traversing | ||||
the portion of the network where the locally scoped name is routable. | ||||
In this case, the forwarding can be based entirely on the locally | ||||
scoped name. However, where a portion of the path lies outside the | ||||
region where the locally scoped name is routable, the border router | ||||
has to rewrite the name of a reply and prepend the routable prefix of | ||||
the corresponding request to ensure that the generated replies will | ||||
reach the client. | ||||
8. Security Considerations | 8. Security Considerations | |||
A reflection attack could be mounted by a compromised forwarder in | A reflection attack could be mounted by a compromised forwarder in | |||
the case of an echo reply with the CCNx packet format if that | the case of an Echo Reply with the CCNx packet format if that | |||
forwarder includes in the reply the name of a victim forwarder. This | forwarder includes in the reply the name of a victim forwarder. This | |||
could convince a client to direct the future administrative traffic | could convince a client to direct the future administrative traffic | |||
towards the victim. To foil such reflection attacks, the forwarder | towards the victim. To foil such reflection attacks, the forwarder | |||
that generates a reply must sign the name included in the payload. | that generates a reply must sign the name included in the payload. | |||
In this way, the client is able to verify that the included name is | In this way, the client is able to verify that the included name is | |||
legitimate and refers to the forwarder that generated the reply. | legitimate and refers to the forwarder that generated the reply. | |||
Alternatively, the forwarder could include in the reply payload their | Alternatively, the forwarder could include in the reply payload their | |||
routable prefix(es) encoded as a signed NDN Link Object [SNAMP]. | routable prefix(es) encoded as a signed NDN Link Object [SNAMP]. | |||
Interest flooding attack amplification is possible in the case of the | Interest flooding attack amplification is possible in the case of the | |||
second approach to deal with locally-scoped namespaces described in | second approach for dealing with locally scoped namespaces as | |||
Section 7. To eliminate such amplification, a border forwarder will | described in Section 7. To eliminate such amplification, a border | |||
have to maintain extra state in order to prepend the correct routable | forwarder will have to maintain extra state in order to prepend the | |||
prefix to the name of an outgoing reply, since the forwarder might be | correct routable prefix to the name of an outgoing reply, since the | |||
attached to multiple network regions (reachable under different | forwarder might be attached to multiple network regions (reachable | |||
prefixes) or a network region attached to this forwarder might be | under different prefixes) or a network region attached to this | |||
reachable under multiple routable prefixes. | forwarder might be reachable under multiple routable prefixes. | |||
Another example of an attack could be the ICN equivalent of port | Another example of an attack could be the ICN equivalent of port | |||
knocking, where an attacker tries to discover certain forwarder | knocking, where an attacker tries to discover certain forwarder | |||
implementations for the purpose of exploiting potential | implementations for the purpose of exploiting potential | |||
vulnerabilities. | vulnerabilities. | |||
9. IANA Considerations | 9. IANA Considerations | |||
IANA will assign 0x05 to "PT_ECHO_REQUEST" and 0x06 to | IANA has assigned 0x05 to "PT_ECHO_REQUEST" and 0x06 to | |||
"PT_ECHO_REPLY" in the CCNx Packet Types registry established by | "PT_ECHO_REPLY" in the "CCNx Packet Types" registry established by | |||
[RFC8609]. | [RFC8609]. | |||
IANA will assign 0x0003 to "T_NONCE" in the Name Segment Type IANA | IANA has assigned 0x0003 to "T_NONCE" in the "CCNx Name Segment | |||
Registry for CCNx established by [RFC8609]. | Types" registry established by [RFC8609]. | |||
IANA will create an "Echo Reply Code" registry. IANA will assign | ||||
0x01 to "T_ECHO_RETURN_FORWARDER", 0x02 to | ||||
"T_ECHO_RETURN_APPLICATION", and 0x03 to "T_ECHO_RETURN_OBJECT" in | ||||
the "Echo Reply Code" registry. | ||||
10. Acknowledgements | IANA has created a new registry called "CCNx Echo Reply Codes". The | |||
registration procedure is Specification Required [RFC8126]. In this | ||||
registry, IANA has assigned 0x01 to "T_ECHO_RETURN_FORWARDER", 0x02 | ||||
to "T_ECHO_RETURN_APPLICATION", and 0x03 to "T_ECHO_RETURN_OBJECT". | ||||
The authors would like to thank Mark Stapp for the fruitful | 10. References | |||
discussion on the objectives of the ICN ping protocol. | ||||
11. References | 10.1. Normative References | |||
11.1. Normative References | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
skipping to change at page 17, line 32 ¶ | skipping to change at line 767 ¶ | |||
DOI 10.17487/RFC8609, July 2019, | DOI 10.17487/RFC8609, July 2019, | |||
<https://www.rfc-editor.org/info/rfc8609>. | <https://www.rfc-editor.org/info/rfc8609>. | |||
[RFC8793] Wissingh, B., Wood, C., Afanasyev, A., Zhang, L., Oran, | [RFC8793] Wissingh, B., Wood, C., Afanasyev, A., Zhang, L., Oran, | |||
D., and C. Tschudin, "Information-Centric Networking | D., and C. Tschudin, "Information-Centric Networking | |||
(ICN): Content-Centric Networking (CCNx) and Named Data | (ICN): Content-Centric Networking (CCNx) and Named Data | |||
Networking (NDN) Terminology", RFC 8793, | Networking (NDN) Terminology", RFC 8793, | |||
DOI 10.17487/RFC8793, June 2020, | DOI 10.17487/RFC8793, June 2020, | |||
<https://www.rfc-editor.org/info/rfc8793>. | <https://www.rfc-editor.org/info/rfc8793>. | |||
11.2. Informative References | 10.2. Informative References | |||
[I-D.irtf-icnrg-pathsteering] | ||||
Moiseenko, I. and D. R. Oran, "Path Steering in CCNx and | ||||
NDN", Work in Progress, Internet-Draft, draft-irtf-icnrg- | ||||
pathsteering-03, 23 July 2023, | ||||
<https://datatracker.ietf.org/doc/html/draft-irtf-icnrg- | ||||
pathsteering-03>. | ||||
[NDNLPv2] "Named Data Networking Link Adaptation Protocol v2", | [NDNLPv2] NDN team, "NDNLPv2: Named Data Networking Link Adaptation | |||
various, <https://redmine.named- | Protocol v2", February 2023, <https://redmine.named- | |||
data.net/projects/nfd/wiki/NDNLPv2>. | data.net/projects/nfd/wiki/NDNLPv2>. | |||
[NDNTLV] "NDN Packet Format Specification.", 2021, | [NDNTLV] NDN project team, "NDN Packet Format Specification", | |||
February 2024, | ||||
<https://named-data.net/doc/NDN-packet-spec/current/>. | <https://named-data.net/doc/NDN-packet-spec/current/>. | |||
[PATHSTEERING] | [PATHSTEERING] | |||
Moiseenko, I. and D. Oran, "Path switching in content | Moiseenko, I. and D. Oran, "Path switching in content | |||
centric and named data networks", in Proceedings of the | centric and named data networks", ICN '17: Proceedings of | |||
4th ACM Conference on Information-Centric Networking, | the 4th ACM Conference on Information-Centric Networking, | |||
2017. | pp. 66-76, DOI 10.1145/3125719.3125721, September 2017, | |||
<https://dl.acm.org/doi/10.1145/3125719.3125721>. | ||||
[REALTIME] Mastorakis, S., Gusev, P., Afanasyev, A., and L. Zhang, | [REALTIME] Mastorakis, S., Gusev, P., Afanasyev, A., and L. Zhang, | |||
"Real-Time Data Retrieval in Named Data Networking", in | "Real-Time Data Retrieval in Named Data Networking", 2018 | |||
Proceedings of the 1st IEEE International Conference on | 1st IEEE International Conference on Hot Information- | |||
Hot Topics in Information-Centric Networking, 2017. | Centric Networking (HotICN), Shenzhen, China, pp. 61-66, | |||
DOI 10.1109/HOTICN.2018.8605992, August 2018, | ||||
<https://ieeexplore.ieee.org/document/8605992>. | ||||
[RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | |||
Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | |||
<https://www.rfc-editor.org/info/rfc4648>. | <https://www.rfc-editor.org/info/rfc4648>. | |||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | ||||
Writing an IANA Considerations Section in RFCs", BCP 26, | ||||
RFC 8126, DOI 10.17487/RFC8126, June 2017, | ||||
<https://www.rfc-editor.org/info/rfc8126>. | ||||
[RFC9344] Asaeda, H., Ooka, A., and X. Shao, "CCNinfo: Discovering | [RFC9344] Asaeda, H., Ooka, A., and X. Shao, "CCNinfo: Discovering | |||
Content and Network Information in Content-Centric | Content and Network Information in Content-Centric | |||
Networks", RFC 9344, DOI 10.17487/RFC9344, February 2023, | Networks", RFC 9344, DOI 10.17487/RFC9344, February 2023, | |||
<https://www.rfc-editor.org/info/rfc9344>. | <https://www.rfc-editor.org/info/rfc9344>. | |||
[SNAMP] Afanasyev, A. and , "SNAMP: Secure namespace mapping to | [RFC9531] Moiseenko, I. and D. Oran, "Path Steering in Content- | |||
scale NDN forwarding", 2015. | Centric Networking (CCNx) and Named Data Networking | |||
(NDN)", RFC 9531, DOI 10.17487/RFC9531, March 2024, | ||||
<https://www.rfc-editor.org/info/rfc9531>. | ||||
[SNAMP] Afanasyev, A., Yi, C., Wang, L., Zhang, B., and L. Zhang, | ||||
"SNAMP: Secure namespace mapping to scale NDN forwarding", | ||||
2015 IEEE Conference on Computer Communications Workshops | ||||
(INFOCOM WKSHPS), Hong Kong, China, pp. 281-286, | ||||
DOI 10.1109/INFCOMW.2015.7179398, April 2015, | ||||
<https://ieeexplore.ieee.org/abstract/document/7179398>. | ||||
Appendix A. Ping Client Application (Consumer) Operation | Appendix A. Ping Client Application (Consumer) Operation | |||
This section is an informative appendix regarding the proposed ping | This section is an informative appendix regarding the proposed ping | |||
client operation. | client operation. | |||
The ping client application is responsible for generating echo | The ping client application is responsible for generating Echo | |||
requests for prefixes provided by users. | Requests for prefixes provided by users. | |||
When generating a series of echo requests for a specific name, the | When generating a series of Echo Requests for a specific name, the | |||
first echo request will typically not include a Path label TLV, since | first Echo Request will typically not include a Path Label TLV, since | |||
no TLV value is known. After an echo reply containing a Path label | no TLV value is known. After an Echo Reply containing a Path Label | |||
TLV is received, each subsequent echo request can include the | TLV is received, each subsequent Echo Request can include the | |||
received path steering value in the Path label header TLV to drive | received Path Steering value in the Path Label header TLV to drive | |||
the requests towards a common path as part of checking network | the requests towards a common path as part of checking network | |||
performance. To discover more paths, a client can omit the path | performance. To discover more paths, a client can omit the Path | |||
steering TLV in future requests. Moreover, for each new ping echo | Steering TLV in future requests. Moreover, for each new Ping Echo | |||
request, the client has to generate a new nonce and record the time | Request, the client has to generate a new nonce and record the time | |||
that the request was expressed. It will also set the lifetime of an | that the request was expressed. It will also set the lifetime of an | |||
echo request, which will have identical semantics to the lifetime of | Echo Request, which will have semantics identical to the lifetime of | |||
an Interest. | an Interest. | |||
Further, the client application might not wish to receive echo | Further, the client application might not wish to receive Echo | |||
replies due to CS hits. A mechanism to achieve that in CCNx would be | Replies due to CS hits. A mechanism to achieve that in CCNx would be | |||
to use a Content Object Hash Restriction TLV with a value of 0 in the | to use a Content Object Hash Restriction TLV with a value of 0 in the | |||
payload of an echo request message. In NDN, the exclude filter | payload of an Echo Request message. In NDN, the exclude filter | |||
selector can be used. | selector can be used. | |||
When it receives an echo reply, the client would typically match the | When it receives an Echo Reply, the client would typically match the | |||
reply to a sent request and compute the round-trip time of the | reply to a sent request and compute the RTT of the request. It | |||
request. It should parse the Path label value and decode the reply's | should parse the Path Label value and decode the reply's payload to | |||
payload to parse the the sender's name and signature. The client | parse the sender's name and signature. The client should verify that | |||
should verify that both the received message and the forwarder's name | both the received message and the forwarder's name have been signed | |||
have been signed by the key of the forwarder, whose name is included | by the key of the forwarder, whose name is included in the payload of | |||
in the payload of the reply (by fetching this forwarder's public key | the reply (by fetching this forwarder's public key and verifying the | |||
and verifying the contained signature). The client can also decode | contained signature). The client can also decode the Echo Reply Code | |||
the Echo Reply Code TLV to understand the condition that triggered | TLV to understand the condition that triggered the generation of the | |||
the generation of the reply. | reply. | |||
In the case that an echo reply is not received for a request within a | In the case that an Echo Reply is not received for a request within a | |||
certain time interval (lifetime of the request), the client should | certain time interval (lifetime of the request), the client should | |||
time-out and send a new request with a new nonce value up to some | time out and send a new request with a new nonce value up to some | |||
maximum number of requests to be sent specified by the user. | maximum number of requests to be sent specified by the user. | |||
Acknowledgements | ||||
The authors would like to thank Mark Stapp for the fruitful | ||||
discussion on the objectives of the ICN Ping protocol. | ||||
Authors' Addresses | Authors' Addresses | |||
Spyridon Mastorakis | Spyridon Mastorakis | |||
University of Notre Dame | University of Notre Dame | |||
South Bend, IN | South Bend, IN | |||
United States of America | United States of America | |||
Email: smastor2@nd.edu | Email: smastor2@nd.edu | |||
Dave Oran | Dave Oran | |||
Network Systems Research and Design | Network Systems Research and Design | |||
skipping to change at page 20, line 4 ¶ | skipping to change at line 884 ¶ | |||
Network Systems Research and Design | Network Systems Research and Design | |||
Cambridge, MA | Cambridge, MA | |||
United States of America | United States of America | |||
Email: daveoran@orandom.net | Email: daveoran@orandom.net | |||
Jim Gibson | Jim Gibson | |||
Unaffiliated | Unaffiliated | |||
Belmont, MA | Belmont, MA | |||
United States of America | United States of America | |||
Email: jcgibson61@gmail.com | Email: jcgibson61@gmail.com | |||
Ilya Moiseenko | Ilya Moiseenko | |||
Apple Inc | Apple Inc. | |||
Cupertino, CA | Cupertino, CA | |||
United States of America | United States of America | |||
Email: iliamo@mailbox.org | Email: iliamo@mailbox.org | |||
Ralph Droms | Ralph Droms | |||
Unaffiliated | Unaffiliated | |||
Hopkinton, MA | Hopkinton, MA | |||
United States of America | United States of America | |||
Email: rdroms.ietf@gmail.com | Email: rdroms.ietf@gmail.com | |||
End of changes. 141 change blocks. | ||||
353 lines changed or deleted | 382 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |