Any data loss is detected and automatically corrected, which is why TCP is also called a reliable protocol.
In other words,
the transport layer is responsible for error-free, end-to-end delivery of data from the source host to the destination host.
TCP is guaranteed to be a reliable transmission indeed. A question is raised, is it redundant (or useless, sorry for my poor English) to reply the received messages (which are transported on TCP) on application layer to tell the sender that the messages have been successfully received?