以太网帧结构


以太网帧发送数据时都是从8个字节的前导码开始的。前导码是1和0的交互。

> > 前导码:作用是通知接收方有数据到来。要与其的时钟保持同步。在物理层加进去的。不属于帧这部分
>
> ​  SPD :是一个字节10101011,最后使用11,来通知接收方下一个字段就是目的主机的位置。
>
> ​  DA  :目的节点的MAC
>
> ​  SA  :源节点的MAC
>
> ​  Type/length:    2字节,根据数值的不同代表不同的封装格式。
>
> ​  字段length :0x0000~0x50DC 范围内,该帧为802.3 raw 封装
>
> ​  字段type   :0x0600~0xFFFF 范围内,该帧为 Ethernet II 封装
>
>    Payload:上层协议有效载荷。最小为46个字节,最大为1500字节,
>             对于Type封装格式,上层协议必须保证该字段的值大于46字节;
>             对于 Length 封装,对于有效载荷不够46字节的报文链路层必须进行填充。
>
> ​  FCR     : 4字节的校验和。(在vlan 头中有trailer字段(尾部标记):trailer是CRC校验和:对应报文的最后4个字节)

以太网帧结构

在以太网中,数据通信的基本单位是 以太网帧 ( frame ),由 头部 ( header )、数据 ( data )以及 校验和 ( checksum )三部分构成:

头部

以太网帧头部包含 3 个字段,依次是:
1、目的地址:长度是 6 字节,用于标记数据由哪台机器接收;
2、源地址 :长度也是 6字节,用于标记数据由哪台机器发送;
3、类型 :长度是 2 字节,用于标记数据该如何处理, 0x0800 表示该帧数据是一个 IP 包(后续章节介绍)。

数据

数据 可以是任何需要发送的信息,长度可变, 46 至 1500 字节均可。

上层协议报文

例如 IP 包,可以作为数据封装在以太网帧中,在数据链路层中传输。
因此,数据还有另一个更形象的称谓,即 负荷 ( payload)。。

校验和

由于物理信号可能受到环境的干扰,网络设备传输的比特流可能会出错。
一个以太网帧从一台主机传输到另一台主机的过程中,也可能因各种因素而出错。
那么当主机收到以太网帧时,如何确定它是完好无损的呢?

答案是: 校验和 。
我们可以用诸如 循环冗余校验 ( CRC )算法,为以太网帧计算校验和。
如果以太网帧在传输的过程出错,校验和将发生改变。

注意到,以太网帧最后面有一个 4 字节字段,用于保存校验和。
发送者负责为每个以太网帧计算校验和,并将计算结果填写在校验和字段中;
接收者接到以太网帧后,重新计算校验和并与校验和字段进行对比 ;
如果两个校验和不一致,说明该帧在传输时出错了。

校验和计算

校验和,校验和应该叫16进制反码求和,就是将所有的字节加起来,再由ffff来减得到的值。
我这来计算ip header的checksum,其他的校验和计算方式一样的

从报文中看到header checksum为0X495c

整个ip header去除49 5c,为45 00+00 1d+6d 5e+80 01+c0 a8+01 d4+c0 a8+0101=2B6A1(至于为什么00 00不加不解释)

2B6A1=B6A1+2=b6a3

ffff-b6a3=495c

看结果出来了吧,校验和是个很粗糙的计算方式(与md5相比),如果你source 与destination调换一下,结果相同,在链路层计算正确后到达网络层,经过ip头部校验可能还会出错,到达tcp或者udp也还可能出错,只是方便了网络设备的计算。当然你从source发往destination与destination发往source校验和肯定不会相同,应该里面的ttl与标识符会有差别。


对我们来说能抓到的或者能看到的报文帧,基本上是在目标MAC地址到IP数据包。

1、前导码和帧开始符:

主要做一些底层的数据传输和编码流的二进制流,
它们本身不会被网卡捕获,网卡一般抓包的时候就已经将前导码跟帧开始符解析掉了。

2、帧后面的校验码 (FCS/CRC)

其主要是通过CRC校验判断帧是否有效或者发生篡改或错误,当网卡能收到数据帧并通过抓包工具可以抓到的,就说明该帧没有问题,是有效的,当帧是有效的后,就说明CRC就已经解析掉了。

所以,在整个以太网帧中,能看到的就是目标MAC地址、源MAC地址、帧类型以及IP数据包,当然IP数据包中还会细分许多协议,每个帧之间也是跟CAN类似有,有一定的距离,不可能一帧挨着一帧传输的。

IP数据包里面,有46~1500 字节的长度约束。这不是由ECU决定的。在我们使用的设备中,会有一个最大传输单元(MTU)、MTU一般默认是1518个字节,这就导致IP数据包最多只有1500个字节。

以太网单个最大帧:

6(目的MAC)+ 6(源MAC)+ 2(帧类型)+ 1500(IP数据包(IP头(20)+DATA(1480)))+ 4(CRC校验)=1518字节,
如果带VLAN就是1522字节(VLAN会多出四个字节的帧类型描述)

以太网最小帧:

6(目的MAC)+6(源MAC)+2(帧类型)+46(IP数据包(IP头(20)+DATA(26)))+4(CRC校验)=64字节

常见的以太网帧类型:

0x0800:IPv40x0806:ARP0x8100:VLAN Tag(TPID)0x86DD:IPv60x88F7:PTP / gPTP0x22F0:AVTP

下图是用工具抓的两个报文,以方便我们来理解以太网帧结构。上图报文以太网帧如果小于64字节,那么会填充00。

当以太网帧如果大于1518字节,那么会分片,如下图所示。1008字节ICMP报文分2帧传输。

接下来我们对以太网帧进行更详细的分析

接下来我们看一个DoIP的报文。下图为用工具抓的一个DoIP报文。

上图整个DoIP报文整个一个帧是69个字节(14 + 20 + 20 + 8 + 4 + 3),
其实还要再增加4个字节的CRC,总共73个字节。
只不过当网卡识别它是一个有效帧后,就把CRC 解析掉了。

当然,图中也描述了
1、以太帧头:它的源MAC地址(6个字节)和目的MAC地址(6个字节),再加上2个字节的帧类型,共14个字节。
2、IP头:最小是20个字节。
3、 TCP头:DoIP报文是一个UDS的报文,而UDS报文都是通过TCP传输的,因此,会有个TCP的头部,包括 Src
Port(源端口):13400(这是DoIP的一个端口号)以及 Dst Port(目的端口):50090。TCP的长度是20个字节;
4、 DoIP协议头部是8个字节的长度;需要注意的是,DoIP的头部并不包括源DoIP地址和目标DoIP地址这4个字节;
5、Payload:3个字节,

TCP/IP协议专栏——以太帧结构 详解——网络入门和工程维护必看相关推荐

  1. TCP/IP协议专栏——MAC地址详解——网络入门和工程维护必看

    以太帧格式 前导同步符:共8字节,由7个字节的前同步信号和一个分界符开始字节构成. DA/SA:共6个字节,前3个字节代表供应商代码,后3个字节代表厂商序列号. TPID:标记协议标识符,2个字节,值 ...

  2. TCP/IP协议专栏——以太网帧中的前导码和帧间隙-带宽计算 详解——网络入门和工程维护必看

    以太网帧长中的前导码和帧间隙 1 .概述 目前出现三个bug都涉及到L1和L2限速不准确的问题:在计算网络带宽时,报文设置的越小,差距就越大. 这个问题几乎所有新手都会遇到,在此梳理一下,以此与该问题 ...

  3. TCP/IP协议专栏——ND 详解——网络入门和工程维护必看

    文章目录 术语 协议概况 ICMPv6包 IPv6邻居发现(ND)与IPv4中ARP区别 ND协议介绍 Ipv6邻居发现(ND)机制 路由器请求(Router solicitation) 路由器通告( ...

  4. 计算机网络中TCP属于,【填空题】TCP/IP协议将计算机网络的结构划分为应用层、传输层、网络互连层等4个层次,其中IP协议属于【1】层。...

    [填空题]TCP/IP协议将计算机网络的结构划分为应用层.传输层.网络互连层等4个层次,其中IP协议属于[1]层. 更多相关问题 [单选] 数据格式为透明的是()的通道,它与信号速率及电调制方式无关, ...

  5. 搞一下 车载以太网实战 | 01 车载以太网帧结构详解

    前言 搞SOA.搞 AP & CP AUTOSAR.搞异构SoC.搞车载以太网.搞车载OS等就找搞一下汽车电子. 全系内容可在<搞一下汽车电子>后台回复 "系列" ...

  6. TCP/IP协议 - 三次握手四次挥手(入门易懂版)

    握手通俗理解为两个人见面Say Hai,客户端和服务端建立连接 挥手就可以理解为两个人结束会面,要Say Goodbai,客户端和服务端断开连接 要了解什么是三握四挥,必须要了解一个重要的知识点:什么 ...

  7. TCP/IP编程之getsockopt/setsockopt函数详解

    前述: 有很多方法来获取和设置影响套接字的选项: · getsockopt和setsockopt函数 · fcntl函数,是把套接字设置为非阻塞式I/O型或者信号驱动式I/O型以及设置套接字属主的PO ...

  8. JVM 虚拟机详解内部原理(小白必看!)

    前言 作为一名Java软件开发程序猿,不了解JVM?那么你就只能干CRUD的工作! 前几天刚学习了JVM,把学习到的经验在这里和大家分享下,有啥意见,欢迎在下方评论交流! 1.什么是JVM? JVM全 ...

  9. 一文带你看懂TCP/IP协议 (更新中 现更新至网络层部分)

    相信大家在编程的学习或应用中,对网络编程都有一定的需求.我们都知道http/https属于TCP/IP协议,也都用到过get,post等方法,但是想要真正的了解这些东西的原理.我认为TCP/IP协议还 ...

最新文章

  1. AI还原宋明清三朝皇帝,还找到了最匹配的明星脸,网友:四大美女安排上
  2. c语言考试算法,c语言考试常用算法docx.docx
  3. JZOJ 5904. 【NOIP2018模拟10.15】刺客信条(AC)
  4. Filter_细节_过滤器拦截方式配置
  5. P3911 最小公倍数之和
  6. platform_device和platform_driver的注册过程,及probe函数何时调用的分析
  7. C/C++:Windows编程—Hook IE浏览器实现URL拦截及更改(上)
  8. 简易版viewport
  9. 设置PYTHONIOENCODING
  10. C/C++文件字符串处理
  11. 关于办公室打印机纸张方向的问题
  12. Unity2017探究Layout布局
  13. PS 自定义画笔工具
  14. 如何检查有哪些尝试入侵服务器IP?有哪些命令?
  15. easyBCD修改系统启动项
  16. Arduino Web Editor网页编辑器入门
  17. 嵌入式Linux开发环境搭建-4-嵌入式编程基础知识
  18. 专精特新企业具体解释和好处
  19. 轮播图、焦点图代码案例
  20. 独立和不相关 区别及形象理解

热门文章

  1. atom编辑器运行html,Atom编辑器配置
  2. php文件 用户头像上传代码,网页web上传用户头像代码实现(美图秀秀开放)
  3. 大创小组讨论会议纪要2
  4. Jmeter接口测试——使用教程(下)
  5. [惊艳]印度游记:美女就是多!
  6. LAMP架构与搭建论坛
  7. 【GCC系列】深入理解Linux内核 -- __no_sanitize_address宏定义
  8. TCmalloc学习
  9. 如何为iPhone和iPad配置邮件设置
  10. BBR加速 Centos