Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我必须计算和验证 IP 数据包的校验和(我正在用 C 语言编写路由器)。表示 IP 标头的结构具有 16 位校验和,但结构中的总位数不能被 16 整除——它短 8 位。
我的问题是这个。我是否一次读取 struct 16 位并用零填充最后一组位以计算校验和?
如果位数错误,则将零位填充到数据的末尾。
但是,IP 是在标头字段上计算的,因此总是有一个 16 位的倍数来计算校验和。TCP 有时在数据末尾需要一个额外的零字节。
http://en.wikipedia.org/wiki/IPv4_header_checksum