No, TCP RST is not a graceful way to end the session
Practical networking question -
Posit a server and a client. The client is running a set of clients of the server, essentially performance testing the server. In their infinite wisdom, the clients and servers believe that the appropriate way to close TCP sessions is send TCP RSTs in response to the first TCP FIN they get from the other side. Charming, I know. Anyway, netstat is reporting the window size being ratcheted down to zero on a lot of the sessions between the client and server, which is making me wonder if the RSTs are somehow leading to wonky buffer behavior on the other sessions between the two talkers. (I know, this is not an adequately formulated idea, I'm thinking the behavior through, thought I'd see if anyone else had seen something specific, like known reporting behavior of netstat or yeah, the kernel tries to be helpful like that)
On an entirely unrelated note, the correct way to close a TCP session is not to send a RST. That will abort the session, but that's the whole point: it will abort it, and it is expected that the other side will do whatever cleanup it does of an abnormally terminated session. It's like ending all phone conversations with just hanging up on the other party: sure, it works, but it's not good practice.
Posit a server and a client. The client is running a set of clients of the server, essentially performance testing the server. In their infinite wisdom, the clients and servers believe that the appropriate way to close TCP sessions is send TCP RSTs in response to the first TCP FIN they get from the other side. Charming, I know. Anyway, netstat is reporting the window size being ratcheted down to zero on a lot of the sessions between the client and server, which is making me wonder if the RSTs are somehow leading to wonky buffer behavior on the other sessions between the two talkers. (I know, this is not an adequately formulated idea, I'm thinking the behavior through, thought I'd see if anyone else had seen something specific, like known reporting behavior of netstat or yeah, the kernel tries to be helpful like that)
On an entirely unrelated note, the correct way to close a TCP session is not to send a RST. That will abort the session, but that's the whole point: it will abort it, and it is expected that the other side will do whatever cleanup it does of an abnormally terminated session. It's like ending all phone conversations with just hanging up on the other party: sure, it works, but it's not good practice.
no subject
http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_termination
Wait a sec, how are you getting netstat to report window size? Are you talking about the Recv-Q or Send-Q columns of "netstat-a" output? Those aren't window size...
no subject
Heh - I'm getting the window size numbers from Wireshark, not netstat. I had to look around to verify, because I'd misremembered that we'd coaxed it out of netstat as well. BTW, I'm distinctly unhappy with whoever decided it was a good idea to remove iostat from the base redhat distribution. Not having lsof after nearly two decades is obnoxious, but having to explicitly install an add'l package to get iostat is even worse.
But, yeah, my current bet is that the application code in question is actually almost exactly identical to that code sample, and I've already told the culprits 'stop doing this,' but I thought I'd look around a bit more to see if I could increase the amount of light on the subject.
no subject
no subject
BEA WebLogic on Solaris, actually. From what I've seen in the wireshark data, I'm convinced that the application level is borked on both the client side and server side, just in their own unique ways.
no subject
no subject
no subject
no subject
no subject