【问题标题】:how to know whether the TCP ends or not?如何知道 TCP 是否结束?
【发布时间】:2014-09-20 19:48:24
【问题描述】:

TCP 是流式通信,它有不同的长度。那么在应用中,如何知道TCP是否结束呢?

在transfom层,TCP包头没有长度字段,长度是可变的,TCP层怎么知道结束在哪里。

【问题讨论】:

标签: tcp


【解决方案1】:

您设计了一个在 TCP 之上运行的协议,该协议包含一个长度字段(或消息终止符)。您可以查看基于 TCP 的现有协议(例如 DNS、HTTP、IRC、SMTP、SMB 等),了解它们是如何做到这一点的。

为避免痛苦,在尝试设计自己的协议之前,彻底了解 TCP 之上的几种不同协议会有所帮助。有很多细微的细节很容易出错。

【讨论】:

    【解决方案2】:

    如果您查看this 的帖子,它会给出一个很好的答案。

    根据您的通信对象或通信方式,如果您打算让套接字保持打开状态,则需要查找某种字符序列以了解单个消息或传输已完成。

    【讨论】:

      【解决方案3】:

      n 转换层

      我假设您的意思是“传输层”?

      TCP包头没有长度字段,长度是可变的

      IP 标头有一个长度字段。 TCP 标头中的另一个是多余的。

      TCP层怎么知道终点在哪里。

      从 IP 标头长度字减去 IP 和 TCP 标头大小。

      【讨论】:

        【解决方案4】:

        当 TCP 连接的一方收到FINRST 信号时,它就知道对方已停止发送。在 API 级别,您可以调用 shutdown 来发出该信号。然后另一方将获得零长度读取,并且知道不会有更多内容。

        【讨论】:

        • 你为什么不提一下RST...??
        猜你喜欢
        • 2019-11-07
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        相关资源
        最近更新 更多