你知道以太网数据帧在网络中如何发送和接收的吗?一文带你搞懂它

前言

上一章节介绍了物理层——常见的传输介质带你捋捋常见的传输介质,快去看看你家的入户光纤长啥样吧?,本章主要介绍下数据链路层的以太网数据帧的相关内容,主要包括数据帧的报文结构MAC地址以及数据帧的发送和接收方式

网络层封装的数据包在以太网物理传输介质上传播之前必须封装头部和尾部信息,封装后的数据包称为数据帧,数据帧中封装的信息决定了数据如何传输(主要是根据封装的目的MAC地址去进行二层传输)。

正文

1

以太网数据帧报文结构

以太网上使用两种标准帧格式,选择哪种格式由TCP/IP协议簇中的网络层决定(之前提过底层数据链路层是为上层网络层提供服务的,那么网络层就可以决定封装哪种数据帧格式,谁让网络层比较大呢)。

两种数据帧格式

第一种是上世纪80年代初提出的DIX v2格式,即Ethernet II帧格式。Ethernet II后来被IEEE 802标准接纳,并写进了IEEE 802.3x-1997的3.2.6节。如下图是Ethernet II帧格式。

第二种是1983年提出的IEEE 802.3格式。如下图是IEEE 802.3格式。

Ethernet II格式和IEEE 802.3格式数据帧区别

这两种格式的主要区别在于:

1、Ethernet II格式中包含一个Type字段,标识以太帧处理完成之后将被发送到哪个上层协议进行处理

2、IEEE 802.3格式中,同样的位置是长度字段

不同的Type字段值可以用来区别这两种帧的类型,当Type字段值小于等于1500(或者十六进制的0x05DC)时,帧使用的是IEEE 802.3格式。当Type字段值大于等于1536 (或者十六进制的0x0600)时,帧使用的是Ethernet II格式。

说明以太网中大多数的数据帧使用的是Ethernet II格式。

Ethernet II格式数据帧具体字段

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

1、DMAC(Destination MAC)是目的MAC地址。DMAC字段长度为6个字节,标识帧的接收者。

2、SMAC(Source MAC)是源MAC地址。SMAC字段长度为6个字节,标识帧的发送者。

3、类型字段(Type)用于标识数据字段中包含的高层协议,该字段长度为2个字节。类型字段取值为0x0800的帧代表IP协议帧;类型字段取值为0806的帧代表ARP协议帧。

4、数据字段(Data)是网络层数据,最小长度必须为46字节以保证帧长至少为64字节,数据字段的最大长度为1500字节。

5、循环冗余校验字段(FCS)提供了一种错误检测机制,用于检验传输过程中帧的完整性。该字段长度为4个字节。

IEEE 802.3格式数据帧具体字段

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

1、Length字段定义了Data字段包含的字节数。

2、逻辑链路控制LLC(Logical Link Control)由目的服务访问点DSAP(Destination Service Access Point)、源服务访问点SSAP(Source Service Access Point)和Control字段组成。

3、SNAP(Sub-network Access Protocol)由机构代码(Org Code)和类型(Type)字段组成。Org code三个字节都为0。Type字段的含义与Ethernet_II帧中的Type字段相同。

IEEE802.3帧根据DSAP和SSAP字段的取值又可分为以下几类:

1)   当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware- ETHERNET帧,用来承载NetWare类型的数据。

2)当DSAP和SSAP都取特定值0xaa时,802.3帧就变成了ETHERNET_SNAP帧。ETHERNET_SNAP帧可以用于传输多 种协议。

3) DSAP和SSAP其他的取值均为纯IEEE802.3帧

wireshark抓包数据帧

了解了以太网数据帧的封装格式,下面我们在华为ENSP模拟器上搭建一个简单的网络拓扑通过wireshark抓包去查看下数据帧的各个字段

拓扑如图所示:PC1和PC2互联。PC1的IP地址是192.168.1.2/24,MAC地址54-89-98-B0-52-A7;  PC2的IP地址是192.168.1.3/24,MAC地址54-89-98-2D-4C-71。

如图所示,在PC1和PC2的互联接口上进行抓包,获取发送的数据报文如下,具体如何在华为ENSP模拟器上发送报文见上一个章节;

如上图所示,我们数据帧的封装是采用Ethernet II格式,type类型字段取值为0x0800代表封装的是IP数据包,而不是ARP报文。

2

MAC地址

MAC地址也叫物理地址,大多数网卡厂商把MAC地址烧入了网卡的ROM中。

什么是MAC地址

如同每一个人都有一个名字一样,每一台网络设备都用物理地址来标识自己,这个地址就是MAC地址。

网络设备的MAC地址是全球唯一的。

MAC地址组成

MAC地址长度为48比特,通常用十六进制表示。

MAC地址包含两部分:

1、前24比特是组织唯一标识符(OUI,Organizationally Unique Identifier),由IEEE统一分配给设备制造商。例如,华为的网络产品的MAC地址前24比特是0x00e0fc。

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

MAC地址作用

数据链路层基于MAC地址进行帧的传输。发送端使用接收端的MAC地址作为目的地址发送数据帧。

3

数据帧的发送和接收方式

数据帧发送方式

数据帧的发送方式主要有三种:单播、组播、广播

单播

单播,指从单一的源端发送到单一的目的端。(类比:一个教室里一个老师和一个同学点对点交流)

每个主机接口由一个MAC地址唯一标识,MAC地址的OUI中,第一字节第8个比特表示地址类型。对于主机MAC地址,这个比特固定为0,表示目的MAC地址为此MAC地址的帧都是发送到某个唯一的目的端(如下图所示)。

冲突域中,所有主机都能收到源主机发送的单播帧,但是其他主机发现目的地址与本地MAC地址不一致后会丢弃收到的帧,只有真正的目的主机才会接收并处理收到的帧。

PS:介绍下冲突域以及CSMA/CD工作原理

共享式网络中,不同的主机同时发送数据时,就会产生信号冲突的问题,这时的共享网络就是一个冲突域冲突与是一个一层的概念

如下图集线器下的所有主机就是一个冲突域,目前基本上没有这种共享式网络了。

解决这一问题的方法一般是采用载波侦听多路访问/冲突检测技术(Carrier Sense Multiple Access/Collision Detection)。

CSMA/CD的基本工作原理:

1、终端设备不停地检测共享线路的状态。如果线路空闲,则可以发送数据;如果线路不空闲,则等待一段时间后继续检测(延时时间由退避算法决定)。

2、如果有另外一个设备同时发送数据,两个设备发送的数据会产生冲突

3、终端设备检测到冲突之后,马上停止发送自己的数据,并发送特殊阻塞信息,以强化冲突信号,使线路上其他站点能够尽早检测到冲突。

4、终端设备检测到冲突后,等待一段时间之后再进行数据发送(延时时间由退避算法决定)。

CSMA/CD的工作原理可简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发

广播

广播,表示帧从单一的源发送到共享以太网上的所有主机。(类比:一个教室里老师讲课,所有学生都在听课)

广播帧的目的MAC地址为十六进制的FF:FF:FF:FF:FF:FF,(如下图所示)所有收到该广播帧的主机都要接收并处理这个帧。

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

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

PS:广播域

广播域就是说如果站点发出一个广播信号后能接收到这个信号的范围。通常来说一个局域网就是一个广播域。广播域是一个二层的概念。

如下图:交换机下的所有主机就是一个广播域,交换机可以隔离冲突域。

组播

组播比广播更加高效。组播转发可以理解为选择性的广播,主机侦听特定组播地址,接收并处理目的MAC地址为该组播MAC地址的帧。(类比:老师对一个组的学生进行对话)

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

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

数据帧接收方式

终端设备接到数据帧的处理方式:

1、帧从主机的物理接口发送出来后,通过传输介质传输到目的端。共享网络中,这个帧可能到达多个主机。

2、主机检查帧头中的目的MAC地址,如果目的MAC地址不是本机MAC地址,也不是本机侦听的组播或广播MAC地址,则主机会丢弃收到的帧。

3、如果目的MAC地址是本机MAC地址,则接收该帧,检查帧校验序列(FCS)字段,并与本机计算的值对比来确定帧在传输过程中是否保持了完整性。

如果帧的FCS值与本机计算的值不同,主机会认为帧已被破坏,并会丢弃该帧

如果该帧通过了FCS校验,则主机会根据帧头部中的Type字段来确定将帧发送给上层哪个协议处理。如果Type字段的值为0x0800,表明该帧需要发送到IP协议上处理。在发送给IP协议之前,帧的头部和尾部会被剥掉

总结

      本章主要介绍下数据链路层的以太网数据帧报文结构MAC地址以及数据帧的发送和接收方式大家有疑问可以下方留言呀!