tcp中close_wait状态出现的原因

close_wait出现的原因: 就是某一方在网络连接断开后,对等方没有检测到这个错误(对方断开)而没有调    closesocket,致了这个状态的出现.

模拟这样一个环境:服务器192.168.1.112:4500在接收到一个客户端的连接后,休眠五秒后,服务器关闭与客户 端通讯的socket后正常退出,而客户端在连接服务器后,等待用户输入字符后,发送给客户端。现在有这样几个问题:

1.       服务器在休眠五秒后,正常退出了,但是由于客户端还在等待用户输入,此时服务器端TCP的状态是什么?(FIN_WAIT_2),客户端的TCP状态是什么?(CLOSE_WAIT)

2.       服务器在休眠五秒后,正常退出了,在服务器退出后,如果客户端异常退出,那么服务器端TCP的状态是什么?客户端的TCP状态是什么?

       在服务器正常退出后,客户端异常退出,那么客户端就会向服务器发送RST标志,然后客户端和服务器端的TCP状态都是CLOSED

3.       服务器在休眠五秒后,正常退出了,在服务器退出后,从客户端输入数据后,向服务器发送,此时服务器怎样处理这个数据?

       客户端通过PSH标志向服务器段发送数据,能够发送成功,但因为服务器的TCP处于(FIN_WAIT_2)状态,此时服务器会向客户端发送一个RST标示,并且服务器端口状态和客户端的TCP状态都变为CLOSED。

4.       在服务器休眠的过程中,杀死服务器进程,服务器端TCP状态是什么?客户端的TCP状态是什么?

 在服务器休眠的过程中,杀死服务器进程,此时服务器方会向客户端发送一个 RST标志,服务器TCP状态是
CLOSED,客户端的TCP状态也是CLOSE.
在服务器休眠五秒后,如果不关闭与客户端通讯的 Socket直接正常退出,此时,服务器方也向客户端发送了
RST标志。
 
对于上面的四个问题,必须注意到服务器正常断开的时候,向客户端发送的FIN根本不能被客户端的所正常处理,因为客户端正处于接收用户的输入。所以由于每次都是服务器主动断开,但是服务器TCP状态却有可能不能进入到Time_Wait状态。有兴趣的可以研究以下第三个问题,看看在什么情况下,服务器可以进入到Time_wait状态.  (在服务器正常退出后,客户端也接着正常退出,服务器TCP就会进入到 Time_wait状态)
 
 

你可能感兴趣的:(socket,网络,tcp,服务器,通讯)