据我所知,tcp提供了至少一次传递(在收到ack之前重新传输),并且在接收器上只提供了一次处理(重复的数据包将被忽略,只有一个副本将被传递到应用程序),如果这是真的,为什么应用层消息传递系统(如kafka)和流媒体系统(如spark)需要它们自己的应用层协议来提供精确的一次处理保证,为什么不仅仅依靠tcp进行一次传递和/或处理呢?
nszi6y051#
tcp的可靠性保证只包括系统间的数据传输,而不包括应用程序间的数据传输。如果操作系统接收到数据并将其放入套接字的接收缓冲区中,则接收方系统会发回一个ack。这意味着ack可能在应用程序读取和处理数据之前发送。为了保证由应用程序读取和处理数据,因此在应用程序协议中需要某种类型的ack。
1条答案
按热度按时间nszi6y051#
tcp的可靠性保证只包括系统间的数据传输,而不包括应用程序间的数据传输。如果操作系统接收到数据并将其放入套接字的接收缓冲区中,则接收方系统会发回一个ack。这意味着ack可能在应用程序读取和处理数据之前发送。为了保证由应用程序读取和处理数据,因此在应用程序协议中需要某种类型的ack。