Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!iuvax!pur-ee!mentor.cc.purdue.edu!dls From: dls@mentor.cc.purdue.edu (David L Stevens) Newsgroups: comp.protocols.tcp-ip Subject: Re: TCP Protocol Question: reusing connections Keywords: SYN, RST, Connection Establishment Message-ID: <8020@mentor.cc.purdue.edu> Date: 1 Mar 90 03:59:33 GMT References: <1125@devildog.UUCP> Reply-To: dls@mentor.cc.purdue.edu (David L Stevens) Distribution: usa Organization: PUCC UNIX Group Lines: 16 You get the RST from MachineB because it has to wait 2MSL (TIME_WAIT state in the TCP spec) to make sure that MachineA's idea of that connection has died. If MachineB gets anything else with the same port pair, it assumes it's a retransmission (normally) and ACK's it. Unfortunately, SYN is only allowed when MachineB's end is in LISTEN, but it's in TIME_WAIT. Ooops => RST. You'd get the RST regardless of the sequence numbers, though you'd get one for ACKing more than MachineB sent, if that were the case, too. The window management really isn't related though-- the problem is that MachineB can't be sure that MachineA got his ACK of A's FIN, so it has to wait around to handle retransmissions gracefully. It's doing the right thing and the solution is to have one of them pick a different port each time. -- +-DLS (dls@mentor.cc.purdue.edu)