gpt4 book ai didi

tcp - 我应该如何标记 TCP 数据包的结尾?

转载 作者:可可西里 更新时间:2023-11-01 02:29:43 30 4
gpt4 key购买 nike

在客户端/服务器应用程序中,不同长度的文本数据将在客户端和服务器之间来回发送,我应该如何标记正在发送的数据包的结尾?例如,当服务器正在接收来自客户端的数据包时,服务器如何知道客户端数据包已完全接收?

更常见的做法是在数据之前告诉服务器它将要接收的数据包的完整长度,还是用一些东西来标记数据包的结尾?

有些发送的数据只有几个字符长,有些可能长达数千个字符。

最佳答案

TCP 提供连续的数据流。 TCP 是使用数据包实现的,但 TCP 的全部意义在于隐藏它们。

把它想象成一面你想在上面画画的墙。墙是用砖砌成的。砖用砂浆粘在一起,抹灰泥使墙面光滑。砖是IP数据包,TCP是石膏。

现在您已经有了光滑的抹灰 TCP 隧道,并且您想要在其中添加一些结构。你想画盒子,这样你的画就可以彼此分开。这就是您想要做的:为您的数据添加一些“管理”结构(绘图周围的框)。

许多协议(protocol)使用 packet 的概念,这是一堆以固定格式的管理 header 开头的数据。 header 包含足够的信息来决定数据包的结束位置;例如,它包括数据包长度。 HTTP 使用 Content-Length 来做到这一点 header ,或(对于 HTTP/1.1)使用“分 block 传输编码”,其中数据被分成一个或多个小数据包,每个小数据包都有一个简单的 header ,其中包含精确的小数据包长度指示。

另一种方法是有一个特殊的终止符序列,它不能出现在“正常数据”中。如果您的数据是文本,那么您可以使用值为零的字节作为终止符。

还有一种方法是使用自终止数据。这是一种结构化的数据,您可以随时知道是否已到达元素的末尾。例如,XML 数据被组织为嵌套的标记对,例如 <foo>...</foo> .当到达结束标记 (</foo>) 时,您就知道该元素已完成。

关于tcp - 我应该如何标记 TCP 数据包的结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2389756/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com