Re: [lemonade] streamlined message submission

Ned Freed <ned.freed@mrochek.com> Wed, 22 February 2006 16:01 UTC

Received: from [127.0.0.1] (helo=stiedprmman1.va.neustar.com) by megatron.ietf.org with esmtp (Exim 4.43) id 1FBwR6-0002dA-HL; Wed, 22 Feb 2006 11:01:52 -0500
Received: from [10.91.34.44] (helo=ietf-mx.ietf.org) by megatron.ietf.org with esmtp (Exim 4.43) id 1FBwR5-0002d2-BE for lemonade@ietf.org; Wed, 22 Feb 2006 11:01:51 -0500
Received: from [209.55.107.55] (helo=mauve.mrochek.com) by ietf-mx.ietf.org with esmtp (Exim 4.43) id 1FBwR0-0001JB-P6 for lemonade@ietf.org; Wed, 22 Feb 2006 11:01:51 -0500
Received: from dkim-sign.mauve.mrochek.com by mauve.mrochek.com (PMDF V6.1-1 #35243) id <01LZ9FNCISTS008NQS@mauve.mrochek.com> for lemonade@ietf.org; Wed, 22 Feb 2006 08:01:45 -0800 (PST)
DKIM-Signature: a=rsa-sha1; c=nowsp; d=mrochek.com; s=mauve; t=1140624104; h=Date: From:Subject:MIME-version:Content-type; b=Knx4f8hJH+3lgA7q06aIAQtti n23SO3K1QCqjAtg0EP+3aLYc6HtGgy34Z4kzAGfF7/HWl9HLAj/Tic5mX4zVw==
Received: from mauve.mrochek.com by mauve.mrochek.com (PMDF V6.1-1 #35243) id <01LZ8ERZDACG00009C@mauve.mrochek.com>; Wed, 22 Feb 2006 08:01:42 -0800 (PST)
To: Dave Cridland <dave@cridland.net>
Message-id: <01LZ9FNBLMAS00009C@mauve.mrochek.com>
Date: Wed, 22 Feb 2006 07:12:34 -0800
From: Ned Freed <ned.freed@mrochek.com>
Subject: Re: [lemonade] streamlined message submission
In-reply-to: "Your message dated Wed, 22 Feb 2006 14:43:48 +0000" <21533.1140619429.225276@peirce.dave.cridland.net>
MIME-version: 1.0
Content-type: TEXT/PLAIN; format="flowed"
References: <Pine.LNX.4.64.0602220017450.24112@hermes-2.csi.cam.ac.uk> <21533.1140619429.225276@peirce.dave.cridland.net>
X-Spam-Score: 0.0 (/)
X-Scan-Signature: 6cca30437e2d04f45110f2ff8dc1b1d5
Cc: diverse service enivronments <lemonade@ietf.org>, Enhancements
X-BeenThere: lemonade@ietf.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Enhancements to Internet email to support diverse service enivronments <lemonade.ietf.org>
List-Unsubscribe: <https://www1.ietf.org/mailman/listinfo/lemonade>, <mailto:lemonade-request@ietf.org?subject=unsubscribe>
List-Post: <mailto:lemonade@ietf.org>
List-Help: <mailto:lemonade-request@ietf.org?subject=help>
List-Subscribe: <https://www1.ietf.org/mailman/listinfo/lemonade>, <mailto:lemonade-request@ietf.org?subject=subscribe>
Errors-To: lemonade-bounces@ietf.org

> On Wed Feb 22 00:54:25 2006, Tony Finch wrote:
> > I've written this up in more detail. The following are all fairly
> > short,
> > and where they aren't they are formulaic.
> > http://www.cus.cam.ac.uk/~fanf2/hermes/doc/antiforgery/draft-fanf-submission-streamlined.txt

> BURL doesn't allow clients to pipeline AUTH - that's just possible
> anyway with a server that supports PIPELINING. I have no idea why
> you'd want to pipeline QUIT - it's never going to be a good idea. You
> leave the connection open until it times out, in case you need to
> reuse it later. (Yes, this isn't nice to the server.)

The thing a lot of clients do is simply drop the connection without ever
sending a QUIT, rules to the contrary notwithstanding.

Of course the user can be told that the message was successfully sent the
instant the response to the final DATA/BURL/BDAT has been received. The QUIT
can then be handled asynchronously in the background. So if the goal is to
improve user experience, QUIT handling doesn't have to be relevant.

> Oh, and I believe that it's possible to include the banner in the TCP
> SYN+ACK packet coming from the server, but I couldn't swear to it.
> That one just got told to me in the pub once. I *think* Linux's TCP
> stack allows you to write the banner to a listening socket or
> something odd to get the behaviour, but I'd have to ask about.

Wow, you sure have more interesting conversations at the pub than I do ;-)

Anyway, I know of a couple of tricks in this space. One is the technique
described in RFC 1644, which eliminates the three way handshakes for repeated
connections between the same two machines. It isn't clear to me that this would
be useful in SMTP, however. Often as not there are a whole bunch of front end
machines a client can connect to, and arranging things so the client would have
an affinity for the last server would be tricky.

The other is to piggyback data on either the syn, syn-ack, or both. This has
been discussed many times on various lists but if there's an RFC discussing it
in detail I don't know the number. Piggyback data on syn isn't interesting in
SMTP since the server speaks first, but returning the server banner on the
syn-ack would represent some savings. The problem lies in implementation - most
(all?) TCP APIs don't allow data to be specified in the accept call. Some
stacks offer a way to delay sending acks in hopes they can be piggybacked on
returned data, but I don't know if this ever extends to syn-ack or not. The
trick you described of writing data to the socket before calling accept is not
one I've heard of before. I may try it and see if it works.

> > http://www.cus.cam.ac.uk/~fanf2/hermes/doc/antiforgery/draft-fanf-smtp-quickstart.txt

> A round-trip saved, that's good. This is a rough analogue of the IMAP
> CAPABILITY response code.

> The question is, is it possible that some ESMTP clients might be
> confused by a multiline response? I'm mildly concerned by that.

This used to be a problem in practice, but several years ago some fairly
popular SMTP server started spitting out multiline banners (something sort of
"no trespassing" sign, I think) and refused to provide an option to disable it,
which then got a lot of the incompliant gunk cleaned up. (It is always nice
when something that's widely deployed pushes the envelope this way.) At this
point I think compliance is pretty good - as it happens I forgot to dismantle a
test a few months back and inadvertently ran with a mulitline banner for a
while and noticed no problems.

> There's an alternate model for this sort of thing - you can issue a
> server configuration indicator in the banner, which changes whenever
> the configuration does, such that if you recognise it, then the EHLO
> becomes redundant, because you know the capabilities. Moreover,
> you've cached them *after* the secure channel setup, of course, so
> you needn't ever fetch them until you see that change.

We actually use a similar trick in our SMTP in order to avoid having to
code the list of supported extensions into the proxy. This is one of those
things that sounds simple but it is actually surprisingly hard to implement
correctly. I forget exactly what bugs we had, but we definitely had a couple.
I actually worry more about implementors getting this right than I do about
getting multiline banner processing right.

				Ned

_______________________________________________
lemonade mailing list
lemonade@ietf.org
https://www1.ietf.org/mailman/listinfo/lemonade