telnet如何关闭tcp连接?
How telnet closes tcp connection?
我在java(Socket) 中写了一个简单的tcp 服务器并通过telnet 连接到它。一切正常。我只想澄清关于 tcp 协议的一件事。如果我以不正确的方式停止我的服务器(在执行期间只需在 IntelligIdea 中按下停止),我会在客户端提示中看到一条消息:连接丢失。所以,问题是:服务器在崩溃之前是否向客户端发送任何信息?或者 telnet 和服务器一直发送一些我不知道的信息,以确保连接存在,即使我什么都不发送?还是与 tcp 协议有关?简而言之:客户端如何知道服务器崩溃了?
我是新来的所以我决定在这里清理它。提前致谢!
连接通过 TCP 运行。 TCP 协议指定连接如何关闭。
- 关闭端(服务器)OS检测到进程结束时没有关闭socket,并发起关闭socket的过程。
- 服务器向客户端发送FIN包
- 客户端协议栈收到FIN并通知socket用户(telnet)连接正在关闭,并向服务器发送ACK。
- 服务器收到ACK,进入等待客户端发送FIN的状态。
- 当客户端程序(telnet)向OS确认关闭时,客户端协议栈向服务器发送一个FIN包。
- 服务器收到 FIN 并终止并清理其端的连接,并以 ACK 响应。
- 客户端收到 ACK 并终止并清理其连接端。
所有这些都发生在 OS 级别,在 JVM 或客户端程序 之下,除了通知 telnet 客户端套接字正在关闭之外,是无形的。您可以在网络上的许多地方找到更多关于 TCP 协议的详细信息。
我在java(Socket) 中写了一个简单的tcp 服务器并通过telnet 连接到它。一切正常。我只想澄清关于 tcp 协议的一件事。如果我以不正确的方式停止我的服务器(在执行期间只需在 IntelligIdea 中按下停止),我会在客户端提示中看到一条消息:连接丢失。所以,问题是:服务器在崩溃之前是否向客户端发送任何信息?或者 telnet 和服务器一直发送一些我不知道的信息,以确保连接存在,即使我什么都不发送?还是与 tcp 协议有关?简而言之:客户端如何知道服务器崩溃了? 我是新来的所以我决定在这里清理它。提前致谢!
连接通过 TCP 运行。 TCP 协议指定连接如何关闭。
- 关闭端(服务器)OS检测到进程结束时没有关闭socket,并发起关闭socket的过程。
- 服务器向客户端发送FIN包
- 客户端协议栈收到FIN并通知socket用户(telnet)连接正在关闭,并向服务器发送ACK。
- 服务器收到ACK,进入等待客户端发送FIN的状态。
- 当客户端程序(telnet)向OS确认关闭时,客户端协议栈向服务器发送一个FIN包。
- 服务器收到 FIN 并终止并清理其端的连接,并以 ACK 响应。
- 客户端收到 ACK 并终止并清理其连接端。
所有这些都发生在 OS 级别,在 JVM 或客户端程序 之下,除了通知 telnet 客户端套接字正在关闭之外,是无形的。您可以在网络上的许多地方找到更多关于 TCP 协议的详细信息。