<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.26 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mueller-dkextension-00" category="exp" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title>Direct Knowledge Extension to Distance Vector Routing</title>
    <seriesInfo name="Internet-Draft" value="draft-mueller-dkextension-00"/>
    <author fullname="Sebastian Mueller">
      <organization/>
      <address>
        <email>directknowledgeextension@gmx.de</email>
      </address>
    </author>
    <date year="2025" month="March" day="30"/>
    <keyword>count to infinity problem</keyword>
    <keyword>distance vector routing</keyword>
    <abstract>
      <?line 55?>

<t>Naive Distance Vector-based routing protocols like the Routing Information Protocol <xref target="RFC_1058"/> suffer from a phenomena called the "count to infinity problem"  in the event of a network topology change. This Internet Draft extends a naive Distance Vector routing implementation with a simple flag that allows the network to recover quickly and reliably, with no chance of routing loops to occur.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/Sebastianmueller22/network-protocol"/>.</t>
    </note>
  </front>
  <middle>
    <?line 59?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The count to infinity problem arises in distance vector routing protocols when a routing loop forms after a network topology change. In such scenarios, nodes within the loop continue to advertise routes to a failed node through each other. Misled by these advertisements, the nodes fail to recognize the network failure and continue routing traffic within the loop, incrementing the routing metrics until they reach an "infinity" value. At this point, the nodes assume a failure and cease routing traffic to the failed node. The infinity value imposes a limitation on the maximum network size, as the actual routing costs between distant nodes must remain below this threshold.</t>
      <t>This document introduces a simple flag to distance vector routing protocols, addressing the count to infinity problem and eliminating the need for strict network size limits imposed by, for example, the Routing Information Protocol <xref target="RFC_1058"/>. Consequently, mechanisms such as split horizon with poisoned reverse and feasibility conditions become redundant. The proposed extension is designed to be compatible with "naive" Bellman-Ford based routing protocols like RIP2 <xref target="RFC_2453"/> rather than more sophisticated protocols like Babel <xref target="RFC_6126"/> , which were developed to tackle the count to infinity problem. Due to its simplicity, this extension should still be compatible with various distance vector-based routing protocols.
# Conventions and Definitions</t>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>Count to infinity problem - CTIP</t>
      <t>Distance Vector Routing - DVR</t>
      <t>Routing Information Protocol - RIP</t>
      <t>Direct Knowledge Bit - DKB</t>
    </section>
    <section anchor="distance-vector-routing">
      <name>Distance Vector Routing</name>
      <t>The basic principle of Distance Vector based routing is that nodes only exchange routing information with their direct neighbors. The local link costs are added to the advertised routing cost of a given, more distant node and the path with the lowest cost is chosen. Only the next hop to any given node or network needs to be saved by network participants.</t>
      <t>Take this network as an example:</t>
      <artwork><![CDATA[
        A
       / \
      /   \
     B-----C
      \   /
       \ /
        D
       / \
      /   \
     E     F
      \   /
       \ /
        G
]]></artwork>
      <t>How do the network participants decide on the best path to G?</t>
      <t>If the link cost between E and G is 10, while all other link costs are 1, E advertises a cost of 10 to D, while F advertises a cost of 1. D calculates the total cost to reach G via E as 11 by adding 1 to E's advertised cost. However, since the path to G via F has a lower total cost of 2, D selects F as the next hop to G and updates its routing table accordingly. In the next update cycle, D advertises its path to G through itself, with a total cost of 2. B and C add their local link cost of 1 and update their total cost to reach G to 3. In the next update cycle A selects either B or C as its next hop with a cost of 4.</t>
      <t>We only considered the cost to reach G in this example (and will continue to do so for the remainder of this draft). This is simultaneously done for all other network participants though. Hopefully this quick example is enough to understand the principle of the routing algorithm. For interested readers, the according sections in the RFCs <xref target="RFC_6126"/>  and <xref target="RFC_2453"/> are reccommended.</t>
    </section>
    <section anchor="count-to-infinity">
      <name>Count to infinity</name>
      <t>Counting to an arbitrary infinity value is an attempt of naive DVR algorithms such as RIP to resolve routing loops after a network topology change.</t>
      <artwork><![CDATA[
        A
       / \
      /   \
     B-----C
      \   /
       \ /
        D
       / \
      /   \
     E     F
      \   /
       \ /
        G
]]></artwork>
      <t>The link costs are the same as in the previous example. We assume one basic protection against routing loops, namely split horizon with poisoned reverse. This means that, for example, when node A has node C as next hop to G in its routing table, it will not advertise this route to C (because the route goes via C, C knows about it). Routing loops can still emerge though, as we will see in this example.</t>
      <t>When the link between F and G fails, a naive implementation of DVR sets the cost between F and G to an "infinity value" — a positive integer larger than the highest legal routing cost. According to the original RIP <xref target="RFC_1058"/>, this value is set to 16. Consequently, F advertises the value of 16 to D. Due to the implementation of split horizon, D does not advertise the cost of 2 back to F. Instead, D selects E as the next best hop to G, updating its cost to reach G to 11.</t>
      <t>B and C do not advertise their cost of 3 to D because of split horizon. In the following update cycle, B and C receive D's updated cost of 11. In the same update cycle, they each advertise their previous cost of 3 to each other and to A, because those are not their next hop, which is still D. This causes B and C to believe they can route traffic to G via one another, without realizing their paths go through D. As a result, both add the local link cost of 1 to the routing cost of 3 and propagate this "new" route to A and D in the next cycle.</t>
      <t>In subsequent update cycles, the cost of 1 is repeatedly added to the cost in the routing loop. It takes a significant number of cycles for this cumulative cost to eventually exceed 12 — the only remaining connection to G, at which point the loop resolves and the network converges to this path.</t>
      <t>This takes a long time and in the case of a node failure, there is no way out of it other than to count up to an arbitrary infinity value (16 in this example). This value serves as an arbitrary threshold to terminate the process once it becomes excessively large. While effective in halting the loop, reaching this limit is time-consuming and restricts the range of permissible routing costs and thereby the possible size of the network.</t>
    </section>
    <section anchor="the-extension">
      <name>The extension</name>
      <t>This draft proposes the convention that if a node doesn't receive an update message from one of its immediate neighbors for a certain amount of time, it tries to contact it with several messages which need to be acknowledged. If these remain unanswered, the node assumes the neighbor to be down.
It then sends a triggered update to all other neighbors with the route to the down neighbor being set to -1 or another similarly impossible value. This can also be implemented as a separate flag in the routing information datagram. Although this is an adapted version of the "infinity value" of the RIP, it cannot be a positive number since we make no limitation on the network size. This infinity value signals the failure event to the rest of the network. All receiving nodes that aren't direct neighbors to the failed node <bcp14>MUST</bcp14> perform the following steps:</t>
      <ul spacing="normal">
        <li>
          <t>They write the infinity value into their routing table</t>
        </li>
        <li>
          <t>They stop routing traffic with the failed node as a target and report it to the sender as unreachable</t>
        </li>
        <li>
          <t>They ignore any regular updates that advertise a live route to the failed node</t>
        </li>
        <li>
          <t>They likewise send a triggered update with this infinity value to all their neighbors</t>
        </li>
      </ul>
      <t>This "bad news" travels with the full speed of triggered updates through the network since all regular advertisements reporting it to be up are ignored.</t>
      <t>This goes on, until a node is reached that has the node in question as part of its direct neighbors. The receiving node then tries to reach the failed node. If it answers, the failure was actually a link failure, not a node failure, or the node recovered in the meantime. The node that receives a reply from its neighbor then immedately sends a triggered update with a "direct-knowledge-bit" (DKB) set. This is best implemented as a bit in the update datagram. Receiving nodes of such an update message <bcp14>MUST</bcp14>:</t>
      <ul spacing="normal">
        <li>
          <t>Write this message into their routing table if they have an infinity value in there or an update message with higher cost and DKB set, or a regular routing cost (they didn't know about the failure yet)</t>
        </li>
        <li>
          <t>Trigger an update message advertising this new route with the DKB set to all their neighbors</t>
        </li>
        <li>
          <t>Start a timeout and retain the DKB until the timeout expires. Any received infinity values within this time and for this node will be ignored</t>
        </li>
        <li>
          <t>Route traffic via the new path</t>
        </li>
      </ul>
      <t>So the "good news" travels with the full speed of triggered updates as well.</t>
      <t>Since in the case of a failure no node will believe an update without direct knowledge of the nodes' continuing or regained liveness, count to infinity cannot occur. All old routing information that potentially is no longer feasible is then discarded. The best path to the node is discovered as soon as the remaining neighbors hear about the failure through the triggered updates and the best remaining path is propagated with the speed of triggered updates as well.</t>
    </section>
    <section anchor="example">
      <name>Example</name>
      <t>We again take as an example the following network topology:</t>
      <artwork><![CDATA[
        A
       / \
      /   \
     B-----C
      \   /
       \ /
        D
       / \
      /   \
     E     F
      \   /
       \ /
        G
]]></artwork>
      <t>In this example, contrary to before, we assume no other protection against routing loops than the proposed extension. So split horizon is not implemented, just to show that the extension is sufficient to avoid routing loops.</t>
      <t>When the link between F and G fails, F sends an infinity value to D. D ignores updates reporting G as up from C,B and E and propagates the infinity value to B,C and E. E knows that G is its direct neighbor and upon receiving the infinity value, it checks if G is reachable. Since it is, it advertises a route to G via itself with the DKB set. Meanwhile B and C have sent the infinity value to A.
D receives the advertisement with the DKB set, ignores the infinity values from F, B and C, and advertises this new route to them. B and C ignore the infinity value from A and advertise the new routing information with the DKB to A.</t>
      <t>Now the network has converged to the remaining path to G.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document only tries to solve the count to infinity problem.</t>
      <t>The inherent security risks of DVR, such as rogue nodes advertising routes that don't exist, or routes for other nodes to themselves etc., apply here as well.</t>
      <t>The additions proposed in this draft pose additional security risks. A rogue node could advertise all other nodes as being down whether they are its neighbor or not. This would effectively halt communication in the network for a short time and put significant strain on the network while all nodes report their neighbors to still be reachable.</t>
      <t>This is not easily preventable, but can be mitigated with another convention where updates originating from a node need to cryptographically signed before sending. The public key infrastructure necessary for that would need to be implemented on a higher network level.</t>
      <t>That way, repeated infinity values from the same node can be ignored for a certain time (which might be advisable anyway, in the context of frequently failing links).</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC_1058" target="https://www.rfc-editor.org/info/rfc1058">
        <front>
          <title>Routing Information Protocol</title>
          <author initials="H." surname="C." fullname="Hedrick, C.">
            <organization/>
          </author>
          <date year="1988" month="June"/>
        </front>
        <seriesInfo name="DOI 10.17487/RFC1058" value=""/>
        <format type="TXT" target="https://www.rfc-editor.org/rfc/rfc1058.txt"/>
        <format type="PDF" target="https://www.rfc-editor.org/rfc/pdfrfc/rfc1058.txt.pdf"/>
      </reference>
      <reference anchor="RFC_2453" target="https://datatracker.ietf.org/doc/rfc2453/">
        <front>
          <title>RIP Version 2</title>
          <author initials="G. S." surname="Malkin" fullname="Gary S. Malkin">
            <organization/>
          </author>
          <date year="1998" month="November"/>
        </front>
        <seriesInfo name="DOI 10.17487/RFC2453" value=""/>
        <format type="TXT" target="https://www.rfc-editor.org/rfc/rfc2453.txt"/>
        <format type="PDF" target="https://www.rfc-editor.org/rfc/pdfrfc/rfc2453.txt.pdf"/>
      </reference>
      <reference anchor="RFC_6126" target="https://www.rfc-editor.org/info/rfc6126">
        <front>
          <title>The Babel Routing Protocol</title>
          <author initials="J." surname="Chroboczek" fullname="Juliusz Chroboczek">
            <organization/>
          </author>
          <date year="2011" month="April"/>
        </front>
        <seriesInfo name="DOI 10.17487/RFC6126" value=""/>
        <format type="TXT" target="https://www.rfc-editor.org/rfc/rfc6126.txt"/>
        <format type="PDF" target="https://www.rfc-editor.org/rfc/pdfrfc/rfc6126.txt.pdf"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
