telnet如何关闭tcp连接?

How telnet closes tcp connection?

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

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

  1. 关闭端(服务器)OS检测到进程结束时没有关闭socket,并发起关闭socket的过程。
  2. 服务器向客户端发送FIN包
  3. 客户端协议栈收到FIN并通知socket用户(telnet)连接正在关闭,并向服务器发送ACK。
  4. 服务器收到ACK,进入等待客户端发送FIN的状态。
  5. 当客户端程序(telnet)向OS确认关闭时,客户端协议栈向服务器发送一个FIN包。
  6. 服务器收到 FIN 并终止并清理其端的连接,并以 ACK 响应。
  7. 客户端收到 ACK 并终止并清理其连接端。

所有这些都发生在 OS 级别,在 JVM 或客户端程序 之下,除了通知 telnet 客户端套接字正在关闭之外,是无形的。您可以在网络上的许多地方找到更多关于 TCP 协议的详细信息。