Thread (16 messages) flat view 16 messages, 2 authors, 2017-11-08

Re: TCP connection closed without FIN or RST

From: Vitaly Davidovich <hidden>
Date: 2017-11-03 12:41:43

Hi Eric,

Ran a few more tests yesterday with packet captures, including a
capture on the client.  It turns out that the client stops ack'ing
entirely at some point in the conversation - the last advertised
client window is not even close to zero (it's actually ~348K).  So
there's complete radio silence from the client for some reason, even
though it does send back ACKs early on in the conversation.  So yes,
as far as the server is concerned, the client is completely gone and
tcp_retries2 rightfully breaches eventually once the server retrans go
unanswered long (and for sufficient times) enough.

What's odd though is the packet capture on the client shows the server
retrans packets arriving, so it's not like the segments don't reach
the client.  I'll keep investigating, but if you (or anyone else
reading this) knows of circumstances that might cause this, I'd
appreciate any tips on where/what to look at.

Thanks

On Wed, Nov 1, 2017 at 7:06 PM, Eric Dumazet [off-list ref] wrote:
On Wed, 2017-11-01 at 22:22 +0000, Vitaly Davidovich wrote:
quoted
Eric,
quoted
Yes I agree.  However the thing I’m still puzzled about is the client
application is not reading/draining the recvq - ok, the client tcp
stack should start advertising a 0 window size.  Does a 0 window size
count against the tcp_retries2? Is that what you were alluding to in
your first reply?
Every time we receive an (valid) ACK, with a win 0 or not, the counter
of attempts is cleared, given the opportunity for the sender to send 15
more probes.
quoted
If it *does* count towards the retries limit then a RST doesn’t seem
like a bad idea.  The client is responding with segments but the user
app there just isn’t draining the data.  Presumably that RST has a
good chance of reaching the client and then unblocking the read()
there with a peer reset error.  Or am I missing something?


If it doesn’t count towards the limit then I need to figure out why
the 0 window size segments weren’t being sent by the client.
Yes please :)
quoted

I will try to double check that the client was indeed advertising 0
window size.  There’s nothing special about that machine - it’s a
4.1.35 kernel as well.  I wouldn’t expect the tcp stack there to be
unresponsive just because the user app is sleeping.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help