消息导向协议与流导向协议的区别

43
我正在努力理解“面向消息”和“面向流”的协议之间的区别。我已经搜索过了,但没有找到清晰的解释或区别。有人可以解释一下或给我一个解释区别的链接吗?
谢谢。

你是指网络堆栈中的特定层级吗? - bzlm
5
我投票关闭此问题,因为它与编程无关 - 它只是关于网络协议,并没有涉及到任何具体的问题,更不用说编程问题了。 - sideshowbarker
4个回答

80

消息定向协议以独立的数据块或组发送数据。数据接收方可以确定一个消息何时结束,另一个消息何时开始。流协议则发送连续的数据流。

这里举个手机的例子:文本消息是消息定向协议,因为每个文本消息都与其他消息不同。而电话通话则是流协议,因为在通话过程中有持续的音频流。

互联网上常用的协议包括UDP(消息定向)和TCP(流协议)。请参阅维基百科了解更多信息。

希望这能帮到您。


32

流协议以字节为单位发送数据。可以将其视为管道,其中一侧输入的所有内容都会传输到另一侧。另一侧的任务是确定何时有足够的数据,使之有意义。

TCP是一个典型的例子。一旦您通过管道发送“Hello World”,就没有保证它会如此到达。它可能作为每个字母本身,作为两个单词或作为一个整体出现。您唯一知道的是字母的顺序。

消息协议通常是在流之上构建的,但中间有一层负责将每个逻辑部分与另一个隔离开来。它会解析输入流,并仅在整个数据集到达时才给您结果,而不是在所有状态之间都给您结果。在前面的示例中,您只期望得到完整的“Hello World”消息或什么也没有。

这是相当简化的观点,但我认为它解释了最大的区别。


4
这有点复杂。一般来说,低层(OSI: 物理层)有两种不同类型的传输方式:
- 基于包的传输 - 基于信道的传输
这两种传输方式都可以通过频率调制、幅度调制、相位调制等方式进行发送。
这些频率/幅度/...(也称为模拟调制)可以通过数字化进行增强。或用于数字信号。这被称为数字调制。
参见:https://en.wikipedia.org/wiki/Modulation 基于包的传输使用一条线路传输多个数据包。基于信道的传输则使用不同的线路传输不同的数据包。基于信道的传输(如广播电台所使用的传输方式)的优点是信号无需即时到达。缺点是该信道使用率较低。因此,在互联网上我们使用基于包的传输。但是,这种传输方式可以基于基于信道的频率调制(如有线电视调制解调器)或单线包式幅度调制(如电话线)。
最终,在OSI第5层(传输层)中,UDP和TCP都是基于包的传输。因此,“流式传输”和“面向消息的传输控制协议(TCP)”之间的区别是一个好问题。
此外,从shoutcast.com流式传输的数据也被分成了数据包。 (流式数据包/消息被分成TCP数据包。)有可能丢失一个TCP数据包。但是,由于TCP是面向地址的,并对其数据包进行编号,因此可以重新请求数据包。这使得TCP更加可靠。
现在,在TCP之上是流媒体。它们利用了TCP按包编号排序的功能。关键在于,它们发送的数据更有可能随时切换到流中。
希望这能解答你的问题。
敬礼

3

消息流和字节流的主要区别在于消息边界。消息流会跟踪消息边界,而字节流不会。

在网络中,假设有1024个字节的数据被传输到主机,然后过了一分钟,另外1024个字节的数据也被传输到同一主机,那么接收者将会收到总共2048个字节的数据。

在这种传输中,消息流将发送两个不同的1024字节的消息,而字节流将把整个2048个字节作为单个单位传输给接收者。

消息流的例子包括页面序列。字节流的例子包括下载歌曲或电影。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接