【问题标题】:How telnet closes tcp connection?telnet如何关闭tcp连接?
【发布时间】:2017-01-11 22:21:51
【问题描述】:

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

【问题讨论】:

    标签: java client-server serversocket tcp-ip


    【解决方案1】:

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

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

    所有这些都发生在操作系统级别,在 JVM 或客户端程序之下,除了向 telnet 客户端发出套接字正在关闭的通知之外,它们是不可见的。您可以在网络上的很多很多地方找到更多关于 TCP 协议的详细信息。

    【讨论】:

    • #2 其余的大部分都不会在 Windows 中发生:而是发出 RST。 #5 应该是“当客户端程序(Telnet)关闭套接字时”。 “通知客户端套接字正在关闭”应该是“通知客户端连接已被对等方关闭”。客户端关闭自己的套接字。
    猜你喜欢
    • 2012-11-19
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 2022-01-20
    • 1970-01-01
    • 2013-09-04
    相关资源
    最近更新 更多