使用 TCP 作为网络协议,我在通过线路发送消息之前为每条消息的大小(可能还有校验和?)添加前缀。我想知道,计算和传输消息的校验和是否有意义,以确保消息将被传递(如果以及何时传递)不变,例如由于某些网络错误。目前,在发送消息本身之前,我正在发送消息的 4 字节大小 + 2 字节校验和 (CRC-16)。另一个端点正确识别预期消息长度、读取它并验证校验和。
我知道 TCP 有内部的数据包验证机制,我有一种强烈的感觉,我在应用程序级别的消息验证是多余的,但我不确定,在我做决定之前需要你的建议。
我正在开发客户端-服务器应用程序,每天有数以万计的潜在连接到服务器。甚至任何消息中的单个损坏字节都可能导致整个链的错误消息交换,这是不可接受的(嗯,几乎所有客户端-服务器应用程序都有相同的要求,不是吗)。所以我想确定一下——我可以安全地信任 TCP 的内部可靠性,还是提供我自己的校验和验证机制更好。而且我说的是小的两字节校验和(CRC-16),我不是在谈论数字签名消息等(并且该系统是在.Net(C#)中使用套接字开发的,如果这有什么不同的话) .