UDP校验和计算?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

/usr/include/netinet/udp.h中定义的UDP头结构如下

struct udphdr
{
  u_int16_t source;
  u_int16_t dest;
  u_int16_t len;
  u_int16_t check;
};

标题的检查字段中存储了什么值?如何验证校验和是否正确?我的意思是校验和计算的数据是什么?(它只是udp头文件或udp头文件加上它后面的有效载荷?)

提问于
用户回答回答于

UDP校验在整个有效载荷进行,在标头中的其它字段,从所述IP报头的某些字段。为了执行计算(通过这个伪报头,UDP报头和有效载荷完成),从IP报头构造伪报头。包含伪头的原因是要捕获已路由到错误IP地址的数据包。

基本上,在接收端,头部的所有16位字加上数据区域被加在一起(以16位包装)并且检查结果0xffff

在发送方面,这有点复杂。对所有16位值执行1的补码和,然后用补码(即,反转所有位)取该值来填充校验和字段(附加条件是计算的零校验和将被改变为全部一个位)。

补码和不仅是所有补码值的总和。这有点复杂。

扫码关注云+社区

领取腾讯云代金券