One ring to rule them all (generic UDP encap of transports)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Gorry,

You've raised a couple of issues below that I think we could better keep
track of if we have a new thread, so I've renamed the subject here.
What I'd like to discuss here is the thought that we can have a generic
approach to UDP encapsulation of transport protocols.  Since we have no
concrete approach on the table, it's a little difficult to comment, but
here are my thoughts on what I've heard bandied about.

Just tunnel it -- To me this means IP Header/UDP Header/IP
Header/Transport Header.  The problem is the addresses in the inner IP
Header.  In tunneling, the endpoints of the tunnel need to understand
the addresses in the inner IP Header.  But in the usual situation with
NAT in between client and server, at least one of the addresses won't
make sense to the receiving endpoint.  That address will be from the
private address realm of the other endpoint, and could duplicate an
address used by another device communicating with the receiver.  So what
do you do with these inner IP addresses?  Ignore them?  What do you send
in the return packets?  How do you form a unique 4-tuple that identifies
the socket (source address/port + destination address/port) when two
endpoints could have the same source address?

So drop the inner IP Header -- This gives you IP Header/UDP
Header/Transport Header.  I think of this as "encapsulation" rather than
"tunneling".  You can now make the 4-tuple from the IP addresses and the
Transport Header ports.  But this breaks the checksum in the Transport
Header.  Where are the IP addresses used in the checksum pseudo-header?
>From the IP Header?  But those might be changed en route.

So change the rules for checksums -- Fortunately, TCP, SCTP and DCCP use
pretty much the same rules for computing the checksum field.  Saying
encapsulated transports ignore their own checksum field and use the UDP
checksum probably works here.

But has anything else been broken? -- For DCCP, yes.  Partial checksums
don't work.  Also, I believe SCTP has a stronger checksum option that I
believe has been broken by this approach so far.  You still need some
protocol-specific rules.

So it looks to me like completely generic UDP encap is not possible,
although mostly generic is possible.  The mostly-generic draft would say
use IP Header/UDP Header/Transport Header, use these generic rules for
dealing with the encapsulated checksum, and then use these
protocol-specific rules for dealing with protocol-specific issues.

This is the approach taken by dccp-natencap, plus some additional
optimizations -- since the DCCP checksum field is now useless, why carry
it?  And once you eliminate that, the DCCP header can be made more
efficient.  Are these additional optimizations worth it?  I'd like to
hear opinions...

Note that another approach that's been talked about is to eliminate the
ports from the inner Transport Header and use the ports in the UDP
Header to indicate the actual application.  This seems unworkable to me
in that it means that a port can only be used for one transport and
that's likely to break all sorts of things.

Tom P.

> -----Original Message-----
> From: dccp-bounces@xxxxxxxx [mailto:dccp-bounces@xxxxxxxx] On Behalf
Of
> Gorry Fairhurst
> Sent: Friday, November 20, 2009 11:48 AM
> To: Pasi Sarolahti
> Cc: DCCP working group
> Subject: Re:  Soliciting input on UDP encapsulation for DCCP
> 
> A few comments in-line, some of which I raised last time, but don't
> recall the answers.
> 
> 
> Pasi Sarolahti wrote:
> > Hello,
> >
> > During the Hiroshima meeting last week some support (and some
concerns)
> > was voiced about working on UDP encapsulation for DCCP, with a
> > suggestion to allocate an UDP port to be used for DCCP
encapsulation. To
> > make this happen, it was proposed that we bring back
> > draft-phelan-dccp-natencap, for the WG to submit it for Experimental
> > RFC. Tom has now updated the draft and the refreshed version can be
> > found at http://tools.ietf.org/html/draft-phelan-dccp-natencap-03
> >
> > With the above background in mind, I'm now looking for input on the
> > following questions:
> >
> > a) in your opinion, should the DCCP WG start working on UDP
> > encapsulation for DCCP?
>  >
> No, or at least unsure.
> 
> I'd love to see a tunnel encapsulation, however I'd also like to
> consider the feasibility of a common method for all transports - or at
> least one that handles UDP-Lite, SCTP and DCCP consistently with the
> possibility of later extension. If I were in the DCCP meeting I would
> have tried to push on this one and see what people said, hence I'd be
> keen to seen feedback via the list. If there are good reasons to
> continue separate approaches for each, that would be fine, but I'd
> expect to see this rationale somewhere in the draft.
> 
> > b) if yes, do you think draft-phelan-dccp-natencap is a good
starting
> > point for this, and therefore should become a WG document?
> >
> Maybe, although I would think it is worth considering a straight UDP
> encapsulation that does not adjust the position and order of the
fields.
> 
> > In addition, please speak up if you have other technical comments
about
> > the draft.
> >
> Separate email sent to the list.
> 
> > Thanks!
> >
> > - Pasi
> >
> 
> Finally, I think I'd say it was essential that any encapsulation draft
> also notes the drawbacks of this mode, and hence advocates native
> transport were possible!
> 
> e.g.
> No currently defined support for ECN
> No currently defined support for shared PMTUD
> Restricted support for partial coverage
> 
> - The pros would seem to outweigh the cons, but there are
disadvantages.
> 
> Gorry
> 
> P.S. I also believe this should be discussed at TSVWG, since there is
> already a proposal for an SCTP encapsulation.



[Index of Archives]     [Linux Kernel Development]     [Linux DCCP]     [IETF Annouce]     [Linux Networking]     [Git]     [Security]     [Linux Assembly]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [DDR & Rambus]

  Powered by Linux