5828 lines
218 KiB
Plaintext
5828 lines
218 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group Y. Rekhter, Ed.
|
||
Request for Comments: 4271 T. Li, Ed.
|
||
Obsoletes: 1771 S. Hares, Ed.
|
||
Category: Standards Track January 2006
|
||
|
||
|
||
A Border Gateway Protocol 4 (BGP-4)
|
||
|
||
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.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (C) The Internet Society (2006).
|
||
|
||
Abstract
|
||
|
||
This document discusses the Border Gateway Protocol (BGP), which is
|
||
an inter-Autonomous System routing protocol.
|
||
|
||
The primary function of a BGP speaking system is to exchange network
|
||
reachability information with other BGP systems. This network
|
||
reachability information includes information on the list of
|
||
Autonomous Systems (ASes) that reachability information traverses.
|
||
This information is sufficient for constructing a graph of AS
|
||
connectivity for this reachability from which routing loops may be
|
||
pruned, and, at the AS level, some policy decisions may be enforced.
|
||
|
||
BGP-4 provides a set of mechanisms for supporting Classless Inter-
|
||
Domain Routing (CIDR). These mechanisms include support for
|
||
advertising a set of destinations as an IP prefix, and eliminating
|
||
the concept of network "class" within BGP. BGP-4 also introduces
|
||
mechanisms that allow aggregation of routes, including aggregation of
|
||
AS paths.
|
||
|
||
This document obsoletes RFC 1771.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 1]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction ....................................................4
|
||
1.1. Definition of Commonly Used Terms ..........................4
|
||
1.2. Specification of Requirements ..............................6
|
||
2. Acknowledgements ................................................6
|
||
3. Summary of Operation ............................................7
|
||
3.1. Routes: Advertisement and Storage ..........................9
|
||
3.2. Routing Information Base ..................................10
|
||
4. Message Formats ................................................11
|
||
4.1. Message Header Format .....................................12
|
||
4.2. OPEN Message Format .......................................13
|
||
4.3. UPDATE Message Format .....................................14
|
||
4.4. KEEPALIVE Message Format ..................................21
|
||
4.5. NOTIFICATION Message Format ...............................21
|
||
5. Path Attributes ................................................23
|
||
5.1. Path Attribute Usage ......................................25
|
||
5.1.1. ORIGIN .............................................25
|
||
5.1.2. AS_PATH ............................................25
|
||
5.1.3. NEXT_HOP ...........................................26
|
||
5.1.4. MULTI_EXIT_DISC ....................................28
|
||
5.1.5. LOCAL_PREF .........................................29
|
||
5.1.6. ATOMIC_AGGREGATE ...................................29
|
||
5.1.7. AGGREGATOR .........................................30
|
||
6. BGP Error Handling. ............................................30
|
||
6.1. Message Header Error Handling .............................31
|
||
6.2. OPEN Message Error Handling ...............................31
|
||
6.3. UPDATE Message Error Handling .............................32
|
||
6.4. NOTIFICATION Message Error Handling .......................34
|
||
6.5. Hold Timer Expired Error Handling .........................34
|
||
6.6. Finite State Machine Error Handling .......................35
|
||
6.7. Cease .....................................................35
|
||
6.8. BGP Connection Collision Detection ........................35
|
||
7. BGP Version Negotiation ........................................36
|
||
8. BGP Finite State Machine (FSM) .................................37
|
||
8.1. Events for the BGP FSM ....................................38
|
||
8.1.1. Optional Events Linked to Optional Session
|
||
Attributes .........................................38
|
||
8.1.2. Administrative Events ..............................42
|
||
8.1.3. Timer Events .......................................46
|
||
8.1.4. TCP Connection-Based Events ........................47
|
||
8.1.5. BGP Message-Based Events ...........................49
|
||
8.2. Description of FSM ........................................51
|
||
8.2.1. FSM Definition .....................................51
|
||
8.2.1.1. Terms "active" and "passive" ..............52
|
||
8.2.1.2. FSM and Collision Detection ...............52
|
||
8.2.1.3. FSM and Optional Session Attributes .......52
|
||
8.2.1.4. FSM Event Numbers .........................53
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 2]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
8.2.1.5. FSM Actions that are Implementation
|
||
Dependent .................................53
|
||
8.2.2. Finite State Machine ...............................53
|
||
9. UPDATE Message Handling ........................................75
|
||
9.1. Decision Process ..........................................76
|
||
9.1.1. Phase 1: Calculation of Degree of Preference .......77
|
||
9.1.2. Phase 2: Route Selection ...........................77
|
||
9.1.2.1. Route Resolvability Condition .............79
|
||
9.1.2.2. Breaking Ties (Phase 2) ...................80
|
||
9.1.3. Phase 3: Route Dissemination .......................82
|
||
9.1.4. Overlapping Routes .................................83
|
||
9.2. Update-Send Process .......................................84
|
||
9.2.1. Controlling Routing Traffic Overhead ...............85
|
||
9.2.1.1. Frequency of Route Advertisement ..........85
|
||
9.2.1.2. Frequency of Route Origination ............85
|
||
9.2.2. Efficient Organization of Routing Information ......86
|
||
9.2.2.1. Information Reduction .....................86
|
||
9.2.2.2. Aggregating Routing Information ...........87
|
||
9.3. Route Selection Criteria ..................................89
|
||
9.4. Originating BGP routes ....................................89
|
||
10. BGP Timers ....................................................90
|
||
Appendix A. Comparison with RFC 1771 .............................92
|
||
Appendix B. Comparison with RFC 1267 .............................93
|
||
Appendix C. Comparison with RFC 1163 .............................93
|
||
Appendix D. Comparison with RFC 1105 .............................94
|
||
Appendix E. TCP Options that May Be Used with BGP ................94
|
||
Appendix F. Implementation Recommendations .......................95
|
||
Appendix F.1. Multiple Networks Per Message .........95
|
||
Appendix F.2. Reducing Route Flapping ...............96
|
||
Appendix F.3. Path Attribute Ordering ...............96
|
||
Appendix F.4. AS_SET Sorting ........................96
|
||
Appendix F.5. Control Over Version Negotiation ......96
|
||
Appendix F.6. Complex AS_PATH Aggregation ...........96
|
||
Security Considerations ...........................................97
|
||
IANA Considerations ...............................................99
|
||
Normative References .............................................101
|
||
Informative References ...........................................101
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 3]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
1. Introduction
|
||
|
||
The Border Gateway Protocol (BGP) is an inter-Autonomous System
|
||
routing protocol.
|
||
|
||
The primary function of a BGP speaking system is to exchange network
|
||
reachability information with other BGP systems. This network
|
||
reachability information includes information on the list of
|
||
Autonomous Systems (ASes) that reachability information traverses.
|
||
This information is sufficient for constructing a graph of AS
|
||
connectivity for this reachability, from which routing loops may be
|
||
pruned and, at the AS level, some policy decisions may be enforced.
|
||
|
||
BGP-4 provides a set of mechanisms for supporting Classless Inter-
|
||
Domain Routing (CIDR) [RFC1518, RFC1519]. These mechanisms include
|
||
support for advertising a set of destinations as an IP prefix and
|
||
eliminating the concept of network "class" within BGP. BGP-4 also
|
||
introduces mechanisms that allow aggregation of routes, including
|
||
aggregation of AS paths.
|
||
|
||
Routing information exchanged via BGP supports only the destination-
|
||
based forwarding paradigm, which assumes that a router forwards a
|
||
packet based solely on the destination address carried in the IP
|
||
header of the packet. This, in turn, reflects the set of policy
|
||
decisions that can (and cannot) be enforced using BGP. BGP can
|
||
support only those policies conforming to the destination-based
|
||
forwarding paradigm.
|
||
|
||
1.1. Definition of Commonly Used Terms
|
||
|
||
This section provides definitions for terms that have a specific
|
||
meaning to the BGP protocol and that are used throughout the text.
|
||
|
||
Adj-RIB-In
|
||
The Adj-RIBs-In contains unprocessed routing information that has
|
||
been advertised to the local BGP speaker by its peers.
|
||
|
||
Adj-RIB-Out
|
||
The Adj-RIBs-Out contains the routes for advertisement to specific
|
||
peers by means of the local speaker's UPDATE messages.
|
||
|
||
Autonomous System (AS)
|
||
The classic definition of an Autonomous System is a set of routers
|
||
under a single technical administration, using an interior gateway
|
||
protocol (IGP) and common metrics to determine how to route
|
||
packets within the AS, and using an inter-AS routing protocol to
|
||
determine how to route packets to other ASes. Since this classic
|
||
definition was developed, it has become common for a single AS to
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 4]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
use several IGPs and, sometimes, several sets of metrics within an
|
||
AS. The use of the term Autonomous System stresses the fact that,
|
||
even when multiple IGPs and metrics are used, the administration
|
||
of an AS appears to other ASes to have a single coherent interior
|
||
routing plan, and presents a consistent picture of the
|
||
destinations that are reachable through it.
|
||
|
||
BGP Identifier
|
||
A 4-octet unsigned integer that indicates the BGP Identifier of
|
||
the sender of BGP messages. A given BGP speaker sets the value of
|
||
its BGP Identifier to an IP address assigned to that BGP speaker.
|
||
The value of the BGP Identifier is determined upon startup and is
|
||
the same for every local interface and BGP peer.
|
||
|
||
BGP speaker
|
||
A router that implements BGP.
|
||
|
||
EBGP
|
||
External BGP (BGP connection between external peers).
|
||
|
||
External peer
|
||
Peer that is in a different Autonomous System than the local
|
||
system.
|
||
|
||
Feasible route
|
||
An advertised route that is available for use by the recipient.
|
||
|
||
IBGP
|
||
Internal BGP (BGP connection between internal peers).
|
||
|
||
Internal peer
|
||
Peer that is in the same Autonomous System as the local system.
|
||
|
||
IGP
|
||
Interior Gateway Protocol - a routing protocol used to exchange
|
||
routing information among routers within a single Autonomous
|
||
System.
|
||
|
||
Loc-RIB
|
||
The Loc-RIB contains the routes that have been selected by the
|
||
local BGP speaker's Decision Process.
|
||
|
||
NLRI
|
||
Network Layer Reachability Information.
|
||
|
||
Route
|
||
A unit of information that pairs a set of destinations with the
|
||
attributes of a path to those destinations. The set of
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 5]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
destinations are systems whose IP addresses are contained in one
|
||
IP address prefix carried in the Network Layer Reachability
|
||
Information (NLRI) field of an UPDATE message. The path is the
|
||
information reported in the path attributes field of the same
|
||
UPDATE message.
|
||
|
||
RIB
|
||
Routing Information Base.
|
||
|
||
Unfeasible route
|
||
A previously advertised feasible route that is no longer available
|
||
for use.
|
||
|
||
1.2. Specification of Requirements
|
||
|
||
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 RFC 2119 [RFC2119].
|
||
|
||
2. Acknowledgements
|
||
|
||
This document was originally published as [RFC1267] in October 1991,
|
||
jointly authored by Kirk Lougheed and Yakov Rekhter.
|
||
|
||
We would like to express our thanks to Guy Almes, Len Bosack, and
|
||
Jeffrey C. Honig for their contributions to the earlier version
|
||
(BGP-1) of this document.
|
||
|
||
We would like to specially acknowledge numerous contributions by
|
||
Dennis Ferguson to the earlier version of this document.
|
||
|
||
We would like to explicitly thank Bob Braden for the review of the
|
||
earlier version (BGP-2) of this document, and for his constructive
|
||
and valuable comments.
|
||
|
||
We would also like to thank Bob Hinden, Director for Routing of the
|
||
Internet Engineering Steering Group, and the team of reviewers he
|
||
assembled to review the earlier version (BGP-2) of this document.
|
||
This team, consisting of Deborah Estrin, Milo Medin, John Moy, Radia
|
||
Perlman, Martha Steenstrup, Mike St. Johns, and Paul Tsuchiya, acted
|
||
with a strong combination of toughness, professionalism, and
|
||
courtesy.
|
||
|
||
Certain sections of the document borrowed heavily from IDRP
|
||
[IS10747], which is the OSI counterpart of BGP. For this, credit
|
||
should be given to the ANSI X3S3.3 group chaired by Lyman Chapin and
|
||
to Charles Kunzinger, who was the IDRP editor within that group.
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 6]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
We would also like to thank Benjamin Abarbanel, Enke Chen, Edward
|
||
Crabbe, Mike Craren, Vincent Gillet, Eric Gray, Jeffrey Haas, Dimitry
|
||
Haskin, Stephen Kent, John Krawczyk, David LeRoy, Dan Massey,
|
||
Jonathan Natale, Dan Pei, Mathew Richardson, John Scudder, John
|
||
Stewart III, Dave Thaler, Paul Traina, Russ White, Curtis Villamizar,
|
||
and Alex Zinin for their comments.
|
||
|
||
We would like to specially acknowledge Andrew Lange for his help in
|
||
preparing the final version of this document.
|
||
|
||
Finally, we would like to thank all the members of the IDR Working
|
||
Group for their ideas and the support they have given to this
|
||
document.
|
||
|
||
3. Summary of Operation
|
||
|
||
The Border Gateway Protocol (BGP) is an inter-Autonomous System
|
||
routing protocol. It is built on experience gained with EGP (as
|
||
defined in [RFC904]) and EGP usage in the NSFNET Backbone (as
|
||
described in [RFC1092] and [RFC1093]). For more BGP-related
|
||
information, see [RFC1772], [RFC1930], [RFC1997], and [RFC2858].
|
||
|
||
The primary function of a BGP speaking system is to exchange network
|
||
reachability information with other BGP systems. This network
|
||
reachability information includes information on the list of
|
||
Autonomous Systems (ASes) that reachability information traverses.
|
||
This information is sufficient for constructing a graph of AS
|
||
connectivity, from which routing loops may be pruned, and, at the AS
|
||
level, some policy decisions may be enforced.
|
||
|
||
In the context of this document, we assume that a BGP speaker
|
||
advertises to its peers only those routes that it uses itself (in
|
||
this context, a BGP speaker is said to "use" a BGP route if it is the
|
||
most preferred BGP route and is used in forwarding). All other cases
|
||
are outside the scope of this document.
|
||
|
||
In the context of this document, the term "IP address" refers to an
|
||
IP Version 4 address [RFC791].
|
||
|
||
Routing information exchanged via BGP supports only the destination-
|
||
based forwarding paradigm, which assumes that a router forwards a
|
||
packet based solely on the destination address carried in the IP
|
||
header of the packet. This, in turn, reflects the set of policy
|
||
decisions that can (and cannot) be enforced using BGP. Note that
|
||
some policies cannot be supported by the destination-based forwarding
|
||
paradigm, and thus require techniques such as source routing (aka
|
||
explicit routing) to be enforced. Such policies cannot be enforced
|
||
using BGP either. For example, BGP does not enable one AS to send
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 7]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
traffic to a neighboring AS for forwarding to some destination
|
||
(reachable through but) beyond that neighboring AS, intending that
|
||
the traffic take a different route to that taken by the traffic
|
||
originating in the neighboring AS (for that same destination). On
|
||
the other hand, BGP can support any policy conforming to the
|
||
destination-based forwarding paradigm.
|
||
|
||
BGP-4 provides a new set of mechanisms for supporting Classless
|
||
Inter-Domain Routing (CIDR) [RFC1518, RFC1519]. These mechanisms
|
||
include support for advertising a set of destinations as an IP prefix
|
||
and eliminating the concept of a network "class" within BGP. BGP-4
|
||
also introduces mechanisms that allow aggregation of routes,
|
||
including aggregation of AS paths.
|
||
|
||
This document uses the term `Autonomous System' (AS) throughout. The
|
||
classic definition of an Autonomous System is a set of routers under
|
||
a single technical administration, using an interior gateway protocol
|
||
(IGP) and common metrics to determine how to route packets within the
|
||
AS, and using an inter-AS routing protocol to determine how to route
|
||
packets to other ASes. Since this classic definition was developed,
|
||
it has become common for a single AS to use several IGPs and,
|
||
sometimes, several sets of metrics within an AS. The use of the term
|
||
Autonomous System stresses the fact that, even when multiple IGPs and
|
||
metrics are used, the administration of an AS appears to other ASes
|
||
to have a single coherent interior routing plan and presents a
|
||
consistent picture of the destinations that are reachable through it.
|
||
|
||
BGP uses TCP [RFC793] as its transport protocol. This eliminates the
|
||
need to implement explicit update fragmentation, retransmission,
|
||
acknowledgement, and sequencing. BGP listens on TCP port 179. The
|
||
error notification mechanism used in BGP assumes that TCP supports a
|
||
"graceful" close (i.e., that all outstanding data will be delivered
|
||
before the connection is closed).
|
||
|
||
A TCP connection is formed between two systems. They exchange
|
||
messages to open and confirm the connection parameters.
|
||
|
||
The initial data flow is the portion of the BGP routing table that is
|
||
allowed by the export policy, called the Adj-Ribs-Out (see 3.2).
|
||
Incremental updates are sent as the routing tables change. BGP does
|
||
not require a periodic refresh of the routing table. To allow local
|
||
policy changes to have the correct effect without resetting any BGP
|
||
connections, a BGP speaker SHOULD either (a) retain the current
|
||
version of the routes advertised to it by all of its peers for the
|
||
duration of the connection, or (b) make use of the Route Refresh
|
||
extension [RFC2918].
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 8]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
KEEPALIVE messages may be sent periodically to ensure that the
|
||
connection is live. NOTIFICATION messages are sent in response to
|
||
errors or special conditions. If a connection encounters an error
|
||
condition, a NOTIFICATION message is sent and the connection is
|
||
closed.
|
||
|
||
A peer in a different AS is referred to as an external peer, while a
|
||
peer in the same AS is referred to as an internal peer. Internal BGP
|
||
and external BGP are commonly abbreviated as IBGP and EBGP.
|
||
|
||
If a particular AS has multiple BGP speakers and is providing transit
|
||
service for other ASes, then care must be taken to ensure a
|
||
consistent view of routing within the AS. A consistent view of the
|
||
interior routes of the AS is provided by the IGP used within the AS.
|
||
For the purpose of this document, it is assumed that a consistent
|
||
view of the routes exterior to the AS is provided by having all BGP
|
||
speakers within the AS maintain IBGP with each other.
|
||
|
||
This document specifies the base behavior of the BGP protocol. This
|
||
behavior can be, and is, modified by extension specifications. When
|
||
the protocol is extended, the new behavior is fully documented in the
|
||
extension specifications.
|
||
|
||
3.1. Routes: Advertisement and Storage
|
||
|
||
For the purpose of this protocol, a route is defined as a unit of
|
||
information that pairs a set of destinations with the attributes of a
|
||
path to those destinations. The set of destinations are systems
|
||
whose IP addresses are contained in one IP address prefix that is
|
||
carried in the Network Layer Reachability Information (NLRI) field of
|
||
an UPDATE message, and the path is the information reported in the
|
||
path attributes field of the same UPDATE message.
|
||
|
||
Routes are advertised between BGP speakers in UPDATE messages.
|
||
Multiple routes that have the same path attributes can be advertised
|
||
in a single UPDATE message by including multiple prefixes in the NLRI
|
||
field of the UPDATE message.
|
||
|
||
Routes are stored in the Routing Information Bases (RIBs): namely,
|
||
the Adj-RIBs-In, the Loc-RIB, and the Adj-RIBs-Out, as described in
|
||
Section 3.2.
|
||
|
||
If a BGP speaker chooses to advertise a previously received route, it
|
||
MAY add to, or modify, the path attributes of the route before
|
||
advertising it to a peer.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 9]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
BGP provides mechanisms by which a BGP speaker can inform its peers
|
||
that a previously advertised route is no longer available for use.
|
||
There are three methods by which a given BGP speaker can indicate
|
||
that a route has been withdrawn from service:
|
||
|
||
a) the IP prefix that expresses the destination for a previously
|
||
advertised route can be advertised in the WITHDRAWN ROUTES
|
||
field in the UPDATE message, thus marking the associated route
|
||
as being no longer available for use,
|
||
|
||
b) a replacement route with the same NLRI can be advertised, or
|
||
|
||
c) the BGP speaker connection can be closed, which implicitly
|
||
removes all routes the pair of speakers had advertised to each
|
||
other from service.
|
||
|
||
Changing the attribute(s) of a route is accomplished by advertising a
|
||
replacement route. The replacement route carries new (changed)
|
||
attributes and has the same address prefix as the original route.
|
||
|
||
3.2. Routing Information Base
|
||
|
||
The Routing Information Base (RIB) within a BGP speaker consists of
|
||
three distinct parts:
|
||
|
||
a) Adj-RIBs-In: The Adj-RIBs-In stores routing information learned
|
||
from inbound UPDATE messages that were received from other BGP
|
||
speakers. Their contents represent routes that are available
|
||
as input to the Decision Process.
|
||
|
||
b) Loc-RIB: The Loc-RIB contains the local routing information the
|
||
BGP speaker selected by applying its local policies to the
|
||
routing information contained in its Adj-RIBs-In. These are
|
||
the routes that will be used by the local BGP speaker. The
|
||
next hop for each of these routes MUST be resolvable via the
|
||
local BGP speaker's Routing Table.
|
||
|
||
c) Adj-RIBs-Out: The Adj-RIBs-Out stores information the local BGP
|
||
speaker selected for advertisement to its peers. The routing
|
||
information stored in the Adj-RIBs-Out will be carried in the
|
||
local BGP speaker's UPDATE messages and advertised to its
|
||
peers.
|
||
|
||
In summary, the Adj-RIBs-In contains unprocessed routing information
|
||
that has been advertised to the local BGP speaker by its peers; the
|
||
Loc-RIB contains the routes that have been selected by the local BGP
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 10]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
speaker's Decision Process; and the Adj-RIBs-Out organizes the routes
|
||
for advertisement to specific peers (by means of the local speaker's
|
||
UPDATE messages).
|
||
|
||
Although the conceptual model distinguishes between Adj-RIBs-In,
|
||
Loc-RIB, and Adj-RIBs-Out, this neither implies nor requires that an
|
||
implementation must maintain three separate copies of the routing
|
||
information. The choice of implementation (for example, 3 copies of
|
||
the information vs 1 copy with pointers) is not constrained by the
|
||
protocol.
|
||
|
||
Routing information that the BGP speaker uses to forward packets (or
|
||
to construct the forwarding table used for packet forwarding) is
|
||
maintained in the Routing Table. The Routing Table accumulates
|
||
routes to directly connected networks, static routes, routes learned
|
||
from the IGP protocols, and routes learned from BGP. Whether a
|
||
specific BGP route should be installed in the Routing Table, and
|
||
whether a BGP route should override a route to the same destination
|
||
installed by another source, is a local policy decision, and is not
|
||
specified in this document. In addition to actual packet forwarding,
|
||
the Routing Table is used for resolution of the next-hop addresses
|
||
specified in BGP updates (see Section 5.1.3).
|
||
|
||
4. Message Formats
|
||
|
||
This section describes message formats used by BGP.
|
||
|
||
BGP messages are sent over TCP connections. A message is processed
|
||
only after it is entirely received. The maximum message size is 4096
|
||
octets. All implementations are required to support this maximum
|
||
message size. The smallest message that may be sent consists of a
|
||
BGP header without a data portion (19 octets).
|
||
|
||
All multi-octet fields are in network byte order.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 11]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
4.1. Message Header Format
|
||
|
||
Each message has a fixed-size header. There may or may not be a data
|
||
portion following the header, depending on the message type. The
|
||
layout of these fields is shown below:
|
||
|
||
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
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| |
|
||
+ +
|
||
| |
|
||
+ +
|
||
| Marker |
|
||
+ +
|
||
| |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Length | Type |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
Marker:
|
||
|
||
This 16-octet field is included for compatibility; it MUST be
|
||
set to all ones.
|
||
|
||
Length:
|
||
|
||
This 2-octet unsigned integer indicates the total length of the
|
||
message, including the header in octets. Thus, it allows one
|
||
to locate the (Marker field of the) next message in the TCP
|
||
stream. The value of the Length field MUST always be at least
|
||
19 and no greater than 4096, and MAY be further constrained,
|
||
depending on the message type. "padding" of extra data after
|
||
the message is not allowed. Therefore, the Length field MUST
|
||
have the smallest value required, given the rest of the
|
||
message.
|
||
|
||
Type:
|
||
|
||
This 1-octet unsigned integer indicates the type code of the
|
||
message. This document defines the following type codes:
|
||
|
||
1 - OPEN
|
||
2 - UPDATE
|
||
3 - NOTIFICATION
|
||
4 - KEEPALIVE
|
||
|
||
[RFC2918] defines one more type code.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 12]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
4.2. OPEN Message Format
|
||
|
||
After a TCP connection is established, the first message sent by each
|
||
side is an OPEN message. If the OPEN message is acceptable, a
|
||
KEEPALIVE message confirming the OPEN is sent back.
|
||
|
||
In addition to the fixed-size BGP header, the OPEN message contains
|
||
the following fields:
|
||
|
||
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
|
||
+-+-+-+-+-+-+-+-+
|
||
| Version |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| My Autonomous System |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Hold Time |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| BGP Identifier |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Opt Parm Len |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| |
|
||
| Optional Parameters (variable) |
|
||
| |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
Version:
|
||
|
||
This 1-octet unsigned integer indicates the protocol version
|
||
number of the message. The current BGP version number is 4.
|
||
|
||
My Autonomous System:
|
||
|
||
This 2-octet unsigned integer indicates the Autonomous System
|
||
number of the sender.
|
||
|
||
Hold Time:
|
||
|
||
This 2-octet unsigned integer indicates the number of seconds
|
||
the sender proposes for the value of the Hold Timer. Upon
|
||
receipt of an OPEN message, a BGP speaker MUST calculate the
|
||
value of the Hold Timer by using the smaller of its configured
|
||
Hold Time and the Hold Time received in the OPEN message. The
|
||
Hold Time MUST be either zero or at least three seconds. An
|
||
implementation MAY reject connections on the basis of the Hold
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 13]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Time. The calculated value indicates the maximum number of
|
||
seconds that may elapse between the receipt of successive
|
||
KEEPALIVE and/or UPDATE messages from the sender.
|
||
|
||
BGP Identifier:
|
||
|
||
This 4-octet unsigned integer indicates the BGP Identifier of
|
||
the sender. A given BGP speaker sets the value of its BGP
|
||
Identifier to an IP address that is assigned to that BGP
|
||
speaker. The value of the BGP Identifier is determined upon
|
||
startup and is the same for every local interface and BGP peer.
|
||
|
||
Optional Parameters Length:
|
||
|
||
This 1-octet unsigned integer indicates the total length of the
|
||
Optional Parameters field in octets. If the value of this
|
||
field is zero, no Optional Parameters are present.
|
||
|
||
Optional Parameters:
|
||
|
||
This field contains a list of optional parameters, in which
|
||
each parameter is encoded as a <Parameter Type, Parameter
|
||
Length, Parameter Value> triplet.
|
||
|
||
0 1
|
||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
|
||
| Parm. Type | Parm. Length | Parameter Value (variable)
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
|
||
|
||
Parameter Type is a one octet field that unambiguously
|
||
identifies individual parameters. Parameter Length is a one
|
||
octet field that contains the length of the Parameter Value
|
||
field in octets. Parameter Value is a variable length field
|
||
that is interpreted according to the value of the Parameter
|
||
Type field.
|
||
|
||
[RFC3392] defines the Capabilities Optional Parameter.
|
||
|
||
The minimum length of the OPEN message is 29 octets (including the
|
||
message header).
|
||
|
||
4.3. UPDATE Message Format
|
||
|
||
UPDATE messages are used to transfer routing information between BGP
|
||
peers. The information in the UPDATE message can be used to
|
||
construct a graph that describes the relationships of the various
|
||
Autonomous Systems. By applying rules to be discussed, routing
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 14]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
information loops and some other anomalies may be detected and
|
||
removed from inter-AS routing.
|
||
|
||
An UPDATE message is used to advertise feasible routes that share
|
||
common path attributes to a peer, or to withdraw multiple unfeasible
|
||
routes from service (see 3.1). An UPDATE message MAY simultaneously
|
||
advertise a feasible route and withdraw multiple unfeasible routes
|
||
from service. The UPDATE message always includes the fixed-size BGP
|
||
header, and also includes the other fields, as shown below (note,
|
||
some of the shown fields may not be present in every UPDATE message):
|
||
|
||
+-----------------------------------------------------+
|
||
| Withdrawn Routes Length (2 octets) |
|
||
+-----------------------------------------------------+
|
||
| Withdrawn Routes (variable) |
|
||
+-----------------------------------------------------+
|
||
| Total Path Attribute Length (2 octets) |
|
||
+-----------------------------------------------------+
|
||
| Path Attributes (variable) |
|
||
+-----------------------------------------------------+
|
||
| Network Layer Reachability Information (variable) |
|
||
+-----------------------------------------------------+
|
||
|
||
Withdrawn Routes Length:
|
||
|
||
This 2-octets unsigned integer indicates the total length of
|
||
the Withdrawn Routes field in octets. Its value allows the
|
||
length of the Network Layer Reachability Information field to
|
||
be determined, as specified below.
|
||
|
||
A value of 0 indicates that no routes are being withdrawn from
|
||
service, and that the WITHDRAWN ROUTES field is not present in
|
||
this UPDATE message.
|
||
|
||
Withdrawn Routes:
|
||
|
||
This is a variable-length field that contains a list of IP
|
||
address prefixes for the routes that are being withdrawn from
|
||
service. Each IP address prefix is encoded as a 2-tuple of the
|
||
form <length, prefix>, whose fields are described below:
|
||
|
||
+---------------------------+
|
||
| Length (1 octet) |
|
||
+---------------------------+
|
||
| Prefix (variable) |
|
||
+---------------------------+
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 15]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
The use and the meaning of these fields are as follows:
|
||
|
||
a) Length:
|
||
|
||
The Length field indicates the length in bits of the IP
|
||
address prefix. A length of zero indicates a prefix that
|
||
matches all IP addresses (with prefix, itself, of zero
|
||
octets).
|
||
|
||
b) Prefix:
|
||
|
||
The Prefix field contains an IP address prefix, followed by
|
||
the minimum number of trailing bits needed to make the end
|
||
of the field fall on an octet boundary. Note that the value
|
||
of trailing bits is irrelevant.
|
||
|
||
Total Path Attribute Length:
|
||
|
||
This 2-octet unsigned integer indicates the total length of the
|
||
Path Attributes field in octets. Its value allows the length
|
||
of the Network Layer Reachability field to be determined as
|
||
specified below.
|
||
|
||
A value of 0 indicates that neither the Network Layer
|
||
Reachability Information field nor the Path Attribute field is
|
||
present in this UPDATE message.
|
||
|
||
Path Attributes:
|
||
|
||
A variable-length sequence of path attributes is present in
|
||
every UPDATE message, except for an UPDATE message that carries
|
||
only the withdrawn routes. Each path attribute is a triple
|
||
<attribute type, attribute length, attribute value> of variable
|
||
length.
|
||
|
||
Attribute Type is a two-octet field that consists of the
|
||
Attribute Flags octet, followed by the Attribute Type Code
|
||
octet.
|
||
|
||
0 1
|
||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Attr. Flags |Attr. Type Code|
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
The high-order bit (bit 0) of the Attribute Flags octet is the
|
||
Optional bit. It defines whether the attribute is optional (if
|
||
set to 1) or well-known (if set to 0).
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 16]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
The second high-order bit (bit 1) of the Attribute Flags octet
|
||
is the Transitive bit. It defines whether an optional
|
||
attribute is transitive (if set to 1) or non-transitive (if set
|
||
to 0).
|
||
|
||
For well-known attributes, the Transitive bit MUST be set to 1.
|
||
(See Section 5 for a discussion of transitive attributes.)
|
||
|
||
The third high-order bit (bit 2) of the Attribute Flags octet
|
||
is the Partial bit. It defines whether the information
|
||
contained in the optional transitive attribute is partial (if
|
||
set to 1) or complete (if set to 0). For well-known attributes
|
||
and for optional non-transitive attributes, the Partial bit
|
||
MUST be set to 0.
|
||
|
||
The fourth high-order bit (bit 3) of the Attribute Flags octet
|
||
is the Extended Length bit. It defines whether the Attribute
|
||
Length is one octet (if set to 0) or two octets (if set to 1).
|
||
|
||
The lower-order four bits of the Attribute Flags octet are
|
||
unused. They MUST be zero when sent and MUST be ignored when
|
||
received.
|
||
|
||
The Attribute Type Code octet contains the Attribute Type Code.
|
||
Currently defined Attribute Type Codes are discussed in Section
|
||
5.
|
||
|
||
If the Extended Length bit of the Attribute Flags octet is set
|
||
to 0, the third octet of the Path Attribute contains the length
|
||
of the attribute data in octets.
|
||
|
||
If the Extended Length bit of the Attribute Flags octet is set
|
||
to 1, the third and fourth octets of the path attribute contain
|
||
the length of the attribute data in octets.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 17]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
The remaining octets of the Path Attribute represent the
|
||
attribute value and are interpreted according to the Attribute
|
||
Flags and the Attribute Type Code. The supported Attribute
|
||
Type Codes, and their attribute values and uses are as follows:
|
||
|
||
a) ORIGIN (Type Code 1):
|
||
|
||
ORIGIN is a well-known mandatory attribute that defines the
|
||
origin of the path information. The data octet can assume
|
||
the following values:
|
||
|
||
Value Meaning
|
||
|
||
0 IGP - Network Layer Reachability Information
|
||
is interior to the originating AS
|
||
|
||
1 EGP - Network Layer Reachability Information
|
||
learned via the EGP protocol [RFC904]
|
||
|
||
2 INCOMPLETE - Network Layer Reachability
|
||
Information learned by some other means
|
||
|
||
Usage of this attribute is defined in 5.1.1.
|
||
|
||
b) AS_PATH (Type Code 2):
|
||
|
||
AS_PATH is a well-known mandatory attribute that is composed
|
||
of a sequence of AS path segments. Each AS path segment is
|
||
represented by a triple <path segment type, path segment
|
||
length, path segment value>.
|
||
|
||
The path segment type is a 1-octet length field with the
|
||
following values defined:
|
||
|
||
Value Segment Type
|
||
|
||
1 AS_SET: unordered set of ASes a route in the
|
||
UPDATE message has traversed
|
||
|
||
2 AS_SEQUENCE: ordered set of ASes a route in
|
||
the UPDATE message has traversed
|
||
|
||
The path segment length is a 1-octet length field,
|
||
containing the number of ASes (not the number of octets) in
|
||
the path segment value field.
|
||
|
||
The path segment value field contains one or more AS
|
||
numbers, each encoded as a 2-octet length field.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 18]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Usage of this attribute is defined in 5.1.2.
|
||
|
||
c) NEXT_HOP (Type Code 3):
|
||
|
||
This is a well-known mandatory attribute that defines the
|
||
(unicast) IP address of the router that SHOULD be used as
|
||
the next hop to the destinations listed in the Network Layer
|
||
Reachability Information field of the UPDATE message.
|
||
|
||
Usage of this attribute is defined in 5.1.3.
|
||
|
||
d) MULTI_EXIT_DISC (Type Code 4):
|
||
|
||
This is an optional non-transitive attribute that is a
|
||
four-octet unsigned integer. The value of this attribute
|
||
MAY be used by a BGP speaker's Decision Process to
|
||
discriminate among multiple entry points to a neighboring
|
||
autonomous system.
|
||
|
||
Usage of this attribute is defined in 5.1.4.
|
||
|
||
e) LOCAL_PREF (Type Code 5):
|
||
|
||
LOCAL_PREF is a well-known attribute that is a four-octet
|
||
unsigned integer. A BGP speaker uses it to inform its other
|
||
internal peers of the advertising speaker's degree of
|
||
preference for an advertised route.
|
||
|
||
Usage of this attribute is defined in 5.1.5.
|
||
|
||
f) ATOMIC_AGGREGATE (Type Code 6)
|
||
|
||
ATOMIC_AGGREGATE is a well-known discretionary attribute of
|
||
length 0.
|
||
|
||
Usage of this attribute is defined in 5.1.6.
|
||
|
||
g) AGGREGATOR (Type Code 7)
|
||
|
||
AGGREGATOR is an optional transitive attribute of length 6.
|
||
The attribute contains the last AS number that formed the
|
||
aggregate route (encoded as 2 octets), followed by the IP
|
||
address of the BGP speaker that formed the aggregate route
|
||
(encoded as 4 octets). This SHOULD be the same address as
|
||
the one used for the BGP Identifier of the speaker.
|
||
|
||
Usage of this attribute is defined in 5.1.7.
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 19]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Network Layer Reachability Information:
|
||
|
||
This variable length field contains a list of IP address
|
||
prefixes. The length, in octets, of the Network Layer
|
||
Reachability Information is not encoded explicitly, but can be
|
||
calculated as:
|
||
|
||
UPDATE message Length - 23 - Total Path Attributes Length
|
||
- Withdrawn Routes Length
|
||
|
||
where UPDATE message Length is the value encoded in the fixed-
|
||
size BGP header, Total Path Attribute Length, and Withdrawn
|
||
Routes Length are the values encoded in the variable part of
|
||
the UPDATE message, and 23 is a combined length of the fixed-
|
||
size BGP header, the Total Path Attribute Length field, and the
|
||
Withdrawn Routes Length field.
|
||
|
||
Reachability information is encoded as one or more 2-tuples of
|
||
the form <length, prefix>, whose fields are described below:
|
||
|
||
+---------------------------+
|
||
| Length (1 octet) |
|
||
+---------------------------+
|
||
| Prefix (variable) |
|
||
+---------------------------+
|
||
|
||
The use and the meaning of these fields are as follows:
|
||
|
||
a) Length:
|
||
|
||
The Length field indicates the length in bits of the IP
|
||
address prefix. A length of zero indicates a prefix that
|
||
matches all IP addresses (with prefix, itself, of zero
|
||
octets).
|
||
|
||
b) Prefix:
|
||
|
||
The Prefix field contains an IP address prefix, followed by
|
||
enough trailing bits to make the end of the field fall on an
|
||
octet boundary. Note that the value of the trailing bits is
|
||
irrelevant.
|
||
|
||
The minimum length of the UPDATE message is 23 octets -- 19 octets
|
||
for the fixed header + 2 octets for the Withdrawn Routes Length + 2
|
||
octets for the Total Path Attribute Length (the value of Withdrawn
|
||
Routes Length is 0 and the value of Total Path Attribute Length is
|
||
0).
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 20]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
An UPDATE message can advertise, at most, one set of path attributes,
|
||
but multiple destinations, provided that the destinations share these
|
||
attributes. All path attributes contained in a given UPDATE message
|
||
apply to all destinations carried in the NLRI field of the UPDATE
|
||
message.
|
||
|
||
|
||
An UPDATE message can list multiple routes that are to be withdrawn
|
||
from service. Each such route is identified by its destination
|
||
(expressed as an IP prefix), which unambiguously identifies the route
|
||
in the context of the BGP speaker - BGP speaker connection to which
|
||
it has been previously advertised.
|
||
|
||
|
||
An UPDATE message might advertise only routes that are to be
|
||
withdrawn from service, in which case the message will not include
|
||
path attributes or Network Layer Reachability Information.
|
||
Conversely, it may advertise only a feasible route, in which case the
|
||
WITHDRAWN ROUTES field need not be present.
|
||
|
||
An UPDATE message SHOULD NOT include the same address prefix in the
|
||
WITHDRAWN ROUTES and Network Layer Reachability Information fields.
|
||
However, a BGP speaker MUST be able to process UPDATE messages in
|
||
this form. A BGP speaker SHOULD treat an UPDATE message of this form
|
||
as though the WITHDRAWN ROUTES do not contain the address prefix.
|
||
|
||
4.4. KEEPALIVE Message Format
|
||
|
||
BGP does not use any TCP-based, keep-alive mechanism to determine if
|
||
peers are reachable. Instead, KEEPALIVE messages are exchanged
|
||
between peers often enough not to cause the Hold Timer to expire. A
|
||
reasonable maximum time between KEEPALIVE messages would be one third
|
||
of the Hold Time interval. KEEPALIVE messages MUST NOT be sent more
|
||
frequently than one per second. An implementation MAY adjust the
|
||
rate at which it sends KEEPALIVE messages as a function of the Hold
|
||
Time interval.
|
||
|
||
If the negotiated Hold Time interval is zero, then periodic KEEPALIVE
|
||
messages MUST NOT be sent.
|
||
|
||
A KEEPALIVE message consists of only the message header and has a
|
||
length of 19 octets.
|
||
|
||
4.5. NOTIFICATION Message Format
|
||
|
||
A NOTIFICATION message is sent when an error condition is detected.
|
||
The BGP connection is closed immediately after it is sent.
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 21]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
In addition to the fixed-size BGP header, the NOTIFICATION message
|
||
contains the following fields:
|
||
|
||
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
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
| Error code | Error subcode | Data (variable) |
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||
|
||
Error Code:
|
||
|
||
This 1-octet unsigned integer indicates the type of
|
||
NOTIFICATION. The following Error Codes have been defined:
|
||
|
||
Error Code Symbolic Name Reference
|
||
|
||
1 Message Header Error Section 6.1
|
||
|
||
2 OPEN Message Error Section 6.2
|
||
|
||
3 UPDATE Message Error Section 6.3
|
||
|
||
4 Hold Timer Expired Section 6.5
|
||
|
||
5 Finite State Machine Error Section 6.6
|
||
|
||
6 Cease Section 6.7
|
||
|
||
Error subcode:
|
||
|
||
This 1-octet unsigned integer provides more specific
|
||
information about the nature of the reported error. Each Error
|
||
Code may have one or more Error Subcodes associated with it.
|
||
If no appropriate Error Subcode is defined, then a zero
|
||
(Unspecific) value is used for the Error Subcode field.
|
||
|
||
Message Header Error subcodes:
|
||
|
||
1 - Connection Not Synchronized.
|
||
2 - Bad Message Length.
|
||
3 - Bad Message Type.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 22]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
OPEN Message Error subcodes:
|
||
|
||
1 - Unsupported Version Number.
|
||
2 - Bad Peer AS.
|
||
3 - Bad BGP Identifier.
|
||
4 - Unsupported Optional Parameter.
|
||
5 - [Deprecated - see Appendix A].
|
||
6 - Unacceptable Hold Time.
|
||
|
||
UPDATE Message Error subcodes:
|
||
|
||
1 - Malformed Attribute List.
|
||
2 - Unrecognized Well-known Attribute.
|
||
3 - Missing Well-known Attribute.
|
||
4 - Attribute Flags Error.
|
||
5 - Attribute Length Error.
|
||
6 - Invalid ORIGIN Attribute.
|
||
7 - [Deprecated - see Appendix A].
|
||
8 - Invalid NEXT_HOP Attribute.
|
||
9 - Optional Attribute Error.
|
||
10 - Invalid Network Field.
|
||
11 - Malformed AS_PATH.
|
||
|
||
Data:
|
||
|
||
This variable-length field is used to diagnose the reason for
|
||
the NOTIFICATION. The contents of the Data field depend upon
|
||
the Error Code and Error Subcode. See Section 6 for more
|
||
details.
|
||
|
||
Note that the length of the Data field can be determined from
|
||
the message Length field by the formula:
|
||
|
||
Message Length = 21 + Data Length
|
||
|
||
The minimum length of the NOTIFICATION message is 21 octets
|
||
(including message header).
|
||
|
||
5. Path Attributes
|
||
|
||
This section discusses the path attributes of the UPDATE message.
|
||
|
||
Path attributes fall into four separate categories:
|
||
|
||
1. Well-known mandatory.
|
||
2. Well-known discretionary.
|
||
3. Optional transitive.
|
||
4. Optional non-transitive.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 23]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
BGP implementations MUST recognize all well-known attributes. Some
|
||
of these attributes are mandatory and MUST be included in every
|
||
UPDATE message that contains NLRI. Others are discretionary and MAY
|
||
or MAY NOT be sent in a particular UPDATE message.
|
||
|
||
Once a BGP peer has updated any well-known attributes, it MUST pass
|
||
these attributes to its peers in any updates it transmits.
|
||
|
||
In addition to well-known attributes, each path MAY contain one or
|
||
more optional attributes. It is not required or expected that all
|
||
BGP implementations support all optional attributes. The handling of
|
||
an unrecognized optional attribute is determined by the setting of
|
||
the Transitive bit in the attribute flags octet. Paths with
|
||
unrecognized transitive optional attributes SHOULD be accepted. If a
|
||
path with an unrecognized transitive optional attribute is accepted
|
||
and passed to other BGP peers, then the unrecognized transitive
|
||
optional attribute of that path MUST be passed, along with the path,
|
||
to other BGP peers with the Partial bit in the Attribute Flags octet
|
||
set to 1. If a path with a recognized, transitive optional attribute
|
||
is accepted and passed along to other BGP peers and the Partial bit
|
||
in the Attribute Flags octet is set to 1 by some previous AS, it MUST
|
||
NOT be set back to 0 by the current AS. Unrecognized non-transitive
|
||
optional attributes MUST be quietly ignored and not passed along to
|
||
other BGP peers.
|
||
|
||
New, transitive optional attributes MAY be attached to the path by
|
||
the originator or by any other BGP speaker in the path. If they are
|
||
not attached by the originator, the Partial bit in the Attribute
|
||
Flags octet is set to 1. The rules for attaching new non-transitive
|
||
optional attributes will depend on the nature of the specific
|
||
attribute. The documentation of each new non-transitive optional
|
||
attribute will be expected to include such rules (the description of
|
||
the MULTI_EXIT_DISC attribute gives an example). All optional
|
||
attributes (both transitive and non-transitive), MAY be updated (if
|
||
appropriate) by BGP speakers in the path.
|
||
|
||
The sender of an UPDATE message SHOULD order path attributes within
|
||
the UPDATE message in ascending order of attribute type. The
|
||
receiver of an UPDATE message MUST be prepared to handle path
|
||
attributes within UPDATE messages that are out of order.
|
||
|
||
The same attribute (attribute with the same type) cannot appear more
|
||
than once within the Path Attributes field of a particular UPDATE
|
||
message.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 24]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
The mandatory category refers to an attribute that MUST be present in
|
||
both IBGP and EBGP exchanges if NLRI are contained in the UPDATE
|
||
message. Attributes classified as optional for the purpose of the
|
||
protocol extension mechanism may be purely discretionary,
|
||
discretionary, required, or disallowed in certain contexts.
|
||
|
||
attribute EBGP IBGP
|
||
ORIGIN mandatory mandatory
|
||
AS_PATH mandatory mandatory
|
||
NEXT_HOP mandatory mandatory
|
||
MULTI_EXIT_DISC discretionary discretionary
|
||
LOCAL_PREF see Section 5.1.5 required
|
||
ATOMIC_AGGREGATE see Section 5.1.6 and 9.1.4
|
||
AGGREGATOR discretionary discretionary
|
||
|
||
5.1. Path Attribute Usage
|
||
|
||
The usage of each BGP path attribute is described in the following
|
||
clauses.
|
||
|
||
5.1.1. ORIGIN
|
||
|
||
ORIGIN is a well-known mandatory attribute. The ORIGIN attribute is
|
||
generated by the speaker that originates the associated routing
|
||
information. Its value SHOULD NOT be changed by any other speaker.
|
||
|
||
5.1.2. AS_PATH
|
||
|
||
AS_PATH is a well-known mandatory attribute. This attribute
|
||
identifies the autonomous systems through which routing information
|
||
carried in this UPDATE message has passed. The components of this
|
||
list can be AS_SETs or AS_SEQUENCEs.
|
||
|
||
When a BGP speaker propagates a route it learned from another BGP
|
||
speaker's UPDATE message, it modifies the route's AS_PATH attribute
|
||
based on the location of the BGP speaker to which the route will be
|
||
sent:
|
||
|
||
a) When a given BGP speaker advertises the route to an internal
|
||
peer, the advertising speaker SHALL NOT modify the AS_PATH
|
||
attribute associated with the route.
|
||
|
||
b) When a given BGP speaker advertises the route to an external
|
||
peer, the advertising speaker updates the AS_PATH attribute as
|
||
follows:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 25]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
1) if the first path segment of the AS_PATH is of type
|
||
AS_SEQUENCE, the local system prepends its own AS number as
|
||
the last element of the sequence (put it in the leftmost
|
||
position with respect to the position of octets in the
|
||
protocol message). If the act of prepending will cause an
|
||
overflow in the AS_PATH segment (i.e., more than 255 ASes),
|
||
it SHOULD prepend a new segment of type AS_SEQUENCE and
|
||
prepend its own AS number to this new segment.
|
||
|
||
2) if the first path segment of the AS_PATH is of type AS_SET,
|
||
the local system prepends a new path segment of type
|
||
AS_SEQUENCE to the AS_PATH, including its own AS number in
|
||
that segment.
|
||
|
||
3) if the AS_PATH is empty, the local system creates a path
|
||
segment of type AS_SEQUENCE, places its own AS into that
|
||
segment, and places that segment into the AS_PATH.
|
||
|
||
When a BGP speaker originates a route then:
|
||
|
||
a) the originating speaker includes its own AS number in a path
|
||
segment, of type AS_SEQUENCE, in the AS_PATH attribute of all
|
||
UPDATE messages sent to an external peer. In this case, the AS
|
||
number of the originating speaker's autonomous system will be
|
||
the only entry the path segment, and this path segment will be
|
||
the only segment in the AS_PATH attribute.
|
||
|
||
b) the originating speaker includes an empty AS_PATH attribute in
|
||
all UPDATE messages sent to internal peers. (An empty AS_PATH
|
||
attribute is one whose length field contains the value zero).
|
||
|
||
Whenever the modification of the AS_PATH attribute calls for
|
||
including or prepending the AS number of the local system, the local
|
||
system MAY include/prepend more than one instance of its own AS
|
||
number in the AS_PATH attribute. This is controlled via local
|
||
configuration.
|
||
|
||
5.1.3. NEXT_HOP
|
||
|
||
The NEXT_HOP is a well-known mandatory attribute that defines the IP
|
||
address of the router that SHOULD be used as the next hop to the
|
||
destinations listed in the UPDATE message. The NEXT_HOP attribute is
|
||
calculated as follows:
|
||
|
||
1) When sending a message to an internal peer, if the route is not
|
||
locally originated, the BGP speaker SHOULD NOT modify the
|
||
NEXT_HOP attribute unless it has been explicitly configured to
|
||
announce its own IP address as the NEXT_HOP. When announcing a
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 26]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
locally-originated route to an internal peer, the BGP speaker
|
||
SHOULD use the interface address of the router through which
|
||
the announced network is reachable for the speaker as the
|
||
NEXT_HOP. If the route is directly connected to the speaker,
|
||
or if the interface address of the router through which the
|
||
announced network is reachable for the speaker is the internal
|
||
peer's address, then the BGP speaker SHOULD use its own IP
|
||
address for the NEXT_HOP attribute (the address of the
|
||
interface that is used to reach the peer).
|
||
|
||
2) When sending a message to an external peer, X, and the peer is
|
||
one IP hop away from the speaker:
|
||
|
||
- If the route being announced was learned from an internal
|
||
peer or is locally originated, the BGP speaker can use an
|
||
interface address of the internal peer router (or the
|
||
internal router) through which the announced network is
|
||
reachable for the speaker for the NEXT_HOP attribute,
|
||
provided that peer X shares a common subnet with this
|
||
address. This is a form of "third party" NEXT_HOP attribute.
|
||
|
||
- Otherwise, if the route being announced was learned from an
|
||
external peer, the speaker can use an IP address of any
|
||
adjacent router (known from the received NEXT_HOP attribute)
|
||
that the speaker itself uses for local route calculation in
|
||
the NEXT_HOP attribute, provided that peer X shares a common
|
||
subnet with this address. This is a second form of "third
|
||
party" NEXT_HOP attribute.
|
||
|
||
- Otherwise, if the external peer to which the route is being
|
||
advertised shares a common subnet with one of the interfaces
|
||
of the announcing BGP speaker, the speaker MAY use the IP
|
||
address associated with such an interface in the NEXT_HOP
|
||
attribute. This is known as a "first party" NEXT_HOP
|
||
attribute.
|
||
|
||
- By default (if none of the above conditions apply), the BGP
|
||
speaker SHOULD use the IP address of the interface that the
|
||
speaker uses to establish the BGP connection to peer X in the
|
||
NEXT_HOP attribute.
|
||
|
||
3) When sending a message to an external peer X, and the peer is
|
||
multiple IP hops away from the speaker (aka "multihop EBGP"):
|
||
|
||
- The speaker MAY be configured to propagate the NEXT_HOP
|
||
attribute. In this case, when advertising a route that the
|
||
speaker learned from one of its peers, the NEXT_HOP attribute
|
||
of the advertised route is exactly the same as the NEXT_HOP
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 27]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
attribute of the learned route (the speaker does not modify
|
||
the NEXT_HOP attribute).
|
||
|
||
- By default, the BGP speaker SHOULD use the IP address of the
|
||
interface that the speaker uses in the NEXT_HOP attribute to
|
||
establish the BGP connection to peer X.
|
||
|
||
Normally, the NEXT_HOP attribute is chosen such that the shortest
|
||
available path will be taken. A BGP speaker MUST be able to support
|
||
the disabling advertisement of third party NEXT_HOP attributes in
|
||
order to handle imperfectly bridged media.
|
||
|
||
A route originated by a BGP speaker SHALL NOT be advertised to a peer
|
||
using an address of that peer as NEXT_HOP. A BGP speaker SHALL NOT
|
||
install a route with itself as the next hop.
|
||
|
||
The NEXT_HOP attribute is used by the BGP speaker to determine the
|
||
actual outbound interface and immediate next-hop address that SHOULD
|
||
be used to forward transit packets to the associated destinations.
|
||
|
||
The immediate next-hop address is determined by performing a
|
||
recursive route lookup operation for the IP address in the NEXT_HOP
|
||
attribute, using the contents of the Routing Table, selecting one
|
||
entry if multiple entries of equal cost exist. The Routing Table
|
||
entry that resolves the IP address in the NEXT_HOP attribute will
|
||
always specify the outbound interface. If the entry specifies an
|
||
attached subnet, but does not specify a next-hop address, then the
|
||
address in the NEXT_HOP attribute SHOULD be used as the immediate
|
||
next-hop address. If the entry also specifies the next-hop address,
|
||
this address SHOULD be used as the immediate next-hop address for
|
||
packet forwarding.
|
||
|
||
5.1.4. MULTI_EXIT_DISC
|
||
|
||
The MULTI_EXIT_DISC is an optional non-transitive attribute that is
|
||
intended to be used on external (inter-AS) links to discriminate
|
||
among multiple exit or entry points to the same neighboring AS. The
|
||
value of the MULTI_EXIT_DISC attribute is a four-octet unsigned
|
||
number, called a metric. All other factors being equal, the exit
|
||
point with the lower metric SHOULD be preferred. If received over
|
||
EBGP, the MULTI_EXIT_DISC attribute MAY be propagated over IBGP to
|
||
other BGP speakers within the same AS (see also 9.1.2.2). The
|
||
MULTI_EXIT_DISC attribute received from a neighboring AS MUST NOT be
|
||
propagated to other neighboring ASes.
|
||
|
||
A BGP speaker MUST implement a mechanism (based on local
|
||
configuration) that allows the MULTI_EXIT_DISC attribute to be
|
||
removed from a route. If a BGP speaker is configured to remove the
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 28]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
MULTI_EXIT_DISC attribute from a route, then this removal MUST be
|
||
done prior to determining the degree of preference of the route and
|
||
prior to performing route selection (Decision Process phases 1 and
|
||
2).
|
||
|
||
An implementation MAY also (based on local configuration) alter the
|
||
value of the MULTI_EXIT_DISC attribute received over EBGP. If a BGP
|
||
speaker is configured to alter the value of the MULTI_EXIT_DISC
|
||
attribute received over EBGP, then altering the value MUST be done
|
||
prior to determining the degree of preference of the route and prior
|
||
to performing route selection (Decision Process phases 1 and 2). See
|
||
Section 9.1.2.2 for necessary restrictions on this.
|
||
|
||
5.1.5. LOCAL_PREF
|
||
|
||
LOCAL_PREF is a well-known attribute that SHALL be included in all
|
||
UPDATE messages that a given BGP speaker sends to other internal
|
||
peers. A BGP speaker SHALL calculate the degree of preference for
|
||
each external route based on the locally-configured policy, and
|
||
include the degree of preference when advertising a route to its
|
||
internal peers. The higher degree of preference MUST be preferred.
|
||
A BGP speaker uses the degree of preference learned via LOCAL_PREF in
|
||
its Decision Process (see Section 9.1.1).
|
||
|
||
A BGP speaker MUST NOT include this attribute in UPDATE messages it
|
||
sends to external peers, except in the case of BGP Confederations
|
||
[RFC3065]. If it is contained in an UPDATE message that is received
|
||
from an external peer, then this attribute MUST be ignored by the
|
||
receiving speaker, except in the case of BGP Confederations
|
||
[RFC3065].
|
||
|
||
5.1.6. ATOMIC_AGGREGATE
|
||
|
||
ATOMIC_AGGREGATE is a well-known discretionary attribute.
|
||
|
||
When a BGP speaker aggregates several routes for the purpose of
|
||
advertisement to a particular peer, the AS_PATH of the aggregated
|
||
route normally includes an AS_SET formed from the set of ASes from
|
||
which the aggregate was formed. In many cases, the network
|
||
administrator can determine if the aggregate can safely be advertised
|
||
without the AS_SET, and without forming route loops.
|
||
|
||
If an aggregate excludes at least some of the AS numbers present in
|
||
the AS_PATH of the routes that are aggregated as a result of dropping
|
||
the AS_SET, the aggregated route, when advertised to the peer, SHOULD
|
||
include the ATOMIC_AGGREGATE attribute.
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 29]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
A BGP speaker that receives a route with the ATOMIC_AGGREGATE
|
||
attribute SHOULD NOT remove the attribute when propagating the route
|
||
to other speakers.
|
||
|
||
A BGP speaker that receives a route with the ATOMIC_AGGREGATE
|
||
attribute MUST NOT make any NLRI of that route more specific (as
|
||
defined in 9.1.4) when advertising this route to other BGP speakers.
|
||
|
||
A BGP speaker that receives a route with the ATOMIC_AGGREGATE
|
||
attribute needs to be aware of the fact that the actual path to
|
||
destinations, as specified in the NLRI of the route, while having the
|
||
loop-free property, may not be the path specified in the AS_PATH
|
||
attribute of the route.
|
||
|
||
5.1.7. AGGREGATOR
|
||
|
||
AGGREGATOR is an optional transitive attribute, which MAY be included
|
||
in updates that are formed by aggregation (see Section 9.2.2.2). A
|
||
BGP speaker that performs route aggregation MAY add the AGGREGATOR
|
||
attribute, which SHALL contain its own AS number and IP address. The
|
||
IP address SHOULD be the same as the BGP Identifier of the speaker.
|
||
|
||
6. BGP Error Handling.
|
||
|
||
This section describes actions to be taken when errors are detected
|
||
while processing BGP messages.
|
||
|
||
When any of the conditions described here are detected, a
|
||
NOTIFICATION message, with the indicated Error Code, Error Subcode,
|
||
and Data fields, is sent, and the BGP connection is closed (unless it
|
||
is explicitly stated that no NOTIFICATION message is to be sent and
|
||
the BGP connection is not to be closed). If no Error Subcode is
|
||
specified, then a zero MUST be used.
|
||
|
||
The phrase "the BGP connection is closed" means the TCP connection
|
||
has been closed, the associated Adj-RIB-In has been cleared, and all
|
||
resources for that BGP connection have been deallocated. Entries in
|
||
the Loc-RIB associated with the remote peer are marked as invalid.
|
||
The local system recalculates its best routes for the destinations of
|
||
the routes marked as invalid. Before the invalid routes are deleted
|
||
from the system, it advertises, to its peers, either withdraws for
|
||
the routes marked as invalid, or the new best routes before the
|
||
invalid routes are deleted from the system.
|
||
|
||
Unless specified explicitly, the Data field of the NOTIFICATION
|
||
message that is sent to indicate an error is empty.
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 30]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
6.1. Message Header Error Handling
|
||
|
||
All errors detected while processing the Message Header MUST be
|
||
indicated by sending the NOTIFICATION message with the Error Code
|
||
Message Header Error. The Error Subcode elaborates on the specific
|
||
nature of the error.
|
||
|
||
The expected value of the Marker field of the message header is all
|
||
ones. If the Marker field of the message header is not as expected,
|
||
then a synchronization error has occurred and the Error Subcode MUST
|
||
be set to Connection Not Synchronized.
|
||
|
||
If at least one of the following is true:
|
||
|
||
- if the Length field of the message header is less than 19 or
|
||
greater than 4096, or
|
||
|
||
- if the Length field of an OPEN message is less than the minimum
|
||
length of the OPEN message, or
|
||
|
||
- if the Length field of an UPDATE message is less than the
|
||
minimum length of the UPDATE message, or
|
||
|
||
- if the Length field of a KEEPALIVE message is not equal to 19,
|
||
or
|
||
|
||
- if the Length field of a NOTIFICATION message is less than the
|
||
minimum length of the NOTIFICATION message,
|
||
|
||
then the Error Subcode MUST be set to Bad Message Length. The Data
|
||
field MUST contain the erroneous Length field.
|
||
|
||
If the Type field of the message header is not recognized, then the
|
||
Error Subcode MUST be set to Bad Message Type. The Data field MUST
|
||
contain the erroneous Type field.
|
||
|
||
6.2. OPEN Message Error Handling
|
||
|
||
All errors detected while processing the OPEN message MUST be
|
||
indicated by sending the NOTIFICATION message with the Error Code
|
||
OPEN Message Error. The Error Subcode elaborates on the specific
|
||
nature of the error.
|
||
|
||
If the version number in the Version field of the received OPEN
|
||
message is not supported, then the Error Subcode MUST be set to
|
||
Unsupported Version Number. The Data field is a 2-octet unsigned
|
||
integer, which indicates the largest, locally-supported version
|
||
number less than the version the remote BGP peer bid (as indicated in
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 31]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
the received OPEN message), or if the smallest, locally-supported
|
||
version number is greater than the version the remote BGP peer bid,
|
||
then the smallest, locally-supported version number.
|
||
|
||
If the Autonomous System field of the OPEN message is unacceptable,
|
||
then the Error Subcode MUST be set to Bad Peer AS. The determination
|
||
of acceptable Autonomous System numbers is outside the scope of this
|
||
protocol.
|
||
|
||
If the Hold Time field of the OPEN message is unacceptable, then the
|
||
Error Subcode MUST be set to Unacceptable Hold Time. An
|
||
implementation MUST reject Hold Time values of one or two seconds.
|
||
An implementation MAY reject any proposed Hold Time. An
|
||
implementation that accepts a Hold Time MUST use the negotiated value
|
||
for the Hold Time.
|
||
|
||
If the BGP Identifier field of the OPEN message is syntactically
|
||
incorrect, then the Error Subcode MUST be set to Bad BGP Identifier.
|
||
Syntactic correctness means that the BGP Identifier field represents
|
||
a valid unicast IP host address.
|
||
|
||
If one of the Optional Parameters in the OPEN message is not
|
||
recognized, then the Error Subcode MUST be set to Unsupported
|
||
Optional Parameters.
|
||
|
||
If one of the Optional Parameters in the OPEN message is recognized,
|
||
but is malformed, then the Error Subcode MUST be set to 0
|
||
(Unspecific).
|
||
|
||
6.3. UPDATE Message Error Handling
|
||
|
||
All errors detected while processing the UPDATE message MUST be
|
||
indicated by sending the NOTIFICATION message with the Error Code
|
||
UPDATE Message Error. The error subcode elaborates on the specific
|
||
nature of the error.
|
||
|
||
Error checking of an UPDATE message begins by examining the path
|
||
attributes. If the Withdrawn Routes Length or Total Attribute Length
|
||
is too large (i.e., if Withdrawn Routes Length + Total Attribute
|
||
Length + 23 exceeds the message Length), then the Error Subcode MUST
|
||
be set to Malformed Attribute List.
|
||
|
||
If any recognized attribute has Attribute Flags that conflict with
|
||
the Attribute Type Code, then the Error Subcode MUST be set to
|
||
Attribute Flags Error. The Data field MUST contain the erroneous
|
||
attribute (type, length, and value).
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 32]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
If any recognized attribute has an Attribute Length that conflicts
|
||
with the expected length (based on the attribute type code), then the
|
||
Error Subcode MUST be set to Attribute Length Error. The Data field
|
||
MUST contain the erroneous attribute (type, length, and value).
|
||
|
||
If any of the well-known mandatory attributes are not present, then
|
||
the Error Subcode MUST be set to Missing Well-known Attribute. The
|
||
Data field MUST contain the Attribute Type Code of the missing,
|
||
well-known attribute.
|
||
|
||
If any of the well-known mandatory attributes are not recognized,
|
||
then the Error Subcode MUST be set to Unrecognized Well-known
|
||
Attribute. The Data field MUST contain the unrecognized attribute
|
||
(type, length, and value).
|
||
|
||
If the ORIGIN attribute has an undefined value, then the Error Sub-
|
||
code MUST be set to Invalid Origin Attribute. The Data field MUST
|
||
contain the unrecognized attribute (type, length, and value).
|
||
|
||
If the NEXT_HOP attribute field is syntactically incorrect, then the
|
||
Error Subcode MUST be set to Invalid NEXT_HOP Attribute. The Data
|
||
field MUST contain the incorrect attribute (type, length, and value).
|
||
Syntactic correctness means that the NEXT_HOP attribute represents a
|
||
valid IP host address.
|
||
|
||
The IP address in the NEXT_HOP MUST meet the following criteria to be
|
||
considered semantically correct:
|
||
|
||
a) It MUST NOT be the IP address of the receiving speaker.
|
||
|
||
b) In the case of an EBGP, where the sender and receiver are one
|
||
IP hop away from each other, either the IP address in the
|
||
NEXT_HOP MUST be the sender's IP address that is used to
|
||
establish the BGP connection, or the interface associated with
|
||
the NEXT_HOP IP address MUST share a common subnet with the
|
||
receiving BGP speaker.
|
||
|
||
If the NEXT_HOP attribute is semantically incorrect, the error SHOULD
|
||
be logged, and the route SHOULD be ignored. In this case, a
|
||
NOTIFICATION message SHOULD NOT be sent, and the connection SHOULD
|
||
NOT be closed.
|
||
|
||
The AS_PATH attribute is checked for syntactic correctness. If the
|
||
path is syntactically incorrect, then the Error Subcode MUST be set
|
||
to Malformed AS_PATH.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 33]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
If the UPDATE message is received from an external peer, the local
|
||
system MAY check whether the leftmost (with respect to the position
|
||
of octets in the protocol message) AS in the AS_PATH attribute is
|
||
equal to the autonomous system number of the peer that sent the
|
||
message. If the check determines this is not the case, the Error
|
||
Subcode MUST be set to Malformed AS_PATH.
|
||
|
||
If an optional attribute is recognized, then the value of this
|
||
attribute MUST be checked. If an error is detected, the attribute
|
||
MUST be discarded, and the Error Subcode MUST be set to Optional
|
||
Attribute Error. The Data field MUST contain the attribute (type,
|
||
length, and value).
|
||
|
||
If any attribute appears more than once in the UPDATE message, then
|
||
the Error Subcode MUST be set to Malformed Attribute List.
|
||
|
||
The NLRI field in the UPDATE message is checked for syntactic
|
||
validity. If the field is syntactically incorrect, then the Error
|
||
Subcode MUST be set to Invalid Network Field.
|
||
|
||
If a prefix in the NLRI field is semantically incorrect (e.g., an
|
||
unexpected multicast IP address), an error SHOULD be logged locally,
|
||
and the prefix SHOULD be ignored.
|
||
|
||
An UPDATE message that contains correct path attributes, but no NLRI,
|
||
SHALL be treated as a valid UPDATE message.
|
||
|
||
6.4. NOTIFICATION Message Error Handling
|
||
|
||
If a peer sends a NOTIFICATION message, and the receiver of the
|
||
message detects an error in that message, the receiver cannot use a
|
||
NOTIFICATION message to report this error back to the peer. Any such
|
||
error (e.g., an unrecognized Error Code or Error Subcode) SHOULD be
|
||
noticed, logged locally, and brought to the attention of the
|
||
administration of the peer. The means to do this, however, lies
|
||
outside the scope of this document.
|
||
|
||
6.5. Hold Timer Expired Error Handling
|
||
|
||
If a system does not receive successive KEEPALIVE, UPDATE, and/or
|
||
NOTIFICATION messages within the period specified in the Hold Time
|
||
field of the OPEN message, then the NOTIFICATION message with the
|
||
Hold Timer Expired Error Code is sent and the BGP connection is
|
||
closed.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 34]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
6.6. Finite State Machine Error Handling
|
||
|
||
Any error detected by the BGP Finite State Machine (e.g., receipt of
|
||
an unexpected event) is indicated by sending the NOTIFICATION message
|
||
with the Error Code Finite State Machine Error.
|
||
|
||
6.7. Cease
|
||
|
||
In the absence of any fatal errors (that are indicated in this
|
||
section), a BGP peer MAY choose, at any given time, to close its BGP
|
||
connection by sending the NOTIFICATION message with the Error Code
|
||
Cease. However, the Cease NOTIFICATION message MUST NOT be used when
|
||
a fatal error indicated by this section does exist.
|
||
|
||
A BGP speaker MAY support the ability to impose a locally-configured,
|
||
upper bound on the number of address prefixes the speaker is willing
|
||
to accept from a neighbor. When the upper bound is reached, the
|
||
speaker, under control of local configuration, either (a) discards
|
||
new address prefixes from the neighbor (while maintaining the BGP
|
||
connection with the neighbor), or (b) terminates the BGP connection
|
||
with the neighbor. If the BGP speaker decides to terminate its BGP
|
||
connection with a neighbor because the number of address prefixes
|
||
received from the neighbor exceeds the locally-configured, upper
|
||
bound, then the speaker MUST send the neighbor a NOTIFICATION message
|
||
with the Error Code Cease. The speaker MAY also log this locally.
|
||
|
||
6.8. BGP Connection Collision Detection
|
||
|
||
If a pair of BGP speakers try to establish a BGP connection with each
|
||
other simultaneously, then two parallel connections well be formed.
|
||
If the source IP address used by one of these connections is the same
|
||
as the destination IP address used by the other, and the destination
|
||
IP address used by the first connection is the same as the source IP
|
||
address used by the other, connection collision has occurred. In the
|
||
event of connection collision, one of the connections MUST be closed.
|
||
|
||
Based on the value of the BGP Identifier, a convention is established
|
||
for detecting which BGP connection is to be preserved when a
|
||
collision occurs. The convention is to compare the BGP Identifiers
|
||
of the peers involved in the collision and to retain only the
|
||
connection initiated by the BGP speaker with the higher-valued BGP
|
||
Identifier.
|
||
|
||
Upon receipt of an OPEN message, the local system MUST examine all of
|
||
its connections that are in the OpenConfirm state. A BGP speaker MAY
|
||
also examine connections in an OpenSent state if it knows the BGP
|
||
Identifier of the peer by means outside of the protocol. If, among
|
||
these connections, there is a connection to a remote BGP speaker
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 35]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
whose BGP Identifier equals the one in the OPEN message, and this
|
||
connection collides with the connection over which the OPEN message
|
||
is received, then the local system performs the following collision
|
||
resolution procedure:
|
||
|
||
1) The BGP Identifier of the local system is compared to the BGP
|
||
Identifier of the remote system (as specified in the OPEN
|
||
message). Comparing BGP Identifiers is done by converting them
|
||
to host byte order and treating them as 4-octet unsigned
|
||
integers.
|
||
|
||
2) If the value of the local BGP Identifier is less than the
|
||
remote one, the local system closes the BGP connection that
|
||
already exists (the one that is already in the OpenConfirm
|
||
state), and accepts the BGP connection initiated by the remote
|
||
system.
|
||
|
||
3) Otherwise, the local system closes the newly created BGP
|
||
connection (the one associated with the newly received OPEN
|
||
message), and continues to use the existing one (the one that
|
||
is already in the OpenConfirm state).
|
||
|
||
Unless allowed via configuration, a connection collision with an
|
||
existing BGP connection that is in the Established state causes
|
||
closing of the newly created connection.
|
||
|
||
Note that a connection collision cannot be detected with connections
|
||
that are in Idle, Connect, or Active states.
|
||
|
||
Closing the BGP connection (that results from the collision
|
||
resolution procedure) is accomplished by sending the NOTIFICATION
|
||
message with the Error Code Cease.
|
||
|
||
7. BGP Version Negotiation
|
||
|
||
BGP speakers MAY negotiate the version of the protocol by making
|
||
multiple attempts at opening a BGP connection, starting with the
|
||
highest version number each BGP speaker supports. If an open attempt
|
||
fails with an Error Code, OPEN Message Error, and an Error Subcode,
|
||
Unsupported Version Number, then the BGP speaker has available the
|
||
version number it tried, the version number its peer tried, the
|
||
version number passed by its peer in the NOTIFICATION message, and
|
||
the version numbers it supports. If the two peers do support one or
|
||
more common versions, then this will allow them to rapidly determine
|
||
the highest common version. In order to support BGP version
|
||
negotiation, future versions of BGP MUST retain the format of the
|
||
OPEN and NOTIFICATION messages.
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 36]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
8. BGP Finite State Machine (FSM)
|
||
|
||
The data structures and FSM described in this document are conceptual
|
||
and do not have to be implemented precisely as described here, as
|
||
long as the implementations support the described functionality and
|
||
they exhibit the same externally visible behavior.
|
||
|
||
This section specifies the BGP operation in terms of a Finite State
|
||
Machine (FSM). The section falls into two parts:
|
||
|
||
1) Description of Events for the State machine (Section 8.1)
|
||
2) Description of the FSM (Section 8.2)
|
||
|
||
Session attributes required (mandatory) for each connection are:
|
||
|
||
1) State
|
||
2) ConnectRetryCounter
|
||
3) ConnectRetryTimer
|
||
4) ConnectRetryTime
|
||
5) HoldTimer
|
||
6) HoldTime
|
||
7) KeepaliveTimer
|
||
8) KeepaliveTime
|
||
|
||
The state session attribute indicates the current state of the BGP
|
||
FSM. The ConnectRetryCounter indicates the number of times a BGP
|
||
peer has tried to establish a peer session.
|
||
|
||
The mandatory attributes related to timers are described in Section
|
||
10. Each timer has a "timer" and a "time" (the initial value).
|
||
|
||
The optional Session attributes are listed below. These optional
|
||
attributes may be supported, either per connection or per local
|
||
system:
|
||
|
||
1) AcceptConnectionsUnconfiguredPeers
|
||
2) AllowAutomaticStart
|
||
3) AllowAutomaticStop
|
||
4) CollisionDetectEstablishedState
|
||
5) DampPeerOscillations
|
||
6) DelayOpen
|
||
7) DelayOpenTime
|
||
8) DelayOpenTimer
|
||
9) IdleHoldTime
|
||
10) IdleHoldTimer
|
||
11) PassiveTcpEstablishment
|
||
12) SendNOTIFICATIONwithoutOPEN
|
||
13) TrackTcpState
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 37]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
The optional session attributes support different features of the BGP
|
||
functionality that have implications for the BGP FSM state
|
||
transitions. Two groups of the attributes which relate to timers
|
||
are:
|
||
|
||
group 1: DelayOpen, DelayOpenTime, DelayOpenTimer
|
||
group 2: DampPeerOscillations, IdleHoldTime, IdleHoldTimer
|
||
|
||
The first parameter (DelayOpen, DampPeerOscillations) is an optional
|
||
attribute that indicates that the Timer function is active. The
|
||
"Time" value specifies the initial value for the "Timer"
|
||
(DelayOpenTime, IdleHoldTime). The "Timer" specifies the actual
|
||
timer.
|
||
|
||
Please refer to Section 8.1.1 for an explanation of the interaction
|
||
between these optional attributes and the events signaled to the
|
||
state machine. Section 8.2.1.3 also provides a short overview of the
|
||
different types of optional attributes (flags or timers).
|
||
|
||
8.1. Events for the BGP FSM
|
||
|
||
8.1.1. Optional Events Linked to Optional Session Attributes
|
||
|
||
The Inputs to the BGP FSM are events. Events can either be mandatory
|
||
or optional. Some optional events are linked to optional session
|
||
attributes. Optional session attributes enable several groups of FSM
|
||
functionality.
|
||
|
||
The linkage between FSM functionality, events, and the optional
|
||
session attributes are described below.
|
||
|
||
Group 1: Automatic Administrative Events (Start/Stop)
|
||
|
||
Optional Session Attributes: AllowAutomaticStart,
|
||
AllowAutomaticStop,
|
||
DampPeerOscillations,
|
||
IdleHoldTime, IdleHoldTimer
|
||
|
||
Option 1: AllowAutomaticStart
|
||
|
||
Description: A BGP peer connection can be started and stopped
|
||
by administrative control. This administrative
|
||
control can either be manual, based on operator
|
||
intervention, or under the control of logic that
|
||
is specific to a BGP implementation. The term
|
||
"automatic" refers to a start being issued to the
|
||
BGP peer connection FSM when such logic determines
|
||
that the BGP peer connection should be restarted.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 38]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
The AllowAutomaticStart attribute specifies that
|
||
this BGP connection supports automatic starting of
|
||
the BGP connection.
|
||
|
||
If the BGP implementation supports
|
||
AllowAutomaticStart, the peer may be repeatedly
|
||
restarted. Three other options control the rate
|
||
at which the automatic restart occurs:
|
||
DampPeerOscillations, IdleHoldTime, and the
|
||
IdleHoldTimer.
|
||
|
||
The DampPeerOscillations option specifies that the
|
||
implementation engages additional logic to damp
|
||
the oscillations of BGP peers in the face of
|
||
sequences of automatic start and automatic stop.
|
||
IdleHoldTime specifies the length of time the BGP
|
||
peer is held in the Idle state prior to allowing
|
||
the next automatic restart. The IdleHoldTimer is
|
||
the timer that holds the peer in Idle state.
|
||
|
||
An example of DampPeerOscillations logic is an
|
||
increase of the IdleHoldTime value if a BGP peer
|
||
oscillates connectivity (connected/disconnected)
|
||
repeatedly within a time period. To engage this
|
||
logic, a peer could connect and disconnect 10
|
||
times within 5 minutes. The IdleHoldTime value
|
||
would be reset from 0 to 120 seconds.
|
||
|
||
Values: TRUE or FALSE
|
||
|
||
Option 2: AllowAutomaticStop
|
||
|
||
Description: This BGP peer session optional attribute indicates
|
||
that the BGP connection allows "automatic"
|
||
stopping of the BGP connection. An "automatic"
|
||
stop is defined as a stop under the control of
|
||
implementation-specific logic. The
|
||
implementation-specific logic is outside the scope
|
||
of this specification.
|
||
|
||
Values: TRUE or FALSE
|
||
|
||
Option 3: DampPeerOscillations
|
||
|
||
Description: The DampPeerOscillations optional session
|
||
attribute indicates that the BGP connection is
|
||
using logic that damps BGP peer oscillations in
|
||
the Idle State.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 39]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Value: TRUE or FALSE
|
||
|
||
Option 4: IdleHoldTime
|
||
|
||
Description: The IdleHoldTime is the value that is set in the
|
||
IdleHoldTimer.
|
||
|
||
Values: Time in seconds
|
||
|
||
Option 5: IdleHoldTimer
|
||
|
||
Description: The IdleHoldTimer aids in controlling BGP peer
|
||
oscillation. The IdleHoldTimer is used to keep
|
||
the BGP peer in Idle for a particular duration.
|
||
The IdleHoldTimer_Expires event is described in
|
||
Section 8.1.3.
|
||
|
||
Values: Time in seconds
|
||
|
||
Group 2: Unconfigured Peers
|
||
|
||
Optional Session Attributes: AcceptConnectionsUnconfiguredPeers
|
||
|
||
Option 1: AcceptConnectionsUnconfiguredPeers
|
||
|
||
Description: The BGP FSM optionally allows the acceptance of
|
||
BGP peer connections from neighbors that are not
|
||
pre-configured. The
|
||
"AcceptConnectionsUnconfiguredPeers" optional
|
||
session attribute allows the FSM to support the
|
||
state transitions that allow the implementation to
|
||
accept or reject these unconfigured peers.
|
||
|
||
The AcceptConnectionsUnconfiguredPeers has
|
||
security implications. Please refer to the BGP
|
||
Vulnerabilities document [RFC4272] for details.
|
||
|
||
Value: True or False
|
||
|
||
Group 3: TCP processing
|
||
|
||
Optional Session Attributes: PassiveTcpEstablishment,
|
||
TrackTcpState
|
||
|
||
Option 1: PassiveTcpEstablishment
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 40]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Description: This option indicates that the BGP FSM will
|
||
passively wait for the remote BGP peer to
|
||
establish the BGP TCP connection.
|
||
|
||
value: TRUE or FALSE
|
||
|
||
Option 2: TrackTcpState
|
||
|
||
Description: The BGP FSM normally tracks the end result of a
|
||
TCP connection attempt rather than individual TCP
|
||
messages. Optionally, the BGP FSM can support
|
||
additional interaction with the TCP connection
|
||
negotiation. The interaction with the TCP events
|
||
may increase the amount of logging the BGP peer
|
||
connection requires and the number of BGP FSM
|
||
changes.
|
||
|
||
Value: TRUE or FALSE
|
||
|
||
Group 4: BGP Message Processing
|
||
|
||
Optional Session Attributes: DelayOpen, DelayOpenTime,
|
||
DelayOpenTimer,
|
||
SendNOTIFICATIONwithoutOPEN,
|
||
CollisionDetectEstablishedState
|
||
|
||
Option 1: DelayOpen
|
||
|
||
Description: The DelayOpen optional session attribute allows
|
||
implementations to be configured to delay sending
|
||
an OPEN message for a specific time period
|
||
(DelayOpenTime). The delay allows the remote BGP
|
||
Peer time to send the first OPEN message.
|
||
|
||
Value: TRUE or FALSE
|
||
|
||
Option 2: DelayOpenTime
|
||
|
||
Description: The DelayOpenTime is the initial value set in the
|
||
DelayOpenTimer.
|
||
|
||
Value: Time in seconds
|
||
|
||
Option 3: DelayOpenTimer
|
||
|
||
Description: The DelayOpenTimer optional session attribute is
|
||
used to delay the sending of an OPEN message on a
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 41]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
connection. The DelayOpenTimer_Expires event
|
||
(Event 12) is described in Section 8.1.3.
|
||
|
||
Value: Time in seconds
|
||
|
||
Option 4: SendNOTIFICATIONwithoutOPEN
|
||
|
||
Description: The SendNOTIFICATIONwithoutOPEN allows a peer to
|
||
send a NOTIFICATION without first sending an OPEN
|
||
message. Without this optional session attribute,
|
||
the BGP connection assumes that an OPEN message
|
||
must be sent by a peer prior to the peer sending a
|
||
NOTIFICATION message.
|
||
|
||
Value: True or False
|
||
|
||
Option 5: CollisionDetectEstablishedState
|
||
|
||
Description: Normally, a Detect Collision (see Section 6.8)
|
||
will be ignored in the Established state. This
|
||
optional session attribute indicates that this BGP
|
||
connection processes collisions in the Established
|
||
state.
|
||
|
||
Value: True or False
|
||
|
||
Note: The optional session attributes clarify the BGP FSM
|
||
description for existing features of BGP implementations.
|
||
The optional session attributes may be pre-defined for an
|
||
implementation and not readable via management interfaces
|
||
for existing correct implementations. As newer BGP MIBs
|
||
(version 2 and beyond) are supported, these fields will be
|
||
accessible via a management interface.
|
||
|
||
8.1.2. Administrative Events
|
||
|
||
An administrative event is an event in which the operator interface
|
||
and BGP Policy engine signal the BGP-finite state machine to start or
|
||
stop the BGP state machine. The basic start and stop indications are
|
||
augmented by optional connection attributes that signal a certain
|
||
type of start or stop mechanism to the BGP FSM. An example of this
|
||
combination is Event 5, AutomaticStart_with_PassiveTcpEstablishment.
|
||
With this event, the BGP implementation signals to the BGP FSM that
|
||
the implementation is using an Automatic Start with the option to use
|
||
a Passive TCP Establishment. The Passive TCP establishment signals
|
||
that this BGP FSM will wait for the remote side to start the TCP
|
||
establishment.
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 42]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Note that only Event 1 (ManualStart) and Event 2 (ManualStop) are
|
||
mandatory administrative events. All other administrative events are
|
||
optional (Events 3-8). Each event below has a name, definition,
|
||
status (mandatory or optional), and the optional session attributes
|
||
that SHOULD be set at each stage. When generating Event 1 through
|
||
Event 8 for the BGP FSM, the conditions specified in the "Optional
|
||
Attribute Status" section are verified. If any of these conditions
|
||
are not satisfied, then the local system should log an FSM error.
|
||
|
||
The settings of optional session attributes may be implicit in some
|
||
implementations, and therefore may not be set explicitly by an
|
||
external operator action. Section 8.2.1.5 describes these implicit
|
||
settings of the optional session attributes. The administrative
|
||
states described below may also be implicit in some implementations
|
||
and not directly configurable by an external operator.
|
||
|
||
Event 1: ManualStart
|
||
|
||
Definition: Local system administrator manually starts the peer
|
||
connection.
|
||
|
||
Status: Mandatory
|
||
|
||
Optional
|
||
Attribute
|
||
Status: The PassiveTcpEstablishment attribute SHOULD be set
|
||
to FALSE.
|
||
|
||
Event 2: ManualStop
|
||
|
||
Definition: Local system administrator manually stops the peer
|
||
connection.
|
||
|
||
Status: Mandatory
|
||
|
||
Optional
|
||
Attribute
|
||
Status: No interaction with any optional attributes.
|
||
|
||
Event 3: AutomaticStart
|
||
|
||
Definition: Local system automatically starts the BGP
|
||
connection.
|
||
|
||
Status: Optional, depending on local system
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 43]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Optional
|
||
Attribute
|
||
Status: 1) The AllowAutomaticStart attribute SHOULD be set
|
||
to TRUE if this event occurs.
|
||
2) If the PassiveTcpEstablishment optional session
|
||
attribute is supported, it SHOULD be set to
|
||
FALSE.
|
||
3) If the DampPeerOscillations is supported, it
|
||
SHOULD be set to FALSE when this event occurs.
|
||
|
||
Event 4: ManualStart_with_PassiveTcpEstablishment
|
||
|
||
Definition: Local system administrator manually starts the peer
|
||
connection, but has PassiveTcpEstablishment
|
||
enabled. The PassiveTcpEstablishment optional
|
||
attribute indicates that the peer will listen prior
|
||
to establishing the connection.
|
||
|
||
Status: Optional, depending on local system
|
||
|
||
Optional
|
||
Attribute
|
||
Status: 1) The PassiveTcpEstablishment attribute SHOULD be
|
||
set to TRUE if this event occurs.
|
||
2) The DampPeerOscillations attribute SHOULD be set
|
||
to FALSE when this event occurs.
|
||
|
||
Event 5: AutomaticStart_with_PassiveTcpEstablishment
|
||
|
||
Definition: Local system automatically starts the BGP
|
||
connection with the PassiveTcpEstablishment
|
||
enabled. The PassiveTcpEstablishment optional
|
||
attribute indicates that the peer will listen prior
|
||
to establishing a connection.
|
||
|
||
Status: Optional, depending on local system
|
||
|
||
Optional
|
||
Attribute
|
||
Status: 1) The AllowAutomaticStart attribute SHOULD be set
|
||
to TRUE.
|
||
2) The PassiveTcpEstablishment attribute SHOULD be
|
||
set to TRUE.
|
||
3) If the DampPeerOscillations attribute is
|
||
supported, the DampPeerOscillations SHOULD be
|
||
set to FALSE.
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 44]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Event 6: AutomaticStart_with_DampPeerOscillations
|
||
|
||
Definition: Local system automatically starts the BGP peer
|
||
connection with peer oscillation damping enabled.
|
||
The exact method of damping persistent peer
|
||
oscillations is determined by the implementation
|
||
and is outside the scope of this document.
|
||
|
||
Status: Optional, depending on local system.
|
||
|
||
Optional
|
||
Attribute
|
||
Status: 1) The AllowAutomaticStart attribute SHOULD be set
|
||
to TRUE.
|
||
2) The DampPeerOscillations attribute SHOULD be set
|
||
to TRUE.
|
||
3) The PassiveTcpEstablishment attribute SHOULD be
|
||
set to FALSE.
|
||
|
||
Event 7: AutomaticStart_with_DampPeerOscillations_and_
|
||
PassiveTcpEstablishment
|
||
|
||
Definition: Local system automatically starts the BGP peer
|
||
connection with peer oscillation damping enabled
|
||
and PassiveTcpEstablishment enabled. The exact
|
||
method of damping persistent peer oscillations is
|
||
determined by the implementation and is outside the
|
||
scope of this document.
|
||
|
||
Status: Optional, depending on local system
|
||
|
||
Optional
|
||
Attributes
|
||
Status: 1) The AllowAutomaticStart attribute SHOULD be set
|
||
to TRUE.
|
||
2) The DampPeerOscillations attribute SHOULD be set
|
||
to TRUE.
|
||
3) The PassiveTcpEstablishment attribute SHOULD be
|
||
set to TRUE.
|
||
|
||
Event 8: AutomaticStop
|
||
|
||
Definition: Local system automatically stops the BGP
|
||
connection.
|
||
|
||
An example of an automatic stop event is exceeding
|
||
the number of prefixes for a given peer and the
|
||
local system automatically disconnecting the peer.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 45]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Status: Optional, depending on local system
|
||
|
||
Optional
|
||
Attribute
|
||
Status: 1) The AllowAutomaticStop attribute SHOULD be TRUE.
|
||
|
||
8.1.3. Timer Events
|
||
|
||
Event 9: ConnectRetryTimer_Expires
|
||
|
||
Definition: An event generated when the ConnectRetryTimer
|
||
expires.
|
||
|
||
Status: Mandatory
|
||
|
||
Event 10: HoldTimer_Expires
|
||
|
||
Definition: An event generated when the HoldTimer expires.
|
||
|
||
Status: Mandatory
|
||
|
||
Event 11: KeepaliveTimer_Expires
|
||
|
||
Definition: An event generated when the KeepaliveTimer expires.
|
||
|
||
Status: Mandatory
|
||
|
||
Event 12: DelayOpenTimer_Expires
|
||
|
||
Definition: An event generated when the DelayOpenTimer expires.
|
||
|
||
Status: Optional
|
||
|
||
Optional
|
||
Attribute
|
||
Status: If this event occurs,
|
||
1) DelayOpen attribute SHOULD be set to TRUE,
|
||
2) DelayOpenTime attribute SHOULD be supported,
|
||
3) DelayOpenTimer SHOULD be supported.
|
||
|
||
Event 13: IdleHoldTimer_Expires
|
||
|
||
Definition: An event generated when the IdleHoldTimer expires,
|
||
indicating that the BGP connection has completed
|
||
waiting for the back-off period to prevent BGP peer
|
||
oscillation.
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 46]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
The IdleHoldTimer is only used when the persistent
|
||
peer oscillation damping function is enabled by
|
||
setting the DampPeerOscillations optional attribute
|
||
to TRUE.
|
||
|
||
Implementations not implementing the persistent
|
||
peer oscillation damping function may not have the
|
||
IdleHoldTimer.
|
||
|
||
Status: Optional
|
||
|
||
Optional
|
||
Attribute
|
||
Status: If this event occurs:
|
||
1) DampPeerOscillations attribute SHOULD be set to
|
||
TRUE.
|
||
2) IdleHoldTimer SHOULD have just expired.
|
||
|
||
8.1.4. TCP Connection-Based Events
|
||
|
||
Event 14: TcpConnection_Valid
|
||
|
||
Definition: Event indicating the local system reception of a
|
||
TCP connection request with a valid source IP
|
||
address, TCP port, destination IP address, and TCP
|
||
Port. The definition of invalid source and invalid
|
||
destination IP address is determined by the
|
||
implementation.
|
||
|
||
BGP's destination port SHOULD be port 179, as
|
||
defined by IANA.
|
||
|
||
TCP connection request is denoted by the local
|
||
system receiving a TCP SYN.
|
||
|
||
Status: Optional
|
||
|
||
Optional
|
||
Attribute
|
||
Status: 1) The TrackTcpState attribute SHOULD be set to
|
||
TRUE if this event occurs.
|
||
|
||
Event 15: Tcp_CR_Invalid
|
||
|
||
Definition: Event indicating the local system reception of a
|
||
TCP connection request with either an invalid
|
||
source address or port number, or an invalid
|
||
destination address or port number.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 47]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
BGP destination port number SHOULD be 179, as
|
||
defined by IANA.
|
||
|
||
A TCP connection request occurs when the local
|
||
system receives a TCP SYN.
|
||
|
||
Status: Optional
|
||
|
||
Optional
|
||
Attribute
|
||
Status: 1) The TrackTcpState attribute should be set to
|
||
TRUE if this event occurs.
|
||
|
||
Event 16: Tcp_CR_Acked
|
||
|
||
Definition: Event indicating the local system's request to
|
||
establish a TCP connection to the remote peer.
|
||
|
||
The local system's TCP connection sent a TCP SYN,
|
||
received a TCP SYN/ACK message, and sent a TCP ACK.
|
||
|
||
Status: Mandatory
|
||
|
||
Event 17: TcpConnectionConfirmed
|
||
|
||
Definition: Event indicating that the local system has received
|
||
a confirmation that the TCP connection has been
|
||
established by the remote site.
|
||
|
||
The remote peer's TCP engine sent a TCP SYN. The
|
||
local peer's TCP engine sent a SYN, ACK message and
|
||
now has received a final ACK.
|
||
|
||
Status: Mandatory
|
||
|
||
Event 18: TcpConnectionFails
|
||
|
||
Definition: Event indicating that the local system has received
|
||
a TCP connection failure notice.
|
||
|
||
The remote BGP peer's TCP machine could have sent a
|
||
FIN. The local peer would respond with a FIN-ACK.
|
||
Another possibility is that the local peer
|
||
indicated a timeout in the TCP connection and
|
||
downed the connection.
|
||
|
||
Status: Mandatory
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 48]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
8.1.5. BGP Message-Based Events
|
||
|
||
Event 19: BGPOpen
|
||
|
||
Definition: An event is generated when a valid OPEN message has
|
||
been received.
|
||
|
||
Status: Mandatory
|
||
|
||
Optional
|
||
Attribute
|
||
Status: 1) The DelayOpen optional attribute SHOULD be set
|
||
to FALSE.
|
||
2) The DelayOpenTimer SHOULD not be running.
|
||
|
||
Event 20: BGPOpen with DelayOpenTimer running
|
||
|
||
Definition: An event is generated when a valid OPEN message has
|
||
been received for a peer that has a successfully
|
||
established transport connection and is currently
|
||
delaying the sending of a BGP open message.
|
||
|
||
Status: Optional
|
||
|
||
Optional
|
||
Attribute
|
||
Status: 1) The DelayOpen attribute SHOULD be set to TRUE.
|
||
2) The DelayOpenTimer SHOULD be running.
|
||
|
||
Event 21: BGPHeaderErr
|
||
|
||
Definition: An event is generated when a received BGP message
|
||
header is not valid.
|
||
|
||
Status: Mandatory
|
||
|
||
Event 22: BGPOpenMsgErr
|
||
|
||
Definition: An event is generated when an OPEN message has been
|
||
received with errors.
|
||
|
||
Status: Mandatory
|
||
|
||
Event 23: OpenCollisionDump
|
||
|
||
Definition: An event generated administratively when a
|
||
connection collision has been detected while
|
||
processing an incoming OPEN message and this
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 49]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
connection has been selected to be disconnected.
|
||
See Section 6.8 for more information on collision
|
||
detection.
|
||
|
||
Event 23 is an administrative action generated by
|
||
implementation logic that determines whether this
|
||
connection needs to be dropped per the rules in
|
||
Section 6.8. This event may occur if the FSM is
|
||
implemented as two linked state machines.
|
||
|
||
Status: Optional
|
||
|
||
Optional
|
||
Attribute
|
||
Status: If the state machine is to process this event in
|
||
the Established state,
|
||
1) CollisionDetectEstablishedState optional
|
||
attribute SHOULD be set to TRUE.
|
||
|
||
Please note: The OpenCollisionDump event can occur
|
||
in Idle, Connect, Active, OpenSent, and OpenConfirm
|
||
without any optional attributes being set.
|
||
|
||
Event 24: NotifMsgVerErr
|
||
|
||
Definition: An event is generated when a NOTIFICATION message
|
||
with "version error" is received.
|
||
|
||
Status: Mandatory
|
||
|
||
Event 25: NotifMsg
|
||
|
||
Definition: An event is generated when a NOTIFICATION message
|
||
is received and the error code is anything but
|
||
"version error".
|
||
|
||
Status: Mandatory
|
||
|
||
Event 26: KeepAliveMsg
|
||
|
||
Definition: An event is generated when a KEEPALIVE message is
|
||
received.
|
||
|
||
Status: Mandatory
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 50]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Event 27: UpdateMsg
|
||
|
||
Definition: An event is generated when a valid UPDATE message
|
||
is received.
|
||
|
||
Status: Mandatory
|
||
|
||
Event 28: UpdateMsgErr
|
||
|
||
Definition: An event is generated when an invalid UPDATE
|
||
message is received.
|
||
|
||
Status: Mandatory
|
||
|
||
8.2. Description of FSM
|
||
|
||
8.2.1. FSM Definition
|
||
|
||
BGP MUST maintain a separate FSM for each configured peer. Each BGP
|
||
peer paired in a potential connection will attempt to connect to the
|
||
other, unless configured to remain in the idle state, or configured
|
||
to remain passive. For the purpose of this discussion, the active or
|
||
connecting side of the TCP connection (the side of a TCP connection
|
||
sending the first TCP SYN packet) is called outgoing. The passive or
|
||
listening side (the sender of the first SYN/ACK) is called an
|
||
incoming connection. (See Section 8.2.1.1 for information on the
|
||
terms active and passive used below.)
|
||
|
||
A BGP implementation MUST connect to and listen on TCP port 179 for
|
||
incoming connections in addition to trying to connect to peers. For
|
||
each incoming connection, a state machine MUST be instantiated.
|
||
There exists a period in which the identity of the peer on the other
|
||
end of an incoming connection is known, but the BGP identifier is not
|
||
known. During this time, both an incoming and outgoing connection
|
||
may exist for the same configured peering. This is referred to as a
|
||
connection collision (see Section 6.8).
|
||
|
||
A BGP implementation will have, at most, one FSM for each configured
|
||
peering, plus one FSM for each incoming TCP connection for which the
|
||
peer has not yet been identified. Each FSM corresponds to exactly
|
||
one TCP connection.
|
||
|
||
There may be more than one connection between a pair of peers if the
|
||
connections are configured to use a different pair of IP addresses.
|
||
This is referred to as multiple "configured peerings" to the same
|
||
peer.
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 51]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
8.2.1.1. Terms "active" and "passive"
|
||
|
||
The terms active and passive have been in the Internet operator's
|
||
vocabulary for almost a decade and have proven useful. The words
|
||
active and passive have slightly different meanings when applied to a
|
||
TCP connection or a peer. There is only one active side and one
|
||
passive side to any one TCP connection, per the definition above and
|
||
the state machine below. When a BGP speaker is configured as active,
|
||
it may end up on either the active or passive side of the connection
|
||
that eventually gets established. Once the TCP connection is
|
||
completed, it doesn't matter which end was active and which was
|
||
passive. The only difference is in which side of the TCP connection
|
||
has port number 179.
|
||
|
||
8.2.1.2. FSM and Collision Detection
|
||
|
||
There is one FSM per BGP connection. When the connection collision
|
||
occurs prior to determining what peer a connection is associated
|
||
with, there may be two connections for one peer. After the
|
||
connection collision is resolved (see Section 6.8), the FSM for the
|
||
connection that is closed SHOULD be disposed.
|
||
|
||
8.2.1.3. FSM and Optional Session Attributes
|
||
|
||
Optional Session Attributes specify either attributes that act as
|
||
flags (TRUE or FALSE) or optional timers. For optional attributes
|
||
that act as flags, if the optional session attribute can be set to
|
||
TRUE on the system, the corresponding BGP FSM actions must be
|
||
supported. For example, if the following options can be set in a BGP
|
||
implementation: AutoStart and PassiveTcpEstablishment, then Events 3,
|
||
4 and 5 must be supported. If an Optional Session attribute cannot
|
||
be set to TRUE, the events supporting that set of options do not have
|
||
to be supported.
|
||
|
||
Each of the optional timers (DelayOpenTimer and IdleHoldTimer) has a
|
||
group of attributes that are:
|
||
|
||
- flag indicating support,
|
||
- Time set in Timer
|
||
- Timer.
|
||
|
||
The two optional timers show this format:
|
||
|
||
DelayOpenTimer: DelayOpen, DelayOpenTime, DelayOpenTimer
|
||
IdleHoldTimer: DampPeerOscillations, IdleHoldTime,
|
||
IdleHoldTimer
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 52]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
If the flag indicating support for an optional timer (DelayOpen or
|
||
DampPeerOscillations) cannot be set to TRUE, the timers and events
|
||
supporting that option do not have to be supported.
|
||
|
||
8.2.1.4. FSM Event Numbers
|
||
|
||
The Event numbers (1-28) utilized in this state machine description
|
||
aid in specifying the behavior of the BGP state machine.
|
||
Implementations MAY use these numbers to provide network management
|
||
information. The exact form of an FSM or the FSM events are specific
|
||
to each implementation.
|
||
|
||
8.2.1.5. FSM Actions that are Implementation Dependent
|
||
|
||
At certain points, the BGP FSM specifies that BGP initialization will
|
||
occur or that BGP resources will be deleted. The initialization of
|
||
the BGP FSM and the associated resources depend on the policy portion
|
||
of the BGP implementation. The details of these actions are outside
|
||
the scope of the FSM document.
|
||
|
||
8.2.2. Finite State Machine
|
||
|
||
Idle state:
|
||
|
||
Initially, the BGP peer FSM is in the Idle state. Hereafter, the
|
||
BGP peer FSM will be shortened to BGP FSM.
|
||
|
||
In this state, BGP FSM refuses all incoming BGP connections for
|
||
this peer. No resources are allocated to the peer. In response
|
||
to a ManualStart event (Event 1) or an AutomaticStart event (Event
|
||
3), the local system:
|
||
|
||
- initializes all BGP resources for the peer connection,
|
||
|
||
- sets ConnectRetryCounter to zero,
|
||
|
||
- starts the ConnectRetryTimer with the initial value,
|
||
|
||
- initiates a TCP connection to the other BGP peer,
|
||
|
||
- listens for a connection that may be initiated by the remote
|
||
BGP peer, and
|
||
|
||
- changes its state to Connect.
|
||
|
||
The ManualStop event (Event 2) and AutomaticStop (Event 8) event
|
||
are ignored in the Idle state.
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 53]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
In response to a ManualStart_with_PassiveTcpEstablishment event
|
||
(Event 4) or AutomaticStart_with_PassiveTcpEstablishment event
|
||
(Event 5), the local system:
|
||
|
||
- initializes all BGP resources,
|
||
|
||
- sets the ConnectRetryCounter to zero,
|
||
|
||
- starts the ConnectRetryTimer with the initial value,
|
||
|
||
- listens for a connection that may be initiated by the remote
|
||
peer, and
|
||
|
||
- changes its state to Active.
|
||
|
||
The exact value of the ConnectRetryTimer is a local matter, but it
|
||
SHOULD be sufficiently large to allow TCP initialization.
|
||
|
||
If the DampPeerOscillations attribute is set to TRUE, the
|
||
following three additional events may occur within the Idle state:
|
||
|
||
- AutomaticStart_with_DampPeerOscillations (Event 6),
|
||
|
||
- AutomaticStart_with_DampPeerOscillations_and_
|
||
PassiveTcpEstablishment (Event 7),
|
||
|
||
- IdleHoldTimer_Expires (Event 13).
|
||
|
||
Upon receiving these 3 events, the local system will use these
|
||
events to prevent peer oscillations. The method of preventing
|
||
persistent peer oscillation is outside the scope of this document.
|
||
|
||
Any other event (Events 9-12, 15-28) received in the Idle state
|
||
does not cause change in the state of the local system.
|
||
|
||
Connect State:
|
||
|
||
In this state, BGP FSM is waiting for the TCP connection to be
|
||
completed.
|
||
|
||
The start events (Events 1, 3-7) are ignored in the Connect state.
|
||
|
||
In response to a ManualStop event (Event 2), the local system:
|
||
|
||
- drops the TCP connection,
|
||
|
||
- releases all BGP resources,
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 54]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- sets ConnectRetryCounter to zero,
|
||
|
||
- stops the ConnectRetryTimer and sets ConnectRetryTimer to
|
||
zero, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
In response to the ConnectRetryTimer_Expires event (Event 9), the
|
||
local system:
|
||
|
||
- drops the TCP connection,
|
||
|
||
- restarts the ConnectRetryTimer,
|
||
|
||
- stops the DelayOpenTimer and resets the timer to zero,
|
||
|
||
- initiates a TCP connection to the other BGP peer,
|
||
|
||
- continues to listen for a connection that may be initiated by
|
||
the remote BGP peer, and
|
||
|
||
- stays in the Connect state.
|
||
|
||
If the DelayOpenTimer_Expires event (Event 12) occurs in the
|
||
Connect state, the local system:
|
||
|
||
- sends an OPEN message to its peer,
|
||
|
||
- sets the HoldTimer to a large value, and
|
||
|
||
- changes its state to OpenSent.
|
||
|
||
If the BGP FSM receives a TcpConnection_Valid event (Event 14),
|
||
the TCP connection is processed, and the connection remains in the
|
||
Connect state.
|
||
|
||
If the BGP FSM receives a Tcp_CR_Invalid event (Event 15), the
|
||
local system rejects the TCP connection, and the connection
|
||
remains in the Connect state.
|
||
|
||
If the TCP connection succeeds (Event 16 or Event 17), the local
|
||
system checks the DelayOpen attribute prior to processing. If the
|
||
DelayOpen attribute is set to TRUE, the local system:
|
||
|
||
- stops the ConnectRetryTimer (if running) and sets the
|
||
ConnectRetryTimer to zero,
|
||
|
||
- sets the DelayOpenTimer to the initial value, and
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 55]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- stays in the Connect state.
|
||
|
||
If the DelayOpen attribute is set to FALSE, the local system:
|
||
|
||
- stops the ConnectRetryTimer (if running) and sets the
|
||
ConnectRetryTimer to zero,
|
||
|
||
- completes BGP initialization
|
||
|
||
- sends an OPEN message to its peer,
|
||
|
||
- sets the HoldTimer to a large value, and
|
||
|
||
- changes its state to OpenSent.
|
||
|
||
A HoldTimer value of 4 minutes is suggested.
|
||
|
||
If the TCP connection fails (Event 18), the local system checks
|
||
the DelayOpenTimer. If the DelayOpenTimer is running, the local
|
||
system:
|
||
|
||
- restarts the ConnectRetryTimer with the initial value,
|
||
|
||
- stops the DelayOpenTimer and resets its value to zero,
|
||
|
||
- continues to listen for a connection that may be initiated by
|
||
the remote BGP peer, and
|
||
|
||
- changes its state to Active.
|
||
|
||
If the DelayOpenTimer is not running, the local system:
|
||
|
||
- stops the ConnectRetryTimer to zero,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- releases all BGP resources, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If an OPEN message is received while the DelayOpenTimer is running
|
||
(Event 20), the local system:
|
||
|
||
- stops the ConnectRetryTimer (if running) and sets the
|
||
ConnectRetryTimer to zero,
|
||
|
||
- completes the BGP initialization,
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 56]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- stops and clears the DelayOpenTimer (sets the value to zero),
|
||
|
||
- sends an OPEN message,
|
||
|
||
- sends a KEEPALIVE message,
|
||
|
||
- if the HoldTimer initial value is non-zero,
|
||
|
||
- starts the KeepaliveTimer with the initial value and
|
||
|
||
- resets the HoldTimer to the negotiated value,
|
||
|
||
else, if the HoldTimer initial value is zero,
|
||
|
||
- resets the KeepaliveTimer and
|
||
|
||
- resets the HoldTimer value to zero,
|
||
|
||
- and changes its state to OpenConfirm.
|
||
|
||
If the value of the autonomous system field is the same as the
|
||
local Autonomous System number, set the connection status to an
|
||
internal connection; otherwise it will be "external".
|
||
|
||
If BGP message header checking (Event 21) or OPEN message checking
|
||
detects an error (Event 22) (see Section 6.2), the local system:
|
||
|
||
- (optionally) If the SendNOTIFICATIONwithoutOPEN attribute is
|
||
set to TRUE, then the local system first sends a NOTIFICATION
|
||
message with the appropriate error code, and then
|
||
|
||
- stops the ConnectRetryTimer (if running) and sets the
|
||
ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If a NOTIFICATION message is received with a version error (Event
|
||
24), the local system checks the DelayOpenTimer. If the
|
||
DelayOpenTimer is running, the local system:
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 57]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- stops the ConnectRetryTimer (if running) and sets the
|
||
ConnectRetryTimer to zero,
|
||
|
||
- stops and resets the DelayOpenTimer (sets to zero),
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If the DelayOpenTimer is not running, the local system:
|
||
|
||
- stops the ConnectRetryTimer and sets the ConnectRetryTimer to
|
||
zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- performs peer oscillation damping if the DampPeerOscillations
|
||
attribute is set to True, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
In response to any other events (Events 8, 10-11, 13, 19, 23,
|
||
25-28), the local system:
|
||
|
||
- if the ConnectRetryTimer is running, stops and resets the
|
||
ConnectRetryTimer (sets to zero),
|
||
|
||
- if the DelayOpenTimer is running, stops and resets the
|
||
DelayOpenTimer (sets to zero),
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- performs peer oscillation damping if the DampPeerOscillations
|
||
attribute is set to True, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 58]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Active State:
|
||
|
||
In this state, BGP FSM is trying to acquire a peer by listening
|
||
for, and accepting, a TCP connection.
|
||
|
||
The start events (Events 1, 3-7) are ignored in the Active state.
|
||
|
||
In response to a ManualStop event (Event 2), the local system:
|
||
|
||
- If the DelayOpenTimer is running and the
|
||
SendNOTIFICATIONwithoutOPEN session attribute is set, the
|
||
local system sends a NOTIFICATION with a Cease,
|
||
|
||
- releases all BGP resources including stopping the
|
||
DelayOpenTimer
|
||
|
||
- drops the TCP connection,
|
||
|
||
- sets ConnectRetryCounter to zero,
|
||
|
||
- stops the ConnectRetryTimer and sets the ConnectRetryTimer to
|
||
zero, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
In response to a ConnectRetryTimer_Expires event (Event 9), the
|
||
local system:
|
||
|
||
- restarts the ConnectRetryTimer (with initial value),
|
||
|
||
- initiates a TCP connection to the other BGP peer,
|
||
|
||
- continues to listen for a TCP connection that may be initiated
|
||
by a remote BGP peer, and
|
||
|
||
- changes its state to Connect.
|
||
|
||
If the local system receives a DelayOpenTimer_Expires event (Event
|
||
12), the local system:
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- stops and clears the DelayOpenTimer (set to zero),
|
||
|
||
- completes the BGP initialization,
|
||
|
||
- sends the OPEN message to its remote peer,
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 59]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- sets its hold timer to a large value, and
|
||
|
||
- changes its state to OpenSent.
|
||
|
||
A HoldTimer value of 4 minutes is also suggested for this state
|
||
transition.
|
||
|
||
If the local system receives a TcpConnection_Valid event (Event
|
||
14), the local system processes the TCP connection flags and stays
|
||
in the Active state.
|
||
|
||
If the local system receives a Tcp_CR_Invalid event (Event 15),
|
||
the local system rejects the TCP connection and stays in the
|
||
Active State.
|
||
|
||
In response to the success of a TCP connection (Event 16 or Event
|
||
17), the local system checks the DelayOpen optional attribute
|
||
prior to processing.
|
||
|
||
If the DelayOpen attribute is set to TRUE, the local system:
|
||
|
||
- stops the ConnectRetryTimer and sets the ConnectRetryTimer
|
||
to zero,
|
||
|
||
- sets the DelayOpenTimer to the initial value
|
||
(DelayOpenTime), and
|
||
|
||
- stays in the Active state.
|
||
|
||
If the DelayOpen attribute is set to FALSE, the local system:
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- completes the BGP initialization,
|
||
|
||
- sends the OPEN message to its peer,
|
||
|
||
- sets its HoldTimer to a large value, and
|
||
|
||
- changes its state to OpenSent.
|
||
|
||
A HoldTimer value of 4 minutes is suggested as a "large value" for
|
||
the HoldTimer.
|
||
|
||
If the local system receives a TcpConnectionFails event (Event
|
||
18), the local system:
|
||
|
||
- restarts the ConnectRetryTimer (with the initial value),
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 60]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- stops and clears the DelayOpenTimer (sets the value to zero),
|
||
|
||
- releases all BGP resource,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- optionally performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If an OPEN message is received and the DelayOpenTimer is running
|
||
(Event 20), the local system:
|
||
|
||
- stops the ConnectRetryTimer (if running) and sets the
|
||
ConnectRetryTimer to zero,
|
||
|
||
- stops and clears the DelayOpenTimer (sets to zero),
|
||
|
||
- completes the BGP initialization,
|
||
|
||
- sends an OPEN message,
|
||
|
||
- sends a KEEPALIVE message,
|
||
|
||
- if the HoldTimer value is non-zero,
|
||
|
||
- starts the KeepaliveTimer to initial value,
|
||
|
||
- resets the HoldTimer to the negotiated value,
|
||
|
||
else if the HoldTimer is zero
|
||
|
||
- resets the KeepaliveTimer (set to zero),
|
||
|
||
- resets the HoldTimer to zero, and
|
||
|
||
- changes its state to OpenConfirm.
|
||
|
||
If the value of the autonomous system field is the same as the
|
||
local Autonomous System number, set the connection status to an
|
||
internal connection; otherwise it will be external.
|
||
|
||
If BGP message header checking (Event 21) or OPEN message checking
|
||
detects an error (Event 22) (see Section 6.2), the local system:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 61]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- (optionally) sends a NOTIFICATION message with the appropriate
|
||
error code if the SendNOTIFICATIONwithoutOPEN attribute is set
|
||
to TRUE,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If a NOTIFICATION message is received with a version error (Event
|
||
24), the local system checks the DelayOpenTimer. If the
|
||
DelayOpenTimer is running, the local system:
|
||
|
||
- stops the ConnectRetryTimer (if running) and sets the
|
||
ConnectRetryTimer to zero,
|
||
|
||
- stops and resets the DelayOpenTimer (sets to zero),
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If the DelayOpenTimer is not running, the local system:
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 62]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
In response to any other event (Events 8, 10-11, 13, 19, 23,
|
||
25-28), the local system:
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by one,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
OpenSent:
|
||
|
||
In this state, BGP FSM waits for an OPEN message from its peer.
|
||
|
||
The start events (Events 1, 3-7) are ignored in the OpenSent
|
||
state.
|
||
|
||
If a ManualStop event (Event 2) is issued in the OpenSent state,
|
||
the local system:
|
||
|
||
- sends the NOTIFICATION with a Cease,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- sets the ConnectRetryCounter to zero, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If an AutomaticStop event (Event 8) is issued in the OpenSent
|
||
state, the local system:
|
||
|
||
- sends the NOTIFICATION with a Cease,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all the BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 63]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If the HoldTimer_Expires (Event 10), the local system:
|
||
|
||
- sends a NOTIFICATION message with the error code Hold Timer
|
||
Expired,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If a TcpConnection_Valid (Event 14), Tcp_CR_Acked (Event 16), or a
|
||
TcpConnectionConfirmed event (Event 17) is received, a second TCP
|
||
connection may be in progress. This second TCP connection is
|
||
tracked per Connection Collision processing (Section 6.8) until an
|
||
OPEN message is received.
|
||
|
||
A TCP Connection Request for an Invalid port (Tcp_CR_Invalid
|
||
(Event 15)) is ignored.
|
||
|
||
If a TcpConnectionFails event (Event 18) is received, the local
|
||
system:
|
||
|
||
- closes the BGP connection,
|
||
|
||
- restarts the ConnectRetryTimer,
|
||
|
||
- continues to listen for a connection that may be initiated by
|
||
the remote BGP peer, and
|
||
|
||
- changes its state to Active.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 64]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
When an OPEN message is received, all fields are checked for
|
||
correctness. If there are no errors in the OPEN message (Event
|
||
19), the local system:
|
||
|
||
- resets the DelayOpenTimer to zero,
|
||
|
||
- sets the BGP ConnectRetryTimer to zero,
|
||
|
||
- sends a KEEPALIVE message, and
|
||
|
||
- sets a KeepaliveTimer (via the text below)
|
||
|
||
- sets the HoldTimer according to the negotiated value (see
|
||
Section 4.2),
|
||
|
||
- changes its state to OpenConfirm.
|
||
|
||
If the negotiated hold time value is zero, then the HoldTimer and
|
||
KeepaliveTimer are not started. If the value of the Autonomous
|
||
System field is the same as the local Autonomous System number,
|
||
then the connection is an "internal" connection; otherwise, it is
|
||
an "external" connection. (This will impact UPDATE processing as
|
||
described below.)
|
||
|
||
If the BGP message header checking (Event 21) or OPEN message
|
||
checking detects an error (Event 22)(see Section 6.2), the local
|
||
system:
|
||
|
||
- sends a NOTIFICATION message with the appropriate error code,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
Collision detection mechanisms (Section 6.8) need to be applied
|
||
when a valid BGP OPEN message is received (Event 19 or Event 20).
|
||
Please refer to Section 6.8 for the details of the comparison. A
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 65]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
CollisionDetectDump event occurs when the BGP implementation
|
||
determines, by means outside the scope of this document, that a
|
||
connection collision has occurred.
|
||
|
||
If a connection in the OpenSent state is determined to be the
|
||
connection that must be closed, an OpenCollisionDump (Event 23) is
|
||
signaled to the state machine. If such an event is received in
|
||
the OpenSent state, the local system:
|
||
|
||
- sends a NOTIFICATION with a Cease,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If a NOTIFICATION message is received with a version error (Event
|
||
24), the local system:
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
In response to any other event (Events 9, 11-13, 20, 25-28), the
|
||
local system:
|
||
|
||
- sends the NOTIFICATION with the Error Code Finite State
|
||
Machine Error,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 66]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
OpenConfirm State:
|
||
|
||
In this state, BGP waits for a KEEPALIVE or NOTIFICATION message.
|
||
|
||
Any start event (Events 1, 3-7) is ignored in the OpenConfirm
|
||
state.
|
||
|
||
In response to a ManualStop event (Event 2) initiated by the
|
||
operator, the local system:
|
||
|
||
- sends the NOTIFICATION message with a Cease,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- sets the ConnectRetryCounter to zero,
|
||
|
||
- sets the ConnectRetryTimer to zero, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
In response to the AutomaticStop event initiated by the system
|
||
(Event 8), the local system:
|
||
|
||
- sends the NOTIFICATION message with a Cease,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If the HoldTimer_Expires event (Event 10) occurs before a
|
||
KEEPALIVE message is received, the local system:
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 67]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- sends the NOTIFICATION message with the Error Code Hold Timer
|
||
Expired,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If the local system receives a KeepaliveTimer_Expires event (Event
|
||
11), the local system:
|
||
|
||
- sends a KEEPALIVE message,
|
||
|
||
- restarts the KeepaliveTimer, and
|
||
|
||
- remains in the OpenConfirmed state.
|
||
|
||
In the event of a TcpConnection_Valid event (Event 14), or the
|
||
success of a TCP connection (Event 16 or Event 17) while in
|
||
OpenConfirm, the local system needs to track the second
|
||
connection.
|
||
|
||
If a TCP connection is attempted with an invalid port (Event 15),
|
||
the local system will ignore the second connection attempt.
|
||
|
||
If the local system receives a TcpConnectionFails event (Event 18)
|
||
from the underlying TCP or a NOTIFICATION message (Event 25), the
|
||
local system:
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 68]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- changes its state to Idle.
|
||
|
||
If the local system receives a NOTIFICATION message with a version
|
||
error (NotifMsgVerErr (Event 24)), the local system:
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If the local system receives a valid OPEN message (BGPOpen (Event
|
||
19)), the collision detect function is processed per Section 6.8.
|
||
If this connection is to be dropped due to connection collision,
|
||
the local system:
|
||
|
||
- sends a NOTIFICATION with a Cease,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection (send TCP FIN),
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If an OPEN message is received, all fields are checked for
|
||
correctness. If the BGP message header checking (BGPHeaderErr
|
||
(Event 21)) or OPEN message checking detects an error (see Section
|
||
6.2) (BGPOpenMsgErr (Event 22)), the local system:
|
||
|
||
- sends a NOTIFICATION message with the appropriate error code,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 69]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If, during the processing of another OPEN message, the BGP
|
||
implementation determines, by a means outside the scope of this
|
||
document, that a connection collision has occurred and this
|
||
connection is to be closed, the local system will issue an
|
||
OpenCollisionDump event (Event 23). When the local system
|
||
receives an OpenCollisionDump event (Event 23), the local system:
|
||
|
||
- sends a NOTIFICATION with a Cease,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If the local system receives a KEEPALIVE message (KeepAliveMsg
|
||
(Event 26)), the local system:
|
||
|
||
- restarts the HoldTimer and
|
||
|
||
- changes its state to Established.
|
||
|
||
In response to any other event (Events 9, 12-13, 20, 27-28), the
|
||
local system:
|
||
|
||
- sends a NOTIFICATION with a code of Finite State Machine
|
||
Error,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 70]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
Established State:
|
||
|
||
In the Established state, the BGP FSM can exchange UPDATE,
|
||
NOTIFICATION, and KEEPALIVE messages with its peer.
|
||
|
||
Any Start event (Events 1, 3-7) is ignored in the Established
|
||
state.
|
||
|
||
In response to a ManualStop event (initiated by an operator)
|
||
(Event 2), the local system:
|
||
|
||
- sends the NOTIFICATION message with a Cease,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- deletes all routes associated with this connection,
|
||
|
||
- releases BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- sets the ConnectRetryCounter to zero, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
In response to an AutomaticStop event (Event 8), the local system:
|
||
|
||
- sends a NOTIFICATION with a Cease,
|
||
|
||
- sets the ConnectRetryTimer to zero
|
||
|
||
- deletes all routes associated with this connection,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 71]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
One reason for an AutomaticStop event is: A BGP receives an UPDATE
|
||
messages with a number of prefixes for a given peer such that the
|
||
total prefixes received exceeds the maximum number of prefixes
|
||
configured. The local system automatically disconnects the peer.
|
||
|
||
If the HoldTimer_Expires event occurs (Event 10), the local
|
||
system:
|
||
|
||
- sends a NOTIFICATION message with the Error Code Hold Timer
|
||
Expired,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If the KeepaliveTimer_Expires event occurs (Event 11), the local
|
||
system:
|
||
|
||
- sends a KEEPALIVE message, and
|
||
|
||
- restarts its KeepaliveTimer, unless the negotiated HoldTime
|
||
value is zero.
|
||
|
||
Each time the local system sends a KEEPALIVE or UPDATE message, it
|
||
restarts its KeepaliveTimer, unless the negotiated HoldTime value
|
||
is zero.
|
||
|
||
A TcpConnection_Valid (Event 14), received for a valid port, will
|
||
cause the second connection to be tracked.
|
||
|
||
An invalid TCP connection (Tcp_CR_Invalid event (Event 15)) will
|
||
be ignored.
|
||
|
||
In response to an indication that the TCP connection is
|
||
successfully established (Event 16 or Event 17), the second
|
||
connection SHALL be tracked until it sends an OPEN message.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 72]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
If a valid OPEN message (BGPOpen (Event 19)) is received, and if
|
||
the CollisionDetectEstablishedState optional attribute is TRUE,
|
||
the OPEN message will be checked to see if it collides (Section
|
||
6.8) with any other connection. If the BGP implementation
|
||
determines that this connection needs to be terminated, it will
|
||
process an OpenCollisionDump event (Event 23). If this connection
|
||
needs to be terminated, the local system:
|
||
|
||
- sends a NOTIFICATION with a Cease,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- deletes all routes associated with this connection,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
If the local system receives a NOTIFICATION message (Event 24 or
|
||
Event 25) or a TcpConnectionFails (Event 18) from the underlying
|
||
TCP, the local system:
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- deletes all routes associated with this connection,
|
||
|
||
- releases all the BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- changes its state to Idle.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 73]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
If the local system receives a KEEPALIVE message (Event 26), the
|
||
local system:
|
||
|
||
- restarts its HoldTimer, if the negotiated HoldTime value is
|
||
non-zero, and
|
||
|
||
- remains in the Established state.
|
||
|
||
If the local system receives an UPDATE message (Event 27), the
|
||
local system:
|
||
|
||
- processes the message,
|
||
|
||
- restarts its HoldTimer, if the negotiated HoldTime value is
|
||
non-zero, and
|
||
|
||
- remains in the Established state.
|
||
|
||
If the local system receives an UPDATE message, and the UPDATE
|
||
message error handling procedure (see Section 6.3) detects an
|
||
error (Event 28), the local system:
|
||
|
||
- sends a NOTIFICATION message with an Update error,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
- deletes all routes associated with this connection,
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
In response to any other event (Events 9, 12-13, 20-22), the local
|
||
system:
|
||
|
||
- sends a NOTIFICATION message with the Error Code Finite State
|
||
Machine Error,
|
||
|
||
- deletes all routes associated with this connection,
|
||
|
||
- sets the ConnectRetryTimer to zero,
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 74]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- releases all BGP resources,
|
||
|
||
- drops the TCP connection,
|
||
|
||
- increments the ConnectRetryCounter by 1,
|
||
|
||
- (optionally) performs peer oscillation damping if the
|
||
DampPeerOscillations attribute is set to TRUE, and
|
||
|
||
- changes its state to Idle.
|
||
|
||
9. UPDATE Message Handling
|
||
|
||
An UPDATE message may be received only in the Established state.
|
||
Receiving an UPDATE message in any other state is an error. When an
|
||
UPDATE message is received, each field is checked for validity, as
|
||
specified in Section 6.3.
|
||
|
||
If an optional non-transitive attribute is unrecognized, it is
|
||
quietly ignored. If an optional transitive attribute is
|
||
unrecognized, the Partial bit (the third high-order bit) in the
|
||
attribute flags octet is set to 1, and the attribute is retained for
|
||
propagation to other BGP speakers.
|
||
|
||
If an optional attribute is recognized and has a valid value, then,
|
||
depending on the type of the optional attribute, it is processed
|
||
locally, retained, and updated, if necessary, for possible
|
||
propagation to other BGP speakers.
|
||
|
||
If the UPDATE message contains a non-empty WITHDRAWN ROUTES field,
|
||
the previously advertised routes, whose destinations (expressed as IP
|
||
prefixes) are contained in this field, SHALL be removed from the
|
||
Adj-RIB-In. This BGP speaker SHALL run its Decision Process because
|
||
the previously advertised route is no longer available for use.
|
||
|
||
If the UPDATE message contains a feasible route, the Adj-RIB-In will
|
||
be updated with this route as follows: if the NLRI of the new route
|
||
is identical to the one the route currently has stored in the Adj-
|
||
RIB-In, then the new route SHALL replace the older route in the Adj-
|
||
RIB-In, thus implicitly withdrawing the older route from service.
|
||
Otherwise, if the Adj-RIB-In has no route with NLRI identical to the
|
||
new route, the new route SHALL be placed in the Adj-RIB-In.
|
||
|
||
Once the BGP speaker updates the Adj-RIB-In, the speaker SHALL run
|
||
its Decision Process.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 75]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
9.1. Decision Process
|
||
|
||
The Decision Process selects routes for subsequent advertisement by
|
||
applying the policies in the local Policy Information Base (PIB) to
|
||
the routes stored in its Adj-RIBs-In. The output of the Decision
|
||
Process is the set of routes that will be advertised to peers; the
|
||
selected routes will be stored in the local speaker's Adj-RIBs-Out,
|
||
according to policy.
|
||
|
||
The BGP Decision Process described here is conceptual, and does not
|
||
have to be implemented precisely as described, as long as the
|
||
implementations support the described functionality and they exhibit
|
||
the same externally visible behavior.
|
||
|
||
The selection process is formalized by defining a function that takes
|
||
the attribute of a given route as an argument and returns either (a)
|
||
a non-negative integer denoting the degree of preference for the
|
||
route, or (b) a value denoting that this route is ineligible to be
|
||
installed in Loc-RIB and will be excluded from the next phase of
|
||
route selection.
|
||
|
||
The function that calculates the degree of preference for a given
|
||
route SHALL NOT use any of the following as its inputs: the existence
|
||
of other routes, the non-existence of other routes, or the path
|
||
attributes of other routes. Route selection then consists of the
|
||
individual application of the degree of preference function to each
|
||
feasible route, followed by the choice of the one with the highest
|
||
degree of preference.
|
||
|
||
The Decision Process operates on routes contained in the Adj-RIBs-In,
|
||
and is responsible for:
|
||
|
||
- selection of routes to be used locally by the speaker
|
||
|
||
- selection of routes to be advertised to other BGP peers
|
||
|
||
- route aggregation and route information reduction
|
||
|
||
The Decision Process takes place in three distinct phases, each
|
||
triggered by a different event:
|
||
|
||
a) Phase 1 is responsible for calculating the degree of preference
|
||
for each route received from a peer.
|
||
|
||
b) Phase 2 is invoked on completion of phase 1. It is responsible
|
||
for choosing the best route out of all those available for each
|
||
distinct destination, and for installing each chosen route into
|
||
the Loc-RIB.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 76]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
c) Phase 3 is invoked after the Loc-RIB has been modified. It is
|
||
responsible for disseminating routes in the Loc-RIB to each
|
||
peer, according to the policies contained in the PIB. Route
|
||
aggregation and information reduction can optionally be
|
||
performed within this phase.
|
||
|
||
9.1.1. Phase 1: Calculation of Degree of Preference
|
||
|
||
The Phase 1 decision function is invoked whenever the local BGP
|
||
speaker receives, from a peer, an UPDATE message that advertises a
|
||
new route, a replacement route, or withdrawn routes.
|
||
|
||
The Phase 1 decision function is a separate process,f which completes
|
||
when it has no further work to do.
|
||
|
||
The Phase 1 decision function locks an Adj-RIB-In prior to operating
|
||
on any route contained within it, and unlocks it after operating on
|
||
all new or unfeasible routes contained within it.
|
||
|
||
For each newly received or replacement feasible route, the local BGP
|
||
speaker determines a degree of preference as follows:
|
||
|
||
If the route is learned from an internal peer, either the value of
|
||
the LOCAL_PREF attribute is taken as the degree of preference, or
|
||
the local system computes the degree of preference of the route
|
||
based on preconfigured policy information. Note that the latter
|
||
may result in formation of persistent routing loops.
|
||
|
||
If the route is learned from an external peer, then the local BGP
|
||
speaker computes the degree of preference based on preconfigured
|
||
policy information. If the return value indicates the route is
|
||
ineligible, the route MAY NOT serve as an input to the next phase
|
||
of route selection; otherwise, the return value MUST be used as
|
||
the LOCAL_PREF value in any IBGP readvertisement.
|
||
|
||
The exact nature of this policy information, and the computation
|
||
involved, is a local matter.
|
||
|
||
9.1.2. Phase 2: Route Selection
|
||
|
||
The Phase 2 decision function is invoked on completion of Phase 1.
|
||
The Phase 2 function is a separate process, which completes when it
|
||
has no further work to do. The Phase 2 process considers all routes
|
||
that are eligible in the Adj-RIBs-In.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 77]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
The Phase 2 decision function is blocked from running while the Phase
|
||
3 decision function is in process. The Phase 2 function locks all
|
||
Adj-RIBs-In prior to commencing its function, and unlocks them on
|
||
completion.
|
||
|
||
If the NEXT_HOP attribute of a BGP route depicts an address that is
|
||
not resolvable, or if it would become unresolvable if the route was
|
||
installed in the routing table, the BGP route MUST be excluded from
|
||
the Phase 2 decision function.
|
||
|
||
If the AS_PATH attribute of a BGP route contains an AS loop, the BGP
|
||
route should be excluded from the Phase 2 decision function. AS loop
|
||
detection is done by scanning the full AS path (as specified in the
|
||
AS_PATH attribute), and checking that the autonomous system number of
|
||
the local system does not appear in the AS path. Operations of a BGP
|
||
speaker that is configured to accept routes with its own autonomous
|
||
system number in the AS path are outside the scope of this document.
|
||
|
||
It is critical that BGP speakers within an AS do not make conflicting
|
||
decisions regarding route selection that would cause forwarding loops
|
||
to occur.
|
||
|
||
For each set of destinations for which a feasible route exists in the
|
||
Adj-RIBs-In, the local BGP speaker identifies the route that has:
|
||
|
||
a) the highest degree of preference of any route to the same set
|
||
of destinations, or
|
||
|
||
b) is the only route to that destination, or
|
||
|
||
c) is selected as a result of the Phase 2 tie breaking rules
|
||
specified in Section 9.1.2.2.
|
||
|
||
The local speaker SHALL then install that route in the Loc-RIB,
|
||
replacing any route to the same destination that is currently being
|
||
held in the Loc-RIB. When the new BGP route is installed in the
|
||
Routing Table, care must be taken to ensure that existing routes to
|
||
the same destination that are now considered invalid are removed from
|
||
the Routing Table. Whether the new BGP route replaces an existing
|
||
non-BGP route in the Routing Table depends on the policy configured
|
||
on the BGP speaker.
|
||
|
||
The local speaker MUST determine the immediate next-hop address from
|
||
the NEXT_HOP attribute of the selected route (see Section 5.1.3). If
|
||
either the immediate next-hop or the IGP cost to the NEXT_HOP (where
|
||
the NEXT_HOP is resolved through an IGP route) changes, Phase 2 Route
|
||
Selection MUST be performed again.
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 78]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Notice that even though BGP routes do not have to be installed in the
|
||
Routing Table with the immediate next-hop(s), implementations MUST
|
||
take care that, before any packets are forwarded along a BGP route,
|
||
its associated NEXT_HOP address is resolved to the immediate
|
||
(directly connected) next-hop address, and that this address (or
|
||
multiple addresses) is finally used for actual packet forwarding.
|
||
|
||
Unresolvable routes SHALL be removed from the Loc-RIB and the routing
|
||
table. However, corresponding unresolvable routes SHOULD be kept in
|
||
the Adj-RIBs-In (in case they become resolvable).
|
||
|
||
9.1.2.1. Route Resolvability Condition
|
||
|
||
As indicated in Section 9.1.2, BGP speakers SHOULD exclude
|
||
unresolvable routes from the Phase 2 decision. This ensures that
|
||
only valid routes are installed in Loc-RIB and the Routing Table.
|
||
|
||
The route resolvability condition is defined as follows:
|
||
|
||
1) A route Rte1, referencing only the intermediate network
|
||
address, is considered resolvable if the Routing Table contains
|
||
at least one resolvable route Rte2 that matches Rte1's
|
||
intermediate network address and is not recursively resolved
|
||
(directly or indirectly) through Rte1. If multiple matching
|
||
routes are available, only the longest matching route SHOULD be
|
||
considered.
|
||
|
||
2) Routes referencing interfaces (with or without intermediate
|
||
addresses) are considered resolvable if the state of the
|
||
referenced interface is up and if IP processing is enabled on
|
||
this interface.
|
||
|
||
BGP routes do not refer to interfaces, but can be resolved through
|
||
the routes in the Routing Table that can be of both types (those that
|
||
specify interfaces or those that do not). IGP routes and routes to
|
||
directly connected networks are expected to specify the outbound
|
||
interface. Static routes can specify the outbound interface, the
|
||
intermediate address, or both.
|
||
|
||
Note that a BGP route is considered unresolvable in a situation where
|
||
the BGP speaker's Routing Table contains no route matching the BGP
|
||
route's NEXT_HOP. Mutually recursive routes (routes resolving each
|
||
other or themselves) also fail the resolvability check.
|
||
|
||
It is also important that implementations do not consider feasible
|
||
routes that would become unresolvable if they were installed in the
|
||
Routing Table, even if their NEXT_HOPs are resolvable using the
|
||
current contents of the Routing Table (an example of such routes
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 79]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
would be mutually recursive routes). This check ensures that a BGP
|
||
speaker does not install routes in the Routing Table that will be
|
||
removed and not used by the speaker. Therefore, in addition to local
|
||
Routing Table stability, this check also improves behavior of the
|
||
protocol in the network.
|
||
|
||
Whenever a BGP speaker identifies a route that fails the
|
||
resolvability check because of mutual recursion, an error message
|
||
SHOULD be logged.
|
||
|
||
9.1.2.2. Breaking Ties (Phase 2)
|
||
|
||
In its Adj-RIBs-In, a BGP speaker may have several routes to the same
|
||
destination that have the same degree of preference. The local
|
||
speaker can select only one of these routes for inclusion in the
|
||
associated Loc-RIB. The local speaker considers all routes with the
|
||
same degrees of preference, both those received from internal peers,
|
||
and those received from external peers.
|
||
|
||
The following tie-breaking procedure assumes that, for each candidate
|
||
route, all the BGP speakers within an autonomous system can ascertain
|
||
the cost of a path (interior distance) to the address depicted by the
|
||
NEXT_HOP attribute of the route, and follow the same route selection
|
||
algorithm.
|
||
|
||
The tie-breaking algorithm begins by considering all equally
|
||
preferable routes to the same destination, and then selects routes to
|
||
be removed from consideration. The algorithm terminates as soon as
|
||
only one route remains in consideration. The criteria MUST be
|
||
applied in the order specified.
|
||
|
||
Several of the criteria are described using pseudo-code. Note that
|
||
the pseudo-code shown was chosen for clarity, not efficiency. It is
|
||
not intended to specify any particular implementation. BGP
|
||
implementations MAY use any algorithm that produces the same results
|
||
as those described here.
|
||
|
||
a) Remove from consideration all routes that are not tied for
|
||
having the smallest number of AS numbers present in their
|
||
AS_PATH attributes. Note that when counting this number, an
|
||
AS_SET counts as 1, no matter how many ASes are in the set.
|
||
|
||
b) Remove from consideration all routes that are not tied for
|
||
having the lowest Origin number in their Origin attribute.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 80]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
c) Remove from consideration routes with less-preferred
|
||
MULTI_EXIT_DISC attributes. MULTI_EXIT_DISC is only comparable
|
||
between routes learned from the same neighboring AS (the
|
||
neighboring AS is determined from the AS_PATH attribute).
|
||
Routes that do not have the MULTI_EXIT_DISC attribute are
|
||
considered to have the lowest possible MULTI_EXIT_DISC value.
|
||
|
||
This is also described in the following procedure:
|
||
|
||
for m = all routes still under consideration
|
||
for n = all routes still under consideration
|
||
if (neighborAS(m) == neighborAS(n)) and (MED(n) < MED(m))
|
||
remove route m from consideration
|
||
|
||
In the pseudo-code above, MED(n) is a function that returns the
|
||
value of route n's MULTI_EXIT_DISC attribute. If route n has
|
||
no MULTI_EXIT_DISC attribute, the function returns the lowest
|
||
possible MULTI_EXIT_DISC value (i.e., 0).
|
||
|
||
Similarly, neighborAS(n) is a function that returns the
|
||
neighbor AS from which the route was received. If the route is
|
||
learned via IBGP, and the other IBGP speaker didn't originate
|
||
the route, it is the neighbor AS from which the other IBGP
|
||
speaker learned the route. If the route is learned via IBGP,
|
||
and the other IBGP speaker either (a) originated the route, or
|
||
(b) created the route by aggregation and the AS_PATH attribute
|
||
of the aggregate route is either empty or begins with an
|
||
AS_SET, it is the local AS.
|
||
|
||
If a MULTI_EXIT_DISC attribute is removed before re-advertising
|
||
a route into IBGP, then comparison based on the received EBGP
|
||
MULTI_EXIT_DISC attribute MAY still be performed. If an
|
||
implementation chooses to remove MULTI_EXIT_DISC, then the
|
||
optional comparison on MULTI_EXIT_DISC, if performed, MUST be
|
||
performed only among EBGP-learned routes. The best EBGP-
|
||
learned route may then be compared with IBGP-learned routes
|
||
after the removal of the MULTI_EXIT_DISC attribute. If
|
||
MULTI_EXIT_DISC is removed from a subset of EBGP-learned
|
||
routes, and the selected "best" EBGP-learned route will not
|
||
have MULTI_EXIT_DISC removed, then the MULTI_EXIT_DISC must be
|
||
used in the comparison with IBGP-learned routes. For IBGP-
|
||
learned routes, the MULTI_EXIT_DISC MUST be used in route
|
||
comparisons that reach this step in the Decision Process.
|
||
Including the MULTI_EXIT_DISC of an EBGP-learned route in the
|
||
comparison with an IBGP-learned route, then removing the
|
||
MULTI_EXIT_DISC attribute, and advertising the route has been
|
||
proven to cause route loops.
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 81]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
d) If at least one of the candidate routes was received via EBGP,
|
||
remove from consideration all routes that were received via
|
||
IBGP.
|
||
|
||
e) Remove from consideration any routes with less-preferred
|
||
interior cost. The interior cost of a route is determined by
|
||
calculating the metric to the NEXT_HOP for the route using the
|
||
Routing Table. If the NEXT_HOP hop for a route is reachable,
|
||
but no cost can be determined, then this step should be skipped
|
||
(equivalently, consider all routes to have equal costs).
|
||
|
||
This is also described in the following procedure.
|
||
|
||
for m = all routes still under consideration
|
||
for n = all routes in still under consideration
|
||
if (cost(n) is lower than cost(m))
|
||
remove m from consideration
|
||
|
||
In the pseudo-code above, cost(n) is a function that returns
|
||
the cost of the path (interior distance) to the address given
|
||
in the NEXT_HOP attribute of the route.
|
||
|
||
f) Remove from consideration all routes other than the route that
|
||
was advertised by the BGP speaker with the lowest BGP
|
||
Identifier value.
|
||
|
||
g) Prefer the route received from the lowest peer address.
|
||
|
||
9.1.3. Phase 3: Route Dissemination
|
||
|
||
The Phase 3 decision function is invoked on completion of Phase 2, or
|
||
when any of the following events occur:
|
||
|
||
a) when routes in the Loc-RIB to local destinations have changed
|
||
|
||
b) when locally generated routes learned by means outside of BGP
|
||
have changed
|
||
|
||
c) when a new BGP speaker connection has been established
|
||
|
||
The Phase 3 function is a separate process that completes when it has
|
||
no further work to do. The Phase 3 Routing Decision function is
|
||
blocked from running while the Phase 2 decision function is in
|
||
process.
|
||
|
||
All routes in the Loc-RIB are processed into Adj-RIBs-Out according
|
||
to configured policy. This policy MAY exclude a route in the Loc-RIB
|
||
from being installed in a particular Adj-RIB-Out. A route SHALL NOT
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 82]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
be installed in the Adj-Rib-Out unless the destination, and NEXT_HOP
|
||
described by this route, may be forwarded appropriately by the
|
||
Routing Table. If a route in Loc-RIB is excluded from a particular
|
||
Adj-RIB-Out, the previously advertised route in that Adj-RIB-Out MUST
|
||
be withdrawn from service by means of an UPDATE message (see 9.2).
|
||
|
||
Route aggregation and information reduction techniques (see Section
|
||
9.2.2.1) may optionally be applied.
|
||
|
||
Any local policy that results in routes being added to an Adj-RIB-Out
|
||
without also being added to the local BGP speaker's forwarding table
|
||
is outside the scope of this document.
|
||
|
||
When the updating of the Adj-RIBs-Out and the Routing Table is
|
||
complete, the local BGP speaker runs the Update-Send process of 9.2.
|
||
|
||
9.1.4. Overlapping Routes
|
||
|
||
A BGP speaker may transmit routes with overlapping Network Layer
|
||
Reachability Information (NLRI) to another BGP speaker. NLRI overlap
|
||
occurs when a set of destinations are identified in non-matching
|
||
multiple routes. Because BGP encodes NLRI using IP prefixes, overlap
|
||
will always exhibit subset relationships. A route describing a
|
||
smaller set of destinations (a longer prefix) is said to be more
|
||
specific than a route describing a larger set of destinations (a
|
||
shorter prefix); similarly, a route describing a larger set of
|
||
destinations is said to be less specific than a route describing a
|
||
smaller set of destinations.
|
||
|
||
The precedence relationship effectively decomposes less specific
|
||
routes into two parts:
|
||
|
||
- a set of destinations described only by the less specific route,
|
||
and
|
||
|
||
- a set of destinations described by the overlap of the less
|
||
specific and the more specific routes
|
||
|
||
The set of destinations described by the overlap represents a portion
|
||
of the less specific route that is feasible, but is not currently in
|
||
use. If a more specific route is later withdrawn, the set of
|
||
destinations described by the overlap will still be reachable using
|
||
the less specific route.
|
||
|
||
If a BGP speaker receives overlapping routes, the Decision Process
|
||
MUST consider both routes based on the configured acceptance policy.
|
||
If both a less and a more specific route are accepted, then the
|
||
Decision Process MUST install, in Loc-RIB, either both the less and
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 83]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
the more specific routes or aggregate the two routes and install, in
|
||
Loc-RIB, the aggregated route, provided that both routes have the
|
||
same value of the NEXT_HOP attribute.
|
||
|
||
If a BGP speaker chooses to aggregate, then it SHOULD either include
|
||
all ASes used to form the aggregate in an AS_SET, or add the
|
||
ATOMIC_AGGREGATE attribute to the route. This attribute is now
|
||
primarily informational. With the elimination of IP routing
|
||
protocols that do not support classless routing, and the elimination
|
||
of router and host implementations that do not support classless
|
||
routing, there is no longer a need to de-aggregate. Routes SHOULD
|
||
NOT be de-aggregated. In particular, a route that carries the
|
||
ATOMIC_AGGREGATE attribute MUST NOT be de-aggregated. That is, the
|
||
NLRI of this route cannot be more specific. Forwarding along such a
|
||
route does not guarantee that IP packets will actually traverse only
|
||
ASes listed in the AS_PATH attribute of the route.
|
||
|
||
9.2. Update-Send Process
|
||
|
||
The Update-Send process is responsible for advertising UPDATE
|
||
messages to all peers. For example, it distributes the routes chosen
|
||
by the Decision Process to other BGP speakers, which may be located
|
||
in either the same autonomous system or a neighboring autonomous
|
||
system.
|
||
|
||
When a BGP speaker receives an UPDATE message from an internal peer,
|
||
the receiving BGP speaker SHALL NOT re-distribute the routing
|
||
information contained in that UPDATE message to other internal peers
|
||
(unless the speaker acts as a BGP Route Reflector [RFC2796]).
|
||
|
||
As part of Phase 3 of the route selection process, the BGP speaker
|
||
has updated its Adj-RIBs-Out. All newly installed routes and all
|
||
newly unfeasible routes for which there is no replacement route SHALL
|
||
be advertised to its peers by means of an UPDATE message.
|
||
|
||
A BGP speaker SHOULD NOT advertise a given feasible BGP route from
|
||
its Adj-RIB-Out if it would produce an UPDATE message containing the
|
||
same BGP route as was previously advertised.
|
||
|
||
Any routes in the Loc-RIB marked as unfeasible SHALL be removed.
|
||
Changes to the reachable destinations within its own autonomous
|
||
system SHALL also be advertised in an UPDATE message.
|
||
|
||
If, due to the limits on the maximum size of an UPDATE message (see
|
||
Section 4), a single route doesn't fit into the message, the BGP
|
||
speaker MUST not advertise the route to its peers and MAY choose to
|
||
log an error locally.
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 84]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
9.2.1. Controlling Routing Traffic Overhead
|
||
|
||
The BGP protocol constrains the amount of routing traffic (that is,
|
||
UPDATE messages), in order to limit both the link bandwidth needed to
|
||
advertise UPDATE messages and the processing power needed by the
|
||
Decision Process to digest the information contained in the UPDATE
|
||
messages.
|
||
|
||
9.2.1.1. Frequency of Route Advertisement
|
||
|
||
The parameter MinRouteAdvertisementIntervalTimer determines the
|
||
minimum amount of time that must elapse between an advertisement
|
||
and/or withdrawal of routes to a particular destination by a BGP
|
||
speaker to a peer. This rate limiting procedure applies on a per-
|
||
destination basis, although the value of
|
||
MinRouteAdvertisementIntervalTimer is set on a per BGP peer basis.
|
||
|
||
Two UPDATE messages sent by a BGP speaker to a peer that advertise
|
||
feasible routes and/or withdrawal of unfeasible routes to some common
|
||
set of destinations MUST be separated by at least
|
||
MinRouteAdvertisementIntervalTimer. This can only be achieved by
|
||
keeping a separate timer for each common set of destinations. This
|
||
would be unwarranted overhead. Any technique that ensures that the
|
||
interval between two UPDATE messages sent from a BGP speaker to a
|
||
peer that advertise feasible routes and/or withdrawal of unfeasible
|
||
routes to some common set of destinations will be at least
|
||
MinRouteAdvertisementIntervalTimer, and will also ensure that a
|
||
constant upper bound on the interval is acceptable.
|
||
|
||
Since fast convergence is needed within an autonomous system, either
|
||
(a) the MinRouteAdvertisementIntervalTimer used for internal peers
|
||
SHOULD be shorter than the MinRouteAdvertisementIntervalTimer used
|
||
for external peers, or (b) the procedure describe in this section
|
||
SHOULD NOT apply to routes sent to internal peers.
|
||
|
||
This procedure does not limit the rate of route selection, but only
|
||
the rate of route advertisement. If new routes are selected multiple
|
||
times while awaiting the expiration of
|
||
MinRouteAdvertisementIntervalTimer, the last route selected SHALL be
|
||
advertised at the end of MinRouteAdvertisementIntervalTimer.
|
||
|
||
9.2.1.2. Frequency of Route Origination
|
||
|
||
The parameter MinASOriginationIntervalTimer determines the minimum
|
||
amount of time that must elapse between successive advertisements of
|
||
UPDATE messages that report changes within the advertising BGP
|
||
speaker's own autonomous systems.
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 85]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
9.2.2. Efficient Organization of Routing Information
|
||
|
||
Having selected the routing information it will advertise, a BGP
|
||
speaker may avail itself of several methods to organize this
|
||
information in an efficient manner.
|
||
|
||
9.2.2.1. Information Reduction
|
||
|
||
Information reduction may imply a reduction in granularity of policy
|
||
control - after information is collapsed, the same policies will
|
||
apply to all destinations and paths in the equivalence class.
|
||
|
||
The Decision Process may optionally reduce the amount of information
|
||
that it will place in the Adj-RIBs-Out by any of the following
|
||
methods:
|
||
|
||
a) Network Layer Reachability Information (NLRI):
|
||
|
||
Destination IP addresses can be represented as IP address
|
||
prefixes. In cases where there is a correspondence between the
|
||
address structure and the systems under control of an
|
||
autonomous system administrator, it will be possible to reduce
|
||
the size of the NLRI carried in the UPDATE messages.
|
||
|
||
b) AS_PATHs:
|
||
|
||
AS path information can be represented as ordered AS_SEQUENCEs
|
||
or unordered AS_SETs. AS_SETs are used in the route
|
||
aggregation algorithm described in Section 9.2.2.2. They
|
||
reduce the size of the AS_PATH information by listing each AS
|
||
number only once, regardless of how many times it may have
|
||
appeared in multiple AS_PATHs that were aggregated.
|
||
|
||
An AS_SET implies that the destinations listed in the NLRI can
|
||
be reached through paths that traverse at least some of the
|
||
constituent autonomous systems. AS_SETs provide sufficient
|
||
information to avoid routing information looping; however,
|
||
their use may prune potentially feasible paths because such
|
||
paths are no longer listed individually in the form of
|
||
AS_SEQUENCEs. In practice, this is not likely to be a problem
|
||
because once an IP packet arrives at the edge of a group of
|
||
autonomous systems, the BGP speaker is likely to have more
|
||
detailed path information and can distinguish individual paths
|
||
from destinations.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 86]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
9.2.2.2. Aggregating Routing Information
|
||
|
||
Aggregation is the process of combining the characteristics of
|
||
several different routes in such a way that a single route can be
|
||
advertised. Aggregation can occur as part of the Decision Process to
|
||
reduce the amount of routing information that will be placed in the
|
||
Adj-RIBs-Out.
|
||
|
||
Aggregation reduces the amount of information that a BGP speaker must
|
||
store and exchange with other BGP speakers. Routes can be aggregated
|
||
by applying the following procedure, separately, to path attributes
|
||
of the same type and to the Network Layer Reachability Information.
|
||
|
||
Routes that have different MULTI_EXIT_DISC attributes SHALL NOT be
|
||
aggregated.
|
||
|
||
If the aggregated route has an AS_SET as the first element in its
|
||
AS_PATH attribute, then the router that originates the route SHOULD
|
||
NOT advertise the MULTI_EXIT_DISC attribute with this route.
|
||
|
||
Path attributes that have different type codes cannot be aggregated
|
||
together. Path attributes of the same type code may be aggregated,
|
||
according to the following rules:
|
||
|
||
NEXT_HOP:
|
||
When aggregating routes that have different NEXT_HOP
|
||
attributes, the NEXT_HOP attribute of the aggregated route
|
||
SHALL identify an interface on the BGP speaker that performs
|
||
the aggregation.
|
||
|
||
ORIGIN attribute:
|
||
If at least one route among routes that are aggregated has
|
||
ORIGIN with the value INCOMPLETE, then the aggregated route
|
||
MUST have the ORIGIN attribute with the value INCOMPLETE.
|
||
Otherwise, if at least one route among routes that are
|
||
aggregated has ORIGIN with the value EGP, then the aggregated
|
||
route MUST have the ORIGIN attribute with the value EGP. In
|
||
all other cases,, the value of the ORIGIN attribute of the
|
||
aggregated route is IGP.
|
||
|
||
AS_PATH attribute:
|
||
If routes to be aggregated have identical AS_PATH attributes,
|
||
then the aggregated route has the same AS_PATH attribute as
|
||
each individual route.
|
||
|
||
For the purpose of aggregating AS_PATH attributes, we model
|
||
each AS within the AS_PATH attribute as a tuple <type, value>,
|
||
where "type" identifies a type of the path segment the AS
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 87]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
belongs to (e.g., AS_SEQUENCE, AS_SET), and "value" identifies
|
||
the AS number. If the routes to be aggregated have different
|
||
AS_PATH attributes, then the aggregated AS_PATH attribute SHALL
|
||
satisfy all of the following conditions:
|
||
|
||
- all tuples of type AS_SEQUENCE in the aggregated AS_PATH
|
||
SHALL appear in all of the AS_PATHs in the initial set of
|
||
routes to be aggregated.
|
||
|
||
- all tuples of type AS_SET in the aggregated AS_PATH SHALL
|
||
appear in at least one of the AS_PATHs in the initial set
|
||
(they may appear as either AS_SET or AS_SEQUENCE types).
|
||
|
||
- for any tuple X of type AS_SEQUENCE in the aggregated
|
||
AS_PATH, which precedes tuple Y in the aggregated AS_PATH,
|
||
X precedes Y in each AS_PATH in the initial set, which
|
||
contains Y, regardless of the type of Y.
|
||
|
||
- No tuple of type AS_SET with the same value SHALL appear
|
||
more than once in the aggregated AS_PATH.
|
||
|
||
- Multiple tuples of type AS_SEQUENCE with the same value may
|
||
appear in the aggregated AS_PATH only when adjacent to
|
||
another tuple of the same type and value.
|
||
|
||
An implementation may choose any algorithm that conforms to
|
||
these rules. At a minimum, a conformant implementation SHALL
|
||
be able to perform the following algorithm that meets all of
|
||
the above conditions:
|
||
|
||
- determine the longest leading sequence of tuples (as
|
||
defined above) common to all the AS_PATH attributes of the
|
||
routes to be aggregated. Make this sequence the leading
|
||
sequence of the aggregated AS_PATH attribute.
|
||
|
||
- set the type of the rest of the tuples from the AS_PATH
|
||
attributes of the routes to be aggregated to AS_SET, and
|
||
append them to the aggregated AS_PATH attribute.
|
||
|
||
- if the aggregated AS_PATH has more than one tuple with the
|
||
same value (regardless of tuple's type), eliminate all but
|
||
one such tuple by deleting tuples of the type AS_SET from
|
||
the aggregated AS_PATH attribute.
|
||
|
||
- for each pair of adjacent tuples in the aggregated AS_PATH,
|
||
if both tuples have the same type, merge them together, as
|
||
long as doing so will not cause a segment with a length
|
||
greater than 255 to be generated.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 88]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Appendix F, Section F.6 presents another algorithm that
|
||
satisfies the conditions and allows for more complex policy
|
||
configurations.
|
||
|
||
ATOMIC_AGGREGATE:
|
||
If at least one of the routes to be aggregated has
|
||
ATOMIC_AGGREGATE path attribute, then the aggregated route
|
||
SHALL have this attribute as well.
|
||
|
||
AGGREGATOR:
|
||
Any AGGREGATOR attributes from the routes to be aggregated MUST
|
||
NOT be included in the aggregated route. The BGP speaker
|
||
performing the route aggregation MAY attach a new AGGREGATOR
|
||
attribute (see Section 5.1.7).
|
||
|
||
9.3. Route Selection Criteria
|
||
|
||
Generally, additional rules for comparing routes among several
|
||
alternatives are outside the scope of this document. There are two
|
||
exceptions:
|
||
|
||
- If the local AS appears in the AS path of the new route being
|
||
considered, then that new route cannot be viewed as better than
|
||
any other route (provided that the speaker is configured to
|
||
accept such routes). If such a route were ever used, a routing
|
||
loop could result.
|
||
|
||
- In order to achieve a successful distributed operation, only
|
||
routes with a likelihood of stability can be chosen. Thus, an
|
||
AS SHOULD avoid using unstable routes, and it SHOULD NOT make
|
||
rapid, spontaneous changes to its choice of route. Quantifying
|
||
the terms "unstable" and "rapid" (from the previous sentence)
|
||
will require experience, but the principle is clear. Routes
|
||
that are unstable can be "penalized" (e.g., by using the
|
||
procedures described in [RFC2439]).
|
||
|
||
9.4. Originating BGP routes
|
||
|
||
A BGP speaker may originate BGP routes by injecting routing
|
||
information acquired by some other means (e.g., via an IGP) into BGP.
|
||
A BGP speaker that originates BGP routes assigns the degree of
|
||
preference (e.g., according to local configuration) to these routes
|
||
by passing them through the Decision Process (see Section 9.1).
|
||
These routes MAY also be distributed to other BGP speakers within the
|
||
local AS as part of the update process (see Section 9.2). The
|
||
decision of whether to distribute non-BGP acquired routes within an
|
||
AS via BGP depends on the environment within the AS (e.g., type of
|
||
IGP) and SHOULD be controlled via configuration.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 89]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
10. BGP Timers
|
||
|
||
BGP employs five timers: ConnectRetryTimer (see Section 8), HoldTimer
|
||
(see Section 4.2), KeepaliveTimer (see Section 8),
|
||
MinASOriginationIntervalTimer (see Section 9.2.1.2), and
|
||
MinRouteAdvertisementIntervalTimer (see Section 9.2.1.1).
|
||
|
||
Two optional timers MAY be supported: DelayOpenTimer, IdleHoldTimer
|
||
by BGP (see Section 8). Section 8 describes their use. The full
|
||
operation of these optional timers is outside the scope of this
|
||
document.
|
||
|
||
ConnectRetryTime is a mandatory FSM attribute that stores the initial
|
||
value for the ConnectRetryTimer. The suggested default value for the
|
||
ConnectRetryTime is 120 seconds.
|
||
|
||
HoldTime is a mandatory FSM attribute that stores the initial value
|
||
for the HoldTimer. The suggested default value for the HoldTime is
|
||
90 seconds.
|
||
|
||
During some portions of the state machine (see Section 8), the
|
||
HoldTimer is set to a large value. The suggested default for this
|
||
large value is 4 minutes.
|
||
|
||
The KeepaliveTime is a mandatory FSM attribute that stores the
|
||
initial value for the KeepaliveTimer. The suggested default value
|
||
for the KeepaliveTime is 1/3 of the HoldTime.
|
||
|
||
The suggested default value for the MinASOriginationIntervalTimer is
|
||
15 seconds.
|
||
|
||
The suggested default value for the
|
||
MinRouteAdvertisementIntervalTimer on EBGP connections is 30 seconds.
|
||
|
||
The suggested default value for the
|
||
MinRouteAdvertisementIntervalTimer on IBGP connections is 5 seconds.
|
||
|
||
An implementation of BGP MUST allow the HoldTimer to be configurable
|
||
on a per-peer basis, and MAY allow the other timers to be
|
||
configurable.
|
||
|
||
To minimize the likelihood that the distribution of BGP messages by a
|
||
given BGP speaker will contain peaks, jitter SHOULD be applied to the
|
||
timers associated with MinASOriginationIntervalTimer, KeepaliveTimer,
|
||
MinRouteAdvertisementIntervalTimer, and ConnectRetryTimer. A given
|
||
BGP speaker MAY apply the same jitter to each of these quantities,
|
||
regardless of the destinations to which the updates are being sent;
|
||
that is, jitter need not be configured on a per-peer basis.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 90]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
The suggested default amount of jitter SHALL be determined by
|
||
multiplying the base value of the appropriate timer by a random
|
||
factor, which is uniformly distributed in the range from 0.75 to 1.0.
|
||
A new random value SHOULD be picked each time the timer is set. The
|
||
range of the jitter's random value MAY be configurable.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 91]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Appendix A. Comparison with RFC 1771
|
||
|
||
There are numerous editorial changes in comparison to [RFC1771] (too
|
||
many to list here).
|
||
|
||
The following list the technical changes:
|
||
|
||
Changes to reflect the usage of features such as TCP MD5
|
||
[RFC2385], BGP Route Reflectors [RFC2796], BGP Confederations
|
||
[RFC3065], and BGP Route Refresh [RFC2918].
|
||
|
||
Clarification of the use of the BGP Identifier in the AGGREGATOR
|
||
attribute.
|
||
|
||
Procedures for imposing an upper bound on the number of prefixes
|
||
that a BGP speaker would accept from a peer.
|
||
|
||
The ability of a BGP speaker to include more than one instance of
|
||
its own AS in the AS_PATH attribute for the purpose of inter-AS
|
||
traffic engineering.
|
||
|
||
Clarification of the various types of NEXT_HOPs.
|
||
|
||
Clarification of the use of the ATOMIC_AGGREGATE attribute.
|
||
|
||
The relationship between the immediate next hop, and the next hop
|
||
as specified in the NEXT_HOP path attribute.
|
||
|
||
Clarification of the tie-breaking procedures.
|
||
|
||
Clarification of the frequency of route advertisements.
|
||
|
||
Optional Parameter Type 1 (Authentication Information) has been
|
||
deprecated.
|
||
|
||
UPDATE Message Error subcode 7 (AS Routing Loop) has been
|
||
deprecated.
|
||
|
||
OPEN Message Error subcode 5 (Authentication Failure) has been
|
||
deprecated.
|
||
|
||
Use of the Marker field for authentication has been deprecated.
|
||
|
||
Implementations MUST support TCP MD5 [RFC2385] for authentication.
|
||
|
||
Clarification of BGP FSM.
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 92]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Appendix B. Comparison with RFC 1267
|
||
|
||
All the changes listed in Appendix A, plus the following.
|
||
|
||
BGP-4 is capable of operating in an environment where a set of
|
||
reachable destinations may be expressed via a single IP prefix. The
|
||
concept of network classes, or subnetting, is foreign to BGP-4. To
|
||
accommodate these capabilities, BGP-4 changes the semantics and
|
||
encoding associated with the AS_PATH attribute. New text has been
|
||
added to define semantics associated with IP prefixes. These
|
||
abilities allow BGP-4 to support the proposed supernetting scheme
|
||
[RFC1518, RFC1519].
|
||
|
||
To simplify configuration, this version introduces a new attribute,
|
||
LOCAL_PREF, that facilitates route selection procedures.
|
||
|
||
The INTER_AS_METRIC attribute has been renamed MULTI_EXIT_DISC.
|
||
|
||
A new attribute, ATOMIC_AGGREGATE, has been introduced to insure that
|
||
certain aggregates are not de-aggregated. Another new attribute,
|
||
AGGREGATOR, can be added to aggregate routes to advertise which AS
|
||
and which BGP speaker within that AS caused the aggregation.
|
||
|
||
To ensure that Hold Timers are symmetric, the Hold Timer is now
|
||
negotiated on a per-connection basis. Hold Timers of zero are now
|
||
supported.
|
||
|
||
Appendix C. Comparison with RFC 1163
|
||
|
||
All of the changes listed in Appendices A and B, plus the following.
|
||
|
||
To detect and recover from BGP connection collision, a new field (BGP
|
||
Identifier) has been added to the OPEN message. New text (Section
|
||
6.8) has been added to specify the procedure for detecting and
|
||
recovering from collision.
|
||
|
||
The new document no longer restricts the router that is passed in the
|
||
NEXT_HOP path attribute to be part of the same Autonomous System as
|
||
the BGP Speaker.
|
||
|
||
The new document optimizes and simplifies the exchange of information
|
||
about previously reachable routes.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 93]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Appendix D. Comparison with RFC 1105
|
||
|
||
All of the changes listed in Appendices A, B, and C, plus the
|
||
following.
|
||
|
||
Minor changes to the [RFC1105] Finite State Machine were necessary to
|
||
accommodate the TCP user interface provided by BSD version 4.3.
|
||
|
||
The notion of Up/Down/Horizontal relations presented in RFC 1105 has
|
||
been removed from the protocol.
|
||
|
||
The changes in the message format from RFC 1105 are as follows:
|
||
|
||
1. The Hold Time field has been removed from the BGP header and
|
||
added to the OPEN message.
|
||
|
||
2. The version field has been removed from the BGP header and
|
||
added to the OPEN message.
|
||
|
||
3. The Link Type field has been removed from the OPEN message.
|
||
|
||
4. The OPEN CONFIRM message has been eliminated and replaced with
|
||
implicit confirmation, provided by the KEEPALIVE message.
|
||
|
||
5. The format of the UPDATE message has been changed
|
||
significantly. New fields were added to the UPDATE message to
|
||
support multiple path attributes.
|
||
|
||
6. The Marker field has been expanded and its role broadened to
|
||
support authentication.
|
||
|
||
Note that quite often BGP, as specified in RFC 1105, is referred to
|
||
as BGP-1; BGP, as specified in [RFC1163], is referred to as BGP-2;
|
||
BGP, as specified in RFC 1267 is referred to as BGP-3; and BGP, as
|
||
specified in this document is referred to as BGP-4.
|
||
|
||
Appendix E. TCP Options that May Be Used with BGP
|
||
|
||
If a local system TCP user interface supports the TCP PUSH function,
|
||
then each BGP message SHOULD be transmitted with PUSH flag set.
|
||
Setting PUSH flag forces BGP messages to be transmitted to the
|
||
receiver promptly.
|
||
|
||
If a local system TCP user interface supports setting the DSCP field
|
||
[RFC2474] for TCP connections, then the TCP connection used by BGP
|
||
SHOULD be opened with bits 0-2 of the DSCP field set to 110 (binary).
|
||
|
||
An implementation MUST support the TCP MD5 option [RFC2385].
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 94]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Appendix F. Implementation Recommendations
|
||
|
||
This section presents some implementation recommendations.
|
||
|
||
Appendix F.1. Multiple Networks Per Message
|
||
|
||
The BGP protocol allows for multiple address prefixes with the same
|
||
path attributes to be specified in one message. Using this
|
||
capability is highly recommended. With one address prefix per
|
||
message there is a substantial increase in overhead in the receiver.
|
||
Not only does the system overhead increase due to the reception of
|
||
multiple messages, but the overhead of scanning the routing table for
|
||
updates to BGP peers and other routing protocols (and sending the
|
||
associated messages) is incurred multiple times as well.
|
||
|
||
One method of building messages that contain many address prefixes
|
||
per path attribute set from a routing table that is not organized on
|
||
a per path attribute set basis is to build many messages as the
|
||
routing table is scanned. As each address prefix is processed, a
|
||
message for the associated set of path attributes is allocated, if it
|
||
does not exist, and the new address prefix is added to it. If such a
|
||
message exists, the new address prefix is appended to it. If the
|
||
message lacks the space to hold the new address prefix, it is
|
||
transmitted, a new message is allocated, and the new address prefix
|
||
is inserted into the new message. When the entire routing table has
|
||
been scanned, all allocated messages are sent and their resources are
|
||
released. Maximum compression is achieved when all destinations
|
||
covered by the address prefixes share a common set of path
|
||
attributes, making it possible to send many address prefixes in one
|
||
4096-byte message.
|
||
|
||
When peering with a BGP implementation that does not compress
|
||
multiple address prefixes into one message, it may be necessary to
|
||
take steps to reduce the overhead from the flood of data received
|
||
when a peer is acquired or when a significant network topology change
|
||
occurs. One method of doing this is to limit the rate of updates.
|
||
This will eliminate the redundant scanning of the routing table to
|
||
provide flash updates for BGP peers and other routing protocols. A
|
||
disadvantage of this approach is that it increases the propagation
|
||
latency of routing information. By choosing a minimum flash update
|
||
interval that is not much greater than the time it takes to process
|
||
the multiple messages, this latency should be minimized. A better
|
||
method would be to read all received messages before sending updates.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 95]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Appendix F.2. Reducing Route Flapping
|
||
|
||
To avoid excessive route flapping, a BGP speaker that needs to
|
||
withdraw a destination and send an update about a more specific or
|
||
less specific route should combine them into the same UPDATE message.
|
||
|
||
Appendix F.3. Path Attribute Ordering
|
||
|
||
Implementations that combine update messages (as described above in
|
||
Section 6.1) may prefer to see all path attributes presented in a
|
||
known order. This permits them to quickly identify sets of
|
||
attributes from different update messages that are semantically
|
||
identical. To facilitate this, it is a useful optimization to order
|
||
the path attributes according to type code. This optimization is
|
||
entirely optional.
|
||
|
||
Appendix F.4. AS_SET Sorting
|
||
|
||
Another useful optimization that can be done to simplify this
|
||
situation is to sort the AS numbers found in an AS_SET. This
|
||
optimization is entirely optional.
|
||
|
||
Appendix F.5. Control Over Version Negotiation
|
||
|
||
Because BGP-4 is capable of carrying aggregated routes that cannot be
|
||
properly represented in BGP-3, an implementation that supports BGP-4
|
||
and another BGP version should provide the capability to only speak
|
||
BGP-4 on a per-peer basis.
|
||
|
||
Appendix F.6. Complex AS_PATH Aggregation
|
||
|
||
An implementation that chooses to provide a path aggregation
|
||
algorithm retaining significant amounts of path information may wish
|
||
to use the following procedure:
|
||
|
||
For the purpose of aggregating AS_PATH attributes of two routes,
|
||
we model each AS as a tuple <type, value>, where "type" identifies
|
||
a type of the path segment the AS belongs to (e.g., AS_SEQUENCE,
|
||
AS_SET), and "value" is the AS number. Two ASes are said to be
|
||
the same if their corresponding <type, value> tuples are the same.
|
||
|
||
The algorithm to aggregate two AS_PATH attributes works as
|
||
follows:
|
||
|
||
a) Identify the same ASes (as defined above) within each
|
||
AS_PATH attribute that are in the same relative order within
|
||
both AS_PATH attributes. Two ASes, X and Y, are said to be
|
||
in the same order if either:
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 96]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
- X precedes Y in both AS_PATH attributes, or
|
||
- Y precedes X in both AS_PATH attributes.
|
||
|
||
b) The aggregated AS_PATH attribute consists of ASes identified
|
||
in (a), in exactly the same order as they appear in the
|
||
AS_PATH attributes to be aggregated. If two consecutive
|
||
ASes identified in (a) do not immediately follow each other
|
||
in both of the AS_PATH attributes to be aggregated, then the
|
||
intervening ASes (ASes that are between the two consecutive
|
||
ASes that are the same) in both attributes are combined into
|
||
an AS_SET path segment that consists of the intervening ASes
|
||
from both AS_PATH attributes. This segment is then placed
|
||
between the two consecutive ASes identified in (a) of the
|
||
aggregated attribute. If two consecutive ASes identified in
|
||
(a) immediately follow each other in one attribute, but do
|
||
not follow in another, then the intervening ASes of the
|
||
latter are combined into an AS_SET path segment. This
|
||
segment is then placed between the two consecutive ASes
|
||
identified in (a) of the aggregated attribute.
|
||
|
||
c) For each pair of adjacent tuples in the aggregated AS_PATH,
|
||
if both tuples have the same type, merge them together if
|
||
doing so will not cause a segment of a length greater than
|
||
255 to be generated.
|
||
|
||
If, as a result of the above procedure, a given AS number appears
|
||
more than once within the aggregated AS_PATH attribute, all but
|
||
the last instance (rightmost occurrence) of that AS number should
|
||
be removed from the aggregated AS_PATH attribute.
|
||
|
||
Security Considerations
|
||
|
||
A BGP implementation MUST support the authentication mechanism
|
||
specified in RFC 2385 [RFC2385]. The authentication provided by this
|
||
mechanism could be done on a per-peer basis.
|
||
|
||
BGP makes use of TCP for reliable transport of its traffic between
|
||
peer routers. To provide connection-oriented integrity and data
|
||
origin authentication on a point-to-point basis, BGP specifies use of
|
||
the mechanism defined in RFC 2385. These services are intended to
|
||
detect and reject active wiretapping attacks against the inter-router
|
||
TCP connections. Absent the use of mechanisms that effect these
|
||
security services, attackers can disrupt these TCP connections and/or
|
||
masquerade as a legitimate peer router. Because the mechanism
|
||
defined in the RFC does not provide peer-entity authentication, these
|
||
connections may be subject to some forms of replay attacks that will
|
||
not be detected at the TCP layer. Such attacks might result in
|
||
delivery (from TCP) of "broken" or "spoofed" BGP messages.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 97]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
The mechanism defined in RFC 2385 augments the normal TCP checksum
|
||
with a 16-byte message authentication code (MAC) that is computed
|
||
over the same data as the TCP checksum. This MAC is based on a one-
|
||
way hash function (MD5) and use of a secret key. The key is shared
|
||
between peer routers and is used to generate MAC values that are not
|
||
readily computed by an attacker who does not have access to the key.
|
||
A compliant implementation must support this mechanism, and must
|
||
allow a network administrator to activate it on a per-peer basis.
|
||
|
||
RFC 2385 does not specify a means of managing (e.g., generating,
|
||
distributing, and replacing) the keys used to compute the MAC. RFC
|
||
3562 [RFC3562] (an informational document) provides some guidance in
|
||
this area, and provides rationale to support this guidance. It notes
|
||
that a distinct key should be used for communication with each
|
||
protected peer. If the same key is used for multiple peers, the
|
||
offered security services may be degraded, e.g., due to an increased
|
||
risk of compromise at one router that adversely affects other
|
||
routers.
|
||
|
||
The keys used for MAC computation should be changed periodically, to
|
||
minimize the impact of a key compromise or successful cryptanalytic
|
||
attack. RFC 3562 suggests a crypto period (the interval during which
|
||
a key is employed) of, at most, 90 days. More frequent key changes
|
||
reduce the likelihood that replay attacks (as described above) will
|
||
be feasible. However, absent a standard mechanism for effecting such
|
||
changes in a coordinated fashion between peers, one cannot assume
|
||
that BGP-4 implementations complying with this RFC will support
|
||
frequent key changes.
|
||
|
||
Obviously, each should key also be chosen to be difficult for an
|
||
attacker to guess. The techniques specified in RFC 1750 for random
|
||
number generation provide a guide for generation of values that could
|
||
be used as keys. RFC 2385 calls for implementations to support keys
|
||
"composed of a string of printable ASCII of 80 bytes or less." RFC
|
||
3562 suggests keys used in this context be 12 to 24 bytes of random
|
||
(pseudo-random) bits. This is fairly consistent with suggestions for
|
||
analogous MAC algorithms, which typically employ keys in the range of
|
||
16 to 20 bytes. To provide enough random bits at the low end of this
|
||
range, RFC 3562 also observes that a typical ACSII text string would
|
||
have to be close to the upper bound for the key length specified in
|
||
RFC 2385.
|
||
|
||
BGP vulnerabilities analysis is discussed in [RFC4272].
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 98]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
IANA Considerations
|
||
|
||
All the BGP messages contain an 8-bit message type, for which IANA
|
||
has created and is maintaining a registry entitled "BGP Message
|
||
Types". This document defines the following message types:
|
||
|
||
Name Value Definition
|
||
---- ----- ----------
|
||
OPEN 1 See Section 4.2
|
||
UPDATE 2 See Section 4.3
|
||
NOTIFICATION 3 See Section 4.5
|
||
KEEPALIVE 4 See Section 4.4
|
||
|
||
Future assignments are to be made using either the Standards Action
|
||
process defined in [RFC2434], or the Early IANA Allocation process
|
||
defined in [RFC4020]. Assignments consist of a name and the value.
|
||
|
||
The BGP UPDATE messages may carry one or more Path Attributes, where
|
||
each Attribute contains an 8-bit Attribute Type Code. IANA is
|
||
already maintaining such a registry, entitled "BGP Path Attributes".
|
||
This document defines the following Path Attributes Type Codes:
|
||
|
||
Name Value Definition
|
||
---- ----- ----------
|
||
ORIGIN 1 See Section 5.1.1
|
||
AS_PATH 2 See Section 5.1.2
|
||
NEXT_HOP 3 See Section 5.1.3
|
||
MULTI_EXIT_DISC 4 See Section 5.1.4
|
||
LOCAL_PREF 5 See Section 5.1.5
|
||
ATOMIC_AGGREGATE 6 See Section 5.1.6
|
||
AGGREGATOR 7 See Section 5.1.7
|
||
|
||
Future assignments are to be made using either the Standards Action
|
||
process defined in [RFC2434], or the Early IANA Allocation process
|
||
defined in [RFC4020]. Assignments consist of a name and the value.
|
||
|
||
The BGP NOTIFICATION message carries an 8-bit Error Code, for which
|
||
IANA has created and is maintaining a registry entitled "BGP Error
|
||
Codes". This document defines the following Error Codes:
|
||
|
||
Name Value Definition
|
||
------------ ----- ----------
|
||
Message Header Error 1 Section 6.1
|
||
OPEN Message Error 2 Section 6.2
|
||
UPDATE Message Error 3 Section 6.3
|
||
Hold Timer Expired 4 Section 6.5
|
||
Finite State Machine Error 5 Section 6.6
|
||
Cease 6 Section 6.7
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 99]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Future assignments are to be made using either the Standards Action
|
||
process defined in [RFC2434], or the Early IANA Allocation process
|
||
defined in [RFC4020]. Assignments consist of a name and the value.
|
||
|
||
The BGP NOTIFICATION message carries an 8-bit Error Subcode, where
|
||
each Subcode has to be defined within the context of a particular
|
||
Error Code, and thus has to be unique only within that context.
|
||
|
||
IANA has created and is maintaining a set of registries, "Error
|
||
Subcodes", with a separate registry for each BGP Error Code. Future
|
||
assignments are to be made using either the Standards Action process
|
||
defined in [RFC2434], or the Early IANA Allocation process defined in
|
||
[RFC4020]. Assignments consist of a name and the value.
|
||
|
||
This document defines the following Message Header Error subcodes:
|
||
|
||
Name Value Definition
|
||
-------------------- ----- ----------
|
||
Connection Not Synchronized 1 See Section 6.1
|
||
Bad Message Length 2 See Section 6.1
|
||
Bad Message Type 3 See Section 6.1
|
||
|
||
This document defines the following OPEN Message Error subcodes:
|
||
|
||
Name Value Definition
|
||
-------------------- ----- ----------
|
||
Unsupported Version Number 1 See Section 6.2
|
||
Bad Peer AS 2 See Section 6.2
|
||
Bad BGP Identifier 3 See Section 6.2
|
||
Unsupported Optional Parameter 4 See Section 6.2
|
||
[Deprecated] 5 See Appendix A
|
||
Unacceptable Hold Time 6 See Section 6.2
|
||
|
||
This document defines the following UPDATE Message Error subcodes:
|
||
|
||
Name Value Definition
|
||
-------------------- --- ----------
|
||
Malformed Attribute List 1 See Section 6.3
|
||
Unrecognized Well-known Attribute 2 See Section 6.3
|
||
Missing Well-known Attribute 3 See Section 6.3
|
||
Attribute Flags Error 4 See Section 6.3
|
||
Attribute Length Error 5 See Section 6.3
|
||
Invalid ORIGIN Attribute 6 See Section 6.3
|
||
[Deprecated] 7 See Appendix A
|
||
Invalid NEXT_HOP Attribute 8 See Section 6.3
|
||
Optional Attribute Error 9 See Section 6.3
|
||
Invalid Network Field 10 See Section 6.3
|
||
Malformed AS_PATH 11 See Section 6.3
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 100]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Normative References
|
||
|
||
[RFC791] Postel, J., "Internet Protocol", STD 5, RFC 791, September
|
||
1981.
|
||
|
||
[RFC793] Postel, J., "Transmission Control Protocol", STD 7, RFC
|
||
793, September 1981.
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||
|
||
[RFC2385] Heffernan, A., "Protection of BGP Sessions via the TCP MD5
|
||
Signature Option", RFC 2385, August 1998.
|
||
|
||
[RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an
|
||
IANA Considerations Section in RFCs", BCP 26, RFC 2434,
|
||
October 1998.
|
||
|
||
Informative References
|
||
|
||
[RFC904] Mills, D., "Exterior Gateway Protocol formal
|
||
specification", RFC 904, April 1984.
|
||
|
||
[RFC1092] Rekhter, J., "EGP and policy based routing in the new
|
||
NSFNET backbone", RFC 1092, February 1989.
|
||
|
||
[RFC1093] Braun, H., "NSFNET routing architecture", RFC 1093,
|
||
February 1989.
|
||
|
||
[RFC1105] Lougheed, K. and Y. Rekhter, "Border Gateway Protocol
|
||
(BGP)", RFC 1105, June 1989.
|
||
|
||
[RFC1163] Lougheed, K. and Y. Rekhter, "Border Gateway Protocol
|
||
(BGP)", RFC 1163, June 1990.
|
||
|
||
[RFC1267] Lougheed, K. and Y. Rekhter, "Border Gateway Protocol 3
|
||
(BGP-3)", RFC 1267, October 1991.
|
||
|
||
[RFC1771] Rekhter, Y. and T. Li, "A Border Gateway Protocol 4 (BGP-
|
||
4)", RFC 1771, March 1995.
|
||
|
||
[RFC1772] Rekhter, Y. and P. Gross, "Application of the Border
|
||
Gateway Protocol in the Internet", RFC 1772, March 1995.
|
||
|
||
[RFC1518] Rekhter, Y. and T. Li, "An Architecture for IP Address
|
||
Allocation with CIDR", RFC 1518, September 1993.
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 101]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
[RFC1519] Fuller, V., Li, T., Yu, J., and K. Varadhan, "Classless
|
||
Inter-Domain Routing (CIDR): an Address Assignment and
|
||
Aggregation Strategy", RFC 1519, September 1993.
|
||
|
||
[RFC1930] Hawkinson, J. and T. Bates, "Guidelines for creation,
|
||
selection, and registration of an Autonomous System (AS)",
|
||
BCP 6, RFC 1930, March 1996.
|
||
|
||
[RFC1997] Chandra, R., Traina, P., and T. Li, "BGP Communities
|
||
Attribute", RFC 1997, August 1996.
|
||
|
||
[RFC2439] Villamizar, C., Chandra, R., and R. Govindan, "BGP Route
|
||
Flap Damping", RFC 2439, November 1998.
|
||
|
||
[RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black,
|
||
"Definition of the Differentiated Services Field (DS Field)
|
||
in the IPv4 and IPv6 Headers", RFC 2474, December 1998.
|
||
|
||
[RFC2796] Bates, T., Chandra, R., and E. Chen, "BGP Route Reflection
|
||
- An Alternative to Full Mesh IBGP", RFC 2796, April 2000.
|
||
|
||
[RFC2858] Bates, T., Rekhter, Y., Chandra, R., and D. Katz,
|
||
"Multiprotocol Extensions for BGP-4", RFC 2858, June 2000.
|
||
|
||
[RFC3392] Chandra, R. and J. Scudder, "Capabilities Advertisement
|
||
with BGP-4", RFC 3392, November 2002.
|
||
|
||
[RFC2918] Chen, E., "Route Refresh Capability for BGP-4", RFC 2918,
|
||
September 2000.
|
||
|
||
[RFC3065] Traina, P., McPherson, D., and J. Scudder, "Autonomous
|
||
System Confederations for BGP", RFC 3065, February 2001.
|
||
|
||
[RFC3562] Leech, M., "Key Management Considerations for the TCP MD5
|
||
Signature Option", RFC 3562, July 2003.
|
||
|
||
[IS10747] "Information Processing Systems - Telecommunications and
|
||
Information Exchange between Systems - Protocol for
|
||
Exchange of Inter-domain Routeing Information among
|
||
Intermediate Systems to Support Forwarding of ISO 8473
|
||
PDUs", ISO/IEC IS10747, 1993.
|
||
|
||
[RFC4272] Murphy, S., "BGP Security Vulnerabilities Analysis", RFC
|
||
4272, January 2006
|
||
|
||
[RFC4020] Kompella, K. and A. Zinin, "Early IANA Allocation of
|
||
Standards Track Code Points", BCP 100, RFC 4020, February
|
||
2005.
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 102]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Editors' Addresses
|
||
|
||
Yakov Rekhter
|
||
Juniper Networks
|
||
|
||
EMail: yakov@juniper.net
|
||
|
||
|
||
Tony Li
|
||
|
||
EMail: tony.li@tony.li
|
||
|
||
|
||
Susan Hares
|
||
NextHop Technologies, Inc.
|
||
825 Victors Way
|
||
Ann Arbor, MI 48108
|
||
|
||
Phone: (734)222-1610
|
||
EMail: skh@nexthop.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 103]
|
||
|
||
RFC 4271 BGP-4 January 2006
|
||
|
||
|
||
Full Copyright Statement
|
||
|
||
Copyright (C) The Internet Society (2006).
|
||
|
||
This document is subject to the rights, licenses and restrictions
|
||
contained in BCP 78, and except as set forth therein, the authors
|
||
retain all their rights.
|
||
|
||
This document and the information contained herein are provided on an
|
||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
|
||
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
|
||
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
|
||
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
Intellectual Property
|
||
|
||
The IETF takes no position regarding the validity or scope of any
|
||
Intellectual Property Rights or other rights that might be claimed to
|
||
pertain to the implementation or use of the technology described in
|
||
this document or the extent to which any license under such rights
|
||
might or might not be available; nor does it represent that it has
|
||
made any independent effort to identify any such rights. Information
|
||
on the procedures with respect to rights in RFC documents can be
|
||
found in BCP 78 and BCP 79.
|
||
|
||
Copies of IPR disclosures made to the IETF Secretariat and any
|
||
assurances of licenses to be made available, or the result of an
|
||
attempt made to obtain a general license or permission for the use of
|
||
such proprietary rights by implementers or users of this
|
||
specification can be obtained from the IETF on-line IPR repository at
|
||
http://www.ietf.org/ipr.
|
||
|
||
The IETF invites any interested party to bring to its attention any
|
||
copyrights, patents or patent applications, or other proprietary
|
||
rights that may cover technology that may be required to implement
|
||
this standard. Please address the information to the IETF at
|
||
ietf-ipr@ietf.org.
|
||
|
||
Acknowledgement
|
||
|
||
Funding for the RFC Editor function is provided by the IETF
|
||
Administrative Support Activity (IASA).
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Rekhter, et al. Standards Track [Page 104]
|
||
|