telnet如何关闭tcp连接?

时间:2017-01-11 22:21:52

标签: java client-server serversocket tcp-ip

我在java(Socket)中编写了一个简单的tcp服务器,并通过telnet连接到它。一切正常。我只是想澄清关于tcp协议的一件事。如果我以不正确的方式停止我的服务器(只是在执行期间在IntelligIdea中停止),我在客户端提示中看到一条消息:连接丢失。所以,问题是:服务器在崩溃之前是否向客户端发送任何信息?或者telnet和服务器一直发送一些我不认识的信息,以确保连接存在,即使我不发送任何东西?或者它与tcp协议有关?简而言之:客户端如何知道服务器崩溃了? 我是新手,所以我决定在这里清理它。提前谢谢!

1 个答案:

答案 0 :(得分:0)

连接通过TCP运行。 TCP协议指定连接如何关闭。

  1. 关闭方(服务器)操作系统检测到进程在未关闭套接字的情况下结束,并启动套接字关闭过程。
  2. 服务器向客户端发送FIN数据包
  3. 客户端协议栈接收FIN并通知套接字用户(telnet)连接正在关闭,并向服务器发送ACK。
  4. 服务器收到ACK并进入等待客户端发送FIN的状态。
  5. 当客户端程序(telnet)确认关闭操作系统时,客户端协议栈会向服务器发送FIN数据包。
  6. 服务器接收FIN并终止并清理其连接端,并以ACK响应。
  7. 客户端收到ACK并终止并清理其连接端。
  8. 所有这些都发生在操作系统级别,低于JVM或客户端程序,而不是通知telnet客户端套接字正在关闭,是不可见的。您可以在很多很多地方找到有关TCP协议的更多详细信息。