TCP 100%可靠吗?

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

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

一个可能的解决scheme可能是在应用程序层build立一些确认机制?

就发送消息而言,TCP是可靠的

  1. 被接收(相同的顺序,相同的内容); 假设内置校验和不会发生故障,这可能是因为它只有16位OR
  2. 根本不被接收

使用TCP,收到的消息不应该乱序或缺少中间消息。

要区分案例1和2,您应该实施确认机制。 一个好的想法也可以确保好于CRC的消息的完整性,就是发回一个MD5或其他散列的传入消息。

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

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

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