Re: [Taps] Drive-by comments on draft-fairhurst-taps-transports-usage-udp-01

Joe Touch <touch@isi.edu> Wed, 06 April 2016 17:54 UTC

Return-Path: <touch@isi.edu>
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 E07CE12D18B for <taps@ietfa.amsl.com>; Wed, 6 Apr 2016 10:54:22 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.91
X-Spam-Level:
X-Spam-Status: No, score=-6.91 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, T_RP_MATCHES_RCVD=-0.01] 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 vojVRvVBSDle for <taps@ietfa.amsl.com>; Wed, 6 Apr 2016 10:54:21 -0700 (PDT)
Received: from vapor.isi.edu (vapor.isi.edu [128.9.64.64]) (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 ECD6012D1BF for <taps@ietf.org>; Wed, 6 Apr 2016 10:54:18 -0700 (PDT)
Received: from [128.9.184.182] ([128.9.184.182]) (authenticated bits=0) by vapor.isi.edu (8.13.8/8.13.8) with ESMTP id u36Hrist025673 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Wed, 6 Apr 2016 10:53:44 -0700 (PDT)
To: gorry@erg.abdn.ac.uk, "Dale R. Worley" <worley@ariadne.com>
References: <877fgawyqu.fsf@hobgoblin.ariadne.com> <1289953456f002c1c71e90d9998a67de.squirrel@erg.abdn.ac.uk>
From: Joe Touch <touch@isi.edu>
Message-ID: <57054D27.8050505@isi.edu>
Date: Wed, 06 Apr 2016 10:53:43 -0700
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.7.1
MIME-Version: 1.0
In-Reply-To: <1289953456f002c1c71e90d9998a67de.squirrel@erg.abdn.ac.uk>
Content-Type: text/plain; charset="windows-1252"
Content-Transfer-Encoding: 7bit
X-ISI-4-43-8-MailScanner: Found to be clean
X-MailScanner-From: touch@isi.edu
Archived-At: <http://mailarchive.ietf.org/arch/msg/taps/mRx0IZeaT7Ws1hey9hcbYwBI8zo>
Cc: taps@ietf.org, touch@isi.edu
Subject: Re: [Taps] Drive-by comments on draft-fairhurst-taps-transports-usage-udp-01
X-BeenThere: taps@ietf.org
X-Mailman-Version: 2.1.17
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: Wed, 06 Apr 2016 17:54:23 -0000


On 4/6/2016 9:39 AM, gorry@erg.abdn.ac.uk wrote:
...
>> I'm reading parts of draft-fairhurst-taps-transports-usage-udp-01
>> because it was presented in the Dispatch session of the meeting, so I
>> don't have all the context for this draft.  But a couple of comments
>> struck me:
>>
>> The description seems to be connection-oriented, in that it only
>> describes usages involving two endpoints establishing a connection and
>> then using it.  Indeed, even the process of establishing a listening
>> port based on which connections will be created is not described.  E.g.,
>> the description of the CONNECT primitive says "The CONNECT primitive
>> allows the association of source and port sets to a socket ...", but
>> doesn't describe where the socket comes from, or that packets can arrive
>> on a socket before the receiver has done a CONNECT.

For connection-oriented protocols, this should never happen.

For connectionless protocols, "CONNECT" is often the basic primitive by
which a user indicates the socket pair (address/port) of the remote end.

It would be useful to separate these two concepts:

	- pinning parameters of the remote socket pair
	- establishing pairwise state

...
>> Perhaps these concepts are discussed in the document that establishes
>> the framework for this draft.  At the least, the use of listening ports
>> needs to be formalized.
>>
> I probably need help - I think there are different many ways in which UDP
> uses ports. Offers from anyone on how to get started would be great.

See below.

I'm glad to help with this further if useful - some additional notes below:

Joe

Pass1:

First, it would be useful to introduce the idea of a communication
endpoint as seen from inside a program (or the OS). Unix uses the term
"socket" for this (which is awful because we use the term "socket pair"
to mean something different).

I'd suggest using the term "CHANNEL" at least for now.

So the primitives needed, *assuming an OS primitive to create a new,
blank CHANNEL*, are:

	SET_LOCAL_SOCKETPAIR CHANNEL IP? PORTNUM?
		nail down specific local IP address and/or port numbers
		as associated with a CHANNEL object

		corresponds to bind() in Unix...

	SET_REMOTE_SOCKETPAIR CHANNEL IP? PORTNUM?
		nail down specific remote IP address and/or port numbers
		as associated with a CHANNEL object

		corresponds to connect() in Unix (yes, for UDP, even
		though it is connectionless)

	SEND CHANNEL MESSAGE (IP PORTNUM)? PARAMS?
		emit a UDP message with the indicated contents
		over the indicated channel
		if the CHANNEL does not have a set remote socket
		pair, then also requires the remote socketpair

	RECEIVE CHANNEL PARAMS?
		obtain a UDP message from the indicated CHANNEL
		returns the message and its remote socketpair

Send and receive may have per-message parameters that are optional, as
indicated above.

Note that I've deliberately avoided a few terms and reused others. I
can't find better words for send/receive than those, but I would never
think of "listen" as something that necessarily returns a message (it
might return an indicator that a message is available, in the manner of
the select() call)

I don't think it makes sense to talk about CLOSE in any way for UDP
connections. At best, we would talk about discarding the CHANNEL object.

And yes, I don't think you can talk about any of this without a model
for the process/OS side of the communication entity.

Joe