Отправляющий TCP знает, когда данные будут подтверждены другим концом, но единственная причина, по которой он это делает, так это то, что он знает, когда он может отбросить данные (потому что кто-то другой теперь отвечает за передачу их в приложение на другая сторона).
Как правило, он не предоставляет эту информацию отправляющему приложению, потому что (несмотря на внешность) фактически не будет значить для отправляющего приложения. Подтверждение не означает, что принимающее приложение получило данные и сделало с ними что-то разумное - все это означает, что отправляющему TCP больше не нужно беспокоиться об этом. Данные все еще могут быть в пути - например, на промежуточном прокси-сервере или в принимающем стеке TCP.
«Данные успешно получены» на самом деле представляют собой концепцию уровня приложения - это означает, что они различаются в зависимости от приложения (например, для многих приложений имеет смысл считать данные «полученными» только после их синхронизации на диске). на принимающей стороне). Таким образом, это означает, что вы должны реализовать его самостоятельно, потому что, как разработчик приложения, вы действительно единственный, кто знает, как сделать это разумно для вашего приложения.