<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mueller-dkextension-01" category="exp" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title>Direct Knowledge Extension to Distance Vector Routing</title>
    <seriesInfo name="Internet-Draft" value="draft-mueller-dkextension-01"/>
    <author fullname="Sebastian Mueller">
      <organization/>
      <address>
        <email>directknowledgeextension@gmx.de</email>
      </address>
    </author>
    <date year="2025" month="September" 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.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <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:
H4sIAAAAAAAAA81a25IbR3J9768oQw+iHABIkFwtNbGx8lypWYkXD0eSNySF
o9BdAGqn0Y3t6h4MuLEKf4Q/wN/iT/GX+GRmVfUFmBmZftl5IIFGXbLycvJk
Vk8mk6S2dW6O1OjMViat1bdFuc1NtjTq/K42hbNloepSnVlX6yI16gcMKit1
VTa1LZajJNW1WZbV7kiZu02SZGVa6DXWyyq9qCfrxuS5qSbZjQmrTZ7NEtfM
19bRt3q3wWBbZGZj8E9RK/WZ0rkrIVHn6WisRiaz2NnqnL5cHp/gPwgyury6
vhglt0fqRXJjdtuyyo4SNVFp2WAxSG6LhS1svVObqpznZk0/ZuE0t3KaSk6T
JLqpV2VFCyQKf4smz+U4H8xcu9rqQr2RI/HvZq1tjrOy6m6C5uJR/2W5vptm
JinKaq1re2uwsLq6OP332bPfvTriFSZHqtb8qdbV0tRHalXXG3f09Ol2u51W
i3Qix56W1fIpjlI+xTOaLnPEdt4Y6hK/806w2fuqrMu0zHlcPBb/yYm+MVll
05uxOp3y8wyGPFJ/agqjZl+9kvWdqaxxtO2ROnt3qWbPprPfv3z1+6c4RBRC
9gyLX//b9YNnwNdwhGl9V/tZ788uHp21yRaDyVM8SrxKn7/83YvHVIoj6rrS
6Y2pptbUC14aHktr0vynPaVevoezVxwAz+/V4mtd7dSHqXqj8xtbdBT5trw1
67mpoMyvHlcm7f7pyqTZn6zMMLmrzC9nz7/8f/gnTe+q8npl1Imemzx66qPe
+acmt437qE5XiNoy/WhuOrrVm0o9fzabParWKMgnqZVmf7Jaw2RRqw2RSRiQ
TCYTpeeOXLFOkrcaT4cAOwHcmCwAE2EX68up3N4YVUOhDwW9+imgzC/KNYsF
3HBRlWul1WZlinJtCq1SDRjLeKnRvWA5UnjEY8wtgXO5wBqFqQGzNxi/KfNy
uVPpShdLM4WdrYM8takwRJ1RBlAMhpmjaYfOGU9o1xvshz3kJFtbrzDH8WO1
yPUSUugaqSEvt44lasVQgF+EW6X+2gDR8p3SBVRncqvn+W4saxUli4mNcYaw
aV6WG0cLlGnaVFOxzNpmWW6S5DM6SlVmTUoSJQl58b2KUrqyzjjS1j3JpWPD
LYyAw3WlYA+FlhZQ3kMqvixg0HSlXAobVrZ0Y5wsw8Z0SG8qXi9FbrVFY0hY
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

-->

</rfc>
