Bidirectional Forwarding Detection
draft-katz-ward-bfd-02
Revision differences
Document history
| Date | Rev. | By | Action |
|---|---|---|---|
|
2015-10-14
|
02 | (System) | Notify list changed from , to (None) |
|
2005-05-26
|
02 | (System) | Ballot writeup text was added |
|
2005-05-26
|
02 | (System) | Last call text was added |
|
2005-05-26
|
02 | (System) | Ballot approval text was added |
|
2005-05-26
|
02 | (System) | State Changes to Dead from AD is watching by IESG Secretary |
|
2004-12-03
|
02 | (System) | Document has expired |
|
2004-05-19
|
02 | (System) | New version available: draft-katz-ward-bfd-02.txt |
|
2004-01-20
|
02 | Alex Zinin | Comments from Pekka Savola: Hi, (Cc:ing Alex, as he's watching according to the I-D tracker :-) I got around to reviewing both the Bidirectional Forwarding … Comments from Pekka Savola: Hi, (Cc:ing Alex, as he's watching according to the I-D tracker :-) I got around to reviewing both the Bidirectional Forwarding Documents (BFD) drafts. I believe this is important work, and we have already deployed some software which supports this and intend to test and enable it soon. What's the plan for progressing the work? Individual submissions, existing WG(s), or starting a new WG? The drafts state Category as Informational, but I think this definitely should be Standards Track! I also note that there is an IPR claim in the document, but the claim has not been recorded in IETF IPR database (should fix ASAP). Which part of the specification(s) does this IPR pertain to? Ok, down to the comments... draft-katz-ward-bfd-01.txt: =========================== ==> I personally fail to see a lot of usefulness for the "new and shiny features", Polling and (especially) Demand mode. This seems to add a lot of complexity. Could you elaborate why these are useful (apart for dial up/down links which is IMO something that shouldn't be forced down the throat all the vendors) ==> ToC needed ==> you don't have any references in the document, at least [KEYWORDS] is used but not added. Pure asynchronous mode is advantageous in that it requires half as many packets to achieve a particular detection time as does the Echo function. It is also used when the Echo function cannot be supported for some reason. The Echo function has the advantage of truly testing only the forwarding path on the remote system, which may reduce round-trip jitter and thus allow more aggressive detection times, as well as potentially detecting some classes of failure that might not otherwise be detected. ==> It seems that there is a conflict here, "pure asynch .. requires half as many packets" and "echo function.. may allow more aggressive detection times". By definition, with half as many packets, you will always be able to use more aggressive detection times that with double the number of packets! ... A diagnostic code specifying the local system's reason for the last transition of the session from Up to some other state. Values are: 0 -- No Diagnostic 1 -- Control Detection Time Expired 2 -- Echo Function Failed 3 -- Neighbor Signaled Session Down 4 -- Forwarding Plane Reset 5 -- Path Down 6 -- Concatenated Path Down 7 -- Administratively Down ==> 8-15 are still free, right? ==> should one add "15 -- Other Reason" ? (This also may need some reorganization, as commented earlier, as "Echo Function Failed" seems to lose the diagnostics and valueble information if you're using echo function.) Poll (P) If set, the transmitting system requesting verification of connectivity, or of a parameter change. ==> these flags should also describe the trivial case of flags being unset. Applies to many flags. ==> s/requesting/is requesting/? Length Length of the BFD Control packet, in bytes. ==> Wouldn't it be nicer to use the units of 8 bytes (due to alignment, and to reduce the number of unnecessary info)? With the current Length, using the units of 64 bits would allow one to specify longer lengths (up to 2040), which might help if you want to, at some point, send e.g. extra data along with the packets (e.g., to notice if longer packets fail even if the shorter ones work). However, I'm not 100% sure this is needed, as you could accomplish the same with setting the size of Echo packets, if needed. ... If the session goes down, the transmission of Echo packets (if any) ceases, and the transmission of Control packets goes back to the slow rate. Once a session has been declared down, it cannot come back up until the remote end first signals that it is down (by setting its outgoing I Hear You field to zero), thus implementing a three-way handshake. ==> Doesn't this cause problems if the other end is in Passive mode? Once the remote end echos back the local discriminator, all further ==> s/echos/echoes/ When a system is using the Echo function, it is advantageous to choose a sedate transmission rate for Control packets, since the job of detection is being handled by the Echo packets. This can be ==> s/sedate/slow/ (if you want to use simpler language, doesn't matter to me :) ==> s/the job of detection/the liveness detection/ (a bit more formal language :-) When a system is said to have "the Echo function active," it refers to that system sending BFD Echo packets (and thus implies that the session is Up and the other system has signalled its willingness to loop back Echo packets.) ==> reword this to be similar as "Demand active", below, like: When a system is said to have "the Echo function active," it means the system is sending BFD Echo packets, implying that the session is Up and the other system has signalled its willingness to loop back Echo packets. ... If bfd.DetectMult is equal to 1, the interval between transmitted BFD Control packets MUST be no more than 90% of the negotiated transmission interval, and MUST be no less than 75% of the negotiated transmission interval. This is to ensure that, on the remote system, the calculated DetectTime does not pass prior to the receipt of the next BFD Control packet. ==> I do not understand why "no less than 75%" rule exists there, this doesn't seem to have anything to do with the above DetectTime reasoning? (of course, it might make sense otherwise.) (1,000,000 microseconds.) This is intended to ensure that the bandwidth consumed by down BFD sessions is negligible, particularly ==> s/by down/by downed/ (or BFP sessions that are down) system, multiplied by the agreed transmit interval (the greater of bfd.RequiredMinRxInterval and the last received Desired Min TX Interval.) The Detect Mult value is (roughly speaking, due to ==> You mix the bfd.XXXX and "spelled out" terms ("Desired Min TX Interval"). Use just one of them, e.g. by replacing the latter one by bfd.DesiredMinTxInterval. (The same happens elsewhere as well.) 6.5.5. Detecting Failures with the Echo Function When the Echo function is active and a sufficient number of Echo packets have not arrived as they should, the session has gone down--the local system MUST set bfd.SessionState to Failing, bfd.RemoteHeard to zero, and bfd.LocalDiag to 2 (The Echo Function Failed.) ==> I do not believe there has been an explicit specification how what the sufficient number of Echo packets is. Note that the previous section used MinTX/MinRX Intervals, and as there is a separate Echo interval -- so it doesn't apply as is at least. ==> wouldn't it be useful to use the similar diagnostic codes for Echo failures than control packet failures? It seems you'll lose information about the possible causes of the loss of connectivity if you use Echo function? 6.5.6. Reception of BFD Control Packets When a BFD Control packet is received, the following procedure MUST be followed, in the order specified: If the version number is not correct (0), the packet MUST be discarded. ==> What is the proposed backward compatibility mechanism? Run each version of BFD on all the links, and try to connect starting from the highest supported version, etc. ? If the version number is not correct (0), the packet MUST be discarded. ==> should it be spelled out that s/discard/silently discard/ ? If the value of bfd.RemoteDiscr is zero, set it to the value of My Discriminator. If the Required Min Echo RX Interval field is zero, the transmission of Echo packets, if any, MUST cease. ==> please unify the style, as commented previously.. Security Considerations When BFD is run over network layer protocols, a significant denial- of-service risk is created, as BFD packets may be trivial to spoof. When the session is directly connected across a single link, the TTL MUST be set to the maximum on transmit, and checked to be equal to the maximum value on reception (and the packet dropped if this is not the case.) ==> this is fine (though you should spell out that this also applies to Hop Limit if IPv6 is used) ==> You should clarify what you refer to with the "more difficult" BFD. MPLS network? Network with tunnels? A BFD-using protocol which establishes adjacencies over multiple hops (e.g. IBGP, even though that's a bad example)? If BFD is run across multiple hops, some alternative mechanism MUST be used. One option would be to ensure that the network addresses used for BFD are not routable outside of the infrastructure in which BFD is running (and assuming there are no users connected within that network.) ==> I strongly object to that proposition. First, this seems like a recommendation to use private addresses. If it's not, you're assuming that the operators would use specific addresses for these purposes and block them at the border. But that would hinder the other uses of the interface addresses (i.e., it's operationally impossible), and more importantly, the BFD mechanism has not way to ensure that this checking has in fact been configured by the operator. Another option would be to filter all packets carrying BFD's UDP ports at the edges of the network. ==> This is bad as well, because it could hinder the transited traffic. However, if this was coupled by edge-based access-lists w/ IP addresses and ports, the tradeoffs might be acceptable. However this still has a number of problems, as discussed above. > Still another option would be to use cryptographic methods, > though this is not likely to allow for very short detection times. ==> Too bad! :-) draft-katz-ward-bfd-v4v6-1hop-00.txt: ===================================== ==> you should include the support for static routing. That would likely be extremely useful (as you can't run an IGP between the operator and the customer, and the link is very often an Ethernet variant, which doesn't provide good link state change notifications). I've already worked out some details in my head, and this should be rather simple. ==> You don't discuss the case what happens if you run IS-IS for IPv4 only, and OSPFv3 -- or IS-IS for IPv6 only and OSPFv2 on the same links, as dual-stack infrastructure. What about OSPFv2+OSPFv3 for that matter? These are common deployment scenarios, and we run one of these as well. Would you have two sessions between the nodes on each link (one for each network-layer protocol used) or one? Abstract This document describes the use of the Bidirectional Forwarding Detection protocol [BFD] over IPv4 and IPv6 for single IP hops. It further describes the use of BFD with OSPFv2 [OSPFv2], OSPFv3 [OSPFv3], and ISIS [ISIS]. ==> please don't put references in the abstract! ==> btw, use "IS-IS" rather than "ISIS" :-) 1. Introduction One very desirable application for BFD is to track IPv4 and IPv6 connectivity between directly-connected systems. This could be used to supplant the detection mechanisms in ISIS and OSPF, or to monitor router-host connectivity, among other applications. ==> note that the BFD document explicitly discusses it as a mechanism between "forwarding engines", which seems to exlude router-host connectivity (which could be useful). Maybe the main BFD document could use a bit of rewording? The source address MUST be chosen in such a way as to preclude the remote system from generating ICMP Redirect messages (in particular, the source address MUST NOT be part of the subnet bound to the interface over which the BFD Echo packet is being transmitted.) ==> the last sentence is not clear -- does the MUST NOT apply to what must not be done (i.e., cause the generation of ICMP redirects) or what must be done? :-). When you think about it, it's obvious but the wording is crap :-). 4.1. BFD for IPv4 4.2. BFD for IPv6 ==> there seems to be no need to restate the same things twice. Combine these in one section, and state the differences where applicable. 5. TTL Issues ==> with IPv6 this is called Hop Limit. On an unnumbered point-to-point link, the source address of a BFD Control packet MUST NOT be used to identify the session. This means that the initial BFD packet MUST be accepted with any source address, and that subsequent BFD packets MUST be demultiplexed solely by the My Discriminator field (as is always the case.) This allows the source address to change if necessary. ==> this has security issues, especially if TTL=255 check was not in place. Why this is not serious in this specific scenario should be described in the security considerations. |
|
2003-08-26
|
02 | Randy Bush | Shepherding AD has been changed to Alex Zinin from Randy Bush |
|
2003-08-26
|
02 | Randy Bush | Area acronymn has been changed to rtg from ops |
|
2003-08-20
|
01 | (System) | New version available: draft-katz-ward-bfd-01.txt |
|
2003-07-15
|
02 | Randy Bush | Draft Added by Bush, Randy |
|
2003-06-03
|
00 | (System) | New version available: draft-katz-ward-bfd-00.txt |