telnet如何关闭tcp连接?

telnet如何关闭tcp连接?

问题描述:

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

连接在TCP上运行。 TCP协议指定连接如何关闭。

  1. 关闭端(服务器)操作系统检测到该进程在没有关闭套接字的情况下结束,并启动套接字关闭进程。
  2. 服务器向客户端发送FIN数据包
  3. 客户端协议栈收到FIN并通知套接字用户(telnet)该连接正在关闭,并向服务器发送ACK。
  4. 服务器收到ACK并进入等待客户端发送FIN的状态。
  5. 当客户端程序(telnet)确认关闭操作系统时,客户端协议栈会向服务器发送FIN数据包。
  6. 服务器接收到FIN并终止并清理其连接侧,并用ACK进行响应。
  7. 客户端收到ACK并终止并清除其连接的一侧。

所有这一切都发生在操作系统级别,比通知Telnet客户端的插座关闭JVM或客户端程序等下面,是看不见的。在许多地方,您可以在Web上找到有关TCP协议的更多详细信息。

+0

#2并且其余的大部分都不会在Windows中发生:取而代之的是发布RST。当客户端程序(Telnet)关闭套接字时,#5应该是'。 '向客户端通知套接字正在关闭'应该是'通知客户端连接已经被对等关闭'。客户端关闭它自己的套接字。 – EJP