3

虽然 TCP 是一个提供重传和确认机制的可靠协议,但我认为它不是 100% 可靠的,因为 send() 的成功返回并不能确保数据已经到达目标端点,仅意味着数据被复制到内核缓冲区。

应用程序是否有任何机制可以知道数据是否已成功到达目的地?

一种可能的解决方案是在应用层中建立一些确认机制?

4

3 回答 3

3

TCP 是可靠的,因为发送的消息要么

  1. 在发送时收到(相同的顺序,相同的内容);假设内置校验和不会发生失败,它可能会失败,因为它只有 16 位
  2. 根本收不到

使用 TCP,接收到的消息绝不应该是乱序或丢失中间消息。

要区分情况 1 和 2,您应该实现确认机制。还可以确保优于 CRC 消息完整性的一个好主意是发回传入消息的 MD5 或其他散列。

于 2013-01-13T12:06:19.337 回答
1

您可以构建自己的应用程序,由接收者向发送者回复成功消息,如果没有收到成功消息,则根据需要重新发送。

在 Java 中,JMS 做这项工作,我相信一些现有的库应该在 C 中做同样的事情。

于 2013-01-13T12:03:43.927 回答
-1

当然 TCP 是可靠的协议,如果你想知道通过网络端口发送和接收的数据,使用 Wireshark 软件捕获发送和接收的数据。通过wireshark,您可以追踪数据包。

于 2013-01-13T12:02:33.700 回答