[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dccp] design review comments from Rob Austein
----- Forwarded message from Rob Austein <sra@hactrn.net> -----
Date: Fri, 08 Aug 2003 17:01:32 -0400
From: Rob Austein <sra@hactrn.net>
To: Aaron Falk <falk@ISI.EDU>
Cc: Allison Mankin <mankin@psg.com>
Subject: Re: request for written reviews for DCCP
At Thu, 17 Jul 2003 00:45:40 -0700, Aaron Falk wrote:
>
> I'd like to include a written review from each of you in the meeting
> minutes. Please send what you can before the end of next week (July
> 25th). (Steve- I have your notes from the meeting. Just let me know
> if I should expect anything else.)
Past your deadline, but perhaps better late than not at all. The
following is based on a combination of what the minutes claim I said
and what I had written down prior to and during the meeting.
- Overall, I like this protocol a lot. I was scared initially by the
size of the spec, but upon reading it I concluded that it's dealing
with issues that it has to deal with -- in spite of the differences
from TCP, it has to deal with many of the same issues.
- DCCP service names look like a compromise between well-known ports
and "contact names" as used in protocols like Chaosnet. Personally,
I'm a big fan of contact names, so if DCCP wants to stay away from
well-known ports, I'd recommend moving in the direction of contact
names. However, given some of the issues raised at the meeting
regarding feature creep, NAT traversal, and so forth, it might be
better just to revert back to well-known port numbers (sigh).
- Sequence number field seems too small, even granting that it's
counting packets rather than octets. One possible way of fixing
this would be to identify a few fields in the packet header that
could reasonably be turned into options instead, then rearrange to
widen sequence numbers to 32 bits. CCVAL and NDP look (to me) like
candidates for fields that could be turned into options.
- In reading the spec, my overall impression was that the balance of
SHOULDs to MUSTs was weighted a bit heavily towards SHOULDs. While
I undestand the desire not to forbid anything that's not obviously
going to cause harm, the flip side of that is a desire to avoid
unnecessary complexity. Excessive use of SHOULD instead of MUST
tends to result in implementations that have to test for a lot of
conditions and handle all possible cases.
- "Californian feature negotiation" ("Please do A", "I'd rather do B",
"Please do A", "I'd rather do B", "This isn't working, goodbye").
My impression of the negotiation mechanism was that it was prone to
looping, which the designers clearly realized since they added an
explicit loop-breaking mechanism. I'm more comfortable with
mechanisms like TELNET's option negotiation in which one party
approaches the other on bended knee and no looping is possible.
Since the Vienna meeting I've received mail describing a change to
the feature negotiation mechanism. I haven't gone over this with a
fine tooth comb, but on a quick read it does seem to be heading in
the direction I was suggesting.
- The "slow receiver" mechanism is a good idea, but I think that it
needs to convey more explicit information to the sender, since
otherwise the sender is left guessing as to what the receiver wants
it to do. Entirely too much of TCP is based on one party guessing
about the other party's state, I'd rather avoid repeating that mess
in DCCP at least in cases where an explicit mechanism is easy to
provide. See, eg, the discussion of the sender -increasing- its
sending rate in response to receiving a slow receiver option: while
this might be a reasonable thing to do, I'd be a lot more
comfortable with doing it because the receiver said to do so.
- I really like having the ability to put data in the connection
request (that's another thing I miss from Chaosnet). As currently
written, however, there are so many caveats about how this is
handled that it doesn't look like an application can ever rely on it
for anything. I recommend fixing that to make the mechanism useful.
- There are a lot of places in the document where the motivation for
doing things in a particular way isn't obvious. I strongly suspect
that there is a rationale in all (or at least most) of these cases,
but it's hard to figure out from the raw spec. Dunno whether it'd
be better to address this via inline explanation or a companion
document, that's partly just a matter of style.
- I'm not convinced that the mobility stuff is the potential
complexity of making it work (eg, in the presence of NAPTs).
- It might be useful to have an optional text error message in
addition to the numeric error codes.
- 16-bit ones complement sum isn't wonderful, but it's well-understood
and we know how to update it incrementally, which might matter if
one expects this protocol to be able to traverse NATs.
- At the time of the Vienna meeting, I was pretty sure that the
partial checksum stuff wasn't worth the trouble. I'm still not
convinced that it's a good idea, but subsequent discussion (at and
after the IAB plenary) helped me to understand the issues better.
I agree that, -if- one is to support partial checksums, it needs to
be done here, and this is a reasonable way of doing it. The open
question is a more fundamental one of whether we should support
partial checksums at all, and the verdict on that is still out.
Speculating wildly, one possible outcome of this debate could be
something like a pronouncement that partial checksums should only be
used in applications whose specification explictly states that doing
so is ok. But even that has interesting interactions with, eg,
IPsec (the juxtaposition of the wiretapping and partial checksum
discussions at the IAB plenary was particularly ironic).
----- End forwarded message -----
_______________________________________________
dccp IETF mailing list: dccp@ietf.org
list info: https://www1.ietf.org/mailman/listinfo/dccp
wg charter: http://www.ietf.org/html.charters/dccp-charter.html