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

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

 



On Nov 20, 2009, at 9:21 PM, Phelan, Tom wrote:

> Hi Michael,
> 
> Thanks for the info on SCTP.  That makes it sound like SCTP and DCCP encaps could be high-level-approach compatible.  Is there a draft you're working from for SCTP encap?  The last one I saw was substantially different from what you describe.
Hi Tom,

the last was is outdated. It was written before I implemented the stuff in
the SCTP implementation of FreeBSD and Mac OS X.
I'm planning to update it for the next IETF.

Best regards
Michael

> 
> Tom P.
> 
>> -----Original Message-----
>> From: Michael Tüxen [mailto:Michael.Tuexen@xxxxxxxxxxxxxxxxx]
>> Sent: Friday, November 20, 2009 3:18 PM
>> To: Phelan, Tom
>> Cc: gorry@xxxxxxxxxxxxxx; Pasi Sarolahti; DCCP working group
>> Subject: Re:  One ring to rule them all (generic UDP encap of
>> transports)
>> 
>> On Nov 20, 2009, at 8:07 PM, Phelan, Tom wrote:
>> 
>>> 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.
>> We use IP Header/UDP/SCTP when encapsulating SCTP in UDP.
>> Please note that SCTP does NOT use a pseudoheader for checksum
>> computation.
>> The SCTP checksum (actually a CRC32c) is computed only over the SCTP
>> packet, not taking into account anything from the IP header.
>>> 
>>> 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.
>> SCTP works, we also use the UDP checksum. Since it is computed normally
>> by the NIC it is not that much of a performance issue. And I thought
>> it is better to do the same for IPv4 and IPv6.
>>> 
>>> 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...
>> We also need SCTP specific rules for dealing with multihoming and NAT
>> traversal... But that is specific.
>>> 
>>> 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.
>> The does NOT work for SCTP, since the UDP ports on different paths might
>> be different, due to independent NAT boxes on different paths. SCTP,
>> however,
>> does require one port for all paths.
>> So for SCTP we really need the IP Header/UDP Header/SCTP Packet
>> approach...
>> 
>> Best regards
>> Michael
>>> 
>>> 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