校验和UDP数据包的正确方法是什么

时间:2010-03-09 01:00:29

标签: .net mono cross-platform network-programming udp

我正在用C#构建UDP服务器应用程序。我遇到了数据包校验和问题。

正如您可能知道的那样,如果数据包数据完好无损,每个数据包应该采用一些简单的方式告诉接收方。

现在,UDP已经有2字节校验和作为标头的一部分,这是可选的,至少在IPv4世界中是这样。另一种方法是将自定义校验和作为每个数据包中数据部分的一部分,并在接收器上进行验证。

我的问题归结为:最好是依靠UDP数据包标头中的(可选)校验和,还是将自定义校验和实现作为数据包数据部分的一部分?

也许正确的答案取决于具体情况(像往常一样),因此有一种情况是,即使代码是在Windows上用.NET编写和开发的,可能必须在平台下运行 - 独立的Mono.NET,所以最终的解决方案应该与其他平台兼容。我相信自定义校验和算法很容易移植,但我对第一个不太确定。

有什么想法吗?

另外,欢迎关于数据包校验和的呐喊。

1 个答案:

答案 0 :(得分:1)

你需要计算错误吗?如果UDP校验和错误,那么任何路由器都可能只丢弃数据包而你永远不会得到任何东西。

当然,如果标题中有错误(例如目标IP地址),您也无法获得它。

此外,UDP校验和算法是完全标准化的,尽管打开或关闭校验和的函数调用确实因平台而异,但它通常涉及setsockopt。