John,
At 20:39 03/01/2007, John Heffner wrote:
Originally we had thoughts of trying to prescribe an implementation fix.
I still think this is the way to go. ...Well, at least not actually
prescribing the algorithm, but prescribing (or recommending) its desired
behaviour.
There are certainly a lot of possible approaches. Linux has just
recently implemented a scheme where fragments time out not by wall clock
time, but by the number of intermediate packets received, effectively
having a tunable parameter on the amount of reordering tolerated. This
seems to work pretty well.
That's nice. I was only using wall-clock time because it was a strictly
monotonically increasing number. Concatenating an increasing index would
work just as well (in fact better), which is effectively the same as the
Linux idea. And yes, I was imagining that the receiver would adapt the
allowed gap between re-assembled packets to circumstances (ie tunable could
mean per flow, rather than configured per machine).
Heuristically tuning this parameter per flow could potentially even handle
the problem you mention where the sender is spreading PacketIDs over other
faster flows. Tho, having heuristic adaptation in an IP stack is a bit
scary - how many vulnerabilities might that open up?
However, there really is a protocol problem that prevented us from trying
to prescribe a solution. The sender is responsible for not reusing IPIDs
before the fragments time out, but the receiver is responsible for timing
out fragments. There is no way to the sender to know if a receiver has
timed out the old fragments yet.
This is only a 'real protocol problem' if we define a correct re-assembly
function as one that is exactly 100% reliable. Even if a well-known timeout
had been standardised (whether 15mins, 1min, 1sec), re-assembly wouldn't
have been guaranteed reliable. It would only be possible to guarantee that
received packets were not re-using a number before a time agreed between
sender & rcvr if we used loose clock synch (e.g. I did one like this myself
in RFC4082).
I don't believe anyone wants IP to take that road. So strictly, we don't
have a real protocol problem, if 100% is an unattainable goal anyway at
reasonable complexity.
So, firstly we need to state up front that IP fragment re-assembly is not
expected to be exactly 100% reliable. Then we can say a lot can be done
through good implementation to get within a gnat's tittle of 100%.
As an operations person, I might be able to deploy fragmentation with some
confidence if I can ensure that all receivers I'm using are running recent
Linux kernels with the workaround enabled. But as an application
developer, there's no way for me to be sure I won't ever run in to
protocol trouble if I rely on fragmentation.
An app developer can always say "rcvr app requires at least Linux vX.Y,
Windows 2052 etc".
The only property we (the IETF) need to ensure is that highly reliable
reassembly doesn't rely on sender behaviour as well. Even with
pseudo-random PacketID sequences, I think that's do-able by building on
implementations like the Linux one above.
Bob
____________________________________________________________________________
Notice: This contribution is the personal view of the author and does not
necessarily reflect the technical nor commercial direction of BT plc.
____________________________________________________________________________
Bob Briscoe, Networks Research Centre, BT Research
B54/77 Adastral Park,Martlesham Heath,Ipswich,IP5 3RE,UK. +44 1473 645196
_______________________________________________
Int-area mailing list
[email protected]
https://www1.ietf.org/mailman/listinfo/int-area