以太网帧格式学习

以太网帧格式学习1 基础知识 通信协议基本框架 OSI 模型 OSI 模型各层次功能说明 物理层 在设备之间传输比特流 规定了电平 速度和电缆针脚 数据链路层 将比特组合成字节 再将字节组合成帧 使用链路层地址 以太网使用 MAC 地址 来访问介质 并进行差错检测 网络层 提供逻辑地址 供路由器确定路径 传输层 提供面向连接或非面向连接的数据传递以及进行重传前的差错检测 会话层 负责建立 管理和终止表示层实体之间的通信会话 该层的通信由不同设备中的应用程序之间的服务请求和响应组成 表示层 提

1.基础知识:

通信协议基本框架:

以太网帧格式学习

OSI模型

以太网帧格式学习

OSI模型各层次功能说明:

  • 物理层:在设备之间传输比特流,规定了电平、速度和电缆针脚。
  • 数据链路层:将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。
  • 网络层:提供逻辑地址,供路由器确定路径。
  • 传输层:提供面向连接或非面向连接的数据传递以及进行重传前的差错检测。
  • 会话层:负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
  • 表示层:提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
  • 应用层:OSI参考模型中最靠近用户的一层,为应用程序提供网络服务。

分层模型-TCP/IP:

以太网帧格式学习

TCP/IP模型将网络分为四层。TCP/IP模型不关注底层物理介质,主要关注终端之间的逻辑数据流转发。TCP/IP模型的核心是网络层和传输层:网络层解决网络之间的逻辑转发问题,传输层保证源端到目的端之间的可靠传输。最上层的应用层通过各种协议向终端用户提供业务应用。

数据封装

应用数据需要经过TCP/IP每一层处理之后才能通过网络传输到目的端,每一层上都使用该层的协议数据单元PDU(ProtocolDataUnit)彼此交换信息。

如上层数据在传输层添加TCP报头后得到的PDU被称为Segment(数据段);数据段被传递给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包);数据包被传递到数据链路层,封装数据链路层报头得到的PDU被称为Frame(数据帧);最后,帧被转换为比特,通过网络介质传输。这种协议栈逐层向下传递数据,并添加报头和报尾的过程称为封装。

终端之间的通信

  • 数据链路层控制数据帧在物理链路上传输。

数据包在以太网物理介质上传播之前必须封装头部和尾部信息。封装后的数据包称为称为数据帧,数据帧中封装的信息决定了数据如何传输。以太网上传输的数据帧有两种格式,选择哪种格式由TCP/IP协议簇中的网络层决定。

帧格式:

以太网帧格式学习

以太网帧格式学习

 

以太网上使用两种标准帧格式。第一种是上世纪80年代初提出的DIXv2格式,即EthernetII帧格式。EthernetII后来被IEEE802标准接纳,并写进了IEEE802.3x-1997的3.2.6节。第二种是1983年提出的IEEE802.3格式。

这两种格式的主要区别在于,EthernetII格式中包含一个Type字段,标识以太帧处理完成之后将被发送到哪个上层协议进行处理。IEEE802.3格式中,同样的位置是长度字段。

不同的Type字段值可以用来区别这两种帧的类型,当Type字段值小于等于1500(或者十六进制的0x05DC)时,帧使用的是IEEE802.3格式。当Type字段值大于等于1536(或者十六进制的0x0600)时,帧使用的是EthernetII格式。以太网中大多数的数据帧使用的是EthernetII格式。

以太帧中还包括源和目的MAC地址,分别代表发送者的MAC和接收者的MAC,此外还有帧校验序列字段,用于检验传输过程中帧的完整性。

Ethernet_II帧格式:

以太网帧格式学习

  • Ethernet_II帧类型值大于等于1536(0x0600)。
  • 以太网数据帧的长度在64-1518字节之间。

Ethernet_II的帧中各字段说明如下:

  1. DMAC(DestinationMAC)是目的MAC地址。DMAC字段长度为6个字节,标识帧的接收者。
  2. SMAC(SourceMAC)是源MAC地址。SMAC字段长度为6个字节,标识帧的发送者。
  3. 类型字段(Type)用于标识数据字段中包含的高层协议,该字段长度为2个字节。类型字段取值为0x0800的帧代表IP协议帧;类型字段取值为0806的帧代表ARP协议帧。
  4. 数据字段(Data)是网络层数据,最小长度必须为46字节以保证帧长至少为64字节,数据字段的最大长度为1500字节。
  5. 循环冗余校验字段(FCS)提供了一种错误检测机制。该字段长度为4个字节。

EEE802.3帧格式

以太网帧格式学习

 

  • EEE802.3帧长度字段值小于等于1500(0x05DC)。

EEE802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域被802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和SNAP字段。

  1. Length字段定义了Data字段包含的字节数。
  2. 逻辑链路控制LLC(LogicalLinkControl)由目的服务访问点DSAP(DestinationServiceAccessPoint)、源服务访问点SSAP(SourceServiceAccessPoint)和Control字段组成。
  3. SNAP(Sub-networkAccessProtocol)由机构代码(OrgCode)和类型(Type)字段组成。Orgcode三个字节都为0。Type字段的含义与Ethernet_II帧中的Type字段相同。IEEE802.3帧根据DSAP和SSAP字段的取值又可分为以下几类:
  • 当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware-ETHERNET帧,用来承载NetWare类型的数据。
  • 当DSAP和SSAP都取特定值0xaa时,802.3帧就变成了ETHERNET_SNAP帧。ETHERNET_SNAP帧可以用于传输多种协议。
  • DSAP和SSAP其他的取值均为纯IEEE802.3帧。

数据帧传输

以太网帧格式学习

  • 数据链路层基于MAC地址进行帧的传输。

以太网在二层链路上通过MAC地址来唯一标识网络设备,并且实现局域网上网络设备之间的通信。MAC地址也叫物理地址,大多数网卡厂商把MAC地址烧入了网卡的ROM中。发送端使用接收端的MAC地址作为目的地址。以太帧封装完成后会通过物理层转换成比特流在物理介质上传输

以太网的MAC地址

以太网帧格式学习

 

网络设备的MAC地址是全球唯一的。MAC地址长度为48比特,通常用十六进制表示。MAC地址包含两部分:前24比特是组织唯一标识符(OUI,OrganizationallyUniqueIdentifier),由IEEE统一分配给设备制造商。

例如,华为的网络产品的MAC地址前24比特是0x00e0fc。后24位序列号是厂商分配给每个产品的唯一数值,由各个厂商自行分配(这里所说的产品可以是网卡或者其他需要MAC地址的设备)。

单播

以太网帧格式学习

 局域网上的帧可以通过三种方式发送。第一种是单播,指从单一的源端发送到单一的目的端。每个主机接口由一个MAC地址唯一标识,MAC地址的OUI中,第一字节第8个比特表示地址类型。对于主机MAC地址,这个比特固定为0,表示目的MAC地址为此MAC地址的帧都是发送到某个唯一的目的端。在冲突域中,所有主机都能收到源主机发送的单播帧,但是其他主机发现目的地址与本地MAC地址不一致后会丢弃收到的帧,只有真正的目的主机才会接收并处理收到的帧。

广播

以太网帧格式学习

第二种发送方式是广播,表示帧从单一的源发送到共享以太网上的所有主机。广播帧的目的MAC地址为十六进制的FF:FF:FF:FF:FF:FF,所有收到该广播帧的主机都要接收并处理这个帧。

广播方式会产生大量流量,导致带宽利用率降低,进而影响整个网络的性能。

当需要网络中的所有主机都能接收到相同的信息并进行处理的情况下,通常会使用广播方式。

组播

第三种发送方式为组播,组播比广播更加高效。组播转发可以理解为选择性的广播,主机侦听特定组播地址,接收并处理目的MAC地址为该组播MAC地址的帧。

组播MAC地址和单播MAC地址是通过第一字节中的第8个比特区分的。组播MAC地址的第8个比特为1,而单播MAC地址的第8个比特为0。

当需要网络上的一组主机(而不是全部主机)接收相同信息,并且其他主机不受影响的情况下通常会使用组播方式。

数据帧的接收与发送

以太网帧格式学习

帧从主机的物理接口发送出来后,通过传输介质传输到目的端。共享网络中,这个帧可能到达多个主机。主机检查帧头中的目的MAC地址,如果目的MAC地址不是本机MAC地址,也不是本机侦听的组播或广播MAC地址,则主机会丢弃收到的帧。

如果目的MAC地址是本机MAC地址,则接收该帧,检查帧校验序列(FCS)字段,并与本机计算的值对比来确定帧在传输过程中是否保持了完整性。如果帧的FCS值与本机计算的值不同,主机会认为帧已被破坏,并会丢弃该帧。如果该帧通过了FCS校验,则主机会根据帧头部中的Type字段来确定将帧发送给上层哪个协议处理。本例中,Type字段的值为0x0800,表明该帧需要发送到IP协议上处理。在发送给IP协议之前,帧的头部和尾部会被剥掉。

 

总结

网络设备如何确定以太网数据帧的上层协议?

以太网帧中包含一个Type字段,表示帧中的数据应该发送到上层哪个协议处理。比如,IP协议对应的Type值为0x0800,ARP协议对应的Type值为0x0806。

终端设备接收到数据帧时,会如何处理?

主机检查帧头中的目的MAC地址,如果目的MAC地址不是本机MAC地址,也不是本机侦听的组播或广播MAC地址,则主机会丢弃收到的帧。如果目的MAC地址是本机MAC地址,则接收该帧,检查帧校验序列(FCS)字段,并与本机计算的值对比来确定帧在传输过程中是否保持了完整性。如果检查通过,就会剥离帧头和帧尾,然后根据帧头中的Type字段来决定把数据发送到哪个上层协议进行后续处理。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210376.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午7:43
下一篇 2026年3月19日 上午7:44


相关推荐

  • activate-power-mode 写代码的时候体验狂拽酷炫的效果 (IntelliJ IDEA版安装过程及问题)「建议收藏」

    activate-power-mode 写代码的时候体验狂拽酷炫的效果 (IntelliJ IDEA版安装过程及问题)「建议收藏」初遇activate-power-mode前一段时间在微信上看到朋友发的这个插件,就收藏了,一直没试试,今天兴致一来突然想起来这么一出,就试试这是微信原文:写个HelloWord而已,要不要这么震撼?!atom上的一个插件,可以让你写代码的时候体验狂拽酷炫的效果这货全名叫activate-power-modeatompackage最新版0.3.2

    2022年7月14日
    30
  • 前端面试——浏览器兼容问题

    前端面试——浏览器兼容问题前端面试 浏览器兼容问题一 css 样式兼容性问题一 css 样式兼容性问题 ie8 浏览器不支持 css3 像 ie8 对选择器支持情况 ie8 支持 first child 但不支持 last child last of type first of type nth child n nth last child n nth of type n nth last

    2026年3月19日
    2
  • 电压电流转换电路[通俗易懂]

    电压电流转换电路[通俗易懂]前言:昨天看到一篇介绍输出4~20mA电流电路的文章。作者首先介绍了两个直接用运放和三极管搭起来的电路,但并没有给出原理介绍,然后给出了第三种使用集成芯片的电路,并推荐大家使用。不可否认,作为商业产品,集成电路性能优异且更加稳定,方便工程师使用。但是笔者却突然想到了前几天某公司被美国商务部制裁的事件,如果中国的工程师都是“拿来主义”,只会照着参考电路做设计,我们就会永远受制于人,而且对工程师的成长

    2022年6月2日
    42
  • java stack deque_java如何实现栈

    java stack deque_java如何实现栈Java中的栈Stack、Deque、ArrayDeque、LinkedList的区别Stack类那么为什么我们不选择Stack呐?(两个主要原因)那么我们应该使用ArrayDeque还是LinkedList呐?总结Stack类Java中Stack类底层是数组实现的线程安全的栈。先进后出,常用操作是push/pop/peek而Deque是更加适用的双端队列接口,其通过ArrayDeque/LinkedList初始化实现Deque<Integer>stack=newArrayDeq

    2026年1月30日
    6
  • 小程序生成普通二维码_注册一个小程序

    小程序生成普通二维码_注册一个小程序uniapp生成二维码`参考了https://blog.csdn.net/lemontealin/article/details/104437584这篇文章并做了修改,要想实现二维码的生成的话是需要引用相应插件的,这个插件的作者是echo,echo写了整个ThorUI组件,我个人很佩服他,喜欢他的可以去ThorUI网站看看,学习一下。1)首先下载你需要下载weapp-qrcode.js(百度网盘下载链接:链接:https://pan.baidu.com/s/1VXhq3ZjxmDcH1tFujK

    2025年6月18日
    4
  • openclaw系列1:安装

    openclaw系列1:安装

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号