[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: CUD and FBD



On 7-okt-2005, at 10:28, marcelo bagnulo braun wrote:

In CUD, each time there is an idle period, 2 packets are generated, one in each direction.
In FBD, each time there is an idle period, i packet is generated

Not sure I like either one of these options. Preferrably, the probing frequency would depend on whether you have something to send or not. For instance, if we don't have any payload packets to send, the frequency = n and if we do have
packets to send, it would m, m << n.

In CUD, if we have nothing to send we don't probe either.

In FBD, the situation where we have nothing to send (but we do receive packets from the other end) is exactly the situation where we need to send keepalives to let the other side know we're still there.

If you combine this with the ULP feedback
and packet reception in CUD, we have a mechanism that normally does not need extra probes during traffic and which generates a very small amount of traffic
when its idle.

Both FBD and CUD are quiet when the session is idle in both directions.

- an endpoint that is sending but not receiving in CUD will result in an additional overhead of 2 signaling packets one in each direction periodically , while, - an endpoint that is sending but not receiving in FBD will result in an additional overhead of 1 signaling packet in the incoming direction periodically

Right.

I think we can assume that an optimized Shim6 implementation gets ULP feedback.
NUD needs it anyway, so its not a big assumption.

Maybe there will be some sort of feedback, but I'm not convinced it will help us all that much. AFAIK, NUD results in a significant number of additional neighbor solicitations.

However, I want to reiterate something I talked about earlier:

Rather than choose CUD or FBD and expect vendors to implement this correctly, we can define the probing such that it gives implementers maximum flexibility. This has the advantage that we don't have to spend large amounts of brainpower coming up with the perfect solution before there is operational experience, and that implementers can begin with something simple and extend it later.

The idea is that we basically specify CUD as the basic approach. So first of all, when there is no outgoing traffic, nothing happens. Also, in the presence of positive ULP feedback nothing happens. When there is outgoing traffic but no positive feedback, the shim layer periodically sends out a probe. The other end sends back a reply when it sees the probe.

So far so good.

But in order to optimize for the situation where there is no ULP feedback and to reduce the number of probes, a host may indicate that it supports two additional capabilities in the probe:

1. That if the other end sees our traffic, it may send a "probe reply" without having received a probe first at X second intervals for Y probes or seconds.

2. That if the other end sent any other type of packet in the last Z seconds, it may suppress the probe reply.

If both ends support both these options this effectively means they'll switch to FBD for some time. (Timeout is probably a good idea to keep broken implementations from sending unsolicited probes for all eternity.) However, if one end doesn't support one or both of the additional capabilities nothing happens and we're still at CUD.

So basically this is CUD with the option of moving to FBD later. This makes sense unless we can be more or less absolutely certain we either never need to move to FBD, or that FBD is at least as good and probably better than CUD. Without having done any IP stack programming I believe that CUD (possibly with fairly limited ULP advice) is easier to implement while FBD is probably more efficient.

I assume we can arrive at a decision on this after some discussion this weekend.