以太网帧包结构
Posted 一行代码改变世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太网帧包结构相关的知识,希望对你有一定的参考价值。
以太网帧包结构
第一个是以太网Ⅱ帧结构
Ethernet_II 的帧中各字段说明如下:
DMAC(Destination MAC)是目的MAC地址。DMAC字段长度为6个字节,标识帧的接收者。
SMAC(Source MAC)是源MAC地址。SMAC字段长度为6个字节,标识帧的发送者。
类型字段(Type)用于标识我上一层所使用的协议类型(即网络层,用的什么协议,IPv4还是IPv6),该字段长度为2个字节。
数据字段(Data)是网络层数据,上面一层一层封装下来的数据,到了我们的数据链路层
循环冗余校验字段(FCS)提供了一种错误检测机制。该字段长度为4个字节。
data前面的我们称之为头部,后面的称之为尾部,再往前是前导符意味着开始,后导符意味着结束
以太网Ⅰ帧
IEEE802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域被802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和SNAP字段。
Length字段定义了Data字段包含的字节数。
逻辑链路控制LLC(Logical Link Control)由目的服务访问点DSAP(Destination Service Access Point)、源服务访问点SSAP(Source Service Access Point)和Control字段组成。
SNAP(Sub-network Access Protocol)由机构代码(Org Code)和类型(Type)字段组成。Org Code三个字节都为0。Type字段的含义与Ethernet_II帧中的Type字段相同。
本文来自博客园,作者:{Zedffeng},转载请注明原文链接:{https://www.cnblogs.com/zedffeng/}
以太网帧结构
下图是一张以太网帧的结构图。这个结构图很清晰地描述了整个以太网帧每个部分组成。
对我们来说能抓到的或者能看到的报文帧,基本上是在目标MAC地址到IP数据包。
上图中的前导码和帧开始符主要做一些底层的数据传输和编码流的二进制流,它们本身不会被网卡捕获,网卡一般抓包的时候就已经将前导码跟帧开始符解析掉了。
还有帧后面的校验码,其主要是通过CRC校验判断帧是否有效或者发生篡改或错误,当网卡能收到数据帧并通过抓包工具可以抓到的,就说明该帧没有问题,是有效的,当帧是有效的后,就说明CRC就已经解析掉了。
所以,在整个以太网帧中,能看到的就是目标MAC地址、源MAC地址、帧类型以及IP数据包,当然IP数据包中还会细分许多协议,每个帧之间也是跟CAN类似有,有一定的距离,不可能一帧挨着一帧传输的。
IP数据包里面,有46~1500 字节的长度约束。这不是由ECU决定的。在我们使用的设备中,会有一个最大传输单元(MTU)、MTU一般默认是1518个字节,这就导致IP数据包最多只有1500个字节。
以太网单个最大帧:6(目的MAC)+ 6(源MAC)+ 2(帧类型)+ 1500(IP数据包)+ 4(CRC校验)=1518字节,如果带VLAN就是1522字节(VLAN会多出四个字节的帧类型描述)
以太网最小帧:6(目的MAC)+6(源MAC)+2(帧类型)+46(IP数据包)+4(CRC校验)=64字节
常见的以太网帧类型:
-
0x0800:IPv4
-
0x0806:ARP
-
0x22F0:AVTP
-
0x8100:VLAN Tag(TPID)
-
0x86DD:IPv6
-
0x88F7:PTP / gPTP
下图是用工具抓的两个报文,以方便我们来理解以太网帧结构。上图报文以太网帧如果小于64字节,那么会填充00。
当以太网帧如果大于1518字节,那么会分片,如下图所示。1008字节ICMP报文分2帧传输。
接下来我们对以太网帧进行更详细的分析
从上图可以看到,当我们使用SOME/IP协议时,SOME/IP报文是封装在TCP、UDP报文里,然后把它加一个报头,扔到IP层的Payload中,IP层添加报头后,再分装到IP数据包中,一层一层分工。
当对方接收到后,相应的就是去除包头,解析SOME/IP中的Payload。
✦✦
DoIP帧结构
接下来我们看一个DoIP的报文。下图为用工具抓的一个DoIP报文。
上图整个DoIP报文整个一个帧是69个字节,其实还要再增加4个字节的CRC,总共73个字节。只不过当网卡识别它是一个有效帧后,就把CRC 解析掉了。
当然,图中也描述了它的源MAC地址(6个字节)和目的MAC地址(6个字节),再加上2个字节的帧类型,共14个字节。
然后再往后就是传输层,IP层最小是20个字节。
然后再往后是TCP,DoIP报文是一个UDS的报文,而UDS报文都是通过TCP传输的,因此,会有个TCP的头部,包括 Src Port(源端口):13400(这是DoIP的一个端口号)以及 Dst Port(目的端口):50090。TCP的长度是20个字节;
DoIP协议头部是8个字节的长度;需要注意的是,DoIP的头部并不包括源DoIP地址和目标DoIP地址这4个字节;
再往后的话就是我们的Payload,3个字节,
将上述加起来一共69(14 + 20 + 20 + 8 + 4 + 3)个字节(一帧)。
✦✦
SOME/IP 帧结构
接下来,我们看一下SOME/IP帧结构。
这就跟SOA有些关系,SOA本身是一个概念化的东西,它具体化的一个表现就是SOME/IP的报文,所有的以太网的SOA基本上都是标准化的一个SOME/IP的协议去做一个传输。
下图为SOME/IP报文的解析:
上图中,SOME/IP的报文总共62个字节,以太网帧头部就不做赘述了。这里我们说一下VLAN,我们有时会把一些业务进行一些区分,例如诊断、DoIP、SOME/IP、安全性更高的一般会通过VLAN区分,上面提到的DoIP协议报文是没有VLAN的,说明DoIP和SOME/IP 的通信传输是隔离开的。
再往后,IP层我们之前也说过了,这里就不做赘述了。
再往后,UDP说明这里的SOME/IP是通过UDP进行传输的,它的源端口是30602、目的端口是30602。
再往后,我们看一下SOME/IP报文,它的头部是16个字节,这16个字节是固定的,包含Service ID、Method ID、Length、Client ID、Session ID、Protocol Version、Interface Version、Message Type、Return Code。
当然这里是没有带Payload,后期我们会进行一个相关的详细分享。
以上是关于以太网帧包结构的主要内容,如果未能解决你的问题,请参考以下文章