如果我的应用程序使用tcp协议?那么我的应用程序中是否需要重试机制?

如果我的应用程序使用tcp协议?那么我的应用程序中是否需要重试机制?,tcp,Tcp,如果我在应用程序中使用tcp协议,那么我是否需要在应用程序中使用另一种重试机制 我希望我的消息100%被我的客户机接收,如果它接收到重复的消息,那么客户机将向服务器重新发送一个ACK,在什么情况下,如果我使用tcp长连接,服务器无法获得ACK? 假设服务器/客户端代码不会删除ACK本身,tcp连接将保持活动状态,在这种情况下,我是否需要在服务器中使用重试机制来确保客户端获得消息?或者是否存在ack将丢失的任何条件?或者tcp会丢失数据包?tcp是可靠的协议,它不会从流的中间删除或重新排序任何数据

如果我在应用程序中使用tcp协议,那么我是否需要在应用程序中使用另一种重试机制

我希望我的消息100%被我的客户机接收,如果它接收到重复的消息,那么客户机将向服务器重新发送一个ACK,在什么情况下,如果我使用tcp长连接,服务器无法获得ACK?
假设服务器/客户端代码不会删除ACK本身,tcp连接将保持活动状态,在这种情况下,我是否需要在服务器中使用重试机制来确保客户端获得消息?或者是否存在ack将丢失的任何条件?或者tcp会丢失数据包?

tcp是可靠的协议,它不会从流的中间删除或重新排序任何数据。OOB数据是一个例外

示例:按此顺序将消息A和B从客户端发送到服务器时。TCP保证服务器应用程序在B之前从TCP流接收A。 TCP将在中断该规则之前中止TCP连接

TCP为您执行所有必要的重新传输,以确保来自客户端的输出流与服务器的输入流相同。反之亦然

如果客户端和服务器应用程序不会删除/忽略已传输的消息, 这样就没有理由在应用程序级别重新发送消息。
重新发送消息很可能会导致重复。

TCP只关心数据的传递不会丢失、重复或重新排序到应用程序。但当数据实际到达目标系统时,它不会给发送者任何反馈。它也不关心应用程序是否实际处理数据,如果应用程序在退出之前实际读取了所有数据,它也不提供可靠的反馈。因此,如果您需要应用程序实际处理并响应您发送的数据的反馈,那么您需要向应用程序协议添加适当的反馈