review of draft-ietf-dccp-simul-open-02

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

 



Sorry for the delay with my review.

Many times in the document NAT is cited as the reason for DCCP simultaneous
open, but really the reason is that some devices require connection to be
initiated by a 'trusted' host.  This is true of host-based firewalls, the
default policy on many firewalls, and (due to port overloading) NAPTs.  A
"traditional NAT" (which maps an IPv4 address 1-for-1 with another IPv4
address), does *not* need DCCP simultaneous open at all.  It would be useful
to clarify the real requirement for DCCP simultaneous open in the
specification.  I believe it is necessary if the DCCP server is, itself,
behind a NAT, and will only be effective if there is a way to communicate the
DCCP client's IP address and DCCP port out-of-band (e.g., SDP) -- yes?

The introduction mentions that DCCP simultaneous open can be disabled ("turned
off").  However, there is no further information regarding this.  Is there a
reason why a DCCP stack would want to disable this functionality?  As you
know, there is no way for a host to determine if specific communications might
be NATted, so it is difficult to say "turn it off if the host is not behind a
NAT".

Do both the DCCP client and DCCP server need to implement simul-open in order
for simultaneous open to be effective?


Specifics:

Section 1.2:

   In this document we do not consider use of pre-configured, static NAT
   address maps, which would also allow outside hosts to connect to the
   private network in cases (2) and (3).                         ^^^^^^
                                                                 ^^^^^^
                                  should be  "to specific hosts in the"


   A DCCP implementation conforming to [RFC4340] requires a relay server
   to perform NAT traversal.  The extension specified by this document
   updates RFC 4340 to enable DCCP NAT traversal without the aid of
   relay servers.

If the NAT is DCCP-aware (that is, supports draft-ietf-behave-dccp),
I believe a relay server is only necessary for cases (2) and (3).  This
should be clarified via something like:

   A DCCP implementation conforming to [RFC4340] and a NAT conforming 
   to draft-ietf-behave-dccp would require a DCCP relay server to perform 
   NAT traversal for cases (2) and (3).  The extension specified by 
   this document updates RFC 4340 to enable DCCP NAT traversal without 
   the aid of DCCP relay servers.

Section 2.2:

The figure has its bit numbers mis-aligned by one character.

   At the time of writing. there areo known uses of the header option
                                 ^^^^
                               "are no" ??
   ([RFC4340], sec. 5.8) with a DCCP-Listen packet.



later,

   Servers SHOULD set both Sequence Number fields to 0; clients MUST
   ignore the value of the Sequence Number fields; and middleboxes MUST
   NOT interpret sequence numbers on DCCP-Listen packets.

This seems counter to RFC4340's requirement that initial sequence 
numbers be chosen randomly.  It would be useful to point out that
the sequence number of the DCCP-Listen packet has no relationship
with the initial sequence number; a forward pointer to the design
decisions section could be further help.  Something like:

   The sequence number of a DCCP-Listen packet is not related to
   the DCCP sequence number for normal DCCP messages.  Thus, for 
   DCCP-Listen packets, servers SHOULD set both Sequence Number 
   fields to 0; clients MUST ignore the value of the Sequence Number 
   fields; and middleboxes MUST NOT interpret sequence numbers on 
   DCCP-Listen packets.

I'm not sure why middlebox interpretation is a MUST NOT; could this be
explained?  Is it to allow future use of different values?


The end of Section 2.2 cites SDP, which is RFC4566, which needs to 
be added to the informational references.


Section 2.3.1,

   The server SHOULD repeat sending a DCCP-Listen packet while in state
   INVITED, at a 200 millisecond interval and up to at most 2
   repetitions (Section 3 discusses this choice of timer interval).  The
   retransmission timer is restarted with the same 200ms interval after
   the second retransmission.  When, upon the next timeout, the server
   is still in the INVITED state, it SHOULD progress to LISTEN, and
   resume processing as specified in [RFC4340].

I found the paragraph above confusing.  The first sentence says
"send DCCP-Listen, wait 200ms, send another DCCP-Listen, wait 200ms, 
send another DCCP-Listen."  The second sentence then appears to
say the retransmission timer is restarted with the same 200ms 
value (but the value didn't previously change!).  I can't
follow the intent.  I read section 3.3, too, and I cannot figure
out how many packets are really supposed to be sent.  Section 
3.3 says:  "recommend a maximum number of 3 timeouts (2 
repetitions) results from the following considerations.".


   Server endpoints SHOULD in general ignore any incoming DCCP-Listen
   packets.  As an exception to this rule, a DCCP Server in state LISTEN
   MAY generate a Reset (Code 7, "Connection Refused") in response to a
   DCCP-Listen packet. 

This should more clearly indicate it is a DCCP Reset.

   This Reset is an indication that two servers are
   simultaneously awaiting connections on the same port.


   Fully-specified server endpoints SHOULD treat ICMP error messages
   received in response to a DCCP-Listen packet as "soft errors" that do
   not cause a state transition.

It would be useful to discuss why this is a SHOULD -- perhaps
in the Design Decisions section.  I believe it allows two hosts to 
do a simultaneous DCCP open, when those hosts are directly connected 
(that is, without a draft-ietf-behave-dccp-compliant NAT between 
them).



Section 3.1, Rationale for a New Packet Type

The last two paragraphs discuss why DCCP-Listen sequence
numbers are ignored and why they were retained.  This discussion
belongs in a different (new?) section, because it is really
explaining the design decision *of* the DCCP-Listen packet
type, rather than why a new packet type was necessary.


Section 4, Security Considerations

   The technique specified in this document exposes the state of a DCCP
   server that has been explicitly pre-configured to accept a connection
   from a known client. 

I would not characterize SDP signaling as "pre-configured".  How
about simply 'signaled'.


Later in that same paragraph, SIP is cited, whereas earlier in
the document SDP was cited.  SDP is used by SIP and RTSP, and seems
the better reference.


I believe that [NAT-APP] has been abandoned.  (I'm not saying drop
the reference, I just wanted to point it out.)

-d




[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