【问题标题】:Is length of ethernet header necessarily 14?以太网头的长度一定是14吗?
【发布时间】:2019-07-26 03:09:04
【问题描述】:

来自here的代码sn-p:

void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
    ....
    /* retireve the position of the ip header */
    ih = (ip_header *) (pkt_data +
        14); //length of ethernet header
    ....

但这张图片并不一定是14


(来源:lewis at www.dcs.gla.ac.uk

我应该如何正确地做呢?

【问题讨论】:

  • 如果您在回答问题后对其进行编辑,则答案看起来很荒谬。请不要这样做。问另一个问题。或者更好的是,想想你想问什么,并在第一时间提出正确的问题。

标签: c networking ethernet


【解决方案1】:

在 802.3 中,源地址和目标地址都是 48 位 MAC 地址。 6+6+2=14

【讨论】:

  • 您能详细说明一下吗?不应该是7+1+6+6+2=22吗?
  • 不,因为这 8 个字节出现在帧之前,而不是帧的一部分。
  • OK。但它说的是2 6,所以它可能是2+2+2=6 或6+6+2=14,对吧?
  • 不适用于 802.3。而以太网是 802.3。
  • TCP/IP 比 802.3 更高。
【解决方案2】:

是的,对于终端站场景,大多数情况下为 14。 除了你有一个 802.1Q 帧的情况外,那会让你再跑 4 个字节。 802.1Q 主要用于路由器/路由器通信中的 VLAN 标记和 QoS。

前导码和起始帧分隔符主要由低级固件用于捕获帧。 当我们(应用程序)可以访问以太网帧时,通常我们没有前导码或起始帧分隔符。

据我所知,mac 地址的 2 字节长度是以太网 I 的一部分,它从未真正被接受。而具有 6 字节地址的以太网 II/802.3 是我们现在使用的真正常见的以太网。

还想提一下填充是 0-46,其中 46 来自以太网帧的最小 64 字节限制,用于冲突检测 (CD) 目的。 46(pad) + 14(dmac,smac,type) + 4(CRC) = 64 bytes

【讨论】:

    【解决方案3】:

    以太网标头是固定宽度的,但是用于 vlan/qos 的 802.1q 等扩展协议很常见,并且可以有效地扩展 L2 标头。

    【讨论】:

      【解决方案4】:

      维基百科有很好的框架图片

      WIKI

      IPv4 / v6 是第 3 层协议。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-03
        • 1970-01-01
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        相关资源
        最近更新 更多