2012-03-05 215 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時,消息將以原始形式提供給您。他們將有一個確切的字節大小。