首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是信息边界?

什么是信息边界?
EN

Stack Overflow用户
提问于 2012-03-05 08:23:40
回答 3查看 16.7K关注 0票数 27

在下面的上下文中,什么是"message“

TCP和UDP的一个不同之处是UDP保留了消息边界。

我理解TCPUDP之间的区别,但不确定“消息边界”的定义。由于UDP在每个单独的包中都包含了目的地和端口信息,这是否为消息提供了一个“边界”

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-05 08:37:09

不,消息边界与目的地或端口无关。“消息边界”是通过协议发送的两条消息之间的分离。UDP保留消息边界。如果您在UDP上发送"FOO“和"BAR”,则另一端将接收两个数据报,一个包含"FOO“,另一个包含"BAR”。

如果您通过TCP发送"FOO“和"BAR”,则不会保留消息边界。另一端可能是"FOO“,然后是"BAR”。也可能得到"FOOBAR“。或者它可能得到"F“,然后"OOB”,然后"AR“。TCP不试图保留应用程序消息边界--它只是每个方向上的字节流。

票数 44
EN

Stack Overflow用户

发布于 2012-03-05 08:38:07

此上下文中的消息边界只是消息/数据包的开始和结束。对于TCP连接,所有消息/数据包都合并成一个连续的数据流,而在UDP中,消息以它们的原始形式提供给您。它们的确切大小(以字节为单位)。

票数 3
EN

Stack Overflow用户

发布于 2022-07-03 19:36:27

您应该小心,而不是混淆应用程序级和协议级消息/数据包边界。它们是非常不同的东西。这个问题没有明确区分非常不同的概念。

作为欺骗,当不需要可靠和有序的传递时,在孤立的子网上使用小消息--您可以欺骗和使用UDP。单个UDP发送/接收将始终包含一条消息--这比编写代码更简单。

当需要可靠和有序的传递时,或者需要更大的应用程序级别的消息时,就需要使用TCP。是的,你的应用程序需要一点纪律。您需要通过TCP流正确地序列化/反序列化应用程序级别的消息。这是很容易做到的。

“答案”是应用程序级消息边界必须由应用程序保证。UDP可以用于某些应用程序。TCP对其他人更好(而且集更大)。

此外,如果有多个线程对单个流(网络或文件)执行非托管写入,则这是应用程序中的一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9563563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档