【问题标题】:hlen and sizeof(struct ip) in ip_output.cip_output.c 中的 hlen 和 sizeof(struct ip)
【发布时间】:2011-08-25 12:59:38
【问题描述】:

在 ip_output 中有两行我看不懂的代码:

mhlen = sizeof(struct ip)

if (hlen > sizeof(struct ip)) { ...

为什么我们需要将原始 ip 数据包头的长度 hlen 与 sizeof(struct ip) 进行比较?

你能帮忙吗?

【问题讨论】:

  • 你是面前有代码的人,而不是我们。

标签: c ip sizeof


【解决方案1】:

看起来这可能来自 BSD 的 ip_fragment 函数?其中一个变量是mhlen,一个是hlen,所以它们可能不同。 IP 标头是可变长度的。 struct ip 具有固定部分。 hlen 变量具有实际长度,包括末尾的可变长度选项。

【讨论】:

  • 是的,实际上它们是 2 个变量,我不关心第一个,实际上我不明白为什么他们将标头长度与 sizeof(struct ip) 进行比较?你知道sizeof(struct ip)的答案是什么吗?顺便谢谢你的回答*
  • 嘿,对不起,elie,刚看到这个。 sizeof(struct ip) 始终为 20。有关标题布局的详细信息,请参阅 en.wikipedia.org/wiki/IPv4#Header,这应该有助于您解码代码。
【解决方案2】:

IP 标头可以有其他选项(例如,源路由记录,用于跟踪路由)。 IP 标头的总大小在hlen 字段中编码为一个 32 位字的数量,因此如果没有 IP 选项,它将是 5(20 个字节),如果有 IP 选项,则更大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 2017-08-08
    • 2015-10-14
    • 2019-11-23
    • 2013-09-01
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多