TCP защищает от случайных повреждений, для этого к пакету добавляется 32-битная чексума. Вероятность повреждения пакета вообще не очень высока, т.к. чексумы есть еще и на канальном уровне, случайное повреждение такое, что сойдется чексума исключительно маловероятно. Но чексума защищает не от всех повреждений данных и точно не защищает от умышленных. Например если в каждом октете занулять какой-либо бит, то чексума сойдется. Дальше все зависит от ваших потребностей. Но добавлять свою чексуму большого смысла точно нет, если вы хотите более надежно защищать данные - защищайте их криптографически. Вы можете это делать пустив свой протокол поверх SSL/TLS, совсем не обязательно городить защиту внутри протокола.
Подтверждение доставки данных на уровне протокола хотя бы в виде ответа на запрос требуется в любом случае. Если вы откроете сокет, установите соединение, отправите данные и закроете сокет - вы не будете знать дошли они или нет, особенно при работе с асинхронными сокетами.