TCP гарантирует, что:
- Отправленные вами данные поступят в том порядке, в котором вы их отправили
- Отправленные вами данные будут получены в точности так, как вы их отправили (без изменений)
- Никаких других (ложных) данных получено не будет
Это не гарантирует, что грызуны не будут питаться вашими кабелями, электропитание в здании останется или даже процесс на другой машине, с которой вы разговариваете, потрудится что-нибудь сделать, когда ОС сообщит, что некоторые данные ибо оно пришло.
Если вам необходимо положительное подтверждение того, что данные были получены и обработаны, вам необходимо отправить подтверждение обратно вручную (поскольку TCP-соединения являются дуплексными, у вас уже есть канал для этого).
Конечно, все это никак не связано с .NET, Windows или любой другой реализацией сетевого стека.
Обновление: Я хотел бы особо отметить, что после того, как сетевой стек ОС принимает данные для передачи, вы не сможете узнать, что процесс в другой конец получил эти данные. В большинстве случаев сетевой стек знает, что данные достигли цели (через сообщения TCP ACK), , но не знает, передала ли их операционная система цели процессу, для которого они предназначены . Поэтому отправка собственных сообщений «данные получены и действовали по» является единственной возможностью.