以太网头的长度必须是14?

时间:2010-05-09 07:29:54

标签: c networking ethernet

来自here的代码段:

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

alt text http://www.dcs.gla.ac.uk/~lewis/networkpages/m04s03EthernetFrame_files/image002.gif

我该怎么做呢?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

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

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

据我所知,2字节长度的mac地址是以太网I的一部分,从未真正获得认可。具有6字节地址的Ethernet II / 802.3是我们现在使用的真正的通用以太网。

另请注意,填充为0-46,其中46来自以太网帧上的最小64字节约束,用于冲突检测(CD)目的。 46(pad)+ 14(dmac,smac,type)+ 4(CRC)= 64字节

答案 2 :(得分:1)

以太网报头是固定宽度,但扩展协议(如802.1q for vlan / qos)很常见,并且有效地扩展了L2报头。

答案 3 :(得分:0)

维基百科可以很好地了解框架

WIKI

IPv4 / v6是第3层协议。