One popular protocol is to first send a transaction header that contains the transaction seq # and how many records are in the transaction.
Suppose there are N records in the transaction.
Then, based on buffer size, each packet contains x < N records.
Then there will be at most N/x + 1 packets, the last of which will have less than x records.
Each packet is numbered in the event the checksum fails so as to re-transmit the specific package.
From there it is done on a "need to know" basis. No ACKs are sent in reply. As a result,
The receiver in turn must send the packet # that failed the checksum following the NAK.