«Я пытаюсь сосредоточиться на том, как узнать, когда ваши данные были приняты другой стороной соединения».
Я думаю, вам необходимо знать, какой тип протокола прикладного уровня вы собираетесь реализовать и какое влияние это оказывает на производительность приложения.
Возьмем HTTP в качестве примера протокола потоковой передачи. Сервер отправляет поток данных клиенту. Больше нет дополнительных ACK прикладного уровня, и серверу на самом деле все равно, когда и как именно поступает его поток данных. Это очень эффективно для каналов с высокой задержкой.
Теперь сравните это с SMB! Вместо потоковой передачи файла данные разделяются на блоки. Каждый успешно переданный блок данных фиксируется на прикладном уровне. Это дает вам больше контроля, однако эффективно уничтожает протокол в сетях WAN (см. «Продукт с задержкой пропускной способности»).
Принимая это во внимание, вы можете придумать свой собственный дизайн для вашего собственного протокола.