0

我必须计算和验证 IP 数据包的校验和(我正在用 C 语言编写路由器)。表示 IP 标头的结构具有 16 位校验和,但结构中的总位数不能被 16 整除——它短 8 位。

我的问题是这个。我是否一次读取 struct 16 位并用零填充最后一组位以计算校验和?

4

1 回答 1

0

如果位数错误,则将零位填充到数据的末尾

但是,IP 是在标头字段上计算的,因此总是有一个 16 位的倍数来计算校验和。TCP 有时在数据末尾需要一个额外的零字节。

http://en.wikipedia.org/wiki/IPv4_header_checksum

于 2012-11-04T21:16:11.810 回答