我正在用C#构建UDP服务器应用程序。我遇到了数据包校验和问题。
正如您可能知道的那样,如果数据包数据完好无损,每个数据包应该采用一些简单的方式告诉接收方。
现在,UDP已经有2字节校验和作为标头的一部分,这是可选的,至少在IPv4世界中是这样。另一种方法是将自定义校验和作为每个数据包中数据部分的一部分,并在接收器上进行验证。
我的问题归结为:最好是依靠UDP数据包标头中的(可选)校验和,还是将自定义校验和实现作为数据包数据部分的一部分?
也许正确的答案取决于具体情况(像往常一样),因此有一种情况是,即使代码是在Windows上用.NET编写和开发的,可能必须在平台下运行 - 独立的Mono.NET,所以最终的解决方案应该与其他平台兼容。我相信自定义校验和算法很容易移植,但我对第一个不太确定。
有什么想法吗?
另外,欢迎关于数据包校验和的呐喊。
答案 0 :(得分:1)
你需要计算错误吗?如果UDP校验和错误,那么任何路由器都可能只丢弃数据包而你永远不会得到任何东西。
当然,如果标题中有错误(例如目标IP地址),您也无法获得它。
此外,UDP校验和算法是完全标准化的,尽管打开或关闭校验和的函数调用确实因平台而异,但它通常涉及setsockopt。