netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Willy Tarreau <w@1wt.eu>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org
Subject: Re: TCP: orphans broken by RFC 2525 #2.17
Date: Mon, 27 Sep 2010 00:34:48 +0200	[thread overview]
Message-ID: <20100926223448.GF12373@1wt.eu> (raw)
In-Reply-To: <20100926.151346.112585478.davem@davemloft.net>

Hi David,

On Sun, Sep 26, 2010 at 03:13:46PM -0700, David Miller wrote:
> From: Willy Tarreau <w@1wt.eu>
> Date: Sun, 26 Sep 2010 15:17:17 +0200
> 
> > I've read RFC 2525 #2.17 and it shows quite interesting examples of what
> > it wanted to protect against. However, the recommendation did not consider
> > the fact that there could be some unacked pending data in the outgoing
> > buffers.
> 
> It doesn't matter if there is any pending data still outgoing when
> we received this data after close().
> 
> The issue is that the reliable transport nature of TCP has been
> violated, and as such the entire connection's reliability has
> been compromised.

I don't see what is being violated nor what reliability has been
compromised. Some data has reliably been delivered to the kernel,
a shutdown() has reliably been performed, followed by a close()
which then makes use of the orphans mechanism to deliver the data
to the other side.

> The only appropriate response is a full reset.

I'm not against the full reset, I really want it, but I don't want
it to be sent before the previous data. The reset here is being sent
out of order and kills the data that were previously going to be
delivered. It's all about a timing issue BTW. If the other side sends
its data slightly later, it reliably receives its response followed by
a reset it understands and respects. So this is a valid working
mechanism. I'm just trying to ensure that the reset does not break
ordering and is delivered after the pending data.

> As Eric said, your only option is to fully sync the data coming
> from the peer.

The why are we keeping the orphans feature and not get rid of it then ?
It becomes completely useless, and we can as well disable all the
lingering options which have no use beyond that.

The lingering controls how long unacked data remains in an orphaned
socket, which precisely is my case. If the application has no way to
know whether it can close, all this becomes useless.

I can easily admit I'm doing something wrong, but here we have a
feature that I think I'm correctly using and it does not always
work, and I can't know when I can use it, so I should not use it.
Obviously, either I'm missing something or there's something wrong.
And that's what I'd like to find out.

Thanks,
Willy


  reply	other threads:[~2010-09-26 22:34 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-26 13:17 TCP: orphans broken by RFC 2525 #2.17 Willy Tarreau
2010-09-26 17:02 ` Eric Dumazet
2010-09-26 17:40   ` Willy Tarreau
2010-09-26 18:35     ` Eric Dumazet
2010-09-26 18:49       ` Willy Tarreau
2010-09-26 21:01         ` Eric Dumazet
2010-09-26 21:46           ` Willy Tarreau
2010-09-26 22:19             ` David Miller
2010-09-26 22:10         ` David Miller
2010-09-26 19:16     ` Willy Tarreau
2010-09-26 22:14       ` David Miller
2010-09-26 22:13 ` David Miller
2010-09-26 22:34   ` Willy Tarreau [this message]
2010-09-26 22:38     ` David Miller
2010-09-26 22:54       ` Willy Tarreau
2010-09-26 23:08         ` David Miller
2010-09-26 23:25           ` Willy Tarreau
2010-09-27  1:12             ` David Miller
2010-09-27  5:39               ` Willy Tarreau
2010-09-27  5:48                 ` Eric Dumazet
2010-09-27  6:04                   ` Willy Tarreau
2010-09-27  6:44                   ` David Miller
2010-09-27  6:42                 ` David Miller
2010-09-27  7:34                   ` Willy Tarreau
2010-09-27  7:42                     ` David Miller
2010-09-27 19:21                       ` Willy Tarreau
2010-09-27 23:28                         ` Herbert Xu
2010-09-28  5:12                           ` Willy Tarreau
2010-09-28  5:32                             ` David Miller
2010-09-28  5:37                               ` Willy Tarreau
2010-09-27  9:12                     ` Julian Anastasov
2010-09-27 19:24                       ` Willy Tarreau
2010-09-27 20:00                         ` Eric Dumazet
2010-09-28  9:01                         ` Julian Anastasov
2010-09-28  9:26                           ` Willy Tarreau
2010-09-27  8:02 ` Herbert Xu
2010-09-27 20:00   ` Willy Tarreau
2010-09-27 20:08     ` Rick Jones
2010-09-27 20:20       ` Willy Tarreau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100926223448.GF12373@1wt.eu \
    --to=w@1wt.eu \
    --cc=davem@davemloft.net \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).