rfc9693.original | rfc9693.txt | |||
---|---|---|---|---|
Benchmarking Methodology Working Group G. Lencse | Internet Engineering Task Force (IETF) G. Lencse | |||
Internet-Draft Széchenyi István University | Request for Comments: 9693 Széchenyi István University | |||
Intended status: Informational K. Shima | Category: Informational K. Shima | |||
Expires: 18 December 2024 SoftBank Corp. | ISSN: 2070-1721 SoftBank Corp. | |||
16 June 2024 | December 2024 | |||
Benchmarking Methodology for Stateful NATxy Gateways using RFC 4814 | Benchmarking Methodology for Stateful NATxy Gateways | |||
Pseudorandom Port Numbers | ||||
draft-ietf-bmwg-benchmarking-stateful-09 | ||||
Abstract | Abstract | |||
RFC 2544 has defined a benchmarking methodology for network | RFC 2544 defines a benchmarking methodology for network interconnect | |||
interconnect devices. RFC 5180 addressed IPv6 specificities and it | devices. RFC 5180 addresses IPv6 specificities, and it also provides | |||
also provided a technology update but excluded IPv6 transition | a technology update but excludes IPv6 transition technologies. RFC | |||
technologies. RFC 8219 addressed IPv6 transition technologies, | 8219 addresses IPv6 transition technologies, including stateful | |||
including stateful NAT64. However, none of them discussed how to | NAT64. However, none of them discuss how to apply pseudorandom port | |||
apply RFC 4814 pseudorandom port numbers to any stateful NATxy | numbers from RFC 4814 to any stateful NATxy (such as NAT44, NAT64, | |||
(NAT44, NAT64, NAT66) technologies. This document discusses why | and NAT66) technologies. This document discusses why using | |||
using pseudorandom port numbers with stateful NATxy gateways is a | pseudorandom port numbers with stateful NATxy gateways is a difficult | |||
difficult problem. It recommends a solution limiting the port number | problem. It recommends a solution that limits the port number ranges | |||
ranges and using two test phases (phase 1 and phase 2). It is shown | and uses two test phases (phase 1 and phase 2). This document shows | |||
how the classic performance measurement procedures (e.g. throughput, | how the classic performance measurement procedures (e.g., throughput, | |||
frame loss rate, latency, etc.) can be carried out. New performance | frame loss rate, latency, etc.) can be carried out. New performance | |||
metrics and measurement procedures are also defined for measuring | metrics and measurement procedures are also defined for measuring the | |||
maximum connection establishment rate, connection tear-down rate, and | maximum connection establishment rate, connection tear-down rate, and | |||
connection tracking table capacity. | connection tracking table capacity. | |||
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 informational purposes. | |||
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 is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Not all documents | |||
approved by the IESG are candidates for any level of Internet | ||||
Standard; see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 18 December 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/rfc9693. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2024 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. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | 1.1. Requirements Language | |||
2. Pseudorandom Port Numbers and Stateful Translation . . . . . 4 | 2. Pseudorandom Port Numbers and Stateful Translation | |||
3. Test Setup and Terminology . . . . . . . . . . . . . . . . . 4 | 3. Test Setup and Terminology | |||
3.1. When Testing with a Single IP Address Pair . . . . . . . 5 | 3.1. When Testing with a Single IP Address Pair | |||
3.2. When Testing with Multiple IP Addresses . . . . . . . . . 7 | 3.2. When Testing with Multiple IP Addresses | |||
4. Recommended Benchmarking Method . . . . . . . . . . . . . . . 9 | 4. Recommended Benchmarking Method | |||
4.1. Restricted Number of Network Flows . . . . . . . . . . . 9 | 4.1. Restricted Number of Network Flows | |||
4.2. Test Phase 1 . . . . . . . . . . . . . . . . . . . . . . 10 | 4.2. Test Phase 1 | |||
4.3. Consideration of the Cases of Stateful Operation . . . . 10 | 4.3. Consideration of the Cases of Stateful Operation | |||
4.4. Control of the Connection Tracking Table Entries . . . . 11 | 4.4. Control of the Connection Tracking Table Entries | |||
4.5. Measurement of the Maximum Connection Establishment | 4.5. Measurement of the Maximum Connection Establishment Rate | |||
Rate . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 4.6. Validation of Connection Establishment | |||
4.6. Validation of Connection Establishment . . . . . . . . . 13 | 4.7. Test Phase 2 | |||
4.7. Test Phase 2 . . . . . . . . . . . . . . . . . . . . . . 14 | 4.8. Measurement of the Connection Tear-Down Rate | |||
4.8. Measurement of the Connection Tear-down Rate . . . . . . 15 | 4.9. Measurement of the Connection Tracking Table Capacity | |||
4.9. Measurement of the Connection Tracking Table Capacity . . 15 | 4.10. Writing and Reading Order of the State Table | |||
4.10. Writing and Reading Order of the State Table . . . . . . 21 | 5. Scalability Measurements | |||
5. Scalability Measurements . . . . . . . . . . . . . . . . . . 21 | 5.1. Scalability Against the Number of Network Flows | |||
5.1. Scalability Against the Number of Network Flows . . . . . 21 | 5.2. Scalability Against the Number of CPU Cores | |||
5.2. Scalability Against the Number of CPU Cores . . . . . . . 22 | 6. Reporting Format | |||
6. Reporting Format . . . . . . . . . . . . . . . . . . . . . . 22 | 7. Implementation and Experience | |||
7. Implementation and Experience . . . . . . . . . . . . . . . . 24 | 8. Limitations of Using UDP as a Transport Layer Protocol | |||
8. Limitations of using UDP as Transport Layer Protocol . . . . 24 | 9. IANA Considerations | |||
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 25 | 10. Security Considerations | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 | 11. References | |||
11. Security Considerations . . . . . . . . . . . . . . . . . . . 25 | 11.1. Normative References | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 11.2. Informative References | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . 26 | Acknowledgements | |||
12.2. Informative References . . . . . . . . . . . . . . . . . 27 | Authors' Addresses | |||
Appendix A. Change Log . . . . . . . . . . . . . . . . . . . . . 29 | ||||
A.1. 00 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
A.2. 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
A.3. 02 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
A.4. 03 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
A.5. 04 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
A.6. 00 - WG item . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
A.7. 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
A.8. 02 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
A.9. 03 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
A.10. 04 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
A.11. 05 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
A.12. 06 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
A.13. 07 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
1. Introduction | 1. Introduction | |||
[RFC2544] has defined a comprehensive benchmarking methodology for | [RFC2544] defines a comprehensive benchmarking methodology for | |||
network interconnect devices, which is still in use. It was mainly | network interconnect devices that is still in use. It is mainly | |||
IP version independent, but it used IPv4 in its examples. [RFC5180] | independent of IP version, but it uses IPv4 in its examples. | |||
addressed IPv6 specificities and also added technology updates, but | [RFC5180] addresses IPv6 specificities and also adds technology | |||
declared IPv6 transition technologies out of its scope. [RFC8219] | updates but declares IPv6 transition technologies are out of its | |||
addressed the IPv6 transition technologies, including stateful NAT64. | scope. [RFC8219] addresses the IPv6 transition technologies, | |||
It has reused several benchmarking procedures from [RFC2544] (e.g. | including stateful NAT64. It reuses several benchmarking procedures | |||
throughput, frame loss rate), it has redefined the latency | from [RFC2544] (e.g., throughput, frame loss rate), and it redefines | |||
measurement and added further ones, e.g. the PDV (packet delay | the latency measurement and adds further ones (e.g., the Packet Delay | |||
variation) measurement. | Variation (PDV) measurement). | |||
However, none of them discussed, how to apply [RFC4814] pseudorandom | ||||
port numbers, when benchmarking stateful NATxy (NAT44 (also called | ||||
NAPT) [RFC3022], NAT64 [RFC6146], and NAT66) gateways. (It should be | ||||
noted that stateful NAT66 is not an IETF specification but refers to | ||||
an IPv6 version of the stateful NAT44 specification.) The authors | ||||
are not aware of any other RFCs that address this question. | ||||
First, it is discussed why using pseudorandom port numbers with | However, none of them discuss how to apply pseudorandom port numbers | |||
stateful NATxy gateways is a difficult problem. | from [RFC4814] when benchmarking stateful NATxy gateways (such as | |||
NAT44 [RFC3022], NAT64 [RFC6146], and NAT66). (It should be noted | ||||
that stateful NAT66 is not an IETF specification but refers to an | ||||
IPv6 version of the stateful NAT44 specification.) The authors are | ||||
not aware of any other RFCs that address this question. | ||||
Then a solution is recommended. | First, this document discusses why using pseudorandom port numbers | |||
with stateful NATxy gateways is a difficult problem. Then, a | ||||
solution is recommended. | ||||
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", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Pseudorandom Port Numbers and Stateful Translation | 2. Pseudorandom Port Numbers and Stateful Translation | |||
In its appendix, [RFC2544] has defined a frame format for test frames | In its appendix, [RFC2544] defines a frame format for test frames, | |||
including specific source and destination port numbers. [RFC4814] | including specific source and destination port numbers. [RFC4814] | |||
recommends using pseudorandom and uniformly distributed values for | recommends using pseudorandom and uniformly distributed values for | |||
both source and destination port numbers. However, stateful NATxy | both source and destination port numbers. However, stateful NATxy | |||
(NAT44, NAT64, NAT66) solutions use the port numbers to identify | (such as NAT44, NAT64, and NAT66) solutions use the port numbers to | |||
connections. The usage of pseudorandom port numbers causes different | identify connections. The usage of pseudorandom port numbers causes | |||
problems depending on the direction. | different problems depending on the direction: | |||
* As for the client-to-server direction, pseudorandom source and | * For the client-to-server direction, pseudorandom source and | |||
destination port numbers could be used, however, this approach | destination port numbers could be used; however, this approach | |||
would be a denial of service attack against the stateful NATxy | would be a denial-of-service attack against the stateful NATxy | |||
gateway, because it would exhaust its connection tracking table | gateway, because it would exhaust its connection tracking table | |||
capacity. To that end, let us see some calculations using the | capacity. To that end, let us see some calculations using the | |||
recommendations of RFC 4814: | recommendations of [RFC4814]: | |||
- The recommended source port range is: 1024-65535, thus its size | - The recommended source port range is 1024-65535; thus, its size | |||
is: 64512. | is 64512. | |||
- The recommended destination port range is: 1-49151, thus its | - The recommended destination port range is 1-49151; thus, its | |||
size is: 49151. | size is 49151. | |||
- The number of source and destination port number combinations | - The number of source and destination port number combinations | |||
is: 3,170,829,312. | is 3,170,829,312. | |||
It should be noted that the usage of different source and | It should be noted that the usage of different source and | |||
destination IP addresses further increases the number of | destination IP addresses further increases the number of | |||
connection tracking table entries. | connection tracking table entries. | |||
* As for the server-to-client direction, the stateful DUT (Device | * For the server-to-client direction, the stateful Device Under Test | |||
Under Test) would drop any packets that do not belong to an | (DUT) would drop any packets that do not belong to an existing | |||
existing connection, therefore, the direct usage of pseudorandom | connection; therefore, the direct usage of pseudorandom port | |||
port numbers from the above-mentioned ranges is not feasible. | numbers from the ranges mentioned above is not feasible. | |||
3. Test Setup and Terminology | 3. Test Setup and Terminology | |||
Section 12 of [RFC2544] requires testing first using a single | Section 12 of [RFC2544] requires testing using a single protocol | |||
protocol source and destination address pair an then also using | source and destination address pair first and then also using | |||
multiple protocol addresses. The same approach is followed: first, a | multiple protocol addresses. The same approach is followed: first, a | |||
single source and destination IP address pair is used, and then it is | single source and destination IP address pair is used, and then it is | |||
explained how to use multiple IP addresses. | explained how to use multiple IP addresses. | |||
3.1. When Testing with a Single IP Address Pair | 3.1. When Testing with a Single IP Address Pair | |||
The methodology works with any IP versions to benchmark stateful | The methodology works with any IP version to benchmark stateful NATxy | |||
NATxy gateways, where x and y are in {4, 6}. To facilitate an easy | gateways, where x and y are in {4, 6}. To facilitate an easy | |||
understanding, two typical examples are used: stateful NAT44 and | understanding, two typical examples are used: stateful NAT44 and | |||
stateful NAT64. | stateful NAT64. | |||
The Test Setup for the well-known stateful NAT44 (also called NAPT: | The test setup for the well-known stateful NAT44 (also called Network | |||
Network Address and Port Translation) solution is shown in Figure 1. | Address and Port Translation (NAPT)) solution is shown in Figure 1. | |||
Note that the [RFC1918] private IP addresses are used to facilitate | Note that the private IP addresses from [RFC1918] are used to | |||
an easy understanding of the example. And the usage of the IP | facilitate an easy understanding of the example, and the usage of the | |||
addresses reserved for benchmarking is absolutely legitimate. | IP addresses reserved for benchmarking is absolutely legitimate. | |||
+--------------------------------------+ | +--------------------------------------+ | |||
10.0.0.2 |Initiator Responder| 198.19.0.2 | 10.0.0.2 |Initiator Responder| 198.19.0.2 | |||
+-------------| Tester |<------------+ | +-------------| Tester |<------------+ | |||
| private IPv4| [state table]| public IPv4 | | | private IPv4| [state table]| public IPv4 | | |||
| +--------------------------------------+ | | | +--------------------------------------+ | | |||
| | | | | | |||
| +--------------------------------------+ | | | +--------------------------------------+ | | |||
| 10.0.0.1 | DUT: | 198.19.0.1 | | | 10.0.0.1 | DUT: | 198.19.0.1 | | |||
+------------>| Stateful NAT44 gateway |-------------+ | +------------>| Stateful NAT44 gateway |-------------+ | |||
private IPv4| [connection tracking table] | public IPv4 | private IPv4| [connection tracking table] | public IPv4 | |||
+--------------------------------------+ | +--------------------------------------+ | |||
Figure 1: Test setup for benchmarking stateful NAT44 gateways | Figure 1: Test Setup for Benchmarking Stateful NAT44 Gateways | |||
The Test Setup for the also widely used stateful NAT64 [RFC6146] | The test setup for the stateful NAT64 solution [RFC6146], which is | |||
solution is shown in Figure 2. | also widely used, is shown in Figure 2. | |||
+--------------------------------------+ | +--------------------------------------+ | |||
2001:2::2 |Initiator Responder| 198.19.0.2 | 2001:2::2 |Initiator Responder| 198.19.0.2 | |||
+-------------| Tester |<------------+ | +-------------| Tester |<------------+ | |||
| IPv6 address| [state table]| IPv4 address| | | IPv6 address| [state table]| IPv4 address| | |||
| +--------------------------------------+ | | | +--------------------------------------+ | | |||
| | | | | | |||
| +--------------------------------------+ | | | +--------------------------------------+ | | |||
| 2001:2::1 | DUT: | 198.19.0.1 | | | 2001:2::1 | DUT: | 198.19.0.1 | | |||
+------------>| Stateful NAT64 gateway |-------------+ | +------------>| Stateful NAT64 gateway |-------------+ | |||
IPv6 address| [connection tracking table] | IPv4 address | IPv6 address| [connection tracking table] | IPv4 address | |||
+--------------------------------------+ | +--------------------------------------+ | |||
Figure 2: Test setup for benchmarking stateful NAT64 gateways | Figure 2: Test Setup for Benchmarking Stateful NAT64 Gateways | |||
As for transport layer protocol, [RFC2544] recommended testing with | As for the transport layer protocol, [RFC2544] recommended testing | |||
UDP, and it was kept also in [RFC8219]. For the general | with UDP, and it was also kept in [RFC8219]. UDP is also kept for a | |||
recommendation, UDP is also kept, thus the port numbers in the | general recommendation; thus, the port numbers in the following text | |||
following text are to be understood as UDP port numbers. The | are to be understood as UDP port numbers. The rationale and | |||
rationale and limitations of this approach are discussed in | limitations of this approach are discussed in Section 8. | |||
Section 8. | ||||
The most important elements of the proposed benchmarking system are | The most important elements of the proposed benchmarking system are | |||
defined as follows. | defined as follows: | |||
* Connection: Although UDP itself is a connection-less protocol, | Connection: Although UDP itself is a connectionless protocol, | |||
stateful NATxy gateways keep track of their translation mappings | stateful NATxy gateways keep track of their translation mappings | |||
in the form of a "connection" also in the case of UDP using the | in the form of a "connection" as well as in the case of UDP using | |||
same kind of entries as in the case of TCP. | the same kind of entries as in TCP. | |||
* Connection tracking table: The stateful NATxy gateway uses a | Connection tracking table: The stateful NATxy gateway uses a | |||
connection tracking table to be able to perform the stateful | connection tracking table to be able to perform the stateful | |||
translation in the server to client direction. Its size, policy, | translation in the server-to-client direction. Its size, policy, | |||
and content are unknown to the Tester. | and content are unknown to the Tester. | |||
* Four tuple: The four numbers that identify a connection are source | Four tuple: The four numbers that identify a connection are source | |||
IP address, source port number, destination IP address, | IP address, source port number, destination IP address, and | |||
destination port number. | destination port number. | |||
* State table: The Responder of the Tester extracts the four tuple | State table: The Responder of the Tester extracts the four tuple | |||
from each received test frame and stores it in its state table. | from each received test frame and stores it in its state table. A | |||
Recommendation is given for writing and reading order of the state | recommendation is given for the writing and reading order of the | |||
table in Section 4.10. | state table in Section 4.10. | |||
* Initiator: The port of the Tester that may initiate a connection | Initiator: The port of the Tester that may initiate a connection | |||
through the stateful DUT in the client-to-server direction. | through the stateful DUT in the client-to-server direction. | |||
Theoretically, it can use any source and destination port numbers | Theoretically, it can use any source and destination port numbers | |||
from the ranges recommended by [RFC4814]: if the used four tuple | from the ranges recommended by [RFC4814]: if the used four tuple | |||
does not belong to an existing connection, the DUT will register a | does not belong to an existing connection, the DUT will register a | |||
new connection into its connection tracking table. | new connection into its connection tracking table. | |||
* Responder: The port of the Tester that may not initiate a | Responder: The port of the Tester that may not initiate a connection | |||
connection through the stateful DUT in the server-to-client | through the stateful DUT in the server-to-client direction. It | |||
direction. It may send only frames that belong to an existing | may only send frames that belong to an existing connection. To | |||
connection. To that end, it uses four tuples that have been | that end, it uses four tuples that have been previously extracted | |||
previously extracted from the received test frames and stored in | from the received test frames and stores in its state table. | |||
its state table. | ||||
* Test phase 1: Test frames are sent only by the Initiator to the | Test phase 1: The test frames are sent only by the Initiator to the | |||
Responder through the DUT to fill both the connection tracking | Responder through the DUT to fill both the connection tracking | |||
table of the DUT and the state table of the Responder. This is a | table of the DUT and the state table of the Responder. This is a | |||
newly introduced operation phase for stateful NATxy benchmarking. | newly introduced operation phase for stateful NATxy benchmarking. | |||
The necessity of this test phase is explained in Section 4.2. | The necessity of this test phase is explained in Section 4.2. | |||
* Test phase 2: The measurement procedures defined by [RFC8219] | Test phase 2: The measurement procedures defined by [RFC8219] (e.g., | |||
(e.g. throughput, latency, etc.) are performed in this test phase | throughput, latency, etc.) are performed in this test phase after | |||
after the completion of test phase 1. Test frames are sent as | the completion of test phase 1. Test frames are sent as required | |||
required (e.g. bidirectional test or unidirectional test in any of | (e.g., a bidirectional test or a unidirectional test in any of the | |||
the two directions). | two directions). | |||
One further definition is used in the text of this document: | One further definition is used in the text of this document: | |||
* Black box testing: It is a testing approach when the Tester is not | Black box testing: A testing approach when the Tester is not aware | |||
aware of the details of the internal structure and operation of | of the details of the internal structure and operation of the DUT. | |||
the DUT. It can send input to the DUT and observe the output of | It can send input to the DUT and observe the output of the DUT. | |||
the DUT. | ||||
3.2. When Testing with Multiple IP Addresses | 3.2. When Testing with Multiple IP Addresses | |||
The number of the necessary and available IP addresses are | This section considers the number of the necessary and available IP | |||
considered. | addresses. | |||
In Figure 1, the single 198.19.0.1 IPv4 address is used on the WAN | In Figure 1, the single 198.19.0.1 IPv4 address is used on the WAN | |||
side port of the stateful NAT44 gateway. However, in practice, not a | side port of the stateful NAT44 gateway. However, in practice, it is | |||
single IP address, but an IP address range is assigned to the WAN | not a single IP address, but rather an IP address range that is | |||
side port of the stateful NAT44 gateways. Its required size depends | assigned to the WAN side port of the stateful NAT44 gateways. Its | |||
on the number of client nodes and on the type of the stateful NAT44 | required size depends on the number of client nodes and on the type | |||
algorithm. (The traditional algorithm always replaces the source | of the stateful NAT44 algorithm. (The traditional algorithm always | |||
port number, when a new connection is established. Thus it requires | replaces the source port number when a new connection is established. | |||
a larger range than the extended algorithm, which replaces the source | Thus, it requires a larger range than the extended algorithm, which | |||
port number only when it is necessary. Please refer to Table 1 and | replaces the source port number only when it is necessary. Please | |||
Table 2 of [LEN2015].) | refer to Tables 1 and 2 of [LEN2015].) | |||
When router testing is done, section 12 of [RFC2544] requires testing | When router testing is done, Section 12 of [RFC2544] requires testing | |||
first using a single source and destination IP address pair, and then | using a single source and destination IP address pair first and then | |||
using destination IP addresses from 256 different networks. The | using destination IP addresses from 256 different networks. The | |||
16-23 bits of the 198.18.0.0/24 and 198.19.0.0/24 addresses can be | 16-23 bits of the 198.18.0.0/24 and 198.19.0.0/24 addresses can be | |||
used to express the 256 networks. As this document does not deal | used to express the 256 networks. As this document does not deal | |||
with router testing, no multiple destination networks are needed, | with router testing, no multiple destination networks are needed; | |||
therefore, these bits are available for expressing multiple IP | therefore, these bits are available for expressing multiple IP | |||
addresses that belong to the same "/16" network. Moreover, both the | addresses that belong to the same "/16" network. Moreover, both the | |||
198.18.0.0/16 and the 198.19.0.0/16 networks can be used on the right | 198.18.0.0/16 and the 198.19.0.0/16 networks can be used on the right | |||
side of the test setup as private IP addresses from the 10.0.0.0/16 | side of the test setup, as private IP addresses from the 10.0.0.0/16 | |||
network are used on its left side. | network are used on its left side. | |||
10.0.0.2/16 – 10.0.255.254/16 198.19.0.0/15 - 198.19.255.254/15 | 10.0.0.2/16 - 10.0.255.254/16 198.19.0.0/15 - 198.19.255.254/15 | |||
\ +--------------------------------------+ / | \ +--------------------------------------+ / | |||
\ |Initiator Responder| / | \ |Initiator Responder| / | |||
+-------------| Tester |<------------+ | +-------------| Tester |<------------+ | |||
| private IPv4| [state table]| public IPv4 | | | private IPv4| [state table]| public IPv4 | | |||
| +--------------------------------------+ | | | +--------------------------------------+ | | |||
| | | | | | |||
| +--------------------------------------+ | | | +--------------------------------------+ | | |||
| 10.0.0.1/16 | DUT: | public IPv4 | | | 10.0.0.1/16 | DUT: | public IPv4 | | |||
+------------>| Stateful NAT44 gateway |-------------+ | +------------>| Stateful NAT44 gateway |-------------+ | |||
private IPv4| [connection tracking table] | \ | private IPv4| [connection tracking table] | \ | |||
+--------------------------------------+ \ | +--------------------------------------+ \ | |||
198.18.0.1/15 - 198.18.255.255/15 | 198.18.0.1/15 - 198.18.255.255/15 | |||
Figure 3: Test setup for benchmarking stateful NAT44 gateways | Figure 3: Test Setup for Benchmarking Stateful NAT44 Gateways | |||
using multiple IPv4 addresses | Using Multiple IPv4 Addresses | |||
A possible solution for assigning multiple IPv4 addresses is shown in | A possible solution for assigning multiple IPv4 addresses is shown in | |||
Figure 3. On the left side, the private IP address range is | Figure 3. On the left side, the private IP address range is | |||
abundantly large. (The 16-31 bits were used for generating nearly | abundantly large. (The 16-31 bits were used for generating nearly | |||
64k potential different source addresses, but the 8-15 bits are also | 64k potential different source addresses, but the 8-15 bits are also | |||
available if needed.) On the right side, the 198.18.0.0./15 network | available if needed.) On the right side, the 198.18.0.0./15 network | |||
is used, and it was cut into two equal parts. (Asymmetric division | is used, and it was cut into two equal parts. (Asymmetric division | |||
is also possible, if needed.) | is also possible, if needed.) | |||
It should be noted that these are the potential address ranges. The | It should be noted that these are the potential address ranges. The | |||
actual address ranges to be used are discussed in Section 4.1. | actual address ranges to be used are discussed in Section 4.1. | |||
In the case of stateful NAT64, a single "/64" IPv6 prefix contains a | In the case of stateful NAT64, a single "/64" IPv6 prefix contains a | |||
high number of bits to express different IPv6 addresses. Figure 4 | high number of bits to express different IPv6 addresses. Figure 4 | |||
shows an example, where bits 96-111 are used for that purpose. | shows an example where bits 96-111 are used for that purpose. | |||
2001:2::[0000-ffff]:0002/64 198.19.0.0/15 - 198.19.255.254/15 | 2001:2::[0000-ffff]:0002/64 198.19.0.0/15 - 198.19.255.254/15 | |||
\ +--------------------------------------+ / | \ +--------------------------------------+ / | |||
IPv6 \ |Initiator Responder| / | IPv6 \ |Initiator Responder| / | |||
+-------------| Tester |<------------+ | +-------------| Tester |<------------+ | |||
| addresses | [state table]| public IPv4 | | | addresses | [state table]| public IPv4 | | |||
| +--------------------------------------+ | | | +--------------------------------------+ | | |||
| | | | | | |||
| +--------------------------------------+ | | | +--------------------------------------+ | | |||
| 2001:2::1/64| DUT: | public IPv4 | | | 2001:2::1/64| DUT: | public IPv4 | | |||
+------------>| Stateful NAT64 gateway |-------------+ | +------------>| Stateful NAT64 gateway |-------------+ | |||
IPv6 address | [connection tracking table] | \ | IPv6 address | [connection tracking table] | \ | |||
+--------------------------------------+ \ | +--------------------------------------+ \ | |||
198.18.0.1/15 - 198.18.255.255/15 | 198.18.0.1/15 - 198.18.255.255/15 | |||
Figure 4: Test Setup for benchmarking stateful NAT64 gateways | Figure 4: Test Setup for Benchmarking Stateful NAT64 Gateways | |||
using multiple IPv6 and IPv4 addresses | Using Multiple IPv6 and IPv4 Addresses | |||
4. Recommended Benchmarking Method | 4. Recommended Benchmarking Method | |||
4.1. Restricted Number of Network Flows | 4.1. Restricted Number of Network Flows | |||
When a single IP address pair is used for testing then the number of | When a single IP address pair is used for testing, then the number of | |||
network flows is determined by the number of source port number | network flows is determined by the number of source and destination | |||
destination port number combinations. | port number combinations. | |||
The Initiator SHOULD use restricted ranges for source and destination | The Initiator SHOULD use restricted ranges for source and destination | |||
port numbers to avoid the exhaustion of the connection tracking table | port numbers to avoid the exhaustion of the connection tracking table | |||
capacity of the DUT as described in Section 2. If it is possible, | capacity of the DUT as described in Section 2. If it is possible, | |||
the size of the source port number range SHOULD be larger (e.g. in | the size of the source port number range SHOULD be larger (e.g., in | |||
the order of a few times ten thousand), whereas the size of the | the order of a few tens of thousands), whereas the size of the | |||
destination port number range SHOULD be smaller (may vary from a few | destination port number range SHOULD be smaller (e.g., it may vary | |||
to several hundreds or thousands as needed). The rationale is that | from a few to several hundreds or thousands as needed). The | |||
source and destination port numbers that can be observed in the | rationale is that source and destination port numbers that can be | |||
Internet traffic are not symmetrical. Whereas source port numbers | observed in Internet traffic are not symmetrical. Whereas source | |||
may be random, there are a few very popular destination port numbers | port numbers may be random, there are a few very popular destination | |||
(e.g. 443, 80, etc., see [IIR2020]), and others hardly occur. And it | port numbers (e.g., 443 or 80; see [IIR2020]), and others hardly | |||
was found that their role is also asymmetric in the Linux kernel | occur. Additionally, it was found that their role is also asymmetric | |||
routing hash function [LEN2020]. | in the Linux kernel routing hash function [LEN2020]. | |||
However, in some special cases, the size of the source port range is | However, in some special cases, the size of the source port range is | |||
limited. E.g. when benchmarking the CE and BR of a MAP-T [RFC7599] | limited. For example, when benchmarking the Customer Edge (CE) and | |||
system together (as a compound system performing stateful NAT44), | Border Relay (BR) of a Mapping of Address and Port using Translation | |||
then the source port range is limited to the number of source port | (MAP-T) system [RFC7599] together (as a compound system performing | |||
numbers assigned to each subscriber. (It could be as low as 2048 | stateful NAT44), the source port range is limited to the number of | |||
ports.) | source port numbers assigned to each subscriber. (It could be as low | |||
as 2048 ports.) | ||||
When multiple IP addresses are used, then the port number ranges | When multiple IP addresses are used, then the port number ranges | |||
should be even more restricted, as the number of potential network | should be even more restricted, as the number of potential network | |||
flows is the product of the size of the source IP address range, the | flows is the product of the size of: | |||
size of the source port number range, the size of the destination IP | ||||
address range, and the size of the destination port number range. | * the source IP address range, | |||
And the recommended method requires the enumeration of all their | ||||
possible combinations in test phase 1 as described in Section 4.4. | * the source port number range, | |||
* the destination IP address range, and | ||||
* the destination port number range. | ||||
In addition, the recommended method requires the enumeration of all | ||||
their possible combinations in test phase 1 as described in | ||||
Section 4.4. | ||||
The number of network flows can be used as a parameter. The | The number of network flows can be used as a parameter. The | |||
performance of the stateful NATxy gateway MAY be examined as a | performance of the stateful NATxy gateway MAY be examined as a | |||
function of this parameter as described in Section 5.1. | function of this parameter as described in Section 5.1. | |||
4.2. Test Phase 1 | 4.2. Test Phase 1 | |||
Test phase 1 serves two purposes: | Test phase 1 serves two purposes: | |||
1. The connection tracking table of the DUT is filled. It is | 1. The connection tracking table of the DUT is filled. This is | |||
important, because its maximum connection establishment rate may | important because its maximum connection establishment rate may | |||
be lower than its maximum frame forwarding rate (that is | be lower than its maximum frame forwarding rate (that is, its | |||
throughput). | throughput). | |||
2. The state table of the Responder is filled with valid four | 2. The state table of the Responder is filled with valid four | |||
tuples. It is a precondition for the Responder to be able to | tuples. It is a precondition for the Responder to be able to | |||
transmit frames that belong to connections that exist in the | transmit frames that belong to connections that exist in the | |||
connection tracking table of the DUT. | connection tracking table of the DUT. | |||
Whereas the above two things are always necessary before test phase | Whereas the above two things are always necessary before test phase | |||
2, test phase 1 can be used without test phase 2. It is done so when | 2, test phase 1 can be used without test phase 2. This is done when | |||
the maximum connection establishment rate is measured (as described | the maximum connection establishment rate is measured (as described | |||
in Section 4.5). | in Section 4.5). | |||
Test phase 1 MUST be performed before all tests performed in test | Test phase 1 MUST be performed before all tests are performed in test | |||
phase 2. The following things happen in test phase 1: | phase 2. The following things happen in test phase 1: | |||
1. The Initiator sends test frames to the Responder through the DUT | 1. The Initiator sends test frames to the Responder through the DUT | |||
at a specific frame rate. | at a specific frame rate. | |||
2. The DUT performs the stateful translation of the test frames and | 2. The DUT performs the stateful translation of the test frames, and | |||
it also stores the new connections in its connection tracking | it also stores the new connections in its connection tracking | |||
table. | table. | |||
3. The Responder receives the translated test frames and updates its | 3. The Responder receives the translated test frames and updates its | |||
state table with the received four tuples. The responder | state table with the received four tuples. The Responder | |||
transmits no test frames during test phase 1. | transmits no test frames during test phase 1. | |||
When test phase 1 is performed in preparation for test phase 2, the | When test phase 1 is performed in preparation for test phase 2, the | |||
applied frame rate SHOULD be safely lower than the maximum connection | applied frame rate SHOULD be safely lower than the maximum connection | |||
establishment rate. (It implies that maximum connection | establishment rate. (It implies that maximum connection | |||
establishment rate measurement MUST be performed first.) Please | establishment rate measurement MUST be performed first.) Please | |||
refer to Section 4.4 for further conditions regarding timeout and the | refer to Section 4.4 for further conditions regarding timeout and the | |||
enumeration of all possible four tuples. | enumeration of all possible four tuples. | |||
4.3. Consideration of the Cases of Stateful Operation | 4.3. Consideration of the Cases of Stateful Operation | |||
The authors consider the most important events that may happen during | The authors consider the most important events that may happen during | |||
the operation of a stateful NATxy gateway, and the Actions of the | the operation of a stateful NATxy gateway and the Actions of the | |||
gateway as follows. | gateway as follows. | |||
1. EVENT: A packet not belonging to an existing connection arrives | 1. EVENT: A packet not belonging to an existing connection arrives | |||
in the client-to-server direction. ACTION: A new connection is | in the client-to-server direction. | |||
registered into the connection tracking table and the packet is | ||||
translated and forwarded. | ACTION: A new connection is registered into the connection | |||
tracking table, and the packet is translated and forwarded. | ||||
2. EVENT: A packet not belonging to an existing connection arrives | 2. EVENT: A packet not belonging to an existing connection arrives | |||
in the server-to-client direction. ACTION: The packet is | in the server-to-client direction. | |||
discarded. | ||||
ACTION: The packet is discarded. | ||||
3. EVENT: A packet belonging to an existing connection arrives (in | 3. EVENT: A packet belonging to an existing connection arrives (in | |||
any direction). ACTION: The packet is translated and forwarded | any direction). | |||
and the timeout counter of the corresponding connection tracking | ||||
table entry is reset. | ||||
4. EVENT: A connection tracking table entry times out. ACTION: The | ACTION: The packet is translated and forwarded, and the timeout | |||
entry is deleted from the connection tracking table. | counter of the corresponding connection tracking table entry is | |||
reset. | ||||
4. EVENT: A connection tracking table entry times out. | ||||
ACTION: The entry is deleted from the connection tracking table. | ||||
Due to "black box" testing, the Tester is not able to directly | Due to "black box" testing, the Tester is not able to directly | |||
examine (or delete) the entries of the connection tracking table. | examine (or delete) the entries of the connection tracking table. | |||
But the entries can be and MUST be controlled by setting an | However, the entries can and MUST be controlled by setting an | |||
appropriate timeout value and carefully selecting the port numbers of | appropriate timeout value and carefully selecting the port numbers of | |||
the packets (as described in Section 4.4) to be able to produce | the packets (as described in Section 4.4) to be able to produce | |||
meaningful and repeatable measurement results. | meaningful and repeatable measurement results. | |||
This document aims to support the measurement of the following | This document aims to support the measurement of the following | |||
performance characteristics of a stateful NATxy gateway: | performance characteristics of a stateful NATxy gateway: | |||
1. maximum connection establishment rate | * maximum connection establishment rate | |||
2. all "classic" performance metrics like throughput, frame loss | * all "classic" performance metrics like throughput, frame loss | |||
rate, latency, etc. | rate, latency, etc. | |||
3. connection tear-down rate | * connection tear-down rate | |||
4. connection tracking table capacity | * connection tracking table capacity | |||
4.4. Control of the Connection Tracking Table Entries | 4.4. Control of the Connection Tracking Table Entries | |||
It is necessary to control the connection tracking table entries of | It is necessary to control the connection tracking table entries of | |||
the DUT to achieve clear conditions for the measurements. One can | the DUT to achieve clear conditions for the measurements. One can | |||
simply achieve the following two extreme situations: | simply achieve the following two extreme situations: | |||
1. All frames create a new entry in the connection tracking table of | 1. All frames create a new entry in the connection tracking table of | |||
the DUT and no old entries are deleted during the test. This is | the DUT, and no old entries are deleted during the test. This is | |||
required for measuring the maximum connection establishment rate. | required for measuring the maximum connection establishment rate. | |||
2. No new entries are created in the connection tracking table of | 2. No new entries are created in the connection tracking table of | |||
the DUT and no old ones are deleted during the test. This is | the DUT, and no old ones are deleted during the test. This is | |||
ideal for the measurements to be executed in phase 2, like | ideal for the measurements to be executed in phase 2, like | |||
throughput, latency, etc. | throughput, latency, etc. | |||
From this point, the following two assumptions are used: | From this point, the following two assumptions are used: | |||
1. The connection tracking table of the stateful NATxy is large | 1. The connection tracking table of the stateful NATxy is large | |||
enough to store all connections defined by the different four | enough to store all connections defined by the different four | |||
tuples. | tuples. | |||
2. Each experiment is started with an empty connection tracking | 2. Each experiment is started with an empty connection tracking | |||
table. (It can be ensured by deleting its content before the | table. (This can be ensured by deleting its content before the | |||
experiment.) | experiment.) | |||
The first extreme situation can be achieved by | The first extreme situation can be achieved by: | |||
* using different four tuples for every single test frame in test | * using different four tuples for every single test frame in test | |||
phase 1 and | phase 1 and | |||
* setting the UDP timeout of the NATxy gateway to a value higher | * setting the UDP timeout of the NATxy gateway to a value higher | |||
than the length of test phase 1. | than the length of test phase 1. | |||
The second extreme situation can be achieved by | The second extreme situation can be achieved by: | |||
* enumerating all possible four tuples in test phase 1 and | * enumerating all possible four tuples in test phase 1 and | |||
* setting the UDP timeout of the NATxy gateway to a value higher | * setting the UDP timeout of the NATxy gateway to a value higher | |||
than the length of test phase 1 plus the gap between the two | than the length of test phase 1 plus the gap between the two | |||
phases plus the length of test phase 2. | phases plus the length of test phase 2. | |||
[RFC4814] REQUIRES pseudorandom port numbers, which the authors | As described in [RFC4814], pseudorandom port numbers are REQUIRED, | |||
believe is a good approximation of the distribution of the source | which the authors believe is a good approximation of the distribution | |||
port numbers a NATxy gateway on the Internet may face with. | of the source port numbers a NATxy gateway on the Internet may be | |||
faced with. | ||||
It should be noted that although the enumeration of all possible four | Although the enumeration of all possible four tuples is not a | |||
tuples is not a requirement for the first extreme situation and the | requirement for the first extreme situation and the usage of | |||
usage of different four tuples in test phase 1 is not a requirement | different four tuples in test phase 1 is not a requirement for the | |||
for the second extreme situation, pseudorandom enumeration of all | second extreme situation, pseudorandom enumeration of all possible | |||
possible four tuples in test phase 1 is a good solution in both | four tuples in test phase 1 is a good solution in both cases. | |||
cases. It may be computing efficiently generated by preparing a | Pseudorandom enumeration of all possible four tuples may be computing | |||
random permutation of the previously enumerated all possible four | efficiently generated by preparing a random permutation of the | |||
tuples using Dustenfeld's random shuffle algorithm [DUST1964]. | previously enumerated all possible four tuples using Durstenfeld's | |||
random shuffle algorithm [DUST1964]. | ||||
The enumeration of the four tuples in increasing or decreasing order | The enumeration of the four tuples in increasing or decreasing order | |||
(or in any other specific order) MAY be used as an additional | (or in any other specific order) MAY be used as an additional | |||
measurement. | measurement. | |||
4.5. Measurement of the Maximum Connection Establishment Rate | 4.5. Measurement of the Maximum Connection Establishment Rate | |||
The maximum connection establishment rate is an important | The maximum connection establishment rate is an important | |||
characteristic of the stateful NATxy gateway and its determination is | characteristic of the stateful NATxy gateway, and its determination | |||
necessary for the safe execution of test phase 1 (without frame loss) | is necessary for the safe execution of test phase 1 (without frame | |||
before test phase 2. | loss) before test phase 2. | |||
The measurement procedure of the maximum connection establishment | The measurement procedure of the maximum connection establishment | |||
rate is very similar to the throughput measurement procedure defined | rate is very similar to the throughput measurement procedure defined | |||
in [RFC2544]. | in [RFC2544]. | |||
Procedure: The Initiator sends a specific number of test frames using | The procedure is as follows: | |||
all different four tuples at a specific rate through the DUT. The | ||||
Responder counts the frames that are successfully translated by the | * The Initiator sends a specific number of test frames using all | |||
DUT. If the count of offered frames is equal to the count of | different four tuples at a specific rate through the DUT. | |||
received frames, the rate of the offered stream is raised and the | ||||
test is rerun. If fewer frames are received than were transmitted, | * The Responder counts the frames that are successfully translated | |||
the rate of the offered stream is reduced and the test is rerun. | by the DUT. | |||
* If the count of offered frames is equal to the count of received | ||||
frames, the rate of the offered stream is raised and the test is | ||||
rerun. | ||||
* If fewer frames are received than were transmitted, the rate of | ||||
the offered stream is reduced and the test is rerun. | ||||
The maximum connection establishment rate is the fastest rate at | The maximum connection establishment rate is the fastest rate at | |||
which the count of test frames successfully translated by the DUT is | which the count of test frames successfully translated by the DUT is | |||
equal to the number of test frames sent to it by the Initiator. | equal to the number of test frames sent to it by the Initiator. | |||
Note: In practice, the usage of binary search is RECOMMENDED. | Note: In practice, the usage of binary search is RECOMMENDED. | |||
4.6. Validation of Connection Establishment | 4.6. Validation of Connection Establishment | |||
Due to "black box" testing, the entries of the connection tracking | Due to "black box" testing, the entries of the connection tracking | |||
table of the DUT may not be directly examined, but the presence of | table of the DUT may not be directly examined. However, the presence | |||
the connections can be checked easily by sending frames from the | of the connections can be checked easily by sending frames from the | |||
Responder to the Initiator in test phase 2 using all four tuples | Responder to the Initiator in test phase 2 using all four tuples | |||
stored in the state table of the Tester (at a low enough frame rate). | stored in the state table of the Tester (at a low enough frame rate). | |||
The arrival of all test frames indicates that the connections are | The arrival of all test frames indicates that the connections are | |||
indeed present. | indeed present. | |||
Procedure: When all the desired N number of test frames were sent by | The procedure is as follows: | |||
the Initiator to the Receiver at frame rate R in test phase 1 for the | ||||
maximum connection establishment rate measurement, and the Receiver | When all the desired N number of test frames are sent by the | |||
Initiator to the Receiver at frame rate R in test phase 1 for the | ||||
maximum connection establishment rate measurement and the Receiver | ||||
has successfully received all the N frames, the establishment of the | has successfully received all the N frames, the establishment of the | |||
connections is checked in test phase 2 as follows: | connections is checked in test phase 2 as follows: | |||
* The Responder sends test frames to the Initiator at frame rate | * The Responder sends test frames to the Initiator at frame rate | |||
r=R*alpha, for the duration of N/r using a different four tuple | r=R*alpha for the duration of N/r, using a different four tuple | |||
from its state table for each test frame. | from its state table for each test frame. | |||
* The Initiator counts the received frames, and if all N frames are | * The Initiator counts the received frames, and if all N frames have | |||
arrived then the R frame rate of the maximum connection | arrived, then the R frame rate of the maximum connection | |||
establishment rate measurement (performed in test phase 1) is | establishment rate measurement (performed in test phase 1) is | |||
raised for the next iteration, otherwise lowered (as well as in | raised for the next iteration; otherwise, it is lowered (as well | |||
the case if test frames were missing in the preliminary test | as in the case that test frames were missing in the preliminary | |||
phase). | test phase, as well). | |||
Notes: | Notes: | |||
* The alpha is a kind of "safety factor", it aims to make sure that | * The alpha is a kind of "safety factor"; it aims to make sure that | |||
the frame rate used for the validation is not too high, and test | the frame rate used for the validation is not too high, and the | |||
may fail only in the case if at least one connection is not | test may fail only in the case of if at least one connection is | |||
present in the connection tracking table of the DUT. (So alpha | not present in the connection tracking table of the DUT. | |||
should be typically less than 1, e.g. 0.8 or 0.5.) | (Therefore, alpha should be typically less than 1, e.g., 0.8 or | |||
0.5.) | ||||
* The duration of N/r and the frame rate of r means that N frames | * The duration of N/r and the frame rate of r means that N frames | |||
are sent for validation. | are sent for validation. | |||
* The order of four tuple selection is arbitrary provided that all | * The order of four tuple selection is arbitrary, provided that all | |||
four tuples MUST be used. | four tuples MUST be used. | |||
* Please refer to Section 4.9 for a short analysis of the operation | * Please refer to Section 4.9 for a short analysis of the operation | |||
of the measurement and what problems may occur. | of the measurement and what problems may occur. | |||
4.7. Test Phase 2 | 4.7. Test Phase 2 | |||
As for the traffic direction, there are three possible cases during | As for the traffic direction, there are three possible cases during | |||
test phase 2: | test phase 2: | |||
* bidirectional traffic: The Initiator sends test frames to the | 1. Bidirectional traffic: The Initiator sends test frames to the | |||
Responder and the Responder sends test frames to the Initiator. | Responder, and the Responder sends test frames to the Initiator. | |||
* unidirectional traffic from the Initiator to the Responder: The | 2. Unidirectional traffic from the Initiator to the Responder: The | |||
Initiator sends test frames to the Responder but the Responder | Initiator sends test frames to the Responder, but the Responder | |||
does not send test frames to the Initiator. | does not send test frames to the Initiator. | |||
* unidirectional traffic from the Responder to the Initiator: The | 3. Unidirectional traffic from the Responder to the Initiator: The | |||
Responder sends test frames to the Initiator but the Initiator | Responder sends test frames to the Initiator, but the Initiator | |||
does not send test frames to the Responder. | does not send test frames to the Responder. | |||
If the Initiator sends test frames, then it uses pseudorandom source | If the Initiator sends test frames, then it uses pseudorandom source | |||
port numbers and destination port numbers from the restricted port | port numbers and destination port numbers from the restricted port | |||
number ranges. (If it uses multiple source and/or destination IP | number ranges. (If it uses multiple source and/or destination IP | |||
addresses, then their ranges are also limited.) The responder | addresses, then their ranges are also limited.) The Responder | |||
receives the test frames, updates its state table, and processes the | receives the test frames, updates its state table, and processes the | |||
test frames as required by the given measurement procedure (e.g. only | test frames as required by the given measurement procedure (e.g., | |||
counts them for the throughput test, handles timestamps for latency | only counts them for the throughput test, handles timestamps for | |||
or PDV tests, etc.). | latency or PDV tests, etc.). | |||
If the Responder sends test frames, then it uses the four tuples from | If the Responder sends test frames, then it uses the four tuples from | |||
its state table. The reading order of the state table may follow | its state table. The reading order of the state table may follow | |||
different policies (discussed in Section 4.10). The Initiator | different policies (discussed in Section 4.10). The Initiator | |||
receives the test frames and processes them as required by the given | receives the test frames and processes them as required by the given | |||
measurement procedure. | measurement procedure. | |||
As for the actual measurement procedures, the usage of the updated | As for the actual measurement procedures, the usage of the updated | |||
ones from Section 7 of [RFC8219] is RECOMMENDED. | ones from Section 7 of [RFC8219] is RECOMMENDED. | |||
4.8. Measurement of the Connection Tear-down Rate | 4.8. Measurement of the Connection Tear-Down Rate | |||
Connection tear-down can cause significant load for the NATxy | Connection tear-down can cause significant load for the NATxy | |||
gateway. The connection tear-down performance can be measured as | gateway. The connection tear-down performance can be measured as | |||
follows: | follows: | |||
1. Load a certain number of connections (N) into the connection | 1. Load a certain number of connections (N) into the connection | |||
tracking table of the DUT (in the same way as done to measure the | tracking table of the DUT (in the same way as done to measure the | |||
maximum connection establishment rate). | maximum connection establishment rate). | |||
2. Record TimestampA. | 2. Record TimestampA. | |||
3. Delete the content of the connection tracking table of the DUT. | 3. Delete the content of the connection tracking table of the DUT. | |||
4. Record TimestampB. | 4. Record TimestampB. | |||
The connection tear-down rate can be computed as: | The connection tear-down rate can be computed as: | |||
connection tear-down rate = N / ( TimestampB - TimestampA) | connection tear-down rate = N / ( TimestampB - TimestampA) | |||
The connection tear-down rate SHOULD be measured for various values | The connection tear-down rate SHOULD be measured for various values | |||
of N. | of N. | |||
It is assumed that the content of the connection tracking table may | It is assumed that the content of the connection tracking table may | |||
be deleted by an out-of-band control mechanism specific to the given | be deleted by an out-of-band control mechanism specific to the given | |||
NATxy gateway implementation. (E.g. by removing the appropriate | NATxy gateway implementation (e.g., by removing the appropriate | |||
kernel module under Linux.) | kernel module under Linux). | |||
It is noted that the performance of removing the entire content of | It is noted that the performance of removing the entire content of | |||
the connection tracking table at one time may be different from | the connection tracking table at one time may be different from | |||
removing all the entries one by one. | removing all the entries one by one. | |||
4.9. Measurement of the Connection Tracking Table Capacity | 4.9. Measurement of the Connection Tracking Table Capacity | |||
The connection tracking table capacity is an important metric of | The connection tracking table capacity is an important metric of | |||
stateful NATxy gateways. Its measurement is not easy, because an | stateful NATxy gateways. Its measurement is not easy, because an | |||
elementary step of a validated maximum connection establishment rate | elementary step of a validated maximum connection establishment rate | |||
measurement (defined in Section 4.6) may have only a few distinct | measurement (defined in Section 4.6) may have only a few distinct | |||
observable outcomes, but some of them may have different root causes: | observable outcomes, but some of them may have different root causes: | |||
1. During test phase 1, the number of test frames received by the | * During test phase 1, the number of test frames received by the | |||
Responder is less than the number of test frames sent by the | Responder is less than the number of test frames sent by the | |||
Initiator. It may have different root causes, including: | Initiator. It may have different root causes, including: | |||
1. The R frame sending rate was higher than the maximum | - The R frame sending rate was higher than the maximum connection | |||
connection establishment rate. (Note that now the maximum | establishment rate. (Note that now the maximum connection | |||
connection establishment rate is considered unknown because | establishment rate is considered unknown because one cannot | |||
one can not measure the maximum connection establishment | measure the maximum connection establishment without assumption | |||
without assumption 1 in Section 4.4!) This root cause may be | 1 in Section 4.4.) This root cause may be eliminated by | |||
eliminated by lowering the R rate and re-executing the test. | lowering the R rate and re-executing the test. (This step may | |||
(This step may be performed multiple times, while R>0.) | be performed multiple times while R>0.) | |||
2. The capacity of the connection tracking table of the DUT has | - The capacity of the connection tracking table of the DUT has | |||
been exhausted. (And either the DUT does not want to delete | been exhausted (and either the DUT does not want to delete | |||
connections or the deletion of the connections makes it | connections or the deletion of the connections makes it slower; | |||
slower. This case is not investigated further in test phase | this case is not investigated further in test phase 1). | |||
1.) | ||||
2. During test phase 1, the number of test frames received by the | * During test phase 1, the number of test frames received by the | |||
Responder equals the number of test frames sent by the Initiator. | Responder equals the number of test frames sent by the Initiator. | |||
In this case, the connections are validated in test phase 1. The | In this case, the connections are validated in test phase 2. The | |||
validation may have two kinds of observable results: | validation may have two kinds of observable results: | |||
1. The number of validation frames received by the Initiator | 1. The number of validation frames received by the Initiator | |||
equals the number of validation frames sent by the Responder. | equals the number of validation frames sent by the Responder. | |||
(It proves that the capacity of the connection tracking table | (It proves that the capacity of the connection tracking table | |||
of the DUT is enough and both R and r were chosen properly.) | of the DUT is enough and both R and r were chosen properly.) | |||
2. The number of validation frames received by the Initiator is | 2. The number of validation frames received by the Initiator is | |||
less than the number of validation frames sent by the | less than the number of validation frames sent by the | |||
Responder. This phenomenon may have various root causes: | Responder. This phenomenon may have various root causes: | |||
1. The capacity of the connection tracking table of the DUT | - The capacity of the connection tracking table of the DUT | |||
has been exhausted. (It does not matter, whether some | has been exhausted. (It does not matter whether some | |||
existing connections are discarded and new ones are | existing connections are discarded and new ones are stored | |||
stored, or the new connections are discarded. Some | or if the new connections are discarded. Some connections | |||
connections are lost anyway, and it makes validation | are lost anyway, and it makes validation fail.) | |||
fail.) | ||||
2. The R frame sending rate used by the Initiator was too | - The R frame sending rate used by the Initiator was too high | |||
high in test phase 1 and thus some connections were not | in test phase 1; thus, some connections were not | |||
established, even though all test frames arrived at the | established even though all test frames arrived at the | |||
Responder. This root cause may be eliminated by lowering | Responder. This root cause may be eliminated by lowering | |||
the R rate and re-executing the test. (This step may be | the R rate and re-executing the test. (This step may be | |||
performed multiple times, while R>0.) | performed multiple times while R>0.) | |||
3. The r frame sending rate used by the Responder was too | - The r frame sending rate used by the Responder was too high | |||
high in test phase 2 and thus some test frames did not | in test phase 2; thus, some test frames did not arrive at | |||
arrive at the Initiator, even though all connections were | the Initiator even though all connections were present in | |||
present in the connection tracking table of the DUT. | the connection tracking table of the DUT. This root cause | |||
This root cause may be eliminated by lowering the r rate | may be eliminated by lowering the r rate and re-executing | |||
and re-executing the test. (This step may be performed | the test. (This step may be performed multiple times while | |||
multiple times, while r>0.) | r>0.) | |||
And here is the problem: as the above three root causes are | This is the problem: As the above three root causes are | |||
indistinguishable, it is not easy to decide, whether R or r | indistinguishable, it is not easy to decide whether R or r | |||
should be decreased. | should be decreased. | |||
Experience shows that the DUT may collapse if its memory is | Experience shows that the DUT may collapse if its memory is | |||
exhausted. Such a situation may make the connection tracking table | exhausted. Such a situation may make the connection tracking table | |||
capacity measurements rather inconvenient. This possibility is | capacity measurements rather inconvenient. This possibility is | |||
included in the recommended measurement procedure, but the detection | included in the recommended measurement procedure, but the detection | |||
and elimination of such a situation is not addressed. (E.g. how the | and elimination of such a situation is not addressed (e.g., how the | |||
algorithm can reset the DUT.) | algorithm can reset the DUT). | |||
For the connection tracking table size measurement, first one needs a | For the connection tracking table size measurement, first, one needs | |||
safe number: C0. It is a precondition, that C0 number of connections | a safe number: C0. It is a precondition that C0 number of | |||
can surely be stored in the connection tracking table of the DUT. | connections can surely be stored in the connection tracking table of | |||
Using C0, one can determine the maximum connection establishment rate | the DUT. Using C0, one can determine the maximum connection | |||
using C0 number of connections. It is done with a binary search | establishment rate using C0 number of connections. It is done with a | |||
using validation. The result is R0. The values C0 and R0 will serve | binary search using validation. The result is R0. The values C0 and | |||
as "safe" starting values for the following two searches. | R0 will serve as "safe" starting values for the following two | |||
searches. | ||||
First, an exponential search is performed to find the order of | First, an exponential search is performed to find the order of | |||
magnitude of the connection tracking table capacity. The search | magnitude of the connection tracking table capacity. The search | |||
stops if the DUT collapses OR the maximum connection establishment | stops if the DUT collapses OR the maximum connection establishment | |||
rate severely drops (e.g. to its one tenth) due to doubling the | rate severely drops (e.g., to its one tenth) due to doubling the | |||
number of connections. | number of connections. | |||
Then, the result of the exponential search gives the order of | Then, the result of the exponential search gives the order of | |||
magnitude of the size of the connection tracking table. Before | magnitude of the size of the connection tracking table. Before | |||
disclosing the possible algorithms to determine the exact size of the | disclosing the possible algorithms to determine the exact size of the | |||
connection tracking table, three possible replacement policies for | connection tracking table, three possible replacement policies for | |||
the NATxy gateway are considered: | the NATxy gateway are considered: | |||
1. The gateway does not delete any live connections until their | 1. The gateway does not delete any live connections until their | |||
timeout expires. | timeout expires. | |||
2. The gateway replaces the live connections according to LRU (least | 2. The gateway replaces the live connections according to the Least | |||
recently used) policy. | Recently Used (LRU) policy. | |||
3. The gateway does a garbage collection when its connection | 3. The gateway does a garbage collection when its connection | |||
tracking table is full and a frame with a new four tuple arrives. | tracking table is full and a frame with a new four tuple arrives. | |||
During the garbage collection, it deletes the K least recently | During the garbage collection, it deletes the K LRU connections, | |||
used connections, where K is greater than 1. | where K is greater than 1. | |||
Now, it is examined what happens and how many validation frames | Now, it is examined what happens and how many validation frames | |||
arrive in the there cases. Let the size of the connection tracking | arrive in the three cases. Let the size of the connection tracking | |||
table be S, and the number of preliminary frames be N, where S is | table be S and the number of preliminary frames be N, where S is less | |||
less than N. | than N. | |||
1. The connections defined by the first S test frames are registered | 1. The connections defined by the first S test frames are registered | |||
into the connection tracking table of the DUT, and the last N-S | into the connection tracking table of the DUT, and the last N-S | |||
connections are lost. (It is another question if the last N-S | connections are lost. (It is another question if the last N-S | |||
test frames are translated and forwarded in test phase 1 or | test frames are translated and forwarded in test phase 1 or | |||
simply dropped.) During validation, the validation frames with | simply dropped.) During validation, the validation frames with | |||
four tuples corresponding to the first S test frames will arrive | four tuples corresponding to the first S test frames will arrive | |||
at the Initiator and the other N-S validation frames will be | at the Initiator and the other N-S validation frames will be | |||
lost. | lost. | |||
2. All connections are registered into the connection tracking table | 2. All connections are registered into the connection tracking table | |||
of the DUT, but the first N-S connections are replaced (and thus | of the DUT, but the first N-S connections are replaced (and thus | |||
lost). During validation, the validation frames with four tuples | lost). During validation, the validation frames with four tuples | |||
corresponding to the last S test frames will arrive to the | corresponding to the last S test frames will arrive to the | |||
Initiator, and the other N-S validation frames will be lost. | Initiator, and the other N-S validation frames will be lost. | |||
3. Depending on the values of K, S, and N, maybe less than S | 3. Depending on the values of K, S, and N, maybe less than S | |||
connections will survive. In the worst case, only S-K+1 | connections will survive. In the worst case, only S-K+1 | |||
validation frames arrive, even though, the size of the connection | validation frames arrive, even though the size of the connection | |||
tracking table is S. | tracking table is S. | |||
If one knows that the stateful NATxy gateway uses the first or second | If one knows that the stateful NATxy gateway uses the first or second | |||
replacement policy and one also knows that both R and r rates are low | replacement policy and one also knows that both R and r rates are low | |||
enough, then the final step of determining the size of the connection | enough, then the final step of determining the size of the connection | |||
tracking table is simple. If the Responder sent N validation frames | tracking table is simple. If the Responder sent N validation frames | |||
and the Initiator received N' of them, then the size of the | and the Initiator received N' of them, then the size of the | |||
connection tracking table is N'. | connection tracking table is N'. | |||
In the general case, a binary search is performed to find the exact | In the general case, a binary search is performed to find the exact | |||
value of the connection tracking table capacity within E error. The | value of the connection tracking table capacity within E error. The | |||
search chooses the lower half of the interval if the DUT collapses OR | search chooses the lower half of the interval if the DUT collapses OR | |||
the maximum connection establishment rate severely drops (e.g. to its | the maximum connection establishment rate severely drops (e.g., to | |||
half) otherwise it chooses the higher half. The search stops if the | its half); otherwise, it chooses the higher half. The search stops | |||
size of the interval is less than the E error. | if the size of the interval is less than the E error. | |||
The algorithms for the general case are defined using C like | The algorithms for the general case are defined using C-like | |||
pseudocode in Figure 5. In practice, this algorithm may be made more | pseudocode in Figure 5. In practice, this algorithm may be made more | |||
efficient in a way that the binary search for the maximum connection | efficient in the way that the binary search for the maximum | |||
establishment rate stops, if an elementary test fails at a rate under | connection establishment rate stops if an elementary test fails at a | |||
RS*beta or RS*gamma during the external search or during the final | rate under RS*beta or RS*gamma during the external search or during | |||
binary search for the capacity of the connection tracking table, | the final binary search for the capacity of the connection tracking | |||
respectively. (This saves a high amount of execution time by | table, respectively. (This saves a high amount of execution time by | |||
eliminating the long-lasting tests at low rates.) | eliminating the long-lasting tests at low rates.) | |||
// The binarySearchForMaximumConnectionCstablishmentRate(c,r) | // The binarySearchForMaximumConnectionCstablishmentRate(c,r) | |||
// function performs a binary search for the maximum connection | // function performs a binary search for the maximum connection | |||
// establishment rate in the [0, r] interval using c number of | // establishment rate in the [0, r] interval using c number of | |||
// connections. | // connections. | |||
// This is an exponential search for finding the order of magnitude | // This is an exponential search for finding the order of magnitude | |||
// of the connection tracking table capacity | // of the connection tracking table capacity | |||
// Variables: | // Variables: | |||
// C0 and R0 are beginning safe values for the connection | // C0 and R0 are beginning safe values for the connection | |||
// tracking table size and connection establishment rate, | // tracking table size and connection establishment rate, | |||
// respectively | // respectively | |||
// CS and RS are their currently used safe values | // CS and RS are their currently used safe values | |||
// CT and RT are their values for the current examination | // CT and RT are their values for the current examination | |||
// beta is a factor expressing an unacceptable drop in R (e.g. | // beta is a factor expressing an unacceptable drop in R (e.g., | |||
// beta=0.1) | // beta=0.1) | |||
// maxrate is the maximum frame rate for the media | // maxrate is the maximum frame rate for the media | |||
R0=binarySearchForMaximumConnectionCstablishmentRate(C0,maxrate); | R0=binarySearchForMaximumConnectionCstablishmentRate(C0,maxrate); | |||
for ( CS=C0, RS=R0; 1; CS=CT, RS=RT ) | for ( CS=C0, RS=R0; 1; CS=CT, RS=RT ) | |||
{ | { | |||
CT=2*CS; | CT=2*CS; | |||
RT=binarySearchForMaximumConnectionCstablishmentRate(CT,RS); | RT=binarySearchForMaximumConnectionCstablishmentRate(CT,RS); | |||
if ( DUT_collapsed || RT < RS*beta ) | if ( DUT_collapsed || RT < RS*beta ) | |||
break; | break; | |||
} | } | |||
// At this point, the size of the connection tracking table is | // At this point, the size of the connection tracking table is | |||
// between CS and CT. | // between CS and CT. | |||
// This is the final binary search for finding the connection | // This is the final binary search for finding the connection | |||
// tracking table capacity within E error | // tracking table capacity within E error | |||
// Variables: | // Variables: | |||
// CS and RS are the safe values for connection tracking table size | // CS and RS are the safe values for connection tracking table size | |||
// and connection establishment rate, respectively | // and connection establishment rate, respectively | |||
// C and R are the values for the current examination | // C and R are the values for the current examination | |||
// gamma is a factor expressing an unacceptable drop in R | // gamma is a factor expressing an unacceptable drop in R | |||
// (e.g. gamma=0.5) | // (e.g., gamma=0.5) | |||
for ( D=CT-CS; D>E; D=CT-CS ) | for ( D=CT-CS; D>E; D=CT-CS ) | |||
{ | { | |||
C=(CS+CT)/2; | C=(CS+CT)/2; | |||
R=binarySearchForMaximumConnectionCstablishmentRate(C,RS); | R=binarySearchForMaximumConnectionCstablishmentRate(C,RS); | |||
if ( DUT_collapsed || R < RS*gamma ) | if ( DUT_collapsed || R < RS*gamma ) | |||
CT=C; // take the lower half of the interval | CT=C; // take the lower half of the interval | |||
else | else | |||
CS=C,RS=R; // take the upper half of the interval | CS=C,RS=R; // take the upper half of the interval | |||
} | } | |||
// At this point, the size of the connection tracking table is | // At this point, the size of the connection tracking table is | |||
skipping to change at page 21, line 17 ¶ | skipping to change at line 902 ¶ | |||
As for the writing policy of the state table of the Responder, round | As for the writing policy of the state table of the Responder, round | |||
robin is RECOMMENDED, because it ensures that its entries are | robin is RECOMMENDED, because it ensures that its entries are | |||
automatically kept fresh and consistent with that of the connection | automatically kept fresh and consistent with that of the connection | |||
tracking table of the DUT. | tracking table of the DUT. | |||
The Responder can read its state table in various orders, for | The Responder can read its state table in various orders, for | |||
example: | example: | |||
* pseudorandom | * pseudorandom | |||
* round-robin | * round robin | |||
Pseudorandom is RECOMMENDED to follow the approach of [RFC4814]. | Pseudorandom is RECOMMENDED to follow the approach of [RFC4814]. | |||
Round-robin may be used as a computationally cheaper alternative. | Round robin may be used as a computationally cheaper alternative. | |||
5. Scalability Measurements | 5. Scalability Measurements | |||
As for scalability measurements, no new types of performance metrics | As for scalability measurements, no new types of performance metrics | |||
are defined, but it is RECOMMENDED to perform measurement series | are defined, but it is RECOMMENDED to perform measurement series | |||
through which the value of one or more parameter(s) is/are changed to | through which the value of one or more parameter(s) are changed to | |||
discover how the various values of the given parameter(s) influence | discover how the various values of the given parameter(s) influence | |||
the performance of the DUT. | the performance of the DUT. | |||
5.1. Scalability Against the Number of Network Flows | 5.1. Scalability Against the Number of Network Flows | |||
The scalability measurements aim to quantify how the performance of | The scalability measurements aim to quantify how the performance of | |||
the stateful NATxy gateways degrades with the increase of the number | the stateful NATxy gateways degrades with the increase of the number | |||
of network flows. | of network flows. | |||
As for the actual values for the number of network flows to be used | As for the actual values for the number of network flows to be used | |||
during the measurement series, it is RECOMMENDED to use some | during the measurement series, it is RECOMMENDED to use some | |||
representative values from the range of the potential number of | representative values from the range of the potential number of | |||
network flows the DUT may be faced with during its intended usage. | network flows the DUT may be faced with during its intended usage. | |||
It is important, how the given number of network flows are generated. | It is important how the given number of network flows are generated. | |||
The sizes of the ranges of the source and destination IP addresses | The sizes of the ranges of the source and destination IP addresses | |||
and port numbers are essential parameters to be reported together | and port numbers are essential parameters to be reported together | |||
with the results. Please see also Section 6 about the reporting | with the results. Please also see Section 6 about the reporting | |||
format. | format. | |||
If a single IP address pair is used, then it is RECOMMENDED to use | If a single IP address pair is used, then it is RECOMMENDED to use: | |||
* a fixed, larger source port number range (e.g., a few times | * a fixed, larger source port number range (e.g., a few times | |||
10,000) | 10,000) and | |||
* a variable size destination port number range (e.g. 10; 100; | * a variable-size destination port number range (e.g., 10, 100, | |||
1,000; etc.), where its expedient granularity depends on the | 1,000, etc.), where its expedient granularity depends on the | |||
purpose. | purpose. | |||
5.2. Scalability Against the Number of CPU Cores | 5.2. Scalability Against the Number of CPU Cores | |||
Stateful NATxy gateways are often implemented in software that are | Stateful NATxy gateways are often implemented in software that is not | |||
not bound to a specific hardware but can be executed by commodity | bound to a specific hardware but can be executed by commodity | |||
servers. To facilitate the comparison of their performance, it can | servers. To facilitate the comparison of their performance, it can | |||
be useful to determine | be useful to determine: | |||
* the performance of the various implementations using a single core | * the performance of the various implementations using a single core | |||
of a well-known CPU | of a well-known CPU and | |||
* the scale-up of the performance of the various implementations | * the scale-up of the performance of the various implementations | |||
with the number of CPU cores. | with the number of CPU cores. | |||
If the number of the available CPU cores is a power of two, then it | If the number of the available CPU cores is a power of two, then it | |||
is RECOMMENDED to perform the tests with 1, 2, 4, 8, 16, etc. number | is RECOMMENDED to perform the tests with 1, 2, 4, 8, 16, etc. number | |||
of active CPU cores of the DUT. | of active CPU cores of the DUT. | |||
6. Reporting Format | 6. Reporting Format | |||
Measurements MUST be executed multiple times. The necessary number | Measurements MUST be executed multiple times. The necessary number | |||
of repetitions to achieve statistically reliable results may depend | of repetitions to achieve statistically reliable results may depend | |||
on the consistent or scattered nature of the results. The report of | on the consistent or scattered nature of the results. The report of | |||
the results MUST contain the number of repetitions of the | the results MUST contain the number of repetitions of the | |||
measurements. Median is RECOMMENDED as the summarizing function of | measurements. The median is RECOMMENDED as the summarizing function | |||
the results complemented with the first percentile and the 99th | of the results complemented with the first percentile and the 99th | |||
percentile as indices of the dispersion of the results. Average and | percentile as indices of the dispersion of the results. The average | |||
standard deviation MAY also be reported. | and standard deviation MAY also be reported. | |||
All parameters and settings that may influence the performance of the | All parameters and settings that may influence the performance of the | |||
DUT MUST be reported. Some of them may be specific to the given | DUT MUST be reported. Some of them may be specific to the given | |||
NATxy gateway implementation, like the "hashsize" (hash table size) | NATxy gateway implementation, like the "hashsize" (hash table size) | |||
and "nf_conntrack_max" (number of connection tracking table entries) | and "nf_conntrack_max" (number of connection tracking table entries) | |||
values for iptables or the limit of the number of states for OpenBSD | values for iptables or the limit of the number of states for OpenBSD | |||
PF (set by the "set limit states number" command in the pf.conf | PF (set by the "set limit states number" command in the pf.conf | |||
file). | file). | |||
number of sessions (req.) 0.4M 4M 40M 400M | +----------------------------+--------+--------+--------+--------+ | |||
source port numbers (req.) 40,000 40,000 40,000 40,000 | | number of sessions (req.) | 0.4M | 4M | 40M | 400M | | |||
destination port numbers (req.) 10 100 1,000 10,000 | +----------------------------+--------+--------+--------+--------+ | |||
"hashsize" (i.s.) 2^17 2^20 2^23 2^27 | | source port numbers (req.) | 40,000 | 40,000 | 40,000 | 40,000 | | |||
"nf_conntrack_max" (i.s.) 2^20 2^23 2^26 2^30 | +----------------------------+--------+--------+--------+--------+ | |||
num. sessions / "hashsize" (i.s.) 3.05 3.81 4.77 2.98 | | destination port numbers | 10 | 100 | 1,000 | 10,000 | | |||
number of experiments (req.) 10 10 10 10 | | (req.) | | | | | | |||
error of binary search (req.) 1,000 1,000 1,000 1,000 | +----------------------------+--------+--------+--------+--------+ | |||
connections/s median (req.) | | "hashsize" (i.s.) | 2^17 | 2^20 | 2^23 | 2^27 | | |||
connections/s 1st perc. (req.) | +----------------------------+--------+--------+--------+--------+ | |||
connections/s 99th perc. (req.) | | "nf_conntrack_max" (i.s.) | 2^20 | 2^23 | 2^26 | 2^30 | | |||
+----------------------------+--------+--------+--------+--------+ | ||||
| num. sessions / "hashsize" | 3.05 | 3.81 | 4.77 | 2.98 | | ||||
| (i.s.) | | | | | | ||||
+----------------------------+--------+--------+--------+--------+ | ||||
| number of experiments | 10 | 10 | 10 | 10 | | ||||
| (req.) | | | | | | ||||
+----------------------------+--------+--------+--------+--------+ | ||||
| error of binary search | 1,000 | 1,000 | 1,000 | 1,000 | | ||||
| (req.) | | | | | | ||||
+----------------------------+--------+--------+--------+--------+ | ||||
| connections/s median | | | | | | ||||
| (req.) | | | | | | ||||
+----------------------------+--------+--------+--------+--------+ | ||||
| connections/s 1st perc. | | | | | | ||||
| (req.) | | | | | | ||||
+----------------------------+--------+--------+--------+--------+ | ||||
| connections/s 99th perc. | | | | | | ||||
| (req.) | | | | | | ||||
+----------------------------+--------+--------+--------+--------+ | ||||
Figure 6: Example table: Maximum connection establishment rate of | Table 1: Example Table of the Maximum Connection Establishment | |||
iptables against the number of sessions | Rate of Iptables Against the Number of Sessions | |||
Figure 6 shows an example of table headings for reporting the | Table 1 shows an example of table headings for reporting the | |||
measurement results for the scalability of the iptables stateful | measurement results regarding the scalability of the iptables | |||
NAT44 implementation against the number of sessions. The table | stateful NAT44 implementation against the number of sessions. The | |||
indicates the always required fields (req.) and the implementation- | table indicates the required fields (req.) and the implementation- | |||
specific ones (i.s.). A computed value was also added in row 6; it | specific ones (i.s.). A computed value was also added in row 6; it | |||
is the number of sessions per hashsize ratio, which helps the reader | is the number of sessions per hashsize ratio, which helps the reader | |||
to interpret the achieved maximum connection establishment rate. (A | to interpret the achieved maximum connection establishment rate. (A | |||
lower value results in shorter linked lists hanging on the entries of | lower value results in shorter linked lists hanging on the entries of | |||
the hash table thus facilitating higher performance. The ratio is | the hash table, thus facilitating higher performance. The ratio is | |||
varying, because the number of sessions is always a power of 10, | varying, because the number of sessions is always a power of 10, | |||
whereas the hash table size is a power of 2.) To reflect the | whereas the hash table size is a power of 2.) To reflect the | |||
accuracy of the results, the table contains the value of the "error" | accuracy of the results, the table contains the value of the "error" | |||
of the binary search, which expresses the stopping criterion for the | of the binary search, which expresses the stopping criterion for the | |||
binary search. The binary search stops, when the difference between | binary search. The binary search stops when the difference between | |||
the "higher limit" and "lower limit" of the binary search is less | the "higher limit" and "lower limit" of the binary search is less | |||
than or equal to "error". | than or equal to the "error". | |||
The table MUST be complemented with reporting the relevant parameters | The table MUST be complemented with reporting the relevant parameters | |||
of the DUT. If the DUT is a general-purpose computer and some | of the DUT. If the DUT is a general-purpose computer and some | |||
software NATxy gateway implementation is tested, then the hardware | software NATxy gateway implementation is tested, then the hardware | |||
description SHOULD include: computer type, CPU type, and number of | description SHOULD include the following: | |||
active CPU cores, memory type, size and speed, network interface card | ||||
type (reflecting also the speed), the fact that direct cable | * computer type | |||
connections were used or the type of the switch used for | ||||
interconnecting the Tester and the DUT. Operating system type and | * CPU type | |||
version, kernel version, and the version of the NATxy gateway | ||||
implementation (including last commit date and number if applicable) | * number of active CPU cores | |||
SHOULD also be given. | ||||
* memory type | ||||
* size and speed | ||||
* network interface card type (also reflecting the speed) | ||||
* direct cable connections or the type of switch used for | ||||
interconnecting the Tester and the DUT | ||||
The operating system type and version, kernel version, and version of | ||||
the NATxy gateway implementation (including the last commit date and | ||||
number if applicable) SHOULD also be given. | ||||
7. Implementation and Experience | 7. Implementation and Experience | |||
The stateful extension of siitperf [SIITPERF] is an implementation of | The stateful extension of siitperf [SIITPERF] is an implementation of | |||
this concept. Its first version only supporting multiple port | this concept. Its first version that only supports multiple port | |||
numbers is documented in this (open access) paper [LEN2022]. Its | numbers is documented in this (open access) paper: [LEN2022]. Its | |||
extended version also supporting multiple IP addresses is documented | extended version that also supports multiple IP addresses is | |||
in this (open access) paper [LEN2024b]. | documented in this (open access) paper: [LEN2024b]. | |||
The proposed benchmarking methodology has been validated by | The proposed benchmarking methodology has been validated by | |||
performing benchmarking measurements with three radically different | performing benchmarking measurements with three radically different | |||
stateful NAT64 implementations (Jool, tayga+iptables, OpenBSD PF) in | stateful NAT64 implementations (Jool, tayga+iptables, and OpenBSD PF) | |||
(open access) paper [LEN2023]. | in this (open access) paper: [LEN2023]. | |||
Further experience with this methodology using siitperf for measuring | Further experience with this methodology of using siitperf for | |||
the scalability of the iptables stateful NAT44 and Jool stateful | measuring the scalability of the iptables stateful NAT44 and Jool | |||
NAT64 implementations are described in | stateful NAT64 implementations are described in [SCALABILITY]. | |||
[I-D.lencse-v6ops-transition-scalability]. | ||||
This methodology was successfully applied for the benchmarking of | This methodology was successfully applied for the benchmarking of | |||
various IPv4aas (IPv4-as-a-Service) technologies without the usage of | various IPv4-as-a-Service (IPv4aas) technologies without the usage of | |||
technology-specific Testers by reducing the aggregate of their CE | technology-specific Testers by reducing the aggregate of their | |||
(Customer Edge) and PE (Provider Edge) devices to a stateful NAT44 | Customer Edge (CE) and Provider Edge (PE) devices to a stateful NAT44 | |||
gateway documented in (open access) paper [LEN2024a]. | gateway documented in this (open access) paper: [LEN2024a]. | |||
8. Limitations of using UDP as Transport Layer Protocol | 8. Limitations of Using UDP as a Transport Layer Protocol | |||
The test frame format defined in RFC 2544 exclusively uses UDP (and | The test frame format defined in [RFC2544] exclusively uses UDP (and | |||
not TCP) as a transport layer protocol. Testing with UDP was kept in | not TCP) as a transport layer protocol. Testing with UDP was kept in | |||
both RFC 5180 and RFC 8219 regarding the standard benchmarking | both [RFC5180] and [RFC8219] regarding the standard benchmarking | |||
procedures (throughput, latency, frame loss rate, etc.). The | procedures (throughput, latency, frame loss rate, etc.). The | |||
benchmarking methodology proposed in this document follows this long | benchmarking methodology proposed in this document follows this long- | |||
established benchmarking tradition using UDP as a transport layer | established benchmarking tradition using UDP as a transport layer | |||
protocol, too. The rationale for this is that the standard | protocol, too. The rationale for this is that the standard | |||
benchmarking procedures require sending frames at arbitrary constant | benchmarking procedures require sending frames at arbitrary constant | |||
frame rates, which would violate the flow control and congestion | frame rates, which would violate the flow control and congestion | |||
control algorithms of the TCP protocol. TCP connection setup (using | control algorithms of the TCP protocol. TCP connection setup (using | |||
the three-way handshake) would further complicate testing. | the three-way handshake) would further complicate testing. | |||
Further potential transport layer protocols e.g., DCCP [RFC4340] and | Further potential transport layer protocols, e.g., the Datagram | |||
SCTP [RFC9260] are outside of the scope of this document, as the | Congestion Control Protocol (DCCP) [RFC4340] and the Stream Control | |||
widely-used stateful NAT44 and stateful NAT64 implementations do not | Transmission Protocol (SCTP) [RFC9260], are outside of the scope of | |||
support them. Although QUIC [RFC9000] is also considered a transport | this document, as the widely used stateful NAT44 and stateful NAT64 | |||
layer protocol, but QUIC packets are carried in UDP datagrams thus | implementations do not support them. Although QUIC [RFC9000] is also | |||
QUIC does not need a special handling. | considered a transport layer protocol, QUIC packets are carried in | |||
UDP datagrams; thus, QUIC does not need a special handling. | ||||
Some stateful NATxy solutions handle TCP and UDP differently, e.g. | Some stateful NATxy solutions handle TCP and UDP differently, e.g., | |||
iptables uses 30s timeout for UDP and 60s timeout for TCP. Thus | iptables use a 30s timeout for UDP and a 60s timeout for TCP. Thus, | |||
benchmarking results produced using UDP do not necessarily | benchmarking results produced using UDP do not necessarily | |||
characterize the performance of a NATxy gateway well enough when they | characterize the performance of a NATxy gateway well enough when they | |||
are used for forwarding Internet traffic. As for the given example, | are used for forwarding Internet traffic. As for the given example, | |||
timeout values of the DUT may be adjusted, but it requires extra | timeout values of the DUT may be adjusted, but it requires extra | |||
consideration. | consideration. | |||
Other differences in handling UDP or TCP are also possible. Thus, | Other differences in handling UDP or TCP are also possible. Thus, | |||
the authors recommend that further investigations should be performed | the authors recommend that further investigations should be performed | |||
in this field. | in this field. | |||
As a mitigation of this problem, this document recommends that | As a mitigation of this problem, this document recommends that | |||
testing with protocols using TCP (like HTTP and HTTPS up to version | testing with protocols using TCP (like HTTP and HTTPS up to version | |||
2) can be performed as described in [RFC9411]. This approach also | 2) can be performed as described in [RFC9411]. This approach also | |||
solves the potential problem of protocol helpers may be present in | solves the potential problem of protocol helpers that may be present | |||
the stateful DUT. | in the stateful DUT. | |||
As for HTTP/3, it uses QUIC, which uses UDP as stated above. It | As for HTTP/3, it uses QUIC, which uses UDP as stated above. It | |||
should be noted that QUIC is treated as any other UDP payload. The | should be noted that QUIC is treated as any other UDP payload. The | |||
proposed measurement method does not aim to measure the performance | proposed measurement method does not aim to measure the performance | |||
of QUIC, rather it aims to measure the performance of the stateful | of QUIC, rather, it aims to measure the performance of the stateful | |||
NATxy gateway. | NATxy gateway. | |||
9. Acknowledgements | 9. IANA Considerations | |||
The authors would like to thank Al Morton, Sarah Banks, Edwin | ||||
Cordeiro, Lukasz Bromirski, Sándor Répás, Tamás Hetényi, Timothy | ||||
Winters, Eduard Vasilenko, Minh Ngoc Tran, Paolo Volpato, Zeqi Lai, | ||||
and Bertalan Kovács for their comments. | ||||
The authors thank Warren Kumari, Michael Scharf, Alexey Melnikov, | ||||
Robert Sparks, David Dong, Roman Danyliw, Erik Kline, Murray | ||||
Kucherawy, Zaheduzzaman Sarker, and Éric Vyncke for their reviews and | ||||
comments. | ||||
This work was supported by the Japan Trust International Research | ||||
Cooperation Program of the National Institute of Information and | ||||
Communications Technology (NICT), Japan. | ||||
10. IANA Considerations | ||||
This document does not make any request to IANA. | This document has no IANA actions. | |||
11. Security Considerations | 10. Security Considerations | |||
This document has no further security considerations beyond that of | This document has no further security considerations beyond that of | |||
[RFC8219]. They should be cited here so that they be applied not | [RFC8219]. They should be cited here so that they can be applied not | |||
only for the benchmarking of IPv6 transition technologies but also | only for the benchmarking of IPv6 transition technologies but also | |||
for the benchmarking of any stateful NATxy gateways (allowing for | for the benchmarking of any stateful NATxy gateways (allowing for | |||
x=y, too). | x=y, too). | |||
12. References | 11. References | |||
12.1. Normative References | 11.1. Normative References | |||
[RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G. | [RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G. | |||
J., and E. Lear, "Address Allocation for Private | J., and E. Lear, "Address Allocation for Private | |||
Internets", BCP 5, RFC 1918, DOI 10.17487/RFC1918, | Internets", BCP 5, RFC 1918, DOI 10.17487/RFC1918, | |||
February 1996, <https://www.rfc-editor.org/info/rfc1918>. | February 1996, <https://www.rfc-editor.org/info/rfc1918>. | |||
[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>. | |||
skipping to change at page 27, line 28 ¶ | skipping to change at line 1205 ¶ | |||
[RFC9260] Stewart, R., Tüxen, M., and K. Nielsen, "Stream Control | [RFC9260] Stewart, R., Tüxen, M., and K. Nielsen, "Stream Control | |||
Transmission Protocol", RFC 9260, DOI 10.17487/RFC9260, | Transmission Protocol", RFC 9260, DOI 10.17487/RFC9260, | |||
June 2022, <https://www.rfc-editor.org/info/rfc9260>. | June 2022, <https://www.rfc-editor.org/info/rfc9260>. | |||
[RFC9411] Balarajah, B., Rossenhoevel, C., and B. Monkman, | [RFC9411] Balarajah, B., Rossenhoevel, C., and B. Monkman, | |||
"Benchmarking Methodology for Network Security Device | "Benchmarking Methodology for Network Security Device | |||
Performance", RFC 9411, DOI 10.17487/RFC9411, March 2023, | Performance", RFC 9411, DOI 10.17487/RFC9411, March 2023, | |||
<https://www.rfc-editor.org/info/rfc9411>. | <https://www.rfc-editor.org/info/rfc9411>. | |||
12.2. Informative References | 11.2. Informative References | |||
[DUST1964] Durstenfeld, R., "Algorithm 235: Random | ||||
permutation", Communications of the ACM, vol. 7, no. 7, | ||||
p.420., DOI 10.1145/364520.364540, July 1964, | ||||
<https://dl.acm.org/doi/10.1145/364520.364540>. | ||||
[I-D.lencse-v6ops-transition-scalability] | [DUST1964] Durstenfeld, R., "Algorithm 235: Random permutation", | |||
Lencse, G., "Scalability of IPv6 Transition Technologies | Communications of the ACM, vol. 7, no. 7, p. 420, | |||
for IPv4aaS", Work in Progress, Internet-Draft, draft- | DOI 10.1145/364520.364540, July 1964, | |||
lencse-v6ops-transition-scalability-05, 14 October 2023, | <https://dl.acm.org/doi/pdf/10.1145/364520.364540>. | |||
<https://datatracker.ietf.org/doc/html/draft-lencse-v6ops- | ||||
transition-scalability-05>. | ||||
[IIR2020] Kurahashi, T., Matsuzaki, Y., Sasaki, T., Saito, T., and | [IIR2020] Kurahashi, T., Matsuzaki, Y., Sasaki, T., Saito, T., and | |||
F. Tsutsuji, "Periodic observation report: Internet trends | F. Tsutsuji, "Periodic Observation Report: Internet Trends | |||
as seen from IIJ infrastructure - 2020", Internet | as Seen from IIJ Infrastructure - 2020", Internet | |||
Infrastructure Review, vol. 49, December 2020, | Initiative Japan Inc., Internet Infrastructure Review, | |||
vol. 49, December 2020, | ||||
<https://www.iij.ad.jp/en/dev/iir/pdf/ | <https://www.iij.ad.jp/en/dev/iir/pdf/ | |||
iir_vol49_report_EN.pdf>. | iir_vol49_report_EN.pdf>. | |||
[LEN2015] Lencse, G., "Estimation of the Port Number Consumption of | [LEN2015] Lencse, G., "Estimation of the Port Number Consumption of | |||
Web Browsing", IEICE Transactions on Communications, vol. | Web Browsing", IEICE Transactions on Communications, vol. | |||
E98-B, no. 8. pp. 1580-1588, DOI DOI: | E98-B, no. 8. pp. 1580-1588, | |||
10.1587/transcom.E98.B.1580, 1 August 2015, | DOI 10.1587/transcom.E98.B.1580, August 2015, | |||
<http://www.hit.bme.hu/~lencse/publications/ | <https://www.hit.bme.hu/~lencse/publications/ | |||
e98-b_8_1580.pdf>. | e98-b_8_1580.pdf>. | |||
[LEN2020] Lencse, G., "Adding RFC 4814 Random Port Feature to | [LEN2020] Lencse, G., "Adding RFC 4814 Random Port Feature to | |||
Siitperf: Design, Implementation and Performance | Siitperf: Design, Implementation and Performance | |||
Estimation", International Journal of Advances in | Estimation", International Journal of Advances in | |||
Telecommunications, Electrotechnics, Signals and Systems, | Telecommunications, Electrotechnics, Signals and Systems, | |||
vol 9, no 3, pp. 18-26., DOI 10.11601/ijates.v9i3.291, | vol 9, no 3, pp. 18-26., DOI 10.11601/ijates.v9i3.291, | |||
2020, | November 2020, | |||
<http://ijates.org/index.php/ijates/article/view/291>. | <http://ijates.org/index.php/ijates/article/view/291>. | |||
[LEN2022] Lencse, G., "Design and Implementation of a Software | [LEN2022] Lencse, G., "Design and Implementation of a Software | |||
Tester for Benchmarking Stateful NAT64xy Gateways: Theory | Tester for Benchmarking Stateful NAT64xy Gateways: Theory | |||
and Practice of Extending Siitperf for Stateful | and Practice of Extending Siitperf for Stateful Tests", | |||
Tests", Computer Communications, vol. 172, no. 1, pp. | Computer Communications, vol. 192, pp. 75-88, | |||
75-88, DOI 10.1016/j.comcom.2022.05.028, 1 August 2022, | DOI 10.1016/j.comcom.2022.05.028, August 2022, | |||
<https://www.sciencedirect.com/science/article/pii/ | <https://www.sciencedirect.com/science/article/pii/ | |||
S0140366422001803>. | S0140366422001803>. | |||
[LEN2023] Lencse, G., Shima, K., and K. Cho, "Benchmarking | [LEN2023] Lencse, G., Shima, K., and K. Cho, "Benchmarking | |||
methodology for stateful NAT64 gateways", Computer | methodology for stateful NAT64 gateways", Computer | |||
Communications, vol. 210, no. 1, pp. 256-272, | Communications, vol. 210, pp. 256-272, | |||
DOI 10.1016/j.comcom.2023.08.009, 1 October 2023, | DOI 10.1016/j.comcom.2023.08.009, October 2023, | |||
<https://www.sciencedirect.com/science/article/pii/ | <https://www.sciencedirect.com/science/article/pii/ | |||
S0140366423002931>. | S0140366423002931>. | |||
[LEN2024a] Lencse, G. and Á. Bazsó, "Benchmarking methodology for | [LEN2024a] Lencse, G. and Á. Bazsó, "Benchmarking methodology for | |||
IPv4aaS technologies: Comparison of the scalability of the | IPv4aaS technologies: Comparison of the scalability of the | |||
Jool implementation of 464XLAT and MAP-T", Computer | Jool implementation of 464XLAT and MAP-T", Computer | |||
Communications, vol. 219, no. 1, pp. 243-258, | Communications, vol. 219, pp. 243-258, | |||
DOI 10.1016/j.comcom.2024.03.007, 1 April 2024, | DOI 10.1016/j.comcom.2024.03.007, April 2024, | |||
<https://www.sciencedirect.com/science/article/pii/ | <https://www.sciencedirect.com/science/article/pii/ | |||
S0140366424000999>. | S0140366424000999>. | |||
[LEN2024b] Lencse, G., "Making stateless and stateful network | [LEN2024b] Lencse, G., "Making stateless and stateful network | |||
performance measurements unbiased", Computer | performance measurements unbiased", Computer | |||
Communications, DOI 10.1016/j.comcom.2024.05.018, | Communications, vol. 225, pp. 141-155, | |||
DOI 10.1016/j.comcom.2024.05.018, September 2024, | ||||
<https://www.sciencedirect.com/science/article/abs/pii/ | <https://www.sciencedirect.com/science/article/abs/pii/ | |||
S0140366424001993>. | S0140366424001993>. | |||
[SIITPERF] Lencse, G., "Siitperf: An RFC 8219 compliant SIIT and | [SCALABILITY] | |||
stateful NAT64/NAT44 tester written in C++ using | Lencse, G., "Scalability of IPv6 Transition Technologies | |||
DPDK", source code, available from GitHub, 2019-2023, | for IPv4aaS", Work in Progress, Internet-Draft, draft- | |||
<https://github.com/lencsegabor/siitperf>. | lencse-v6ops-transition-scalability-05, 14 October 2023, | |||
<https://datatracker.ietf.org/doc/html/draft-lencse-v6ops- | ||||
Appendix A. Change Log | transition-scalability-05>. | |||
A.1. 00 | ||||
Initial version. | ||||
A.2. 01 | ||||
Updates based on the comments received on the BMWG mailing list and | ||||
minor corrections. | ||||
A.3. 02 | ||||
Section 4.4 was completely re-written. As a consequence, the | ||||
occurrences of the now undefined "mostly different" source port | ||||
number destination port number combinations were deleted from | ||||
Section 4.5, too. | ||||
A.4. 03 | ||||
Added Section 4.3 about the consideration of the cases of stateful | ||||
operation. | ||||
Consistency checking. Removal of some parts obsoleted by the | ||||
previous re-writing of Section 4.4. | ||||
Added Section 4.8 about the method for measuring connection tear-down | ||||
rate. | ||||
Updates for Section 7 about the implementation and experience. | ||||
A.5. 04 | ||||
Update of the abstract. | ||||
Added Section 4.6 about validation of connection establishment. | ||||
Added Section 4.9 about the method for measuring connection tracking | ||||
table capacity. | ||||
Consistency checking and corrections. | ||||
A.6. 00 - WG item | ||||
Added measurement setup for Stateful NAT64 gateways. | ||||
Consistency checking and corrections. | ||||
A.7. 01 | ||||
Added Section 4.5.1 about typical types of measurement series and | ||||
reporting format. | ||||
A.8. 02 | ||||
Added the usage of multiple IP addresses. | ||||
Section 4.5.1 was removed and split into two Sections: Section 5 | ||||
about scalability measurements and Section 6 about reporting format. | ||||
A.9. 03 | ||||
Updated the usage of multiple IP addresses. | ||||
Test phases were renamed as follows: | ||||
* preliminary test phase --> test phase 1 | ||||
* real test phase --> test phase 2. | ||||
A.10. 04 | ||||
Minor updates to Section 3.2 and Section 7. | ||||
A.11. 05 | ||||
Minor updates addressing WGLC nits (adding the definition of "black | [SIITPERF] "Siitperf: An RFC 8219 compliant SIIT and stateful NAT64/ | |||
box", and performing a high amount of grammatical corrections). | NAT44 tester", commit 165cb7f, September 2023, | |||
<https://github.com/lencsegabor/siitperf>. | ||||
A.12. 06 | Acknowledgements | |||
Language editing addressing preliminary AD review comments by | The authors would like to thank Al Morton, Sarah Banks, Edwin | |||
eliminating the occurrences of first person singular ("we", "our"). | Cordeiro, Lukasz Bromirski, Sándor Répás, Tamás Hetényi, Timothy | |||
Winters, Eduard Vasilenko, Minh Ngoc Tran, Paolo Volpato, Zeqi Lai, | ||||
and Bertalan Kovács for their comments. | ||||
A.13. 07 | The authors thank Warren Kumari, Michael Scharf, Alexey Melnikov, | |||
Robert Sparks, David Dong, Roman Danyliw, Erik Kline, Murray | ||||
Kucherawy, Zaheduzzaman Sarker, and Éric Vyncke for their reviews and | ||||
comments. | ||||
Updates addressing IESG Last Call comments. | This work was supported by the Japan Trust International Research | |||
Cooperation Program of the National Institute of Information and | ||||
Communications Technology (NICT), Japan. | ||||
Authors' Addresses | Authors' Addresses | |||
Gábor Lencse | Gábor Lencse | |||
Széchenyi István University | Széchenyi István University | |||
Győr | Győr | |||
Egyetem tér 1. | Egyetem tér 1. | |||
H-9026 | H-9026 | |||
Hungary | Hungary | |||
Email: lencse@sze.hu | Email: lencse@sze.hu | |||
Keiichi Shima | Keiichi Shima | |||
SoftBank Corp. | SoftBank Corp. | |||
1-7-1 Kaigan, Tokyo | 1-7-1 Kaigan, Minato-ku, Tokyo | |||
105-7529 | 105-7529 | |||
Japan | Japan | |||
Email: shima@wide.ad.jp | Email: shima@wide.ad.jp | |||
URI: https://softbank.co.jp/ | URI: https://softbank.co.jp/ | |||
End of changes. 169 change blocks. | ||||
589 lines changed or deleted | 538 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |