Re: [udp-encap rev2] discussion/comments

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

 



On 10/9/10 4:58 AM, L.Wood@xxxxxxxxxxxx wrote:
This is pretty fundamental to Internet transport protocol design.

Agreed.  But that doesn't make it automatically correct in all situations.

If the net were still end-to-end, we wouldn't even be talking about this (well, we might because of badly configured firewalls, but that's a different issue).

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.

I don't want *no* checksum. I just don't want us trying to force the checksum outside of DCCP.

I was thinking the bit/option/case/version would say "checksum without pseudoheader" rather than "checksum off". That way you still get a checksum over (at least) all the fields in the DCCP generic header.

So, in order to demultiplex incorrectly, you would have to have the IP layer hand you a packet from the wrong IP addresses (most likely of the problems), flip the "checksum without pseudoheader" bit, get an error that flips the source and dest ports to your values, get an error that puts a sequence number in the correct place, and then adjusts the checksum to the correct value.

I don't find that scenario very likely.


I find it more likely that some NAT/Router dumps a UDP checksum and prevents DCCP from working at all while some other crappy protocol blows through on UDP just fine. If we're going to *demand* a checksum (as Tom has said he is committed to doing and I'm not actually opposed to that), it should be in what DCCP controls, not what it doesn't.

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.

Really?  Must be nice to always be plugged into the mains ...

However, even if that is true, it doesn't really change my point about DCCP is the only thing that should make demands/answer demands in its own protocol.

DCCP demanding that UDP require checksums is like demanding that NAT go away. Demanding doesn't make it so.

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

Thinking about specific scenarios is what helps me.  I'm thinking about:

Standard NAT configurations (everybody thinks of these):
A(DCCPencap) -> NAT1 -> Net -> B(DCCPencap)
A(DCCPencap) -> NAT1 -> Net -> NAT3 -> B(DCCPencap)


Wireless-like configurations (normally, if you can survive 2 NATs, you can survive 3 or more NATs. Quite often, people forget about these):
A(DCCPencap) -> NAT1 -> NAT2 -> Net -> NAT3 -> B(DCCPencap)
A(DCCPencap) -> NAT1 -> NAT2 -> Net -> NAT3 -> NAT4 -> B(DCCPencap)


Aggregator-like configurations:
A(DCCP) -> Router/NATA(encap) -> NAT1 -> Net
        -> NAT3 -> NAT4 -> B(DCCP)(encap?)


And, from my point of view, all of these are running on batteries. So, CPU speed doesn't matter, but total energy consumed (total work done over time) does.

I'm most interested in the Aggregator-like configurations for selfish reasons. Router/NATA(encap) is a particular pain-point. I control A, and RouterNATA(encap). I have no control over NAT1, Net, NAT3, and NAT4. I have user-only privileges on B.

And I *know* that NAT1 dumps UDP checksums. So, yes, I have reasons behind this objection. ;)

-a


[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