[net2-wg] Collection interface
Philip Levis
pal at cs.stanford.edu
Tue Dec 27 10:22:31 PST 2005
On Dec 26, 2005, at 2:30 PM, Omprakash Gnawali wrote:
> Phil, thanks for your comment. What I was saying about the existence
> of Intercept interface and end-to-end reassembly are contradictory. If
> we provide the Intercept interface and fragmentation is allowed, we
> would have to reassemble the packets on a per-hop basis.
>
> The real question here seems to be if we want the application writers
> to do their own fragmentation or should the collection layer provide
> fragmentation. We should decide this based on how common the two cases
> are:
>
> 1. Streaming data or data logically divided into small chunks. You are
> already planning to call a series of Collect call every epoch or
> logical slice of the data. For this scenario, it does not seem helpful
> to provide fragmentation by the collection protocol because
> "fragmentation" is part of the application logic and it is natural to
> make several Collect calls.
>
> 2. Periodic chunks of data that do not fit in a packet. For example,
> you operate a camera and the image that it returns is 1K. Or, you
> command a vibration sensor for two seconds and the data it generates
> is 500 bytes. In such scenarios when the data is generated in one-shot
> and is logically one unit of data, the application developer will have
> to provide fragmentation functionality.
>
> For the second scenario, I still think it will be useful to have
> fragmentation provided by the collection but I can not decide how
> common the second scenario is.
>
There's another way to look at this problem, which is to consider
whether you can implement one solution on top of the other.
A general assumption in existing TinyOS collection layers (e.g.,
MintRoute) is that you could implement some kind of bulk data
transfer on top of their routing engine. E.g., it's possible to use
Intercept to take advantage of the built tree but actually perform
per-hop fragmentation/assembly. Of course, this introduces overhead
in terms of packet headers which might be unnecessary. So while you
*can* do it, an integrated solution tends to be more efficient (and a
lot more work).
I think it's clear that bulk data transfer is a class of network
protocol that some applications need. However, I'd argue that its
requirements, in terms of buffering, ACK/NACK, and failure edge
cases, mean that it probably deserves a completely separate
treatment. The best analogy I can come up with is collection:UDP ::
bulk data transfer:TCP. Following the analogies, it also makes sense
if the two don't necessarily have the same interface.
I think that, for now, we should focus on the simpler case: datagram-
based collection. There's no question that chunk-based collection is
needed, but it's a more difficult case. Maybe that should be item 3
on our agenda?
> NACK will probably be preferable in most cases but I think it is up to
> the designer of the forwarding engine to implement whatever is
> appropriate for that particular engine. So, my preference is to not
> make assumptions about NACK/ACK. Most forwarding engines will probably
> only offer best-effort reliability - nothing beyond per-hop
> retransmission to enhance reliability.
>
I am very leery of end-to-end, rather than per-hop, re-assembly. I
know that Sukun Kim's STRAW protocol took this approach. The issue is
that over multiple hops you're going to see an increase in packet
loss, which can be much more easily repaired on a per-hop basis. E2E
also requires a reverse path, which is possible, but introduces a
whole new level of protocol complexity.
Phil
-------
"We shall not cease from exploration
And the end of all our exploring
Will be to arrive where we started
And know the place for the first time."
- T. S. Eliot, 'Little Gidding'
More information about the net2-wg
mailing list