Re: [tae] [tsv-area] Transport negotiation

Stuart Cheshire <cheshire@apple.com> Wed, 03 December 2008 21:07 UTC

Return-Path: <tae-bounces@ietf.org>
X-Original-To: tae-archive@ietf.org
Delivered-To: ietfarch-tae-archive@core3.amsl.com
Received: from [127.0.0.1] (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id E83DF3A6A3C; Wed, 3 Dec 2008 13:07:48 -0800 (PST)
X-Original-To: tae@core3.amsl.com
Delivered-To: tae@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 181513A6A1F; Wed, 3 Dec 2008 13:07:48 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -106.496
X-Spam-Level:
X-Spam-Status: No, score=-106.496 tagged_above=-999 required=5 tests=[AWL=2.102, BAYES_00=-2.599, GB_I_LETTER=-2, NORMAL_HTTP_TO_IP=0.001, RCVD_IN_DNSWL_MED=-4, USER_IN_WHITELIST=-100]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id KmcSbaSYdHVR; Wed, 3 Dec 2008 13:07:46 -0800 (PST)
Received: from mail-out3.apple.com (mail-out3.apple.com [17.254.13.22]) by core3.amsl.com (Postfix) with ESMTP id D48593A6999; Wed, 3 Dec 2008 13:07:46 -0800 (PST)
Received: from relay14.apple.com (relay14.apple.com [17.128.113.52]) by mail-out3.apple.com (Postfix) with ESMTP id 08E1E473FFC6; Wed, 3 Dec 2008 13:07:43 -0800 (PST)
Received: from relay14.apple.com (unknown [127.0.0.1]) by relay14.apple.com (Symantec Brightmail Gateway) with ESMTP id DF8E72804C; Wed, 3 Dec 2008 13:07:42 -0800 (PST)
X-AuditID: 11807134-a5bbabb000000f08-57-4936f51e08a5
Received: from [17.206.42.11] (chesh1.apple.com [17.206.42.11]) by relay14.apple.com (Apple SCV relay) with ESMTP id AE85F28040; Wed, 3 Dec 2008 13:07:42 -0800 (PST)
In-Reply-To: <492DE8AD.1090300@isi.edu>
References: <3BB334D8-B00C-48C1-ACBF-4D09576DEADF@mpi-sws.org> <492C7F97.3030000@isi.edu> <EDCC4CF2-DC3C-409F-8F99-3BE51BAE4111@surrey.ac.uk> <492DE8AD.1090300@isi.edu>
Mime-Version: 1.0 (Apple Message framework v753.1)
Message-Id: <7DA33930-1767-492B-807E-7A7DA661AFE9@apple.com>
From: Stuart Cheshire <cheshire@apple.com>
Date: Wed, 3 Dec 2008 13:07:16 -0800
To: Joe Touch <touch@ISI.EDU>
X-Mailer: Apple Mail (2.753.1)
X-Brightmail-Tracker: AAAAAA==
Cc: tae@ietf.org, tsv-area@ietf.org, Lloyd Wood <L.Wood@surrey.ac.uk>
Subject: Re: [tae] [tsv-area] Transport negotiation
X-BeenThere: tae@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Transport Architecture Evolution <tae.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/tae>, <mailto:tae-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/pipermail/tae>
List-Post: <mailto:tae@ietf.org>
List-Help: <mailto:tae-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tae>, <mailto:tae-request@ietf.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"; DelSp="yes"
Sender: tae-bounces@ietf.org
Errors-To: tae-bounces@ietf.org

On 26 Nov, 2008, at 16:24, Joe Touch wrote:

> http:// doesn't "just work" - it specifically indicates "HTTP over  
> TCP"
> IMO. And http://10.0.0.1/ specifies "HTTP over TCP over IPv4".


I think Joe is right about this.

I think the whole notion of "transport negotiation" is flawed. It  
seems attractive to say, "DNS runs over both TCP and over UDP, so we  
should be able to dynamically negotiate which," but under scrutiny  
the idea falls apart.

The problem is that what constitutes a "transport layer" is a bit  
slippery.

In a text-based protocol that can use either UTF-8 or Latin-1, is the  
UTF-8/Latin-1 choice a transport negotiation?

In a protocol that can run over TCP or over TLS, is that a transport  
negotiation?

If a web server can optionally gzip content to save bandwidth, is  
that a transport negotiation?

What about gzip'd UTF-8 vs. gzip'd Latin-1? What about gzip'd UTF-8  
over TLS? What about ASN.1 vs. XDR vs. XML?

The combinatorial explosion gets out of control. The correct answer  
IMHO, is to not even try. The Application Protocol Name in the SRV  
record needs to be an opaque identifier that denotes the entire top- 
to-bottom slice through the protocol stack -- semantics, packet  
formats, encoding rules, transport protocol. (Once the client has got  
a connection to the server, negotiating things like optional  
compression at that layer is then feasible and sensible.)

Even having the _udp or _tcp is, IMO, a historical mistake. This is  
what I say about it in draft-cheshire-dnsext-dns-sd-05.txt:

7. Application Protocol Names

    The <Service> portion of a Service Instance Name consists of a pair
    of DNS labels, following the established convention for SRV records
    [RFC 2782], namely: the first label of the pair is an underscore
    character followed by the Application Protocol Name, and the second
    label is either "_tcp" or "_udp".

    Application Protocol Names may be no more than fourteen characters
    (not counting the mandatory underscore), conforming to normal DNS
    host name rules: Only lower-case letters, digits, and hyphens; must
    begin and end with lower-case letter or digit.

    Wise selection of an Application Protocol Name is very important,
    and the choice is not always as obvious as it may appear.

    In many cases, the Application Protocol Name merely names and refers
    to the on-the-wire message format and semantics being used. FTP is
    "ftp", IPP printing is "ipp", and so on.

    However, it is common to "borrow" an existing protocol and repurpose
    it for a new task. This is entirely sensible and sound engineering
    practice, but that doesn't mean that the new protocol is providing
    the same semantic service as the old one, even if it borrows the  
same
    message formats. For example, the local network music sharing
    protocol implemented by iTunes on Macintosh and Windows is little
    more than "HTTP GET" commands. However, that does *not* mean that it
    is sensible or useful to try to access one of these music servers by
    connecting to it with a standard web browser. Consequently, the
    DNS-SD service advertised (and browsed for) by iTunes is  
"_daap._tcp"
    (Digital Audio Access Protocol), not "_http._tcp". Advertising
    "_http._tcp" service would cause iTunes servers to show up in
    conventional web browsers (Safari, Camino, OmniWeb, Internet
    Explorer, Firefox, Chrome, etc.) which is of little use since it
    offers no pages containing human-readable content. Similarly, if
    iTunes were to browse for "_http._tcp" service, that would cause it
    to find generic web servers, such as the embedded web servers in
    devices like printers, which is of little use since printers
    generally don't have much music to offer.

    Similarly, NFS is built on top of SUN RPC, but that doesn't mean it
    makes sense for an NFS server to advertise that it provides "SUN  
RPC"
    service. Likewise, Microsoft SMB file service is built on top of
    Netbios running over IP, but that doesn't mean it makes sense for
    an SMB file server to advertise that it provides "Netbios-over-IP"
    service. The DNS-SD name of a service needs to encapsulate both the
    "what" (semantics) and the "how" (protocol implementation) of the
    service, since knowledge of both is necessary for a client to
    usefully use the service. Merely advertising that a service was
    built on top of SUN RPC is no use if the client has no idea what
    the service actually does.

    Another common question is to ask whether the service type  
advertised
    by iTunes should be "_daap._http._tcp." This would also be  
incorrect.
    Similarly, a protocol designer implementing a network service that
    happens to use Simple Object Access Protocol [SOAP] should not feel
    compelled to have "_soap" appear somewhere in the Application
    Protocol Name. Part of the confusion here is that the presence of
    "_tcp" or "_udp" in the <Service> portion of a Service Instance Name
    has led people to assume that the structure of a service name has to
    reflect the internal structure of how the protocol was implemented.
    This is not correct. All that is required is that the service be
    identified by a unique Application Protocol Name. Making the
    Application Protocol Name at least marginally descriptive of
    what the service does is desirable, though not essential.

    The "_tcp" or "_udp" should be regarded as little more than
    boilerplate text, and care should be taken not to attach too much
    importance to it. Some might argue that the "_tcp" or "_udp" should
    not be there at all, but this format is defined by RFC 2782, and
    this document does not propose to change that. In addition, the
    presence of "_tcp" has the useful side-effect that it provides a
    convenient delegation point to hand off responsibility for service
    discovery to a different DNS server, if so desired.

Stuart Cheshire <cheshire@apple.com>
* Wizard Without Portfolio, Apple Inc.
* Internet Architecture Board
* www.stuartcheshire.org

_______________________________________________
tae mailing list
tae@ietf.org
https://www.ietf.org/mailman/listinfo/tae