TCP上的校验和

时间:2012-05-08 07:27:40

标签: tcp network-programming checksum crc

TCP是否负责确保在传输过程中由于丢失等原因而做必要的事情,确保通过线路完整地发送流?

它没有做好它的工作吗?

为什么更高的应用程序层协议及其应用程序仍然执行校验和?

2 个答案:

答案 0 :(得分:4)

虽然TCP确实包含自己的校验和,但它只是一个16位校验和,并且TCP校验和机制肯定可能会导致多位传输错误。这是非常罕见的,但它仍然是可能的,事实上我已经看到它发生了(在几十年内发生过一次或两次)。

强健协议将希望使用更高级别的哈希函数来确保传输数据的完整性。话虽如此,传输少量数据的应用程序并不多。批量传输应用程序(例如包管理器或自动更新机制)通常使用加密哈希函数来增强数据完整性的保证。

答案 1 :(得分:1)

TCP确保TCP数据包可靠传送,使用校验和来捕获传输过程中引入的错误,并根据需要重新传输丢失或损坏的数据包。当发送分组时,它被保留在重发队列中,直到对等主机确认接收为止;如果在某个超时时间内没有收到确认,则重传该数据包。但主机不会永远重传数据包 - 如果数据包重复失败,那么TCP最终会放弃并关闭连接。

高级协议假设TCP可靠地运行(公平假设)并使用自己的校验和或其他任何方法来检查更高级别的数据流是否安全到达。我写了很多错误的套接字应用程序,搞砸了他们自己的高级缓冲区并破坏了应用程序数据流!

在具有强大应用程序的任何生产级TCP / IP堆栈中,我认为您可以确信问题在于您的连接正在退出。或者你可能有一个错误的应用程序,但我怀疑你的fetch / wget是错误的。