如何启用UDP校验和

Bil*_* VB 4 c sockets checksum udp network-programming

我正在开发一个涉及VxWorks设备和Linux机器之间的UDP套接字通信的项目.在这个项目中,我想利用UDP头的校验和字段.

似乎在VxWorks套接字接口中,checksum默认情况下启用传出UDP数据包的字段.

但是,对于通常的Unix套接字接口,似乎没有任何标志或其他方法来打开UDP套接字,该套接字将检查传入数据包的校验和并将其填充为传出数据包.

对于通常的Unix套接字接口,是否存在这样的标志?

谢谢!

Tho*_*mas 6

我不是专家,但man 7 udp在这个问题上唯一需要说明的是它默认启用:

UDP生成并检查校验和以捕获传输错误.

它没有提到任何禁用它的方法.

编辑:我懒得查找当前的内核源代码,但是这个页面表明只丢弃了具有无效校验和的数据包(csum_copy_err部分).

  • 使用UDP over IPv4,校验和字段在技术上是可选的.如果值为0,则忽略校验和.但是,UDP over IPv6要求校验和不为零,并且必须丢弃具有校验和为零的数据报.如果校验和*应为*,则必须将其作为FFFF发送.(在[RFC 2460](http://www.ietf.org/rfc/rfc2460.txt)中查找"UDP校验和",指定IPv6的RFC). (2认同)