TCP uses IP to deliver segments. Two TCP entities, implemented in
two edge systems, communicate directly with one another, using an
unreliable communications medium -- the Internet -- as a delivery
service. TCP entities communicate by the exchange of segments.
In normal operation a TCP entity running on an edge system sends a
segment, containing application data, to a remote TCP entity. The
remote TCP receives the segment, and returns a special
acknowledegement (ACK) segment back to the
originator. Upon receipt of this ACK, the orginating TCP knows that
the data has been received correctly.
If a packet, containing a TCP segment, fails to be delivered then
no ACK will be received. Eventually the originating TCP will
timeout (decide it has waited too long) and
re-send the segment. With luck, and given a sufficiently low packet
loss rate, the second attempt will be successful. If not, the
sender can timeout again, and once again resend the segment. Thus
all data will eventually get delivered, although TCP does not
guarantee how long it will take.