[dtn] Martin Duke's Discuss on draft-ietf-dtn-tcpclv4-22: (with DISCUSS and COMMENT)

Martin Duke via Datatracker <noreply@ietf.org> Sun, 08 November 2020 00:41 UTC

Return-Path: <noreply@ietf.org>
X-Original-To: dtn@ietf.org
Delivered-To: dtn@ietfa.amsl.com
Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 1EDD13A0E12; Sat, 7 Nov 2020 16:41:46 -0800 (PST)
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
From: Martin Duke via Datatracker <noreply@ietf.org>
To: The IESG <iesg@ietf.org>
Cc: draft-ietf-dtn-tcpclv4@ietf.org, dtn-chairs@ietf.org, dtn@ietf.org, Edward Birrane <edward.birrane@jhuapl.edu>, edward.birrane@jhuapl.edu
X-Test-IDTracker: no
X-IETF-IDTracker: 7.21.0
Auto-Submitted: auto-generated
Precedence: bulk
Reply-To: Martin Duke <martin.h.duke@gmail.com>
Message-ID: <160479610567.30934.2651041608307943087@ietfa.amsl.com>
Date: Sat, 07 Nov 2020 16:41:46 -0800
Archived-At: <https://mailarchive.ietf.org/arch/msg/dtn/7ffUsV2qGCUd6KR9xo87gQuf9Ks>
Subject: [dtn] Martin Duke's Discuss on draft-ietf-dtn-tcpclv4-22: (with DISCUSS and COMMENT)
X-BeenThere: dtn@ietf.org
X-Mailman-Version: 2.1.29
List-Id: "Delay Tolerant Networking \(DTN\) discussion list at the IETF." <dtn.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dtn>, <mailto:dtn-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dtn/>
List-Post: <mailto:dtn@ietf.org>
List-Help: <mailto:dtn-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dtn>, <mailto:dtn-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 08 Nov 2020 00:41:46 -0000

Martin Duke has entered the following ballot position for
draft-ietf-dtn-tcpclv4-22: Discuss

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)


Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.


The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-dtn-tcpclv4/



----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

Sec 6.1. I read this sentence several times and could not figure out what it is
saying, and fear there could be interoperability problems. "When performing an
unclean termination, a
   transmitting node SHALL treat either sending or receiving a SESS_TERM
   message (i.e., before the final acknowledgment) as a failure of the
   transfer.  Any delay between request to close the TCP connection and
   actual closing of the connection (a "half-closed" state) MAY be
   ignored by the TCPCL entity."

First of all, "failure of the transfer" is ambiguous because there may be two
transfers going on, one in each direction.

Second, I would like further clarity on what it means that nodes "SHALL"
consider it "a failure of the transfer". What is actionable if it's a failure?
If nothing is actionable, it shouldn't be a SHALL. Does this mean that in
subsequent sessions I must resend the whole bundle?

Can you list some reasons why an endpoint would choose to close uncleanly? Some
motivation might provide helpful context.

Moreover the "sending or receiving" bit is confusing.
- So one option is that I'm a session that has decided to do an unclean
termination rather than a clean one. So I send SESS_TERM and then close (FIN?
RST?) the TCP connection. So if it's a FIN, I might very well get the last
XFER_ACK.  If I RST or don't get that ACK, then I do think it's clear that the
transfer is a failure, whatever that means.

- But as a receiver, how do I know that the termination is unclean? Have I made
an independent decision to close uncleanly? Am I to take the receipt of a
SESS_TERM without my having sent XFER_ACK as an unclean close? If I sent
XFER_ACK, how do I know that the sender sent it? And what does it mean, as a
receiver, that the transfer "failed" if I have all the data?


----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

Thanks for this document. I have numerous minor concerns:

Sec 4.3. "the TCP connection SHALL be closed." Can you clarify if this is a
clean close (FIN) or abort (RST)? In fact, if you always mean FIN, it might be
good to clarify that in the terminology section to indicate that there are no
RSTs anywhere.

Sec 4.3. VERSION_MISMATCH would benefit from being split into VERSION_TOO_HIGH
and VERSION_TOO_LOW. For example, if the passive is at v4 only and the active
supports v1, v2, and v3, it will take three tries to figure out that there is
no way for these nodes to communicate. Even better would be a QUIC-style
Version Negotiation message that would communicate the options in 1 RTT.

There are few items that seem to be artifacts of TLS happening after session
negotiation in v3:

Sec 4.4.3. "If certificate validation
   fails or if security policy disallows a certificate for any reason,
   the entity SHALL terminate the session"

I don't understand this; certificate validation generally occurs during the TLS
handshake, where there is no session?

Sec 4.4.3
"the active
   entity SHALL authenticate the DNS name (of the passive entity) used
   to initiate the TCP connection"
s/TCP Connection/TLS session. TCP connections don't consider DNS at all.

Sec 4.5.
"After the initial exchange of a Contact Header, all messages
   transmitted over the session are identified by a one-octet header
   with the following structure:"

Obviously, TLS handshake messages are after the Contact Header and are not
prepended by these headers. Perhaps this is an artifact from v3?

Sec 4.7
"Once this process of parameter negotiation is completed (which
   includes a possible completed TLS handshake of the connection to use
   TLS),"

The TLS handshake occurs before parameter negotiation.

Sec 5.2.4 I find it odd that each CL would have its own set of reason codes
that it will simply pass to the bundle layer. Far better for it to be a common
set of CL-agnostic errors that the bundle layer implements, as they literally
do not matter to the CL at all.