Re: [Taps] New rev of udp-usage (01) and review comments on taps-transport-usage-04
Gorry Fairhurst <gorry@erg.abdn.ac.uk> Tue, 16 May 2017 14:24 UTC
Return-Path: <gorry@erg.abdn.ac.uk>
X-Original-To: taps@ietfa.amsl.com
Delivered-To: taps@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C9E63129C1E for <taps@ietfa.amsl.com>; Tue, 16 May 2017 07:24:45 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Level:
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RP_MATCHES_RCVD=-0.001] autolearn=ham autolearn_force=no
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 I7QfHeDLpaX8 for <taps@ietfa.amsl.com>; Tue, 16 May 2017 07:24:41 -0700 (PDT)
Received: from pegasus.erg.abdn.ac.uk (pegasus.erg.abdn.ac.uk [IPv6:2001:630:241:204::f0f0]) by ietfa.amsl.com (Postfix) with ESMTP id 3D369129B9D for <taps@ietf.org>; Tue, 16 May 2017 07:20:50 -0700 (PDT)
Received: from dhcp-207-152.erg.abdn.ac.uk (unknown [IPv6:2001:630:241:207:b0aa:7eb6:ebb9:62d6]) by pegasus.erg.abdn.ac.uk (Postfix) with ESMTPSA id 55A3E1B015F2; Tue, 16 May 2017 17:15:53 +0100 (BST)
Reply-To: gorry@erg.abdn.ac.uk
References: <15106817-a81c-d247-5fad-a67c5faa93f3@erg.abdn.ac.uk> <F89B153E-D761-4CDF-967D-BC46C286E3E8@ifi.uio.no>
To: Michael Welzl <michawe@ifi.uio.no>
Cc: "taps@ietf.org" <taps@ietf.org>
From: Gorry Fairhurst <gorry@erg.abdn.ac.uk>
Organization: The University of Aberdeen is a charity registered in Scotland, No SC013683.
Message-ID: <f6dbf47a-74ed-b6b4-5a88-aba11c08d983@erg.abdn.ac.uk>
Date: Tue, 16 May 2017 15:20:48 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.8.0
MIME-Version: 1.0
In-Reply-To: <F89B153E-D761-4CDF-967D-BC46C286E3E8@ifi.uio.no>
Content-Type: text/plain; charset="windows-1252"; format="flowed"
Content-Transfer-Encoding: 7bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/taps/gs4DC_LUvWyWE5hHTUvaE363UE8>
Subject: Re: [Taps] New rev of udp-usage (01) and review comments on taps-transport-usage-04
X-BeenThere: taps@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Discussions on Transport Services <taps.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/taps>, <mailto:taps-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/taps/>
List-Post: <mailto:taps@ietf.org>
List-Help: <mailto:taps-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/taps>, <mailto:taps-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 16 May 2017 14:24:46 -0000
Thanks for dealing with this, comments in-line. On 16/05/2017 15:09, Michael Welzl wrote: > Hi, > > Thanks a lot for your comments! Answers in line below, marked with [Michael]. When I say "done" I mean my local copy - still need to fix some more nits, but I thought sharing this answer already now is useful. > > Cheers, > Michael > > > > >> 2. Introduction >> >> This document presents defined interactions between applications and >> the transport protocols TCP, MPTCP, SCTP, UDP and UDP-Lite as well as >> the LEDBAT congestion control mechanism in the form of primitives and >> Transport Features. Primitives can be invoked by an application or a >> transport protocol; the latter type is called an "event". The list >> of primitives and Transport Features in this document is strictly >> based on the parts of protocol specifications that describe what the >> protocol provides to an application using it and how the application >> interacts with it. Together with [RFC8095], it provides the basis >> for the minimal set of transport services that end systems should >> >> >> >> Welzl, et al. Expires October 7, 2017 [Page 3] >> >> Internet-Draft Transport Services April 2017 >> >> >> support; this minimal set is derived in >> [I-D.draft-gjessing-taps-minset]. > > What is the relationship to usage-udp? > > ADD: > UDP and UDP-Lite protocols are analysed in Features of the User > Datagram (UDP) and Lightweight UDP (UDP-Lite) Transport > protocols [FJ16]. > > > [Michael] I addressed this, but differently because I think repeating the title of FJ16 doesn't make this sentence very readable. Here's my new version of the paragraph's last sentence: > > *** > Together with an overview > of the services provided by IETF transport protocols and and > congestion control mechanisms [RFC8095] and an analysis of UDP and > UDP-Lite [FJ16], it provides the basis for the minimal set of > transport services that end systems should support [I-D.draft- > gjessing-taps-minset]. > *** > > > >> Parts of a protocol that are explicitly stated as optional to >> implement are not covered. Interactions between the application and >> a transport protocol that are not directly related to the operation >> of the protocol are also not covered. For example, [RFC6458] >> explains how an application can use socket options to indicate its >> interest in receiving certain notifications. However, for the >> purpose of identifying primitives and Transport Services, the ability >> to enable or disable the reception of notifications is irrelevant. >> Similarly, one-to-many style sockets described in [RFC6458] just >> affect the application programming style, not how the underlying >> protocol operates, and they are therefore not discussed here. The >> same is true for the ability to obtain the unchanged value of a >> parameter that an application has previously set (this is the case >> for the "get" in many get/set operations in [RFC6458]). >> >> The document presents a three-pass process to arrive at a list of >> Transport Features. In the first pass, the relevant RFC text is >> discussed per protocol. In the second pass, this discussion is used >> to derive a list of primitives that are uniformly categorized across >> protocols. Here, an attempt is made to present or -- where text >> describing primitives does not yet exist -- construct primitives in a >> slightly generalized form to highlight similarities. This is, for >> example, achieved by renaming primitives of protocols or by avoiding >> a strict 1:1-mapping between the primitives in the protocol >> specification and primitives in the list. Finally, the third pass >> presents Transport Features based on pass 2, identifying which >> protocols implement them. >> >> In the list resulting from the second pass, some Transport Features >> are missing because they are implicit in some protocols, and they >> only become explicit when we consider the superset of all features >> offered by all protocols. For example, TCP always carries out >> congestion control; we have to consider it together with a protocol >> like UDP (which does not have congestion control) before we can >> consider congestion control as a Transport Feature. The complete >> list of features across all protocols is therefore only available >> after pass 3. > > This needs an intro to the document separate to the overview of the > process > > The document needs to start with an introduction to the document > separate of the overview of the process, so that anyone reading thsi > knows whether t read more. Perhaps this should be the first section? > >> This document discusses unicast transport protocols and a unicast >> congestion control mechanism. Transport protocols provide >> communication between processes that operate on network endpoints, >> which means that they allow for multiplexing of communication between >> the same IP addresses, and normally this multiplexing is achieved >> using port numbers. Port multiplexing is therefore assumed to be >> always provided and not discussed in this document. >> > > The above paragraph could be moved earlier perhaps as part of the introduction. > > [Michael] Done, but removed the first sentence of the paragraph, and inserted "unicast" in the right place of the existing text. > Anyway, the intro's first paragraph now doesn't talk about the processs anymore. > > > > - This is more diffserv-based, rather than historical: > OLD: >> Staying with the intention behind the application's >> ability to specify the "Type of Service", this should probably be >> interpreted to mean the value in the DSField, which is the >> Differentiated Services Codepoint (DSCP). > NEW: > The Differentiated Services (diffuser) model [RFC2475][RFC3260] > replaces this field in the IP Header assigning the six most > significant bits to carry the Differentiated Services > Code Point (DSCP) field [RFC2474] > > [Michael] Done. This also made me remove the (now redundant) sentence preceding the quoted sentence, as well as one more statement in pass 2 / SET_DSCP.TCP that talks about this field replacement but maybe wasn't correctly phrased. > > > >> 3.4. Primitives Provided by UDP and UDP-Lite >> >> The primitives provided by UDP and UDP-Lite are described in [FJ16]. > > - We should include some text on the UDP primitives here, try: > > ADD: > <t><xref target="RFC0768">The User Datagram Protocol (UDP)</xref> > States: "This User Datagram Protocol (UDP) is defined to make > available a datagram mode of packet-switched computer communication in > the environment of an interconnected set of computer networks." It > “provides a procedure for application programs to send messages > to other programs with a minimum of protocol mechanism > (..)”.</t> > > <t>The User Interface section of RFC768 states that the user interface > to an application should be able to create receive, source and > destination ports and addresses, and provide operations to receive > data based on ports with an indication of source port and address. > Operations should be provided that allows datagrams be sent specifying > the source and destination ports and addresses to be sent.</t> > > <t>UDP offers only a basic transport interface. UDP datagrams > may be directly sent and received, without exchanging messages > between the endpoints to setup a connection (i.e., no handshake > is performed by the transport protocol prior to communication). > Neither UDP nor UDP-Lite provide congestion control, > retransmission, nor do they have support to optimise > fragmentation and other transport functions. This means that > applications using UDP need to provide additional functions on > top of the UDP transport API <xref target="RFC8085"></xref>. > Guidance on the use of the services provided by UDP is provided > in the UDP Guidelines <xref target="RFC8085"></xref>. </t> > > <t> > The set of pass 1 primitives for UDP and UDP-Lite is documented > in <xref target="draft-usage-udp]"></xref> > </t> > > [Michael] Done. > > > - It is much clearer to rewrite this: > OLD: >> o CHECKSUM.UDP: >> Pass 1 primitive / event: 'DISABLE_CHECKSUM'. >> Parameters: 0 when no checksum is used at sender, 1 for checksum >> at sender (default) > NEW: > o SET_CHECKSUM_ENABLED.UDP: > Pass 1 primitive / event: 'CHECKSUM_ENABLED'. > Parameters: 0 when zero checksum is used at sender, 1 for > checksum at sender (default) > > [Michael] Done. I checked and saw that you accordingly replaced DISABLE_CHECKSUM > with CHECKSUM_ENABLED in your own draft. However, please note that there is > a leftover occurrence, in a sentence that also has an extra space before the ".". > Just do a search for "DISABLE_CHECKSUM" in draft-ietf-taps-transports-usage-udp-02. > Thanks. > > - We could not parse the old text. It is much clearer to rewrite this: > OLD: >> o CHECKSUM_REQUIRED.UDP: >> Pass 1 primitive / event: 'REQUIRE_CHECKSUM'. >> Parameter: 0 when checksum is required at receiver, 1 to allow >> zero checksum at receiver (default) > New: > SET_CHECKSUM_REQUIRED.UDP > Pass 1 primitive / event: 'SET_CHECKSUM_COVERAGE' > Parameter: 0 to allow zero checksum, 1 when a non-zero > checksum is required (default) at receiver, > > [Michael] I agree and rephrased this as you suggest, but I think your replacement > of REQUIRE_CHECKSUM with SET_CHECKSUM_COVERAGE here is an error, so I didn't do it. > Correct. > > - This primitive is not permitted for IPv6 RFC1981bis. Add "IPv4" header, suggest this: > OLD: >> o SET_DF.UDP(-Lite): >> Pass 1 primitive event: 'SET_DF'. >> Parameter: 0 when DF is not set (default), 1 when DF is set > NEW: > o SET_DF.UDP(-Lite): > Pass 1 primitive event: 'SET_DF'. > Parameter: 0 when DF is not set (default) in the IPv4 > header, 1 when DF is set. > > [Michael] Done. > > > - Suggest add defaults to sending 00: > OLD: >> o SET_ECN.UDP(-Lite): >> Pass 1 primitive / event: 'SET_ECN' >> Parameters: ECN value >> Comments: This allows a UDP(-Lite) application to set the ECN >> codepoint field for outgoing UDP(-Lite) datagrams. > NEW: > o SET_ECN.UDP(-Lite): > Pass 1 primitive / event: 'SET_ECN' > Parameters: ECN value > Comments: This allows a UDP(-Lite) application to set the ECN > codepoint field for outgoing UDP(-Lite) datagrams. Defaults > to sending '00'. > > [Michael] Done. > > > - Connections for UDP are an unusual concept, can we try: > OLD: >> o ABORT.UDP(-Lite): >> Pass 1 primitive event: 'CLOSE' >> Comments: this terminates a connection without delivering >> remaining data. No further UDP(-Lite) datagrams are sent/received >> on this connection. > NEW: > o ABORT.UDP(-Lite): > Pass 1 primitive event: 'CLOSE' > Comments: this terminates a connection without delivering > remaining data. No further UDP(-Lite) datagrams are > sent/received for this transport service instance. > > [Michael] Done. > > > - For UDP, this is just an error report, remove. > DELETE: >> o SEND_FAILURE.UDP(-Lite): >> Pass 1 primitive / event: 'SEND' >> Comments: This may be used to probe for the effective PMTU when >> using in combination with the 'MAINTENANCE.SET_DF' primitive. > > ...and: > > - Please remove UDP(-Lite), it does not make sense to do thisfrom 5.2.3. Errors: > > OLD: >> o Notification of an unsent (part of a) message >> Protocols: SCTP, UDP(-Lite) > > NEW: > o Notification of an unsent (part of a) message > Protocols: SCTP > > > [Michael] I'd like to keep this, as it's part of my effort to unify the description > of services across protocols. As you can see here, both UDP and SCTP can give > per-message errors, but TCP doesn't. You say it's "just an error report" - indeed, > your SEND primitive description contains: "Messages passed to the send primitive that > cannot be sent atomically in a datagram will not be sent by the network layer, > generating an error." My pass 2 description above only points back to the pass 1 > primitive called "SEND". So it's just a different way of saying that SEND failed. > > Your call if it makes sense to you. > > - UDP can't do this, remove UDP(-Lite) > OLD: >> o Listen, N specified local interfaces >> Protocols: SCTP, UDP(-Lite) > NEW: > o Listen, N specified local interfaces > Protocols: SCTP > > > [Michael] Done. Great catch, btw, this wasn't even a part of the pass 2 primitives. > > > > - UDP can potentially also do this (for some options on all packets) > OLD: >> o Specify which IP Options must always be used >> Protocols: TCP > NEW: > o Specify which IP Options must always be used > Protocols: TCP, UDP(-Lite) > > > [Michael] Done. > > > > - Why do this??? - Isn't it better to set flow labels per interface or for the whole stack, how can any specific transport or application pick unique labels? > TEXT: >> o Specify IPv6 flow label field >> Protocols: SCTP > > (i.e., Is this automatable by the host and a host wide > configuration?) > > [Michael] See the other thread: I think we settled this. > > > ------------------- > Get Interface MTU is missing from pass 2 and 3: > > ADD to pass 2: > > GET_INTERFACE_MTU.UDP: > Pass 1 primitive: GET_INTERFACE_MTU > Returns: Maximum datagram size (bytes) > > ADD to Pass 3, > MAINTENANCE: > > Get interface MTU > Protocols: UDP > > [Michael] I see that you have now replaced this with GET_MMS_S and GET_MMS_R > and will update my text accordingly. > Thanks - that would be correct. > > > - Move the per-datagram IP options to be placed next to the other IP options primitives: > > MOVE: >> o Specify IP Options >> Protocols: UDP(-Lite) >> > MOVE: >> o Obtain IP Options >> Protocols: UDP(-Lite) > > [Michael] Sorry, but I don't get that - there's only one other, and that's: > "Specify which IP Options must always be used". But this is in the > ESTABLISHMENT and AVAILABILITY categories, not in MAINTENANCE - indeed > TCP can only do this at the beginning, not later. Anyway, this now also > includes UDP(-Lite) as you suggested above. So where would you want > me to move this? > I agree, I see the grouping now, and that's why you had the two apart. No action needed. > > ------------------ > >> 8. Security Considerations >> >> Authentication, confidentiality protection, and integrity protection >> are identified as Transport Features by [RFC8095]. As currently >> deployed in the Internet, these features are generally provided by a >> protocol or layer on top of the transport protocol; no current full- >> featured standards-track transport protocol provides these features >> on its own. Therefore, these features are not considered in this >> document, with the exception of native authentication capabilities of >> TCP and SCTP for which the security considerations in [RFC5925] and >> [RFC4895] apply. >> > > - We think it is also important discussion from usage-udp: > ADD: > <t>Security considerations for the use of UDP and UDP-Lite are > provided in the referenced RFCs. Security guidance for > application usage is provided in the UDP-Guidelines <xref > target="RFC8085"></xref>.</t> > > [Michael] Done. > > Gorry
- [Taps] New rev of udp-usage (01) and review comme… Gorry Fairhurst
- Re: [Taps] New rev of udp-usage (01) and review c… Michael Welzl
- Re: [Taps] New rev of udp-usage (01) and review c… Gorry Fairhurst
- Re: [Taps] New rev of udp-usage (01) and review c… Michael Welzl
- Re: [Taps] New rev of udp-usage (01) and review c… Gorry Fairhurst
- Re: [Taps] New rev of udp-usage (01) and review c… Michael Welzl
- Re: [Taps] New rev of udp-usage (01) and review c… Erik Kline
- Re: [Taps] New rev of udp-usage (01) and review c… Michael Welzl
- Re: [Taps] New rev of udp-usage (01) and review c… Joe Touch
- Re: [Taps] New rev of udp-usage (01) and review c… Michael Welzl
- Re: [Taps] New rev of udp-usage (01) and review c… Gorry Fairhurst