2012-03-05 126 views
12

什么是“消息贿赂”在以下上下文中?什么是消息边界?

TCP和UDP之间的一个区别是UDP保留消息 边界。

我明白UDP关于“消息边界”定义TCP之间的差别,但不确定。由于UDP在每个单独的数据包中包含目的地和端口信息,是否可以这样给出消息“边界”

+0

嗯,http://codeidol.com/csharp/csharp-network/Connectionless-Sockets/Distinguishing-UDP-Messages/(UDP)和http://codeidol.com/csharp/csharp-network/IP-Programming基本的/ TCP/UDP编程(TCP)可能会有所帮助。 – Jason 2012-03-05 08:26:28

回答

16

不,消息边界与目标或端口无关。 “消息边界”是通过协议发送的两条消息之间的分隔。 UDP保留消息边界。如果您通过UDP发送“FOO”,然后发送“BAR”,另一端将收到两个数据报,一个包含“FOO”,另一个包含“BAR”。

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

+0

在TCP中,流/缓冲区是按顺序发送还是接收?在“FOO”之前我不会得到“BAR”,或者每个字节可能混合到“ORAFBO”之类的东西? – KMC 2012-03-05 08:41:20

+0

@KMC:[Wikipedia TCP](http://en.wikipedia.org/wiki/Transmission_Control_Protocol):TCP提供可靠的,**排序的**字节流传输[..] – LumpN 2012-03-05 08:44:19

+0

还要注意,UDP不会。 – GazTheDestroyer 2012-03-05 08:46:05

2

在这种情况下的消息边界仅仅是消息/分组的结尾。通过TCP连接,所有的消息/数据包都被组合成连续的数据流,而使用UDP时,消息将以原始形式提供给您。他们将有一个确切的字节大小。