Finally reached the end of the thread.
==> FR uses DCCP-Data because FR measures congestion on keepalives.
Congestion on things like Syncs are not measured in the same way, since Syncs
are "non-data packets". While DCCP does attempt to measure congestion on
Syncs it charges the congestion to the ack stream (more or less).
==> Sync is not appropriate for keepalives because Syncs require immediate
acknowledgement. Many keepalives don't.
==> I sympathize with, but do not approve of, new packet types for keepalives.
It is extravagant to use two packet types on keepalives (and why do we need
a special keepalive ack anyway?), especially when many types of keepalives are
better served in other ways (i.e., Sync, application-level).
Here are the options I'd support. In all these options zero-length
Data/DataAck packets are used for transport keepalives. In some of the
options, the application can also use them for application keepalives. In
option (3'), the receiver can differentiate transport and application
keepalives, although I'd argue strongly that the better way to do this is to
have an application-level keepalive message with nonempty data.
(1) The original FR rule (the receiver never gets notified of zero-length
datagrams, the sender cannot send them).
(2) A modified FR rule for receiving (the receiver does not get notified of
zero-length datagrams via the normal API, but it might using a special API).
The sender application can send zero-length datagrams, but the receiver
application won't normally get them.
(3) Another modified rule, as follows: The receiver doesn't get notified of
zero-length datagrams unless it asks specifically to receive them. The sender
application can send zero-length datagrams.
(3') A version of (3), plus an option that CCIDs set on zero-length datagrams
that WERE NOT generated by an application, allowing a receiver to tell whether
transport or application generated a zero-length datagram.
I don't understand Arjuna's problem with zero-length application data areas
("my belief is that DCCP-data packets have zero length application area has no
meaning"). As Colin points out you can send zero-length UDP datagrams today.
Eddie
Phelan, Tom wrote:
Hi Arjuna,
[snipped]
The obvious question that arises is why does the application send a
zero-length datagram? And why should the DCCP sender send any
DCCP-data
packet when the application has nothing to send! So my belief is that
DCCP-data packets have zero length application area has no meaning.
[Tom P.] Well, we have an existence proof in the DCCP over RTP spec --
applications with nothing to send want to keep NAT/Firewall pinholes
open. There is no information in the packet that the receiver needs to
act upon, but middleboxes need to see the traffic. We can argue about
which level is the proper place to provide this function...
If we believe that we should not use zero byte DCCP-data packets, then
we
could either:
1)Have a new option in DCCP-data packets (but we would have nothing in
the
application area, so we come back to square 1).
Or
2)Have two new DCCP packets called DCCP-Alive and DCCP-AliveResp and
the
spec (RFC4340) allows you to have new DCCP packet formats - which
looks
more
reasonable to me.
[Tom P.] Option 2 sounds more architecturally consistent to me too.
Tom P.