问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

以太网帧与IP数据包格式标准详解

创作时间:
作者:
@小白创作中心

以太网帧与IP数据包格式标准详解

引用
CSDN
1.
https://m.blog.csdn.net/2303_76492156/article/details/145578034

一、帧格式

以太网的两种标准帧格式主要是Ethernet IIIEEE 802.3。这两种帧格式在结构和用途上有一些显著的区别。第一种是上世纪80年代提出的DIX v2格式,即Ethernet II帧格式。Ethernet II后来被IEEE 802标准接纳,并写进了IEEE 802.3x-1997的3.2.6节。第二种是1983年提出的IEEE 802.3格式。

Ethernet II

Ethernet II帧格式是最常见的以太网帧格式,通常直接被IP协议使用。它的帧结构如下:

  • 目的MAC地址(DMAC):6字节,标识帧的接收者。
  • 源MAC地址(SMAC):6字节,标识帧的发送者。
  • 类型字段(Type):2字节,用于标识数据字段中包含的高层协议。例如,0x0800表示IP协议,0x0806表示ARP协议。
  • 数据字段(Data):网络层数据,最小长度为46字节,最大长度为1500字节。
  • 循环冗余校验字段(FCS):4字节,用于错误检测。

IEEE 802.3

IEEE 802.3帧格式与Ethernet II帧格式类似,但有一些关键区别:

  • 目的MAC地址(DMAC):6字节,标识帧的接收者。
  • 源MAC地址(SMAC):6字节,标识帧的发送者。
  • 长度字段(Length):2字节,定义数据字段包含的字节数。
  • 逻辑链路控制(LLC):由目的服务访问点(DSAP)、源服务访问点(SSAP)和控制字段组成。
  • 子网接入协议(SNAP):由机构代码(Org Code)和类型(Type)字段组成,Org Code为0,Type字段与Ethernet II帧中的Type字段相同。
  • 数据字段(Data):上层数据内容,最小长度为46字节,最大长度为1500字节。
  • 循环冗余校验字段(FCS):4字节,用于错误检测。

这两种格式的主要区别在于Ethernet II格式中包含一个Type字段,标识以太帧处理完成之后将被发送到上层协议进行处理;而IEEE 802.3格式中同样的位置是长度字段。其中,以太网中大多数的数据帧使用的是 Ethernet II帧格式,而IEEE 802.3只支持IPX/SPX协议(争议)。

  • 前导码(Preamble):Ethernet II是由 8个8bit (位) 10101010构成,共8Byte (字节), IEEE802.3由7个8bit(位) 10101010+1个8bit(位)帧起始符(SFD)10101011构成,共8Byte (字节)。
  • 目的地址(DMAC):是目的MAC地址。DMAC字段长度为6个字节,标识帧的接收者。
  • 源地址(SMAC):是源MAC地址。SMAC字段长度为6个字节,标识帧的发送者。
  • 类型( Ethernet II): 用于标识以太网首部后面所跟数据包的类型,字段取值大于等于1536 (或者十六进制的0x0600),例如Type为0x0800时后面为IP协议包,Type为0x0806时后面为ARP协议包.
  • 长度( IEEE802.3 ):也称有效数据长度,字段取值小于等于1500(或者十六进制的0x05DC),定义了Data字段包含的字节数。抓包软件中看到的Length表示的是有效数据长度,并不包含填充(Pading)长度。
  • 数据部分(Payload):数据也叫有效载荷,这是网络层传递给数据链路层的帧,其长度为 46-1500 Bytes。以太网协议规定最小报文64字节【6+6+2+数据+4=64(不算前导码)】,因此帧数据部分最小为46字节,不足46字节(如ARP和RARP包)时,由设备驱动程序(MAC子层)在数据字段后面填充(Pading)至46字节。
  • FCS: 数据校验字段,用于存储 CRC(循环冗余校验)结果的帧的帧尾。MAC发送侧(MAC_TX)创建每个帧时都将运行它。MAC接收侧(MAC_RX)接收到帧时,以从目的MAC到数据这部分内容作为输入数据进行 CRC 计算,计算结果与接收帧的FCS字段比较,结果相同表示帧有效,结果不同则将帧丢弃。(FCS错误主要发生在物理口与RJ45接口之间的链路上)

这里需要注意:因为802.3帧的LLC和SNAP字段占用的是Data字段的8个字节,因此实际上层数据承载最大就变成了1492字节。

逻辑链路控制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字段相同。

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帧。

以太网帧格式多达5种,事实上,今天的大多数TCP/IP应用都是用Ethernet V2帧格式,而交换机之间的BPDU数据包是IEEE802.3/LLC的帧,VLAN Trunk协议如802.1Q和Cisco的CDP等则是采用IEEE802.3/SNAP的帧。估计是设备间一些协议才用到802.3帧格式,是因为需要802.3帧携带一些控制信息。

如何区分以太网中的两种帧格式?

要区分这两种帧格式,可以根据以下几点:

  1. 类型字段和长度字段:Ethernet II帧的类型字段值大于等于1536 (0x0600),而IEEE 802.3帧的长度字段值小于等于1500 (0x05DC)。
  2. 数据帧长度:两种帧格式的数据帧长度都在64-1518字节之间。

通过以上方法,可以有效地区分Ethernet II和IEEE 802.3帧格式。

二、数据封装

当我们应用程序用TCP传输数据的时候,数据被送入协议栈中,然后逐个通过每一层,直到最后到物理层将数据帧转换成比特流,送入网络。而在这个过程中,每一层都会对要发送的数据加一些首部信息。整个过程如下图,每层数据向下传输时都会进行封装,帧有效数据来源于上级网络层。

如图可以看出,每一层数据是由上一层数据+本层首部信息组成的,其中每一层的数据 ,称为本层的协议数据单元 ,即PDU。

应用层数据在传输层添加TCP报头后得到的PDU被称为 Segment(数据段 ),图示为TCP段

传输层的数据(TCP段)传给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包); 图示为IP数据包

网络层数据报(IP数据包)被传递到数据链路层,封装数据链路层报头得到的PDU被称为Frame(数据帧),图示为以太网帧。

最后,帧被转换为比特,通过网络介质传输。这种协议栈逐层向下传递数据,并添加报头和报尾的过程称为封装。

三、IP数据报格式

IP数据报格式图:

TCP首部与TCP数据段格式:

UDP(也是传输层)数据段格式:

ARP数据包格式:

  1. 硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1;
  2. 协议类型字段指明了发送方提供的高层协议类型,IP为0800(16进制);
  3. 硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;
  4. 操作字段用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;
  5. 发送方的硬件地址(0-3字节):源主机硬件地址的前3个字节;
  6. 发送方的硬件地址(4-5字节):源主机硬件地址的后3个字节;
  7. 发送方IP(0-1字节):源主机硬件地址的前2个字节;
  8. 发送方IP(2-3字节):源主机硬件地址的后2个字节;
  9. 目的硬件地址(0-1字节):目的主机硬件地址的前2个字节;
  10. 目的硬件地址(2-5字节):目的主机硬件地址的后4个字节;
  11. 目的IP(0-3字节):目的主机的IP地址。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号