Re: [DNSOP] Mirja Kühlewind's Discuss on draft-ietf-dnsop-session-signal-12: (with DISCUSS and COMMENT)

Ted Lemon <mellon@fugue.com> Thu, 02 August 2018 06:36 UTC

Return-Path: <mellon@fugue.com>
X-Original-To: dnsop@ietfa.amsl.com
Delivered-To: dnsop@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 4EB84130E62 for <dnsop@ietfa.amsl.com>; Wed, 1 Aug 2018 23:36:31 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.91
X-Spam-Level:
X-Spam-Status: No, score=-1.91 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_DKIMWL_WL_MED=-0.01] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fugue-com.20150623.gappssmtp.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ry4DGocD2tSQ for <dnsop@ietfa.amsl.com>; Wed, 1 Aug 2018 23:36:27 -0700 (PDT)
Received: from mail-it0-x22a.google.com (mail-it0-x22a.google.com [IPv6:2607:f8b0:4001:c0b::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 20359130E35 for <dnsop@ietf.org>; Wed, 1 Aug 2018 23:36:23 -0700 (PDT)
Received: by mail-it0-x22a.google.com with SMTP id g191-v6so1749957ita.0 for <dnsop@ietf.org>; Wed, 01 Aug 2018 23:36:23 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fugue-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=8jCYMTj8e+tdIce/jv5iYvXkiY0ZK62KUKMPOjuTraI=; b=GZkY+74/wtS8aHWD1DMuoqKUyGDOD1hcHl57CGvBnHRWhWhwLioJfEfGHtNEBGdI43 bTZpmx3svhUON1vo7kdDDBdVJ6aUbgbzIHoXoo7NsxEKE3llLoAncvigeUFKj4Zr3n/i UX5rcVhAonk54QznPZyEX6uM1A9QWaFubZp955tWvS+o3bGl6QXhzCCP/0LOeT3naBY6 tT2E96YANgF+7jXBkjDKLL7s+Iukzc9EL/6ckVxqApBB3UQLiRUfCTs0Vv5i5MvtYlfb vxtocnh4Uf09Y5trso4fvb+1IG3ydTz0NZZ5gsr0oKB92/FU0okCBbnQUHNxKRnuiWlf tG5A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=8jCYMTj8e+tdIce/jv5iYvXkiY0ZK62KUKMPOjuTraI=; b=tMtO2l44YGH+9bR4Zb/vdpbK1K5psfUUrwoosr0LGQvTqRxEzTbQ/k6CjSv3mi4bqg 6zb1AHAU22x1bahaCYeozrmhu0kO6p7x0BR87JqJc0/EOkYeE5l8/fdkutZoiVloSfcC cxGxuPOiQeGlw4RZRJthQfWAxUFBkNaG5PB0vxQA5yQn2twMkmNhZ18RNI33jeaLClyL mWf5uweGgTvfCLmBy38MeJscrint0+Rzd9oP07Guy0CJeD+HLiJ6hUAN265zwP0svmfd 1ZQOhObAUq6K6rdP8EK+5t3mcV8T/Ckell3bCy44u1q7cbmlstFRsYbYK7s+2lqRj45G b/dg==
X-Gm-Message-State: AOUpUlGbAg9S3y9xuJQanpAMTVpIIHCDEAEN/pHPknYapYPdTkYtkaUC JsNnsBHKhPbQZbK8mGexE4DJE4kjBmJL9gW2OolyHA==
X-Google-Smtp-Source: AAOMgpe0KaP0j509VtCu571T+14cztbZfaqsQInOuGAZt/tJePTvxKscziQznXcF1Ardio/X/ldTXSvc2Pp5dkA6NkA=
X-Received: by 2002:a24:3d01:: with SMTP id n1-v6mr1363760itn.144.1533191782187; Wed, 01 Aug 2018 23:36:22 -0700 (PDT)
MIME-Version: 1.0
Received: by 2002:a4f:b442:0:0:0:0:0 with HTTP; Wed, 1 Aug 2018 23:35:41 -0700 (PDT)
In-Reply-To: <153298197116.8154.9156104510824888266.idtracker@ietfa.amsl.com>
References: <153298197116.8154.9156104510824888266.idtracker@ietfa.amsl.com>
From: Ted Lemon <mellon@fugue.com>
Date: Thu, 2 Aug 2018 02:35:41 -0400
Message-ID: <CAPt1N1kxsd5Y_=r_NwJ3E8fexycOw_wth8BdxT0U3VtqxDPYZg@mail.gmail.com>
To: =?UTF-8?Q?Mirja_K=C3=BChlewind?= <ietf@kuehlewind.net>
Cc: The IESG <iesg@ietf.org>, draft-ietf-dnsop-session-signal@ietf.org, Tim Wicinski <tjw.ietf@gmail.com>, dnsop-chairs <dnsop-chairs@ietf.org>, dnsop WG <dnsop@ietf.org>
Content-Type: multipart/alternative; boundary="0000000000008cdd9105726e078a"
Archived-At: <https://mailarchive.ietf.org/arch/msg/dnsop/RbP9SG9h4hY9wKeb9a3eKQz7el4>
Subject: Re: [DNSOP] =?utf-8?q?Mirja_K=C3=BChlewind=27s_Discuss_on_draft-ietf?= =?utf-8?q?-dnsop-session-signal-12=3A_=28with_DISCUSS_and_COMMENT=29?=
X-BeenThere: dnsop@ietf.org
X-Mailman-Version: 2.1.27
Precedence: list
List-Id: IETF DNSOP WG mailing list <dnsop.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dnsop>, <mailto:dnsop-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dnsop/>
List-Post: <mailto:dnsop@ietf.org>
List-Help: <mailto:dnsop-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dnsop>, <mailto:dnsop-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 02 Aug 2018 06:36:32 -0000

On Mon, Jul 30, 2018 at 4:19 PM, Mirja Kühlewind <ietf@kuehlewind.net>
wrote:

[Skipping the DISCUSS, which I hope we have already addressed.]

1) sec 3: I really find it a bit strange that there is normative language
> about
> error handling (as well as in the "same service instance" definition part)
> in
> the terminology section. Maybe move those paragraphs somewhere else...?
> Also
> the part about "long-lived operations" and messages types provides far more
> information than just terminology and I would recommend to also move it
> into an
> own section or maybe just have it as part of the intro.
>

I happen to agree with this criticism, and this issue was discussed, but we
decided not to make this change, because it would have been a fairly
massive overhaul of the document.


> 2) Maybe call section 5 "Protocol specification" instead of "Protocol
> details"...?
>

That would imply that you might not have to read the rest of the document.


> 3) Sec 5.1: "DSO messages MUST be carried in only protocols and in
> environments
>    where a session may be established according to the definition given
>    above in the Terminology section (Section 3)."
> I don't get this. Which part of section 3? Given section 3 is on
> terminology
> and this is a normative statement, I would recommend to spell out here
> explicitly what is meant. Do you mean the protocol must be
> connection-oriented,
> reliable, and providing in-order delivery? Any thing else? However, given
> that
> you say two paragraphs onwards that this spec is only applicable for the
> use
> with TCP and TLS/TCP, do you even need to specify these requirements
> normatively?
>

We've since updated this text, but it didn't address your concern.   I've
updated it further as follows:

DSO messages MUST NOT be carried in protocols and
environments where a session can't be established.   For example,
DNS over plain UDP {{?RFC0768}} is not appropriate since it does not provide
in-order message delivery, and, in the presence of NAT gateways and
firewalls
with short UDP timeouts, it cannot provide a persistent bi-directional
communication channel unless an excessive amount of DSO keepalive traffic
is used.
UDP also doesn't provide a way to mark the start of a session and the end
of a session.


> 4) sec 5.1 "It is a common
>    convention that protocols specified to run over TLS are given IANA
>    service type names ending in "-tls"."
> Not sure this is true. Isn't it usually just an "s" at the end? Or with
> registry are you talking about?
>

https://www.iana.org/assignments/service-names-port-numbers/
service-names-port-numbers.xml

I think the "s" suffix is more for URIs and /etc/services (which is
informal).   I've added a reference to the registry.


> 5) sec 5.1: "In some environments it may be known in advance by external
> means
>    that both client and server support DSO, ..."
> I guess the client and server also need to know if TLS is supported or not.
> Maybe spell this out as well.
>

This is specified in DNS-over-TLS.   Additionally, for example
draft-ietf-dnssd-mdns-relay explicitly requires TLS.   It's also covered in
the paragraph before this one.  This paragraph is actually a separate
topic: whether the client can assume the server supports DSO and vice
versa, as opposed to negotiating and falling back.


> 6) sec 5.1: "... therefore either
>    client or server may be the initiator of a message."
> Maybe s/initiator of a message/initiator of a message exchange/
>

It's not necessarily an exchange.


> 7) sec 5.1.2: "Having initiated a connection to a server, possibly using
> zero
> round-
>    trip TCP Fast Open and/or zero round-trip TLS 1.3, a client MAY send
>    multiple response-requiring DSO request messages to the server in
>    succession without having to wait for a response to the first request
>    message to confirm successful establishment of a DSO session."
> Why is the ability to send more than one request related to TCP Fast
> Open/TLS1.3 0-RTT? These are two independent mechanisms to speed up
> processing.
> Mentioning TCP Fast Open/TLS1.3 0-RTT here is rather confusing.
> Respectively I
> also don't think that the sentence: "Similarly, DSO supports zero
> round-trip
> operation." is describing quite the same.
>
> 8) Further please provide references to TCP Fast Open and TLS1.3 and maybe
> rephrase this paragraph to use normative language: "Caution must be taken
> to
> ensure that DSO messages sent before the
>    first round-trip is completed are idempotent, or are otherwise immune
>    to any problems that could be result from the inadvertent replay that
>    can occur with zero round-trip operation."
> Maybe just:
> "DSO messages sent with TLS1.3 0-RTT before the TLS handshake is completed
> or
> in TCP SYN data with use of TCP Fast Open MUST be idempotent." However,
> this is
> actually already required by TLS1.3 and TFO, so there is after all no need
> to
> just rephrase this requirement here (at least not normatively). I think it
> would be more useful for every DSO message type to specify if it can be
> sent in
> 0-RTT or not and require this for specification of future TLVs.
>

I agree the text is a bit awkward: this section is only talking about 0rtt
sessions.   I've updated it to say this:

DSO permits zero round-trip operation
using TCP Fast Open {{?RFC7413}}
and TLS 1.3 {{?I-D.ietf-tls-tls13}}
to reduce or eliminate
round trips in session establishment.

A client MAY send multiple response-requiring DSO messages using TCP fast
open or TLS 1.3 early data,
without having to wait for a response to the first request message
to confirm successful establishment of a DSO session.

Also, I added the following to security considerations based on ekr's
related comment:

9) sec 5.1.3: "In cases where a DSO session is terminated on one side of a
>    middlebox, and then some session is opened on the other side of the
>    middlebox in order to satisfy requests sent over the first DSO
>    session, any such session MUST be treated as a separate session."
> This sentence seems a bit non-sensical, which probably isn't great for a
> normative sentence. If a session is terminated and open of the other end,
> doesn't that mean that you have two sessions?
>

The point is to exclude the implementation doing something clever, which
would indeed be nonsensical.


> 10) sec 5.1.3: "A middlebox that is not doing a strict pass-through will
> have
> no way to
>    know on which connection to forward a DSO message, and therefore will
>    not be able to behave incorrectly."
> I'm not sure I understand this sentence. Can you clarify?
>

We added this in response to a similar comment:

To illustrate the above, consider a network where a middlebox
terminates one or more TCP connections from clients and multiplexes the
queries therein over a single TCP connection to an upstream server.
The DSO messages and any associated state are specific to the individual
TCP connections.  A DSO-aware middlebox MAY in some circumstances be
able to retain associated state and pass it between the client and
server (or vice versa) but this would be highly TLV-specific.  For
example, the middlebox may be able to maintain a list of which clients
have made Push Notification subscriptions {{?I-D.ietf-dnssd-push}} and
make its own subscription(s) on their behalf, relaying any subsequent
notifications to the client (or clients) that have subscribed to that
particular notification.


> 11) As already briefly mentioned by Ben, there is quite some redundant
> text in
> sec 5 (with 5.2) for handling of message IDs and TLVs. Given this text is
> normative, I would really recommend to only specify it clearly once. Please
> also check the rest of the doc further things that are specified
> normatively
> multiple times. It usually makes it must clearer to specify it only once,
> at
> least normatively, at the appropriate position in the doc.
>

I think you may be seeing two different places where the message id must be
zero as saying the same thing, but they are not.   Or maybe I'm just
confused, but I don't see a change to make here.


> 12) sec 5.3.1: "When a DSO unacknowledged message is unsuccessful for some
> reason, .." What does unsuccessful mean here? Can you clarify?
>

This has been updated in response to a previous comment:

When an unacknowledged DSO message type is received (MESSAGE ID field is
zero), the receiver SHOULD already be expecting this DSO message type.
{{unrecognized}} describes the handling of unknown DSO message types.
Parsing
errors MUST also result in the receiver aborting the connection.
When an unacknowledged DSO
message of an unexpected type is received, the receiver should abort the
connection.
Other internal errors processing the unacknowledged DSO message are
implementation dependent as to whether the connection should be aborted
according to the severity of the error.

13) sec 6.5.2: "A corporate DNS server that knows it is serving only
> clients on
> the
>    internal network, with no intervening NAT gateways or firewalls, can
>    impose a higher keepalive interval, because frequent keepalive
>    traffic is not required."
> I guess in this scenario it is probably most appropriate to not send any
> keep-alives…
>

I think I already addressed this in my response to your DISCUSS—please let
me know if you still see an issue here.


> 14) sec 6.6: "   o  The server application software terminates unexpectedly
> (perhaps
>       due to a bug that makes it crash)."
> This bullet point does not really make sense to me because at that time
> when
> the app is crashed there is no way for the server anymore to perform any
> actions.
>

Right, the connection is terminated as a result of the server crashing, not
as the result of the server noticing that it crashed and deciding to
terminate the connection. :)


> 15) sec 7.1: "When a client is sending its second and subsequent Keepalive
> DSO
>    requests to the server, the client SHOULD continue to request its
>    preferred values each time. "
> I don't understand the SHOULD here.. what else should be client put in
> these
> field instead...?
>

It could repeat back to the server what the server sent it.


> 16) sec 7.1.2: "Once a DSO Session has been established, if either
>    client or server receives a DNS message over the DSO Session that
>    contains an EDNS(0) TCP Keepalive option, this is a fatal error and
>    the receiver of the EDNS(0) TCP Keepalive option MUST forcibly abort
>    the connection immediately."
> This is normatively specified multiple time (3?) in the doc. Please
> consider to
> only specify it once where most appropriate (probably section 7.1.2)
>

It appears in two places, not three, and in both places it makes sense to
say it.   The requirements are consistent in both places.   I would rather
say it in both places than have someone skim the document and miss it.   If
we had two places in the document where that were all that was said, I'd
agree, but both places where this is specified are contextually
appropriate—I don't agree that 7.1.2 is better.


> 16) sec 7.1: "The Keepalive TLV is not used as an Additional TLV."
> This is redundant with the normative sentence in the next paragraph. Maybe
> just
> remove this sentence...?
>

WFM!


> 17) +1 to Ben's discuss regarding the reconnection of clients. A TCP RST
> can be
> sent for many reasons and waiting for an hour seems not appropriate. I
> would
> rather recommend to log an error and directly try to reconnect.
>

 I haven't seen Ben's response to what Tom said about this, but the context
for this is that the client aborted the connection because it detected an
implementation error on the server.   Waiting an hour is actually pretty
optimistic.