ipid-debuggery (was Re: [e2e] ICMP & TCP segments with IP ID = 0?
stiliadi at dnrc.bell-labs.com
Fri May 18 09:54:51 PDT 2001
I am under the impression that there exist a compromise in your
hypothethical scenario that makes boths parties happy.
> Here's a counter-example. I wanted to make a router do something-in-IP
> encapsulation (e.g. GRE, IP protocol 4, PIM-SM, IPv6 in IPv4) at very
> high speed. While I could always add hardware to do this perfectly,
> that is expensive and I had a way to do this with no additional hardware
> using processors already in the router's data path. The problem is that
> these processors, which are somewhat special-purpose and can keep up to
> a very high speed data stream, are entirely stateless (almost all
> operations in a router's forwarding path, at least where these processors
> are, require no inter-packet state), so while I can build headers with
> the processor, this particular operation wasn't envisaged when the
> processor was designed and I had no way to come up with a unique value
> for the IP ID. Note that I'm sending non-fragmentable encapsulated
> packets in any case since I'd prefer to fragment packets before they go
> into the encapsulation tunnel as this keeps the decapsulating router at
> the far end of the tunnel stateless as well.
If you fragment packets, you can obviously increase the ID while
fragments are created, since you are pretty much processing
one packet.. The question is what to do with the initial value
of the ID .. but I think the important part there is to keep
IDs different, and not constant at all times. The important part
is not not to "increment" them per-flow. Thus, a single counter
or a single LFSR will provide these different IDS with very
good probability over the living time of packets, as it is
pointed in the text you were quoting:
> The identification field is used to distinguish the fragments of one
> datagram from those of another. The originating protocol module of
> an internet datagram sets the identification field to a value that
> must be unique for that source-destination pair and protocol for the
> time the datagram will be active in the internet system.
A single register is not so much expense .. is it ?
More information about the end2end-interest