1 服务器主机崩溃
模拟操作:当客户端和服务器成功连接之后,拔掉服务器的网线,此时从客户端发送数据分节。这样同时也模拟了客户端发送的数据不可达服务端的情景(即建立连接后某些中间路由器不工作)。
产生后果:客户端会持续重传未收到确认的数据分节(TCP软件负责),持续一段时间后仍未收到确认则放弃(通常是9分钟)。如果是服务器崩溃则本机TCP软件会向用户进程显示套接字错误并置错误码,如果是中间路由器判定服务器主机不可达则会返回一个ICMP消息,那么TCP软件收到该ICMP消息会向用户进程显示套接子错误并置错误码。我们可以通过错误码来判断到底是哪种错误。
2 服务器崩溃后重启
模拟操作:当客户端和服务器成功连接之后,拔掉服务器的网线,然后将该服务器关机重启。再重新插上网线。
产生后果:当服务器崩溃后重启时,它已经丢失了崩溃前所有的连接信息,因此服务器对于所收到的客户数据分节响应一个RST分节。客户端的TCP软件收到RST分节之后会向 用户进程显示套接字错误并置错误码。
3 服务器主机关机
Unix系统关机时,init进程通常会给所有的进程发送SIGTERM信号,等待一段时间后如果还有一些进程仍在运行,init进程会发送SIGKILL信号强行终止。当服务器进程被终止时,其所有打开的文件描述符被关闭,会发送FIN分节给对端。设计良好的客户程序可以立即监视该种情况的发生。