<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
    There has to be one entity for each item to be referenced. 
    An alternate method (rfc include) is described in the references. -->

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2544 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2544.xml">
<!ENTITY RFC4814 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4814.xml">
<!ENTITY RFC5180 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5180.xml">
<!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8219 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8219.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
    please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
    (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
    (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info" docName="draft-lencse-bmwg-benchmarking-stateful-00" ipr="trust200902">

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
          full title is longer than 39 characters -->

    <title abbrev="Benchmarking Stateful Gateways">Benchmarking Methodology
    for Stateful NATxy Gateways using RFC 4814 Pseudorandom Port Numbers</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Gabor Lencse" initials="G.L."
            surname="Lencse">
      <organization>Szechenyi Istvan University</organization>
      <address>
        <postal>
          <street>Egyetem ter 1.</street>
          <!-- Reorder these if your country does things differently -->
          <city>Gyor</city>
          <region></region>
          <code>H-9026</code>
          <country>Hungary</country>
        </postal>
        <phone></phone>
        <email>lencse@sze.hu</email>
        <uri></uri>
      </address>
    </author>

    <author fullname="Keiichi Shima" initials="K.S." surname="Shima">
	  <organization>IIJ Innovation Institute</organization>
      <address>
        <postal>
          <street>Iidabashi Grand Bloom, 2-10-2 Fujimi</street>
          <city>Chiyoda-ku</city>
          <region>Tokyo</region>
          <code>102-0071</code>
          <country>Japan</country>
        </postal>
        <phone></phone>
        <email>keiichi@iijlab.net</email>
        <uri></uri>
      </address>
    </author>

    <date year="2021" />

    <!-- Meta-data Declarations -->

    <area>Operations and Management Area</area>

    <workgroup>Benchmarking Methodology Working Group</workgroup>

    <!-- WG name at the upperleft corner of the doc,
          IETF is fine for individual submissions.  
    If this element is not present, the default is "Network Working Group",
          which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword>Benchmarking, Stateful NATxy, Measurement Procedure, Throughput, Frame Loss Rate, Latency, PDV</keyword>

    <!-- Keywords will be incorporated into HTML output
          files in a meta tag but they have no effect on text or nroff
          output. If you submit your draft to the RFC Editor, the
          keywords will be used for the search engine. -->

    <abstract>
      <t>RFC 2544 has defined a benchmarking methodology for network
      interconnect devices. RFC 5180 addressed IPv6 specificities and it also
      provided a technology update, but excluded IPv6 transition technologies.
      RFC 8219 addressed IPv6 transition technologies, including stateful NAT64.
	  However, none of them discussed how to apply RFC 4814 pseudorandom port numbers
	  to any stateful NAT (NAT44, NAT64, NAT66) technologies.
	  We discuss why using pseudorandom port numbers with stateful NAT gateways is a 
	  hard problem and recommend a solution.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t><xref target="RFC2544"/> has defined a comprehensive benchmarking 
	  methodology for network interconnect devices, which is still in use. It was 
	  mainly IP version independent, but it used IPv4 in its examples. 
	  <xref target="RFC5180"/> addressed IPv6 specificities
      and also added technology updates, but declared IPv6 transition technologies
      out of its scope. <xref target="RFC8219"/> addressed the IPv6 transition 
	  technologies, including stateful NAT64. It has reused several benchmarking
      procedures from <xref target="RFC2544"/> (e.g. throughput, frame loss rate), 
	  it has redefined the latency measurement, and added further ones, e.g. the PDV 
	  (packet delay variation) measurement.</t>  
	  <t>However, none of them discussed, how to apply <xref target="RFC4814"/> 
	  pseudorandom port numbers, when benchmarking stateful NATxy (NAT44, NAT64, NAT66) 
	  gateways. We are not aware of any other RFCs that address this question.
	  </t> 
      <t>First, we discuss why using pseudorandom port numbers with stateful NATxy 
	  gateways is a hard problem. 
	  </t>
	  <t>Then we recommend a solution.
	  </t>
		  
      <section title="Requirements Language">
        <t>
           The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 
           "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", 
           and "OPTIONAL" in this document are to be interpreted as described 
           in BCP14 <xref target="RFC2119"/> <xref target="RFC8174"/> 
           when, and only when, they appear in all capitals, as shown here.
         </t>
      </section>
    </section>

    <section anchor="problem" title="Pseudorandom Port Numbers and Stateful Translation">
    <t>In its appendix, <xref target="RFC2544"/> has defined a frame format 
	for test frames including specific source and destination port numbers.
    <xref target="RFC4814"/> recommends to use pseudorandom and
    uniformly distributed values for both source and destination port
    numbers. However, stateful NATxy (NAT44, NAT64, NAT66) solutions use the 
	port numbers to identify connections. The usage of pseudorandom port
	numbers causes different problems depending on the direction.
	<list style="symbols">
	  <t> As for the private to public direction, pseudorandom source and 
	  destination port numbers could be used, however, this approach would 
	  be a denial of service attack against the stateful NATxy gateway, 
	  because it would exhaust its connection tracking table. To that end,
	  let us see some calculations using the recommendations of RFC 4814:
	  <list style="symbols">
	    <t>The recommended source port range is: 1024-65535, thus its size is: 64512.</t>
	    <t>The recommended destination port range is: 1-49151, thus its size is: 49151.</t>
	    <t>The number of source and destination port number combinations is:
	    3,170,829,312.</t>
	  </list>
      We note that section 12 of <xref target="RFC2544"/> also requires testing 
	  with 256 destination networks, which further increases the number of 
	  connection tracking table entries.</t>
	  <t>As for the public to private direction, the stateful DUT would drop any 
	  packets that do not belong to an existing connection, therefore, the 
	  direct usage of pseudorandom port numbers from the above-mentioned ranges 
	  is not feasible.</t>
	</list>
	</t>
    </section>


    <section anchor="setup_term" title="Test Setup and Terminology">
	  <t>
	  Our methodology works with any IP version. We use IPv4 in the Test Setup
	  shown in <xref target="test_setup"/> to facilitate its easy 
	  understanding based on the well-known stateful NAT44 
	  (also called NAPT: Network Address and Port Translation) solution.
	  </t>

        <figure anchor="test_setup" align="center" title="Test Setup for benchmarking
		stateful NATxy gateways">
          <preamble></preamble>

          <artwork align="left"><![CDATA[
              +--------------------------------------+
     10.0.0.2 |Initiator                    Responder| 198.19.0.2
+-------------|                Tester                |<------------+
| private IPv4|                         [state table]| public IPv4 |
|             +--------------------------------------+             |
|                                                                  |
|             +--------------------------------------+             |
|    10.0.0.1 |                 DUT:                 | 198.19.0.1  |
+------------>|        Sateful NATxy gateway         |-------------+
  private IPv4|     [connection tracking table]      | public IPv4
              +--------------------------------------+

            ]]></artwork>

        <postamble></postamble>
        </figure>
	  <t>As for transport layer protocol, <xref target="RFC2544"/> recommended 
	  testing with UDP, and it was kept also in <xref target="RFC8219"/>. For 
	  the general recommendation, we also keep UDP, thus the port numbers in the 
	  following text are to be understood as UDP port numbers. We discuss the 
	  limitation of this approach in <xref target="udp_or_tcp"/>.
	  </t>
	  <t>
      We define the most important elements of our proposed benchmarking system as follows.
	  <list style="symbols">
	  <t>Connection tracking table: The stateful NATxy gateway uses a connection 
	  tracking table to be able to perform the stateful translation in the public to
	  private direction. Its size, policy and content is unknown for the Tester.</t>
	  <t>Four tuple: The four numbers that identify a connection are source IP address, 
	  source port number, destination IP address, destination port number.</t>
	  <t>Initiator: The port of the Tester that may initiate a connection through the 
	  stateful DUT in the private to public direction. Theoretically, it can use 
	  any source and destination port numbers: 
	  if they do not belong to an existing connection, the DUT will register a new 
	  connection into its connection tracking table.</t>
	  <t>Responder: The port of the Tester that may not initiate a connection through 
	  the stateful DUT in the public to private direction. It may send only frames that 
	  belong to an existing connection. To that end, it uses four tuples that have been 
	  previously extracted from the received test frames and stored in its state table.</t>
	  <t>State table: The Responder of the Tester extracts the four tuple from each received
	  test frame and stores it in its state table. Recommendation is given for writing and 
	  reading order of the state table in <xref target="st_wr_order"/>.</t>
	  <t>Preliminary test phase: Test frames are sent only by the Initiator to the 
	  Responder through the DUT to fill both the connection tracking table of the DUT 
	  and the state table of the Responder. This is a newly introduced operation phase 
	  for stateful NATxy benchmarking. The necessity of this phase is explained in 
	  <xref target="prelim"/>.</t>
	  <t>Real test phase: The actual test (e.g. throughput, latency, etc.) is performed 
	  in this phase after the completion of the preliminary test phase. Test frames 
	  are sent as required (e.g. bidirectional test or unidirectional test in any of 
	  the two directions).</t>

	  </list>
	  </t>
    </section>
	
    <section anchor="method" title="Recommended Benchmarking Method">
	
	  <section anchor="restr_port_range" title="Restricted Port Number Ranges">
	  <t>The Initiator SHOULD use restricted ranges for source and 
	  destination port numbers to avoid the denial of service attack against the 
	  connection tracking table of the DUT described in <xref target="problem"/>. 
	  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 destination port number 
	  range SHOULD be smaller (may vary from a few to several hundreds or thousands 
	  as needed). 
	  The rationale is that source and destination port numbers that can be observed in 
	  the Internet traffic are not symmetrical. Whereas source port numbers may be random, 
	  there are a few very popular destination port numbers (e.g. 443, 80, etc., 
	  see <xref target="IIR2020"/>) and others hardly occur. And we have
	  found that their role is also asymmetric in the Linux kernel routing hash 
	  function <xref target="LEN2020"/>. 
	  </t>
	  <t>The product of the sizes of the two ranges can be used as a parameter. The 
	  performance of the stateful NATxy gateway MAY be examined as function of this
	  parameter.
	  </t>
	  </section>

	  <section anchor="prelim" title="Preliminary Test Phase">
		<t>The preliminary phase serves two purposes:
		<list style="numbers">
		  <t>The connection tracking table of the DUT is filled. It is important, 
		  because its maximum connection establishment rate may be lower than its maximum
		  frame forwarding rate (that is throughput).</t>
		  <t>The state table of the Responder is filled with valid four tuples. It is 
		  a precondition for the Responder to be able to transmit frames that belong to connections 
		  exist in the connection tracking table of the DUT.</t>
		</list>				
		Whereas the above two things are always necessary before the real test phase, 
		the preliminary phase can be used without the real test phase. It is done so, 
		when the maximum connection establishment rate is measured (as described in 
		<xref target="meas_max_conn_est_rate"/>).
		</t>
	    <t>A preliminary test phase MUST be performed before all tests performed in 
		the real test phase. In this phase, the following things happen:
		<list style="numbers">
		  <t>The Initiator sends test frames to the Responder through the DUT at a 
		  specific frame rate.</t>
		  <t>The DUT performs the stateful translation of the test frames and it also 
		  stores the new combinations in its connection tracking table.</t>
		  <t>The Responder receives the translated test frames and updates its state 
		  table with the received four tuples. The responder transmits no test frames 
		  during the preliminary phase.</t>
		</list>  
		</t>
		<t>When the preliminary test phase is performed in preparation to the real test phase, 
		the applied frame rate and the duration of the preliminary phase SHOULD be 
		carefully selected so that:
		<list style="symbols">
		  <t>The applied frame rate be safely lower than the maximum connection establishment rate.</t>
		  <t>The initial transient of the filling of the connection tracking table of the 
		  DUT be finished.</t>
		  <t>Enough four tuples be stored in the state table of the Responder so that 
		  it can generate frames with the proper distribution of the four tuples.</t>
		  <t>The connections do not time out in the DUT even during the beginning of 
		  the real test phase.</t>
		</list>		
		</t>
	  </section>
	  
	  <section anchor="ctrl_conntrack_size" title="Control of the Connection Tracking Table Entries">
		<t>The number of the entries in the connection tracking table of the DUT MAY 
		be controlled by using all different source port number destination port number 
		combinations. 
		</t>
		<t>
		Let NF and NC denote the number of test frames to send and the number of 
		all possible source port number destination port number combinations, respectively.
		<list style="numbers">
		  <t>If NF and NC are in the same order of magnitude, 
		  then the all different source port number destination port number combinations 
		  may be computing efficiently generated by preparing a random permutation of the 
		  previously enumerated all possible source port number destination port number 
		  combinations using Dustenfeld's random shuffle algorithm <xref target="DUST1964"/>.</t>
		  <t>If NF is at least an order of magnitude less than NC, then a simpler solution 
		  may be used: the Initiator registers in a table and then it checks if a given source 
		  port number destination port number combination was already used (and if yes, then it 
		  MUST generate a new one).</t>
		  <t>If NF is at least two orders of magnitude less than NC, then mostly different 
		  source port number destination port number combinations can be generated without any 
		  specific provision.</t>
		</list>
		</t>		  
		<t>Important warning: in normal router testing, the port number selection algorithm 
		(whether it is pseudo-random or enumerated) does not affect final results. However, 
		our experience with iptables shows that if the connection tracking table is filled using port 
		number enumeration in increasing order, then the maximum connection establishment 
		rate of iptables degrades significantly compared to its performance using pseudorandom 
		port numbers <xref target="LEN2021"/>.
		</t>
		<t>
		<xref target="RFC4814"/> REQUIRES pseudorandom port numbers, which we believe is a good 
		approximation of the distribution of the source port numbers a NATxy gateway on the 
		Internet may face with.
		</t>
		<t>The enumeration of the source port number destination port number combinations 
		in increasing order MAY be used as an additional measurement to discover worst case 
		performance. 
		</t>
	  </section>
	  
	  <section anchor="meas_max_conn_est_rate" title="Measurement of the Maximum Connection Establishment Rate">
	    <t>The maximum connection establishment rate is an important characteristic of
		the stateful NATxy gateway and its determination is necessary for the safe 
		execution of the preliminary test phase (without frame loss) before the real 
		test phase.
		</t>
		<t>The measurement procedure of the maximum connection establishment rate is 
		very similar to the throughput measurement procedure defined in 
		<xref target="RFC2544"/>.
		</t>
		<t>Procedure:  The Initiator sends a specific number of test frames using all (or mostly)
		different source port number destination port number combinations at a specific rate
		through the DUT. The Responder counts the frames that are successfully translated 
		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.
		</t>
		<t>The maximum connection establishment rate is the fastest rate at 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.
		</t>
		<t>Notes:
		<list style="numbers">
		  <t>All different source port number destination port number combinations SHOULD 
		  be used, if the results of the measurement are published. Mostly different source 
		  port number destination port number combinations MAY be used, if the results 
		  of the measurement are not published, but they are used only to determine a good 
		  enough frame rate for the preliminary test phase preparing the test system for 
		  the real test phase.</t>
		  <t>In practice, we RECOMMEND the usage of binary search.</t>
		  <t>As for the successful translation, the Responder MAY (or SHOULD?) check 
		  that the source IP address is different than the original source IP address 
		  set by the Initiator.</t>
		</list>
		</t>
	  </section>
	  
	  <section anchor="real_test" title="Real Test Phase">
	    <t>As for the traffic direction, there are three possible cases during the real 
	    test phase:
	    <list style="symbols">
		  <t>bidirectional traffic: The Initiator sends test frames to the Responder and 
		  the Responder sends test frames to the Initiator.</t>
		  <t>unidirectional traffic from the Initiator to the Responder: The Initiator 
		  sends test frames to the Responder but the Responder does not send test frames to 
		  the Initiator.</t>
		  <t>unidirectional traffic from the Responder to the Initiator: The Responder 
		  sends test frames to the Initiator but the Initiator does not send test frames to 
		  the Responder.</t>
		</list>
		</t>
		<t>If the Initiator sends test frames, then it uses pseudorandom source port numbers and 
		destination port numbers from the restricted port number ranges. The responder receives 
		the test frames, updates its state table and processes the test 
		frames as required by the given measurement procedure (e.g. only counts them for 
		throughput test, handles timestamps for latency or PDV tests, etc.).
		</t>
		<t>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 different policies (discussed
		in <xref target="st_wr_order"/>). The Initiator receives the test frames, and 
		processes them as required by the given measurement procedure.
		</t>
		<t>
		As for the actual measurement procedures, we RECOMMEND to use the updated ones 
		from Section 7 of <xref target="RFC8219"/>.
		</t>
	  </section>
	  
	  <section anchor="st_wr_order" title="Writing and Reading Order of the State Table">	  
		<t>As for writing policy of the state table of the Responder, we RECOMMEND round robin, 
		because it ensures that its entries are automatically kept fresh and thus there is
		no need to handle timeout.
		</t>
		<t>The Responder can read its state table in various orders. We RECOMMEND one of the 
		following ones:
	    <list style="symbols">
		  <t>round robin</t>
		  <t>pseudorandom (with restriction!)</t>
		  <t>random permutation (no position is repeated until all positions are used).</t>
		</list>
		</t>
		<t>
		Pseudorandom reading order of the state table MAY NOT be used with
		unidirectional traffic from the Responder to the Initiator, because if a four tuple 
		is not used until timeout time, then its connection is deleted from the connection 
		tracking table of the DUT and a later use of the given four tuple will cause frame loss.
		There is no such problem, when bidirectional traffic is used, because then the state 
		table of the Responder is periodically refreshed.
		</t>
		<t>
		We do not see any problem in the round robin reading order, because the state table 
		is filled using pseudorandom port numbers. 
		</t>
	  </section>
	  
	  <section anchor="peculiar" title="Peculiarities of Stateful Testing">
	  <t>Stateful testing involves some issues not present in stateless testing.
	  </t>
	    <section anchor="timeout" title="Timeout Budget">
		<t>Even though we do black box testing, one MUST consider timeout and carefully 
		manage timeout budget. For example, if the frame rate is high enough, then every 
		single entry of the state table of the Responder is refreshed within timeout time 
		and it prevents frame sending with a stale four tuple. If the entries of the state 
		table are not refreshed (due to testing with single directional traffic from the 
		Responder to the Initiator) then using all four tuples within timeout time can 
		keep all connection tracking table entries of the DUT alive.
		</t>
		<t>Special care should be taken for the lower frame rate in the preliminary phase.
		</t>
		<t>If the binary search (or the decreasing of the applied frame rates during the frame 
		loss rate test) results in a frame rate that is too low to keep alive the connection
		tracking table entries, then it results in the failure of the consecutive tests 
		(the binary search of the throughput test counts down to zero).
		</t>
	    </section>
	    <section anchor="nonzero_loss" title="Special Warning Against Non-zero Frame Loss Testing">
		<t>Several network performance tester vendors include a parameter called 
		"Loss Tolerance" (or similar) for the throughput test and several benchmarking
		professionals actually use nonzero values <xref target="TOL2001"/>. If frames are lost during 
		stateful testing (especially if it happens during a test with unidirectional
		traffic from the Responder to the Initiator) the refreshing of the corresponding 
		connection tracking table element is not ensured and it may result in the loss 
		of further frames (not due to the low performance of the DUT, but due to using a 
		stale four tuple).
		</t>
		</section>
	  </section>
	  
    </section>	

    <section anchor="impl_exp" title="Implementation and Experience">
	  <t>The "stateful" branch of siitperf <xref target="SIITPERF"/> is a partial 
	  implementation of this concept.
	  </t>
	  <t>
	  Our experience is documented in a paper currently under review <xref target="LEN2021"/>. 
	  </t>
    </section>

	
    <section anchor="udp_or_tcp" title="Limitations of using UDP as Transport Layer Protocol">
	  <t>Stateful NATxy solutions handle TCP and UDP differently, e.g. iptables uses 30s 
	  timeout for UDP and 60s timeout for TCP. Thus benchmarking results produced using UDP do not 
      necessarily characterize the performance of a NATxy gateway well enough, when they 
	  are used for forwarding Internet traffic. As for the given example, timeout values of the DUT may 
      be adjusted, but it requires extra consideration. 	  
	  </t> 
	  <t>Other differences in handling UDP or TCP are also possible. Thus we recommend that 
	  further investigations are to be performed in this field.
	  </t>  
    </section>

  

   <section anchor="Acknowledgements" title="Acknowledgements">
     <t>The authors would like to thank ... (TBD) </t>
   </section>

   <!-- Possibly a 'Contributors' section ... -->

   <section anchor="IANA" title="IANA Considerations">
     <t>This document does not make any request to IANA.</t>
   </section>

   <section anchor="Security" title="Security Considerations">
     <t>We have no further security considerations beyond that of <xref target="RFC8219"/>. 
	 Perhaps they should be cited here so that they be applied not only for the 
	 benchmarking of IPv6 transition technologies, but also for the benchmarking of 
	 stateful NATxy.</t>

    
   </section>
 </middle>

 <!--  *****BACK MATTER ***** -->

 <back>
   <!-- References split into informative and normative -->

   <!-- There are 2 ways to insert reference entries from the citation libraries:
    1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
    2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
       (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

    Both are cited textually in the same manner: by using xref elements.
    If you use the PI option, xml2rfc will, by default, try to find included files in the same
    directory as the including file. You can also define the XML_LIBRARY environment variable
    with a value containing a set of directories to search.  These can be either in the local
    filing system or remote ones accessed by http (http://domain/dir/... ).-->

   <references title="Normative References">
    <!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->
    &RFC2119;
	&RFC2544;
    &RFC4814;
	&RFC5180;
    &RFC8174;
	&RFC8219;


   </references>

   <references title="Informative References">
     <!-- Here we use entities that we defined at the beginning. -->

    <reference anchor="DUST1964" 
    target="https://dl.acm.org/doi/10.1145/364520.364540">
      <front>
        <title>Algorithm 235: Random permutation
        </title>
        <author initials="R." surname="Durstenfeld">
          <organization></organization>
		</author>
        <date day="" month="July" year="1964"/>
      </front>
      <seriesInfo name="" value="Communications of the ACM, vol. 7, no. 7, p.420."/>
      <seriesInfo name="DOI" value="10.1145/364520.364540"/>
    </reference>
	
    <reference anchor="IIR2020" 
    target="https://www.iij.ad.jp/en/dev/iir/pdf/iir_vol49_report_EN.pdf">
      <front>
        <title>Periodic observation report: Internet trends as seen from IIJ infrastructure - 2020
        </title>

        <author initials="T." surname="Kurahashi">
          <organization></organization>
        </author>
        <author initials="Y." surname="Matsuzaki">
          <organization></organization>
        </author>
        <author initials="T." surname="Sasaki">
          <organization></organization>
        </author>
        <author initials="T." surname="Saito">
          <organization></organization>		  
        </author>
        <author initials="F." surname="Tsutsuji">
          <organization></organization>
        </author>
        <date day="" month="Dec" year="2020"/>
      </front>
      <seriesInfo name="" value="Internet Infrastructure Review, vol. 49"/>
    </reference>
	

    <reference anchor="LEN2020" 
    target="http://www.hit.bme.hu/~lencse/publications/291-1113-1-PB.pdf">
      <front>
        <title>Adding RFC 4814 Random Port Feature to Siitperf: Design, Implementation and Performance Estimation
        </title>

        <author initials="G." surname="Lencse">
          <organization></organization>
        </author>
        <date day="" month="" year="2020"/>
      </front>
      <seriesInfo name="" value="International Journal of Advances in Telecommunications, Electrotechnics, Signals and Systems, vol 9, no 3, pp. 18-26."/>
      <seriesInfo name="DOI" value="10.11601/ijates.v9i3.291"/>
    </reference>
	
    <reference anchor="LEN2021"  
    target="http://www.hit.bme.hu/~lencse/publications/SFNAT64-tester-for-review.pdf">
      <front>
        <title>Design and Implementation of a Software Tester for Benchmarking Stateful NAT64 Gateways: 
		Theory and Practice of Extending Siitperf for Stateful Tests
        </title>

        <author initials="G." surname="Lencse">
          <organization></organization>
        </author>

        <date day="" month="" year="2021"/>
      </front>
      <seriesInfo name="" value="under review in Computer Commuications"/>    
      <seriesInfo name="" value="may be revised or removed without notice"/>
    </reference>

	   
	
    <reference anchor="SIITPERF" 
    target="https://github.com/lencsegabor/siitperf">
      <front>
        <title>Siitperf: An RFC 8219 compliant SIIT (stateless NAT64) tester written in C++ using DPDK
        </title>

        <author initials="G." surname="Lencse">
          <organization></organization>
        </author>
        <author initials="Y." surname="Kadobayashi">
          <organization></organization>
        </author>

        <date day="" month="" year="2019" />
      </front>
      <seriesInfo name="" value="source code"/>
      <seriesInfo name="" value="available from GitHub"/>
    </reference>
	<!-- 	-->

	<reference anchor="TOL2001" 
    target="https://www.itworldcanada.com/article/kevin-tolly-the-real-meaning-of-zero-loss-testing/33066">
      <front>
        <title>The real meaning of zero-loss testing
        </title>

        <author initials="K." surname="Tolly">
          <organization></organization>
        </author>

        <date day="" month="" year="2001" />
      </front>
      <seriesInfo name="" value="IT World Canada"/>

    </reference>
	

	
   </references>

   <section anchor="change_log" title="Change Log">
    <section title="00">
      <t>Initial version.
      </t>
    </section>
   </section>
  </back>
</rfc>
