【发布时间】:2013-10-12 11:00:51
【问题描述】:
使用 TCP 作为网络协议,我在通过线路发送消息之前为每条消息的大小(可能还有校验和?)添加前缀。我想知道,计算和传输消息的校验和是否有意义,以确保消息将被传递(如果以及何时传递)不变,例如因为一些网络错误。目前,在发送消息本身之前,我正在发送消息的 4 字节大小 + 2 字节校验和 (CRC-16)。另一个端点正确识别预期消息长度、读取它并验证校验和。
我知道 TCP 有内部数据包验证机制,我有强烈的感觉,我在应用程序级别的消息验证是多余的,但我不确定,在我做决定之前需要你的建议。
我正在开发客户端-服务器应用程序,每天有数以万计的潜在连接到服务器。即使任何消息中的单个损坏字节也可能导致整个链的错误消息交换,这是不可接受的(嗯,几乎所有客户端-服务器应用程序都有相同的要求,不是吗)。所以我想确定一下——我可以安全地信任 TCP 的内部可靠性,还是提供我自己的校验和验证机制更好。我说的是小的两字节校验和(CRC-16),我不是在谈论数字签名消息等(并且该系统是在.Net(C#)中使用套接字开发的,如果这有什么不同的话) .
【问题讨论】:
-
简单地通过 SSL 发送所有内容怎么样?这样您就可以同时获得安全性和防止意外更改的保护。
-
为什么不使用 WCF 并不必担心底层协议细节。
-
有时 WCF 不是一个选项,而当它是 - 它通常是首选方法。但这次我对套接字解决方案感兴趣。
标签: c# .net sockets networking tcp