在下面的上下文中,什么是"message“?
TCP和UDP的一个不同之处是UDP保留了消息边界。
我理解TCP和UDP之间的区别,但不确定“消息边界”的定义。由于UDP在每个单独的包中都包含了目的地和端口信息,这是否为消息提供了一个“边界”?
发布于 2012-03-05 08:37:09
不,消息边界与目的地或端口无关。“消息边界”是通过协议发送的两条消息之间的分离。UDP保留消息边界。如果您在UDP上发送"FOO“和"BAR”,则另一端将接收两个数据报,一个包含"FOO“,另一个包含"BAR”。
如果您通过TCP发送"FOO“和"BAR”,则不会保留消息边界。另一端可能是"FOO“,然后是"BAR”。也可能得到"FOOBAR“。或者它可能得到"F“,然后"OOB”,然后"AR“。TCP不试图保留应用程序消息边界--它只是每个方向上的字节流。
发布于 2012-03-05 08:38:07
此上下文中的消息边界只是消息/数据包的开始和结束。对于TCP连接,所有消息/数据包都合并成一个连续的数据流,而在UDP中,消息以它们的原始形式提供给您。它们的确切大小(以字节为单位)。
发布于 2022-07-03 19:36:27
您应该小心,而不是混淆应用程序级和协议级消息/数据包边界。它们是非常不同的东西。这个问题没有明确区分非常不同的概念。
作为欺骗,当不需要可靠和有序的传递时,在孤立的子网上使用小消息--您可以欺骗和使用UDP。单个UDP发送/接收将始终包含一条消息--这比编写代码更简单。
当需要可靠和有序的传递时,或者需要更大的应用程序级别的消息时,就需要使用TCP。是的,你的应用程序需要一点纪律。您需要通过TCP流正确地序列化/反序列化应用程序级别的消息。这是很容易做到的。
“答案”是应用程序级消息边界必须由应用程序保证。UDP可以用于某些应用程序。TCP对其他人更好(而且集更大)。
此外,如果有多个线程对单个流(网络或文件)执行非托管写入,则这是应用程序中的一个问题。
https://stackoverflow.com/questions/9563563
复制相似问题