diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc2080.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc2080.txt')
-rw-r--r-- | doc/rfc/rfc2080.txt | 1066 |
1 files changed, 1066 insertions, 0 deletions
diff --git a/doc/rfc/rfc2080.txt b/doc/rfc/rfc2080.txt new file mode 100644 index 0000000..0105fa6 --- /dev/null +++ b/doc/rfc/rfc2080.txt @@ -0,0 +1,1066 @@ + + + + + + +Network Working Group G. Malkin +Request for Comments: 2080 Xylogics +Category: Standards Track R. Minnear + Ipsilon Networks + January 1997 + + RIPng for IPv6 + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Abstract + + This document specifies a routing protocol for an IPv6 internet. It + is based on protocols and algorithms currently in wide use in the + IPv4 Internet. + + This specification represents the minimum change to the Routing + Information Protocol (RIP), as specified in RFC 1058 [1] and RFC 1723 + [2], necessary for operation over IPv6 [3]. + +Acknowledgements + + This document is a modified version of RFC 1058, written by Chuck + Hedrick [1]. The modifications reflect RIP-2 and IPv6 enhancements, + but the original wording is his. + + We'd like to thank Dennis Ferguson and Thomas Narten for their input. + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2 + 1.1 Theoretical Underpinnings . . . . . . . . . . . . . . . . . 3 + 1.2 Limitations of the Protocol . . . . . . . . . . . . . . . . 3 + 2. Protocol Specification . . . . . . . . . . . . . . . . . . . . 4 + 2.1 Message Format . . . . . . . . . . . . . . . . . . . . . . . 5 + 2.1.1 Next Hop . . . . . . . . . . . . . . . . . . . . . . . . . 7 + 2.2 Addressing Considerations . . . . . . . . . . . . . . . . . 8 + 2.3 Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 + 2.4 Input Processing . . . . . . . . . . . . . . . . . . . . . . 10 + 2.4.1 Request Messages . . . . . . . . . . . . . . . . . . . . . 10 + 2.4.2 Response Messages . . . . . . . . . . . . . . . . . . . . 11 + + + +Malkin & Minnear Standards Track [Page 1] + +RFC 2080 RIPng for IPv6 January 1997 + + + 2.5 Output Processing . . . . . . . . . . . . . . . . . . . . . 14 + 2.5.1 Triggered Updates . . . . . . . . . . . . . . . . . . . . 14 + 2.5.2 Generating Response Messages . . . . . . . . . . . . . . . 15 + 2.6 Split Horizon . . . . . . . . . . . . . . . . . . . . . . . 16 + 3. Control Functions . . . . . . . . . . . . . . . . . . . . . . 17 + 4. Security Considerations. . . . . . . . . . . . . . . . . . . . 18 + References . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 19 + +1. Introduction + + This memo describes one protocol in a series of routing protocols + based on the Bellman-Ford (or distance vector) algorithm. This + algorithm has been used for routing computations in computer networks + since the early days of the ARPANET. The particular packet formats + and protocol described here are based on the program "routed," which + is included with the Berkeley distribution of Unix. + + In an international network, such as the Internet, it is very + unlikely that a single routing protocol will used for the entire + network. Rather, the network will be organized as a collection of + Autonomous Systems (AS), each of which will, in general, be + administered by a single entity. Each AS will have its own routing + technology, which may differ among AS's. The routing protocol used + within an AS is referred to as an Interior Gateway Protocol (IGP). A + separate protocol, called an Exterior Gateway Protocol (EGP), is used + to transfer routing information among the AS's. RIPng was designed + to work as an IGP in moderate-size AS's. It is not intended for use + in more complex environments. For information on the context into + which RIP version 1 (RIP-1) is expected to fit, see Braden and Postel + [6]. + + RIPng is one of a class of algorithms known as Distance Vector + algorithms. The earliest description of this class of algorithms + known to the author is in Ford and Fulkerson [8]. Because of this, + they are sometimes known as Ford-Fulkerson algorithms. The term + Bellman-Ford is also used, and derives from the fact that the + formulation is based on Bellman's equation [4]. The presentation in + this document is closely based on [5]. This document contains a + protocol specification. For an introduction to the mathematics of + routing algorithms, see [1]. The basic algorithms used by this + protocol were used in computer routing as early as 1969 in the + ARPANET. However, the specific ancestry of this protocol is within + the Xerox network protocols. The PUP protocols [7] used the Gateway + Information Protocol to exchange routing information. A somewhat + updated version of this protocol was adopted for the Xerox Network + Systems (XNS) architecture, with the name Routing Information + Protocol [9]. Berkeley's routed is largely the same as the Routing + + + +Malkin & Minnear Standards Track [Page 2] + +RFC 2080 RIPng for IPv6 January 1997 + + + Information Protocol, with XNS addresses replaced by a more general + address format capable of handling IPv4 and other types of address, + and with routing updates limited to one every 30 seconds. Because of + this similarity, the term Routing Information Protocol (or just RIP) + is used to refer to both the XNS protocol and the protocol used by + routed. + +1.1 Theoretical Underpinnings + + An introduction to the theory and math behind Distance Vector + protocols is provided in [1]. It has not been incorporated in this + document for the sake of brevity. + +1.2 Limitations of the Protocol + + This protocol does not solve every possible routing problem. As + mentioned above, it is primarily intended for use as an IGP in + networks of moderate size. In addition, the following specific + limitations are be mentioned: + + - The protocol is limited to networks whose longest path (the + network's diameter) is 15 hops. The designers believe that the + basic protocol design is inappropriate for larger networks. Note + that this statement of the limit assumes that a cost of 1 is used + for each network. This is the way RIPng is normally configured. + If the system administrator chooses to use larger costs, the upper + bound of 15 can easily become a problem. + + - The protocol depends upon "counting to infinity" to resolve certain + unusual situations (see section 2.2 in [1]). If the system of + networks has several hundred networks, and a routing loop was formed + involving all of them, the resolution of the loop would require + either much time (if the frequency of routing updates were limited) + or bandwidth (if updates were sent whenever changes were detected). + Such a loop would consume a large amount of network bandwidth + before the loop was corrected. We believe that in realistic cases, + this will not be a problem except on slow lines. Even then, the + problem will be fairly unusual, since various precautions are taken + that should prevent these problems in most cases. + + - This protocol uses fixed "metrics" to compare alternative routes. + It is not appropriate for situations where routes need to be chosen + based on real-time parameters such a measured delay, reliability, + or load. The obvious extensions to allow metrics of this type are + likely to introduce instabilities of a sort that the protocol is + not designed to handle. + + + + + +Malkin & Minnear Standards Track [Page 3] + +RFC 2080 RIPng for IPv6 January 1997 + + +2. Protocol Specification + + RIPng is intended to allow routers to exchange information for + computing routes through an IPv6-based network. RIPng is a distance + vector protocol, as described in [1]. RIPng should be implemented + only in routers; IPv6 provides other mechanisms for router discovery + [10]. Any router that uses RIPng is assumed to have interfaces to + one or more networks, otherwise it isn't really a router. These are + referred to as its directly-connected networks. The protocol relies + on access to certain information about each of these networks, the + most important of which is its metric. The RIPng metric of a network + is an integer between 1 and 15, inclusive. It is set in some manner + not specified in this protocol; however, given the maximum path limit + of 15, a value of 1 is usually used. Implementations should allow + the system administrator to set the metric of each network. In + addition to the metric, each network will have an IPv6 destination + address prefix and prefix length associated with it. These are to be + set by the system administrator in a manner not specified in this + protocol. + + Each router that implements RIPng is assumed to have a routing table. + This table has one entry for every destination that is reachable + throughout the system operating RIPng. Each entry contains at least + the following information: + + - The IPv6 prefix of the destination. + + - A metric, which represents the total cost of getting a datagram + from the router to that destination. This metric is the sum of the + costs associated with the networks that would be traversed to get + to the destination. + + - The IPv6 address of the next router along the path to the + destination (i.e., the next hop). If the destination is on one of + the directly-connected networks, this item is not needed. + + - A flag to indicate that information about the route has changed + recently. This will be referred to as the "route change flag." + + - Various timers associated with the route. See section 2.3 for more + details on timers. + + The entries for the directly-connected networks are set up by the + router using information gathered by means not specified in this + protocol. The metric for a directly-connected network is set to the + cost of that network. As mentioned, 1 is the usual cost. In that + case, the RIPng metric reduces to a simple hop-count. More complex + metrics may be used when it is desirable to show preference for some + + + +Malkin & Minnear Standards Track [Page 4] + +RFC 2080 RIPng for IPv6 January 1997 + + + networks over others (e.g., to indicate of differences in bandwidth + or reliability). + + Implementors may also choose to allow the system administrator to + enter additional routes. These would most likely be routes to hosts + or networks outside the scope of the routing system. They are + referred to as "static routes." Entries for destinations other than + these initial ones are added and updated by the algorithms described + in the following sections. + + In order for the protocol to provide complete information on routing, + every router in the AS must participate in the protocol. In cases + where multiple IGPs are in use, there must be at least one router + which can leak routing information between the protocols. + +2.1 Message Format + + RIPng is a UDP-based protocol. Each router that uses RIPng has a + routing process that sends and receives datagrams on UDP port number + 521, the RIPng port. All communications intended for another + router's RIPng process are sent to the RIPng port. All routing + update messages are sent from the RIPng port. Unsolicited routing + update messages have both the source and destination port equal to + the RIPng port. Those sent in response to a request are sent to the + port from which the request came. Specific queries may be sent from + ports other than the RIPng port, but they must be directed to the + RIPng port on the target machine. + + The RIPng packet format is: + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | command (1) | version (1) | must be zero (2) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + ~ Route Table Entry 1 (20) ~ + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + ~ ... ~ + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + ~ Route Table Entry N (20) ~ + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + +Malkin & Minnear Standards Track [Page 5] + +RFC 2080 RIPng for IPv6 January 1997 + + + where each Route Table Entry (RTE) has the following format: + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + ~ IPv6 prefix (16) ~ + | | + +---------------------------------------------------------------+ + | route tag (2) | prefix len (1)| metric (1) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The maximum number of RTEs is defined below. + + Field sizes are given in octets. Unless otherwise specified, fields + contain binary integers, in network byte order, with the most- + significant octet first (big-endian). Each tick mark represents one + bit. + + Every message contains a RIPng header which consists of a command and + a version number. This document describes version 1 of the protocol + (see section 2.4). The command field is used to specify the purpose + of this message. The commands implemented in version 1 are: + + 1 - request A request for the responding system to send all or + part of its routing table. + + 2 - response A message containing all or part of the sender's + routing table. This message may be sent in response + to a request, or it may be an unsolicited routing + update generated by the sender. + + For each of these message types, the remainder of the datagram + contains a list of RTEs. Each RTE in this list contains a + destination prefix, the number of significant bits in the prefix, and + the cost to reach that destination (metric). + + The destination prefix is the usual 128-bit, IPv6 address prefix + stored as 16 octets in network byte order. + + The route tag field is an attribute assigned to a route which must be + preserved and readvertised with a route. The intended use of the + route tag is to provide a method of separating "internal" RIPng + routes (routes for networks within the RIPng routing domain) from + "external" RIPng routes, which may have been imported from an EGP or + another IGP. + + + + + +Malkin & Minnear Standards Track [Page 6] + +RFC 2080 RIPng for IPv6 January 1997 + + + Routers supporting protocols other than RIPng should be configurable + to allow the route tag to be configured for routes imported from + different sources. For example, routes imported from an EGP should + be able to have their route tag either set to an arbitrary value, or + at least to the number of the Autonomous System from which the routes + were learned. + + Other uses of the route tag are valid, as long as all routers in the + RIPng domain use it consistently. + + The prefix length field is the length in bits of the significant part + of the prefix (a value between 0 and 128 inclusive) starting from the + left of the prefix. + + The metric field contains a value between 1 and 15 inclusive, + specifying the current metric for the destination; or the value 16 + (infinity), which indicates that the destination is not reachable. + + The maximum datagram size is limited by the MTU of the medium over + which the protocol is being used. Since an unsolicited RIPng update + is never propagated across a router, there is no danger of an MTU + mismatch. The determination of the number of RTEs which may be put + into a given message is a function of the medium's MTU, the number of + octets of header information preceeding the RIPng message, the size + of the RIPng header, and the size of an RTE. The formula is: + + +- -+ + | MTU - sizeof(IPv6_hdrs) - UDP_hdrlen - RIPng_hdrlen | + #RTEs = INT | --------------------------------------------------- | + | RTE_size | + +- -+ + +2.1.1 Next Hop + + RIPng provides the ability to specify the immediate next hop IPv6 + address to which packets to a destination specified by a route table + entry (RTE) should be forwarded in much the same way as RIP-2 [2]. + In RIP-2, each route table entry has a next hop field. Including a + next hop field for each RTE in RIPng would nearly double the size of + the RTE. Therefore, in RIPng, the next hop is specified by a special + RTE and applies to all of the address RTEs following the next hop RTE + until the end of the message or until another next hop RTE is + encountered. + + A next hop RTE is identified by a value of 0xFF in the metric field + of an RTE. The prefix field specifies the IPv6 address of the next + hop. The route tag and prefix length in the next hop RTE must be set + to zero on sending and ignored on receiption. + + + +Malkin & Minnear Standards Track [Page 7] + +RFC 2080 RIPng for IPv6 January 1997 + + + The next hop Route Table Entry (RTE) has the following format: + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + ~ IPv6 next hop address (16) ~ + | | + +---------------------------------------------------------------+ + | must be zero (2) |must be zero(1)| 0xFF | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Specifying a value of 0:0:0:0:0:0:0:0 in the prefix field of a next + hop RTE indicates that the next hop address should be the originator + of the RIPng advertisement. An address specified as a next hop must + be a link-local address. + + The purpose of the next hop RTE is to eliminate packets being routed + through extra hops in the system. It is particularly useful when + RIPng is not being run on all of the routers on a network. Note that + next hop RTE is "advisory". That is, if the provided information is + ignored, a possibly sub-optimal, but absolutely valid, route may be + taken. If the received next hop address is not a link-local address, + it should be treated as 0:0:0:0:0:0:0:0. + +2.2 Addressing Considerations + + The distinction between network, subnet and host routes does not need + to be made for RIPng because an IPv6 address prefix is unambiguous. + + Any prefix with a prefix length of zero is used to designate a + default route. It is suggested that the prefix 0:0:0:0:0:0:0:0 be + used when specifying the default route, though the prefix is + essentially ignored. A default route is used when it is not + convenient to list every possible network in the RIPng updates, and + when one or more routers in the system are prepared to handle traffic + to the networks that are not explicitly listed. These "default + routers" use the default route as a path for all datagrams for which + they have no explicit route. The decision as to how a router becomes + a default router (i.e., how a default route entry is created) is left + to the implementor. In general, the system administrator will be + provided with a way to specify which routers should create and + advertise default route entries. If this mechanism is used, the + implementation should allow the network administrator to choose the + metric associated with the default route advertisement. This will + make it possible to establish a precedence amoung multiple default + routers. The default route entries are handled by RIPng in exactly + the same manner as any other destination prefix. System + + + +Malkin & Minnear Standards Track [Page 8] + +RFC 2080 RIPng for IPv6 January 1997 + + + administrators should take care to make sure that default routes do + not propagate further than is intended. Generally, each AS has its + own preferred default router. Therefore, default routes should + generally not leave the boundary of an AS. The mechanisms for + enforcing this restriction are not specified in this document. + +2.3 Timers + + This section describes all events that are triggered by timers. + + Every 30 seconds, the RIPng process is awakened to send an + unsolicited Response message, containing the complete routing table + (see section 2.6 on Split Horizon), to every neighboring router. + When there are many routers on a single network, there is a tendency + for them to synchronize with each other such that they all issue + updates at the same time. This can happen whenever the 30 second + timer is affected by the processing load on the system. It is + undesirable for the update messages to become synchronized, since it + can lead to unnecessary collisions on broadcast networks (see [13] + for more details). Therefore, implementations are required to take + one of two precautions: + + - The 30-second updates are triggered by a clock whose rate is not + affected by system load or the time required to service the + previous update timer. + + - The 30-second timer is offset by a small random time (+/- 0 to 15 + seconds) each time it is set. The offset is derived from: 0.5 * + the update period (i.e. 30). + + There are two timers associated with each route, a "timeout" and a + "garbage-collection time." Upon expiration of the timeout, the route + is no longer valid; however, it is retained in the routing table for + a short time so that neighbors can be notified that the route has + been dropped. Upon expiration of the garbage-collection timer, the + route is finally removed from the routing table. + + The timeout is initialized when a route is established, and any time + an update message is received for the route. If 180 seconds elapse + from the last time the timeout was initialized, the route is + considered to have expired, and the deletion process described below + begins for that route. + + + + + + + + + +Malkin & Minnear Standards Track [Page 9] + +RFC 2080 RIPng for IPv6 January 1997 + + + Deletions can occur for one of two reasons: the timeout expires, or + the metric is set to 16 because of an update received from the + current router (see section 2.4.2 for a discussion of processing + updates from other routers). In either case, the following events + happen: + + - The garbage-collection timer is set for 120 seconds. + + - The metric for the route is set to 16 (infinity). This causes the + route to be removed from service. + + - The route change flag is to indicate that this entry has been + changed. + + - The output process is signalled to trigger a response. + + Until the garbage-collection timer expires, the route is included in + all updates sent by this router. When the garbage-collection timer + expires, the route is deleted from the routing table. + + Should a new route to this network be established while the garbage- + collection timer is running, the new route will replace the one that + is about to be deleted. In this case the garbage-collection timer + must be cleared. + + Triggered updates also use a small timer; however, this is best + described in section 2.5.1. + +2.4 Input Processing + + This section will describe the handling of datagrams received on the + RIPng port. Processing will depend upon the value in the command + field. Version 1 supports only two commands: Request and Response. + +2.4.1 Request Messages + + A Request is used to ask for a response containing all or part of a + router's routing table. Normally, Requests are sent as multicasts, + from the RIPng port, by routers which have just come up and are + seeking to fill in their routing tables as quickly as possible. + However, there may be situations (e.g., router monitoring) where the + routing table of only a single router is needed. In this case, the + Request should be sent directly to that router from a UDP port other + than the RIPng port. If such a Request is received, the router + responds directly to the requestor's address and port with a globally + valid source address since the requestor may not reside on the + directly attached network. + + + + +Malkin & Minnear Standards Track [Page 10] + +RFC 2080 RIPng for IPv6 January 1997 + + + The Request is processed entry by entry. If there are no entries, no + response is given. There is one special case. If there is exactly + one entry in the request, and it has a destination prefix of zero, a + prefix length of zero, and a metric of infinity (i.e., 16), then this + is a request to send the entire routing table. In that case, a call + is made to the output process to send the routing table to the + requesting address/port. Except for this special case, processing is + quite simple. Examine the list of RTEs in the Request one by one. + For each entry, look up the destination in the router's routing + database and, if there is a route, put that route's metric in the + metric field of the RTE. If there is no explicit route to the + specified destination, put infinity in the metric field. Once all + the entries have been filled in, change the command from Request to + Response and send the datagram back to the requestor. + + Note that there is a difference in metric handling for specific and + whole-table requests. If the request is for a complete routing + table, normal output processing is done, including Split Horizon (see + section 2.6 on Split Horizon). If the request is for specific + entries, they are looked up in the routing table and the information + is returned as is; no Split Horizon processing is done. The reason + for this distinction is the expectation that these requests are + likely to be used for different purposes. When a router first comes + up, it multicasts a Request on every connected network asking for a + complete routing table. It is assumed that these complete routing + tables are to be used to update the requestor's routing table. For + this reason, Split Horizon must be done. It is further assumed that + a Request for specific networks is made only by diagnostic software, + and is not used for routing. In this case, the requester would want + to know the exact contents of the routing table and would not want + any information hidden or modified. + +2.4.2 Response Messages + + A Response can be received for one of several different reasons: + + - response to a specific query + - regular update (unsolicited response) + - triggered update caused by a route change + + Processing is the same no matter why the Response was generated. + + Because processing of a Response may update the router's routing + table, the Response must be checked carefully for validity. The + Response must be ignored if it is not from the RIPng port. The + datagram's IPv6 source address should be checked to see whether the + datagram is from a valid neighbor; the source of the datagram must be + a link-local address. It is also worth checking to see whether the + + + +Malkin & Minnear Standards Track [Page 11] + +RFC 2080 RIPng for IPv6 January 1997 + + + response is from one of the router's own addresses. Interfaces on + broadcast networks may receive copies of their own multicasts + immediately. If a router processes its own output as new input, + confusion is likely, and such datagrams must be ignored. As an + additional check, periodic advertisements must have their hop counts + set to 255, and inbound, multicast packets sent from the RIPng port + (i.e. periodic advertisement or triggered update packets) must be + examined to ensure that the hop count is 255. This absolutely + guarantees that a packet is from a neighbor, because any intermediate + node would have decremented the hop count. Queries and their + responses may still cross intermediate nodes and therefore do not + require the hop count test to be done. + + Once the datagram as a whole has been validated, process the RTEs in + the Response one by one. Again, start by doing validation. + Incorrect metrics and other format errors usually indicate + misbehaving neighbors and should probably be brought to the + administrator's attention. For example, if the metric is greater + than infinity, ignore the entry but log the event. The basic + validation tests are: + + - is the destination prefix valid (e.g., not a multicast prefix and + not a link-local address) A link-local address should never be + present in an RTE. + - is the prefix length valid (i.e., between 0 and 128, inclusive) + - is the metric valid (i.e., between 1 and 16, inclusive) + + If any check fails, ignore that entry and proceed to the next. + Again, logging the error is probably a good idea. + + Once the entry has been validated, update the metric by adding the + cost of the network on which the message arrived. If the result is + greater than infinity, use infinity. That is, + + metric = MIN (metric + cost, infinity) + + Now, check to see whether there is already an explicit route for the + destination prefix. If there is no such route, add this route to the + routing table, unless the metric is infinity (there is no point in + adding a route which unusable). Adding a route to the routing table + consists of: + + - Setting the destination prefix and length to those in the RTE. + + - Setting the metric to the newly calculated metric (as described + above). + + + + + +Malkin & Minnear Standards Track [Page 12] + +RFC 2080 RIPng for IPv6 January 1997 + + + - Set the next hop address to be the address of the router from which + the datagram came or the next hop address specified by a next hop + RTE. + + - Initialize the timeout for the route. If the garbage-collection + timer is running for this route, stop it (see section 2.3 for a + discussion of the timers). + + - Set the route change flag. + + - Signal the output process to trigger an update (see section 2.5). + + If there is an existing route, compare the next hop address to the + address of the router from which the datagram came. If this datagram + is from the same router as the existing route, reinitialize the + timeout. Next, compare the metrics. If the datagram is from the + same router as the existing route, and the new metric is different + than the old one; or, if the new metric is lower than the old one; do + the following actions: + + - Adopt the route from the datagram. That is, put the new metric in, + and adjust the next hop address (if necessary). + + - Set the route change flag and signal the output process to trigger + an update. + + - If the new metric is infinity, start the deletion process + (described above); otherwise, re-initialize the timeout. + + If the new metric is infinity, the deletion process begins for the + route, which is no longer used for routing packets. Note that the + deletion process is started only when the metric is first set to + infinity. If the metric was already infinity, then a new deletion + process is not started. + + If the new metric is the same as the old one, it is simplest to do + nothing further (beyond reinitializing the timeout, as specified + above); but, there is a heuristic which could be applied. Normally, + it is senseless to replace a route if the new route has the same + metric as the existing route; this would cause the route to bounce + back and forth, which would generate an intolerable number of + triggered updates. However, if the existing route is showing signs + of timing out, it may be better to switch to an equally-good + alternative route immediately, rather than waiting for the timeout to + happen. Therefore, if the new metric is the same as the old one, + examine the timeout for the existing route. If it is at least + halfway to the expiration point, switch to the new route. This + heuristic is optional, but highly recommended. + + + +Malkin & Minnear Standards Track [Page 13] + +RFC 2080 RIPng for IPv6 January 1997 + + + Any entry that fails these tests is ignored, as it is no better than + the current route. + +2.5 Output Processing + + This section describes the processing used to create response + messages that contain all or part of the routing table. This + processing may be triggered in any of the following ways: + + - By input processing, when a Request is received. In this case, the + Response is sent to only one destination (i.e. the unicast address + of the requestor). + + - By the regular routing update. Every 30 seconds, a Response + containing the whole routing table is sent to every neighboring + router. + + - By triggered updates. Whenever the metric for a route is changed, + an update is triggered. + + The special processing required for a Request is described in section + 2.4.1. + + When a Response is to be sent to all neighbors (i.e., a regular or + triggered update), a Response message is multicast to the multicast + group FF02::9, the all-rip-routers multicast group, on all connected + networks that support broadcasting or are point-to-point links. RIPng + handles point-to-point links just like multicast links as + multicasting can be trivially provided on such links. Thus, one + Response is prepared for each directly-connected network, and sent to + the all-rip-routers multicast group. In most cases, this reaches all + neighboring routers. However, there are some cases where this may + not be good enough. This may involve a network that is not a + broadcast network (e.g., the ARPANET), or a situation involving dumb + routers. In such cases, it may be necessary to specify an actual + list of neighboring routers and send a datagram to each one + explicitly. It is left to the implementor to determine whether such + a mechanism is needed, and to define how the list is specified. + +2.5.1 Triggered Updates + + Triggered updates require special handling for two reasons. First, + experience shows that triggered updates can cause excessive loads on + networks with limited capacity or networks with many routers on them. + Therefore, the protocol requires that implementors include provisions + to limit the frequency of triggered updates. After a triggered + update is sent, a timer should be set for a random interval between 1 + and 5 seconds. If other changes that would trigger updates occur + + + +Malkin & Minnear Standards Track [Page 14] + +RFC 2080 RIPng for IPv6 January 1997 + + + before the timer expires, a single update is triggered when the timer + expires. The timer is then reset to another random value between 1 + and 5 seconds. Triggered updates may be suppressed if a regular + update is due by the time the triggered update would be sent. + + Second, triggered updates do not need to include the entire routing + table. In principle, only those routes which have changed need to be + included. Therefore messages generated as part of a triggered update + must include at least those routes that have their route change flag + set. They may include additional routes, at the discretion of the + implementor; however, sending complete routing updates is strongly + discouraged. When a triggered update is processed, messages should + be generated for every directly-connected network. Split Horizon + processing is done when generating triggered updates as well as + normal updates (see section 2.6). If, after Split Horizon processing + for a given network, a changed route will appear unchanged on that + network (e.g., it appears with an infinite metric), the route need + not be sent. If no routes need be sent on that network, the update + may be omitted. Once all of the triggered updates have been + generated, the route change flags should be cleared. + + If input processing is allowed while output is being generated, + appropriate interlocking must be done. The route change flags should + not be changed as a result of processing input while a triggered + update message is being generated. + + The only difference between a triggered update and other update + messages is the possible omission of routes that have not changed. + The remaining mechanisms, described in the next section, must be + applied to all updates. + +2.5.2 Generating Response Messages + + This section describes how a Response message is generated for a + particular directly-connected network: + + The IPv6 source address must be a link-local address of the possible + addresses of the sending router's interface, except when replying to + a unicast Request Message from a port other than the RIPng port. In + the latter case, the source address must be a globaly valid address. + In the former case, it is important to use a link-local address + because the source address is put into routing tables (as the next + hop) in the routers which receive this Response. If an incorrect + source address is used, other routers may be unable to route + datagrams. Sometimes routers are set up with multiple IPv6 addresses + on a single physical interface. Normally, this means that several + logical IPv6 networks are being carried over one physical medium. It + is possible that a router may have multiple link-local addresses for + + + +Malkin & Minnear Standards Track [Page 15] + +RFC 2080 RIPng for IPv6 January 1997 + + + a single interface. In this case, the router must only originate a + single Response message with a source address of the designated + link-local address for a given interface. The choice of which link- + local address to use should only change when the current choice is no + longer valid. This is necessary because nodes receiving Response + messages use the source address to identify the sender. If multiple + packets from the same router contain different source addresses, + nodes will assume they come from different routers, leading to + undesirable behavior. + + Set the version number to the current version of RIPng. The version + described in this document is version 1. Set the command to + Response. Set the bytes labeled "must be zero" to zero. Start + filling in RTEs. Recall that the maximum datagram size is limited by + the network's MTU. When there is no more space in the datagram, send + the current Response and start a new one. + + To fill in the RTEs, examine each route in the routing table. Routes + to link-local addresses must never be included in an RTE. If a + triggered update is being generated, only entries whose route change + flags are set need be included. If, after Split Horizon processing, + the route should not be included, skip it. If the route is to be + included, then the destination prefix, prefix length, and metric are + put into the RTE. The route tag is filled in as defined in section + 2.1. Routes must be included in the datagram even if their metrics + are infinite. + +2.6 Split Horizon + + Split Horizon is a algorithm for avoiding problems caused by + including routes in updates sent to the gateway from which they were + learned. The basic split horizon algorithm omits routes learned from + one neighbor in updates sent to that neighbor. In the case of a + broadcast network, all routes learned from any neighbor on that + network are omitted from updates sent on that network. + + Split Horizon with Poisoned Reverse (more simply, Poison Reverse) + does include such routes in updates, but sets their metrics to + infinity. In effect, advertising the fact that there routes are not + reachable. This is the preferred method of operation; however, + implementations should provide a per-interface control allowing no + horizoning, split horizoning, and poisoned reverse to be selected. + + For a theoretical discussion of Split Horizon and Poison Reverse, and + why they are needed, see section 2.1.1 of [1]. + + + + + + +Malkin & Minnear Standards Track [Page 16] + +RFC 2080 RIPng for IPv6 January 1997 + + +3. Control Functions + + This section describes administrative controls. These are not part + of the protocol per se; however, experience with existing networks + suggests that they are important. Because they are not a necessary + part of the protocol, they are considered optional. However, it is + strongly recommend that at least some of them be included in every + implementation. These controls are intended primarily to allow RIPng + to be connected to networks whose routing may be unstable or subject + to errors. Here are some examples: + + - It is sometimes desirable to restrict the routers from which + updates will be accepted, or to which updates will be sent. This + is usually done for administrative, routing policy reasons. + + - A number of sites limit the set of networks that they allow in + Response messages. Organization A may have a connection to + organization B that they use for direct communication. For security + or performance reasons A may not be willing to give other + organizations access to that connection. In such a case, A should + not include B's networks in updates that A sends to third parties. + + Here are some typical controls. Note, however, that the RIPng + protocol does not require these or any other controls. + + - A neighbor list which allows the network administrator to be able + to define a list of neighbors for each router. A router would + accept response messages only from routers on its list of + neighbors. A similar list for target routers should also be + available to the administrator. By default, no restrictions are + defined. + + - A filter for specific destinations would permit the network admin- + istrator to be able to specify a list of destination prefixes to + allow or disallow. The list would be associated with a particular + interface in the incoming and/or outgoing directions. Only allowed + networks would be mentioned in Response messages going out or + processed in Response messages coming in. If a list of allowed + prefixes is specified, all other prefixes are disallowed. If a list + of disallowed prefixes is specified, all other prefixes are + allowed. By default, no filters are applied. + + + + + + + + + + +Malkin & Minnear Standards Track [Page 17] + +RFC 2080 RIPng for IPv6 January 1997 + + +4. Security Considerations + + Since RIPng runs over IPv6, RIPng relies on the IP Authentication + Header (see [11]) and the IP Encapsulating Security Payload (see + [12]) to ensure integrity and authentication/confidentiality of + routing exchanges. + +References + + [1] Hedrick, C., "Routing Information Protocol", RFC 1058, Rutgers + University, June 1988. + + [2] Malkin, G., "RIP Version 2 - Carrying Additional Information", + RFC 1723, Xylogics, Inc., November, 1994. + + [3] Hinden, R., "IP Next Generation Overview", + Work in Progress. + + [4] Bellman, R., "Dynamic Programming", Princeton University + Press, Princeton, N.J., 1957. + + [5] Bertsekas, D. P., and Gallaher, R. G., "Data Networks", Prentice- + Hall, Englewood Cliffs, N.J., 1987. + + [6] Braden, R., and J. Postel, "Requirements for Internet Gateways", + USC/Information Sciences Institute, STD 4, RFC 1009, June 1987. + + [7] Boggs, D. R., Shoch, J. F., Taft, E. A., and Metcalfe, R. M., + "Pup: An Internetwork Architecture", IEEE Transactions on Commu- + nications, April 1980. + + [8] Ford, L. R. Jr., and Fulkerson, D. R., "Flows in Networks", + Princeton University Press, Princeton, N.J., 1962. + + [9] Xerox Corp., "Internet Transport Protocols", Xerox System Inte- + gration Standard XSIS 028112, December 1981. + + [10] Narten, T., Nordmark, E., and W. Simpson, "Neighbor Discovery + for IP Version 6 (IPv6)", RFC 1970, August 1996. + + [11] Atkinson, R., "IP Authentication Header", RFC 1826 + Naval Research Laboratory, August 1995. + + + + + + + + + +Malkin & Minnear Standards Track [Page 18] + +RFC 2080 RIPng for IPv6 January 1997 + + + [12] Atkinson, R., "IP Encapsulating Security Payload (ESP)", + RFC 1827, Naval Research Laboratory, August 1995. + + [13] Floyd, S., and Jacobson, V., "The Synchronization of Periodic + Routing Messages", Proceedings of ACM SIGCOMM '93, September + 1993. + +Authors' Addresses + + Gary Scott Malkin + Xylogics, Inc. + 53 Third Avenue + Burlington, MA 01803 + + Phone: (617) 272-8140 + EMail: gmalkin@Xylogics.COM + + + Robert E. Minnear + Ipsilon Networks, Inc. + 2191 E. Bayshore Road, Suite 100 + Palo Alto, CA 94303 + + Phone: (415) 846-4614 + EMail: minnear@ipsilon.com + + + + + + + + + + + + + + + + + + + + + + + + + + +Malkin & Minnear Standards Track [Page 19] + |