2010-10-08 79 views
4

我正在开发使用TCP的C++应用程序服务器和客户端。我在服务器上有三条消息:A,B和C.它们按顺序发送:A - > B - > C.客户端响应确认消息:rA,rB,rC。TCP消息的顺序?

客户收到A-> B-C的A,B和C吗?服务器是否接收rA-> rB-> rC?

+1

TCP不知道在您的邮件开始或结束。即使它想要,它也不能重新排序。 – 2011-09-17 16:18:40

回答

7

TCP保证了分组被接收(在单个连接上)的顺序是相同的,因为它们被发送的顺序。如果您有多个TCP连接,则无此保证 - 但TCP保留仅对给定TCP连接内的数据包进行排序。

更多概述见the Wikipedia article on TCP

TCP的功能之一是通过将数据包重新组合成顺序或强制重试乱序数据包来防止乱序数据传输。

+1

只是为了澄清“如果你有多个tcp连接,就没有这样的保证”:TCP保证对特定连接进行排序,而不依赖于所有其他连接。这意味着如果您通过第一次连接发送A,并通过第二次连接发送B,则可以按顺序或按顺序发送。如果您通过同一连接发送它们,它们将按顺序发送。 – atk 2010-10-08 02:56:51

+0

@atk:谢谢;我澄清了一点。 – 2010-10-08 02:58:45

+0

没错。特别是,如果您要为每条消息创建单独的连接(而不是通过单个连接顺序发送它们),则它们可以按任意顺序到达。 – 2010-10-08 02:58:45