Re: [udp-encap rev2] discussion/comments

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

 



On 9 Oct 2010, at 07:37, Andrew Lentvorski wrote:

> On 10/8/10 7:25 AM, Phelan, Tom wrote:
> 
>> [TomP] There have been several good comments on this already, but one
>> thing I'd like to add is, how can this work?  The problem is that the
>> DCCP checksum includes the IP addresses, which have potentially been
>> changed along the way.
> 
> Ah, the DCCP checksum includes fields that aren't part of its packet 
> (the pseudoheader) with no way to turn that off.  That's what I've been 
> missing.

You'll find that TCP, UDP, and all other sane transport protocols also incorporate
this demultiplexing pseudoheader check. This is arguably an artefact of the
IP/TCP split happening after the initial design. (IPv6 perpetuates it, repeating
the layering overlap, and again placing the onus on the transport to get
the demultiplexing check right - rather than doing the reverse by say
specifying some transport fields such as port as part of the IP header,
and making it an IP-level check. But then port numbers would be part
of IP...)

This is pretty fundamental to Internet transport protocol design.


> Wouldn't we be better off having an actual option (negotiable option, 
> packet flag, DCCP version bump, whatever) that allows us to say "DCCP 
> packet checksummed without the pseudoheader"?  Then you can just pack 
> everything up in a UDP packet and forget about it.  If the UDP pathway 
> checksums everything, great.  If the UDP pathway completely dumps the 
> checksums, well, you don't care either.

We do, because turning up at the wrong node and handing corrupt data
up the stack becomes much more likely if the checksum and its demultiplexing
check are turned off.

And, of course, having a bit saying 'checksum off' is akin to
special-casing a zero-value checksum. Interesting things happen if an
error flips that bit.


> This is effectively what the encap is doing, just in an implicit 
> mechanism rather than explicitly.  And then forcing the UDP layer to 
> checksum the *entire* packet to protect itself, even if we have told 
> DCCP that we only want CsCov == 1 (No application payload coverage).

Variable checksum coverage is a lost cause. Even if it saves a little
checksum processing time, it's likely that channel MAC framing CRCs still
cover the entire packet -- so channel errors are prevented. Errors in
router memory trashing the tails of packets, or it being trashed while
being handed to the MAC layer, remain, but do you want to preserve that
trashing?

> I'm still concerned about this through multiple NAT layers, but I need 
> to think about that a little more.

Some reading may help, but the RFCs and most textbooks aren't very good at
explaining decisions behind design choices. That leaves Stevens vol. 1,
which doesn't contain lessons illustrated by modern transport protocol 
examples - and isn't bothered by NATs.

Lloyd Wood
L.Wood@xxxxxxxxxxxx
http://sat-net.com/L.Wood






[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