TCP是可靠传输,为什么应用层还要做校验

之前一直有过这个困惑。目前我看到的一个比较好的解释是对于TCP层来说,只是数据流的概念,数据的逻辑语义没有保障,像

数据的正确性则没有保证,比如说数据有没有被篡改,算是对应用层的一种保护吧。还有一点我自己想到的是,比方说你有一个

文件服务器,tcp确实保证了每一个tcp封包到达,但是你的应用程序的正确性却无法保证,比如你文件的传输过程中,你的程序

在某个错误的逻辑下,没有把一个文件分片放进tcp协议栈里,那么对方当然最好得到的是一个破碎的文件。

———————update 2015-11-24-------------------------------------

听了某网络编程大牛的讲解才知道,那是因为不在同一层,tcp是可靠传输协议,当发送了一个tcp分节给对方之后,对方的内核tcp栈发回一个ack,而这个响应是传输层的响应,

但是对于应用层的消息包来说并不能认定一定成功,比如对方由于某个bug,收到这个tcp分节之后来不及处理就异常退出了,那对于发送方的应用层来说,这个消息

并不能说发送成功,而对于tcp来说确实是传输可靠的。

原文地址:https://www.cnblogs.com/encode/p/4456797.html