<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="info" docName="draft-cerveny-bmwg-ipv6-nd-00" ipr="trust200902">
  <front>
    <title abbrev="draft-cerveny-bmwg-ipv6-nd-00">Benchmarking Neighbor
    Discovery Problems</title>

    <author fullname="Bill Cerveny" initials="W.J." surname="Cerveny">
      <organization>Arbor Networks</organization>
    </author>

    <date day="11" month="March" year="2013"/>

    <abstract>
      <t>This document is a benchmarking instantiation of RFC 6583:
      &ldquo;Operational Neighbor Discovery Problems&rdquo;. It describes a
      general testing procedure and measurements that can be performed to
      evaluate how the problems described in RFC 6583 may impact the
      functionality or performance of intermediate nodes.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>This document is a benchmarking instantiation of <xref
      format="default" target="RFC6583">RFC 6583: &ldquo;Operational Neighbor
      Discovery Problems&rdquo;</xref>. It describes a general testing
      procedure and measurements that can be performed to evaluate how the
      problems described in RFC 6583 may impact the functionality or
      performance of intermediate nodes.</t>
    </section>

    <section title="Terminology">
      <t><list style="hanging">
          <t hangText="Neighbor Discovery">See <xref target="RFC4861">Section
          1 of RFC 4861</xref></t>

          <t hangText="NDP Triggering Event">An event which forces the DUT
          (Device Under Test) to perform a neighbor solicitation. A triggering
          event could be an ICMPv6 echo request, but could also be any other
          packets which require discovering the MAC address of existing and
          non-existing nodes on an IPv6 subnet.</t>

          <t hangText="Scanner Network">The network from which the scanning
          device is connected.</t>

          <t hangText="Target Network">The network for which the scanner is
          targeting its scans.</t>

          <t hangText="Scanning Node">The node which is conducting the
          scanning activity.</t>

          <t hangText="Target Network Measurement Node">A node that resides on
          the target network, which is primarily used to measure DUT
          performance while the scanning activity is occurring.</t>

          <t hangText="Non-participating Measurement Node">A node on a network
          directly connected to the DUT, but this node is not in the target
          network nor the scanner network.</t>
        </list></t>
    </section>

    <section title="Test Set-up">
      <t/>

      <section title="Device Under Test (DUT)">
        <t>For purposes of this document, the intermediate node will be
        referred to as the device under test (DUT). The DUT may be any
        intermediate node which retains a neighbor cache. The tests in this
        document could also be completed with any intermediate node which
        maintains a list of addresses that traverse the intermediate node,
        although not all measurements and performance characteristics may
        apply.</t>
      </section>

      <section title="Test Network">
        <t>The test network design is fairly simple. The network needs to
        minimally have two subnets: one from which the scanner(s) source their
        scanning activity and the other which is the target network of the
        address scans.</t>

        <t>It is assumed that the latency for all network segments is
        neglible.</t>

        <t>At least one node should reside on the target network to confirm
        some of the performance characteristics.</t>

        <figure>
          <preamble>Basic format of test network. Note that optional
          "non-participating node" is illustrated connected via a third
          network not related to the scanner or target network.</preamble>

          <artwork><![CDATA[+---------------+             +-----------+              +--------------+
|               |   Scanner   |           |   Target     |              |
|   Scanning    |-------------|    DUT    |--------------|Target Network|
|     node      |   Network   |           |   Network    |     node     |
|               |             |           |              |              |
+---------------+             +-----------+              +--------------+
                                    |
                                    |
                           +-----------------+
                           |                 |
                           |Non-participating|
                           |      node       |
                           |                 |
                           +-----------------+]]></artwork>
        </figure>
      </section>
    </section>

    <section title="Modifiers (variables)">
      <t/>

      <section title="Frequency of NDP triggering events">
        <t>The frequency of NDP triggering events could be as high as the
        maximum packet per second rate that the iscanner network will support
        (or is rated for). However, it may not be necessary to send packets at
        a particularly high rate and in fact a goal of testing could be to
        identify if the DUT is able to withstand scans at rates which
        otherwise would not impact the performance of the DUT.</t>

        <t>Optimistically, the scanning rate should be incremented until the
        DUT&rsquo;s performance begins deteriorating. Depending on the
        software and system being used to implement the scanning, it may be
        challenging to achieve a sufficient rate.</t>

        <t>The lowest frequency is the lowest rate for which packets could be
        expected to have an impact on the DUT &mdash; this value is of course,
        subjective.</t>
      </section>

      <section title="Prefix Length">
        <t>The target network's subnet shall be 64-bits in length. It may be
        interesting to gauge performance when the subnet length is varied from
        64-bits.</t>
      </section>

      <section title="Duration of Test">
        <t>The duration of the test needs to be evaluated</t>
      </section>

      <section title="Packet Size">
        <t>Although packet size shouldn&rsquo;t have a direct impact, packet
        per second (pps) rates will have an impact and smaller packet sizes
        should be utilized to facilitate higher packet per second rates.</t>
      </section>

      <section title="Packet Type">
        <t>For purposes of this test, the packet type being sent by the
        scanning device isn&rsquo;t important, although most scanning
        applications might want to send packets that would elicit responses
        from nodes within a subnet. Since it is not intended that responses be
        evoked from the target network node, such packets aren&rsquo;t
        necessary.</t>

        <t>The hop limit for the scanning packets should be set to 2, to
        reduce the likelihood that scanning packets would escape the test
        network.</t>
      </section>

      <section title="Packet Addressing">
        <t>The destination address for the packet should be an address within
        the target network. While each packet sent should have a unique
        destination address in the destination network, it isn&rsquo;t clear
        if it matters what the sequence of addresses is. For purposes of
        thoroughness, it may be desirable to send each packet with a random
        address within the target network&rsquo;s address space.</t>

        <t>The source address for the packet may be the same for all scanning
        packets. However, it may be interesting to vary the source address
        during the scanning activity</t>
      </section>

      <section title="Testing of Mitigating Options">
        <t>It may be desirable to perform some tests in the presence of
        mitigating techniques described in <xref target="RFC6583"> RFC
        6583</xref></t>
      </section>

      <section title="Attack where node in target network responds to all neighbor solicitations">
        <t>[Open Question: Is this an interesting condition, where a device on
        the network responds affirmatively to all incoming NDP requests?? Are
        there any non-malicious cases where this could happen?]</t>
      </section>
    </section>

    <section title="Exclusions">
      <t>This benchmarking test is not intended to test DUT behavior in the
      presence of malformed packets, such as packets which do not confirm to
      designs consistent with IETF standards.</t>
    </section>

    <section title="Measurements">
      <t/>

      <section title="Round-trip time across DUT">
        <t>This consists of pinging the target network measurement node from a
        non-participating measurement node and recording reported round-trip
        time. This measurement should be conducted with an address not yet
        present in the DUT&rsquo;s neighbor cache. This measurement is
        included because it is perhaps the easiest to conduct and capture.</t>
      </section>

      <section title="Rate DUT adds a valid node in the target network to its neighbor cache">
        <t>There are three distinct time elements associated with this
        measurement:</t>

        <t><list style="numbers">
            <t>The difference in time for which the DUT receives the packet
            which must be forwarded to a node in the target network not yet
            listed in the neighbor cache and the time the DUT sends a neighbor
            solicitation.</t>

            <t>The difference in time between when the target network
            measurement node receives the neighbor solicitation and the time
            the target network measurement node responds with a neighbor
            advertisement. This time is outside the control of the DUT and
            measurements should account for this time if it is
            significant.</t>

            <t>The difference in time from which the DUT receives the packet
            to the time for which the DUT adds the neighbor in its neighbor
            cache.</t>
          </list></t>

        <t>The first time element may be measurable via a device which can
        observe packets on both the scanner network and the target network.
        The second time element may be measured by monitoring the target
        network and observing the specific neighbor solicitation for the node
        and the node&rsquo;s solicited[Is this the right term?] neighbor
        advertisement.</t>

        <t>Of the above time elements, the third is perhaps the hardest to
        measure for times smaller than a few seconds.</t>

        <t>A challenge with this measurement is to conduct it where the target
        network node has an address that is not in the DUT's neighbor cache in
        any state (such as &ldquo;INCOMPLETE&rdquo;). As tested with a router,
        the router's "clear neighbor cache" command did not always flush the
        target network node's neighbor entry. One method of implementing this
        may be to configure the target network node with sufficient addresses
        for a unique NDP request per test interval.</t>
      </section>

      <section title="Adherence to prioritization of NDP activity prioritization">
        <t>As discussed in <xref target="RFC6583">RFC 6583</xref>, this
        measurement would require confirming that a set prioritization is
        adhered to. [Insert more text here.]</t>
      </section>

      <section title="DUT CPU utilization">
        <t>Measured in percent utilization, captured via a non-intrusive query
        of the DUT.</t>
      </section>

      <section title="Rate DUT forwards packets">
        <t>This measures the impact that the scan may have on the DUT&rsquo;s
        ability to forward packets. The measurement should be documented in
        packets per seconds (pps) or (bps). However, if the DUT handles NDP in
        the &ldquo;management plane&rdquo; and packets are forwarded in a
        separate &ldquo;forwarding plane&rdquo;, the scanning tests described
        in this document may not have any impact on the DUT&rsquo;s ability to
        forward packets.</t>

        <t>It may be beneficial to conduct two <xref target="RFC5180">RFC 5180
        </xref> style throughput tests even if it is assumed that scanning
        activity won&rsquo;t have any bearing on the DUT&rsquo;s packet
        forwarding capabilities:</t>

        <t><list style="numbers">
            <t>Baseline test without any scanning activity.</t>

            <t>Test while worse-case scanning activity is occuring.</t>
          </list></t>
      </section>

      <section title="Rate DUT responds to neighbor solicitations for its own address">
        <t>This is the difference in time from when a node on the target
        network network sends a neighbor solicitation for the DUT&rsquo;s MAC
        address and when the DUT responds with a neighbor advertisement in
        response to the neighbor solicitation. This can be determined by
        observing the target network and measuring the difference in time (in
        milliseconds) between when the neighbor solicitation leaves the target
        network measurement node and when the solicited neighbor advertisement
        is returned from the DUT.</t>
      </section>

      <section title="Impact on unaffected interfaces/subnets">
        <t>This measurement would require having a node on a network directly
        connected to the DUT, but not on either the scanner network or target
        network. Although not itemized, this measurement could consist of any
        combination of measurements which are conducted relating to the target
        network.</t>
      </section>

      <section title="Maximum number of enteries in the DUT's neighbor cache">
        <t>This measurement confirms how many entries can effectively reside
        in the DUT&rsquo;s neighbor cache. This measurement would support or
        refute any value documented by the DUT manufacturer. [Need to describe
        how this is done.]</t>
      </section>
    </section>

    <section title="Measurement Interval">
      <t>To be determined.</t>
    </section>

    <section title="DUT initialization">
      <t>At the beginning of each test, the neighbor cache of the DUT should
      be initialized</t>
    </section>

    <section title="General Test Procedure">
      <t>This test can be completed with publicly available scanning software.
      The methodology to implement this scan is fairly straightforward and
      could be implemented using open-source network scripting tools.</t>

      <t>The algorithm for such a scanner could be as simple as:</t>

      <t>Dest_address = &lt;ip prefix&gt;::1000</t>

      <t>While True:</t>

      <t>Send(ICMPv6(dst=Dest_address)</t>

      <t>Dest_address = Dest_address + 1</t>

      <t>As described in <xref target="RFC6583"/>, four instances of a scanner
      on a single computer was able to impact the performance of high-end
      routers. If multiple scanner instances are used, the starting address
      should be in different &ldquo;regions&rdquo; of the subnet.</t>

      <t>Some existing software for completing network scans is discussed in
      <xref target="RFC6583"/>, although other applications may exist.</t>

      <t>Although not tested, commercial network testing solutions may be
      effectively implemented and may provide dedsired throughput.</t>
    </section>

    <section title="Other Potential Testing Scenarios">
      <t/>

      <section title="Exhaustion of Address Tables (NCE) in Intermediate Nodes">
        <t>[Question: Where a large number of addresses are being scanned for,
        would there be an impact on intermediate nodes, such as
        firewalls?]</t>
      </section>

      <section title="Link-local network attack">
        <t>In this attack, a node in the subnet simulates a condition where it
        is sending packets to every address in the subnet and where the
        destination MAC address is the DUT[Is this an allowed scenario?]. In
        this scenario, it &ldquo;could&rdquo; be possible to send neighbor
        solicition messages to every link local address via the default
        gateway.</t>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document makes no request of IANA.</t>

      <t>Note to RFC Editor: this section may be removed on publication as an
      RFC.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>Benchmarking activities as described in this memo are limited to
      technology characterization using controlled stimuli in a laboratory
      environment, with dedicated address space and the constraints specified
      in the sections above.</t>

      <t>The benchmarking network topology will be an independent test setup
      and MUST NOT be connected to devices that may forward the test traffic
      into a production network, or misroute traffic to the test management
      network.</t>

      <t>Further, benchmarking is performed on a "black-box" basis, relying
      solely on measurements observable external to the DUT/SUT. Special
      capabilities SHOULD NOT exist in the DUT/SUT specifically for
      benchmarking purposes.</t>

      <t>Any implications for network security arising from the DUT/SUT SHOULD
      be identical in the lab and in production networks.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t/>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include='reference.RFC.5180'?>

      <?rfc include='reference.RFC.6583'?>

      <?rfc include='reference.RFC.2544'?>

      <?rfc include='reference.RFC.4861'?>
    </references>
  </back>
</rfc>
