TCP不一定可靠。
TCP保证可靠的机制是对数据进行checksum计算并传输校验值。
然而有时候就是会出现数据错误却通过校验值检验的奇葩情况。比如
Amazon S3 在2008年7月就遇到过,单bit反转导致了一次严重线上事故,所以他们吸取教训加了 check sum。见http://status.aws.amazon.com/s3-20080720.html
因此TCP不一定可靠。有条件的话可以在通信协议中增加自己的校验机制。
另外在05年年代,本人当时使用1GHz左右的AMD CPU,彼时发生一系列奇怪的时间,双系统其中之一不断崩溃,下载的文件校验出错,那时我还怪下载软件对BT下载下来的数据没校验。最后直到一次编写了一个算法,固定的输入参数产生不固定结果的时候,才发现原来是CPU有问题,所以导致了TCP下载下来的软件可能和源数据不同。