All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Bergmann <alex@linlab.net>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: davem@davemloft.net, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, Jerry Chu <hkchu@google.com>,
	Neal Cardwell <ncardwell@google.com>,
	Nandita Dukkipati <nanditad@google.com>
Subject: Re: [PATCH 1/1] tcp: Wrong timeout for SYN segments
Date: Wed, 22 Aug 2012 11:29:28 +0200	[thread overview]
Message-ID: <5034A678.3040207@linlab.net> (raw)
In-Reply-To: <1345625910.5158.793.camel@edumazet-glaptop>

On 08/22/2012 10:58 AM, Eric Dumazet wrote:
> On Wed, 2012-08-22 at 10:48 +0200, Alex Bergmann wrote:
>> On 08/22/2012 10:06 AM, Eric Dumazet wrote:
>>>> Prior to 9ad7c049 the timeout was defined with 189secs. Now we have only
>>>> a timeout of 63secs.
>>>>
>>>>           ((2 << 5) - 1) * 3 secs = 189 secs
>>>>           ((2 << 5) - 1) * 1 secs = 63 secs
>>>
>>> Strange maths ... here I have :
>>>
>>> (1+2+4+8+16) * 3 = 93 secs
>>> vs
>>> (1+2+4+8+16) * 1 = 31 secs
>>>
>>> So even before said commit, we were not rfc1122 compliant.
>>>
>>> Using 7 retries would give 127 seconds, still not rfc compliant.
>>
>> You're missing the timeout after the 5th SYN packet was sent. This
>> would result in another 32 seconds (96 seconds).
>>
>> The timeout is calculated here:
>>
>> net/ipv4/tcp_timer.c(146:150)
>>
>> 	if (boundary <= linear_backoff_thresh)
>> 		timeout = ((2 << boundary) - 1) * rto_base;
>> 	else
>> 		timeout = ((2 << linear_backoff_thresh) - 1) * rto_base +
>> 			(boundary - linear_backoff_thresh) * TCP_RTO_MAX;
>
> Thats the code yes but you miss the fact that last occurence of the
> timer doesnt send a frame on the _network_
>
> R2 is derived from the last frame sent.
>
> Fact that the connect() is a bit long to return to user space is not
> relevant. We could block the task for 2 hours and still be non RFC
> compliant.
>
> Actual 5 frames are sent, so the effective global timeout is the one I
> quoted.
>
> 1 + 2 + 4 + 8 + 16   and its 31
>
> Just do a tcpdump and you can see it.

Actual 6 SYN frames are sent. The initial one and 5 retries.

The kernel is waiting another 32 seconds for a SYN+ACK and then gives 
the ETIMEDOUT back to userspace.

Do you mean that we have to send another SYN packet after the 3 minutes?


  reply	other threads:[~2012-08-22  9:29 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-21 23:29 [PATCH 1/1] tcp: Wrong timeout for SYN segments Alex Bergmann
2012-08-22  8:06 ` Eric Dumazet
2012-08-22  8:48   ` Alex Bergmann
2012-08-22  8:58     ` Eric Dumazet
2012-08-22  9:29       ` Alex Bergmann [this message]
2012-08-22  9:59         ` Eric Dumazet
2012-08-22 10:03           ` Eric Dumazet
2012-08-22 17:29             ` H.K. Jerry Chu
2012-08-22 16:44 ` H.K. Jerry Chu
     [not found] ` <CAFbMe2M7ekc94bQk7vTS1LhScPd49VZ-zKOCUXhqwxXtL-nkuA@mail.gmail.com>
2012-08-23 11:58   ` Alex Bergmann
2012-08-23 12:15     ` Eric Dumazet
2012-08-23 12:35       ` David Laight
2012-08-23 12:35         ` David Laight
2012-08-23 12:51         ` Eric Dumazet
2012-08-23 12:37       ` Alex Bergmann
2012-08-23 12:49         ` Eric Dumazet
2012-08-24 12:17           ` Alex Bergmann
2012-08-24 17:42           ` David Miller
2012-08-25  8:48             ` Alexander Bergmann
2012-08-25  9:01               ` Eric Dumazet
2012-08-28  8:44               ` Carsten Wolff
     [not found]                 ` <1346414260.2591.8.camel@edumazet-glaptop>
2012-08-31 12:48                   ` Alexander Bergmann
2012-08-31 13:25                     ` Eric Dumazet
2012-08-31 19:42                       ` David Miller
2012-08-31 19:47                         ` David Miller
2012-08-29  4:34               ` H.K. Jerry Chu
2012-08-29  8:51                 ` Eric Dumazet
2012-08-29 17:25                   ` H.K. Jerry Chu
2012-08-30 13:12                     ` Eric Dumazet
2012-08-30 16:45                       ` David Miller
2012-08-30 18:04                         ` H.K. Jerry Chu
2012-08-30 17:59                       ` H.K. Jerry Chu

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=5034A678.3040207@linlab.net \
    --to=alex@linlab.net \
    --cc=davem@davemloft.net \
    --cc=eric.dumazet@gmail.com \
    --cc=hkchu@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nanditad@google.com \
    --cc=ncardwell@google.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.