【发布时间】:2012-11-03 22:20:09
【问题描述】:
我必须计算和验证 IP 数据包的校验和(我正在用 C 语言编写路由器)。表示 IP 标头的结构具有 16 位校验和,但结构中的总位数不能被 16 整除——它短 8 位。
我的问题是这样的。我是否一次读取 struct 16 位并用零填充最后一组位以计算校验和?
【问题讨论】:
我必须计算和验证 IP 数据包的校验和(我正在用 C 语言编写路由器)。表示 IP 标头的结构具有 16 位校验和,但结构中的总位数不能被 16 整除——它短 8 位。
我的问题是这样的。我是否一次读取 struct 16 位并用零填充最后一组位以计算校验和?
【问题讨论】:
如果您的位数有误,您将在数据的 end 处填充零位。
然而,IP 是通过标头字段计算的,因此总是有一个 16 位的倍数来计算校验和。 TCP 有时在数据末尾需要一个额外的零字节。
【讨论】: