> 文章列表 > lwip - 链路层收发以太网数据帧

lwip - 链路层收发以太网数据帧

lwip - 链路层收发以太网数据帧

1、以太网帧结构

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

2、Ethernet II

在这里插入图片描述

  • 目的地址和源地址均为48bit的MAC地址
  • 类型字段:指明了承载的上层协议的类型, 常见的值有
    • 0x800 IP
    • 0x806 ARP
    • 0x86dd IPv6
  • 数据字段:数据字段为承载的上层协议的数据, 长度为46~1500byte, 即使数据不够46byte, 也要填充到46byte。以太网的最大传输单元(MTU)是1500字节。这意味着如果IP数据报超过了1500字节,则主机必须将该数据报分片。当采用填充时,传递到网络层的数据包括数据报和填充部分,网络层使用IP数据报首部中的长度字段来去除填充部分。
  • 32bit CRC校验, 校验从 “目的地址” 到 “数据” 的内容

  以太网帧中的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补填充位。最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)。ifconfig命令的输出中也有“MTU:1500”。注意,MTU这个概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。

3、IEEE 802.3

在这里插入图片描述

  • Length 字段取代了 Ethernet_II 中的 Type 字段,它定义了 Data 字段包含的字节数。
  • LLC:Logical Link Control,逻辑链路控制由目的访问点 D.SAP (Destination Service Access Point)、源服务访问点 S.SAP(Source Service Access Point)和 Control 字段组成。Control 字段:无连接或面向连接的LLC, 基本不使用, 一般被设为0x03,指明采用无连接服务的802.2无编号数据格式
  • IEEE802.3 帧根据 D.SAP 和 S.SAP 字段的取值不同,可分为以下几类:
    • 当 D.SAP 和 S.SAP 都取特定值 0xFF 时,802.3 帧就变成了 Netware-Ethernet 帧,用来承载 NetWare 类型的数据;
    • 当 D.SAP 和 S.SAP 都取特定值 0xAA 时,802.3 帧就变成了 Ethernet_SNAP 帧,可用于传输多种协议。
    • D.SAP 和 S.SAP 其它的取值均为纯 IEEE802.3 帧。

  IEEE802.3/802.2 SNAP 在 IEEE802.3/802.2 LLC 的基础上, 扩充了 LLC header。帧格式如下图:

在这里插入图片描述

  • SNAP:Sub-network Access Protocol,子网访问协议由机构代码(Org Code)和类型(Type)字段组成。Org Code 通常与源mac地址的前三个bytes相同, 为厂商代码。Type 字段的含义与 Ethernet_II 帧中的 Type 字段相同。

4、不同帧格式的区分

  • 检查帧中“源MAC”字段后面的2byte(在Ethernet II中为协议类型, 在其它帧中为 数据长度), 若大于 0x05dc(即10进制的1500), 则为 Ethernet 帧
  • 继续比较后面的2个byte, 如果为0xFFFF则为Novell Ether 类型的帧。如果为 0xAAAA 则为 IEEE802.3/802.2 SNAP 帧, 否则, 为 IEEE 802.3/802.2 LLC 帧
  • 这些以太网帧可以共存于一个网络中,但互不兼容,当用不同封装类型的工作站要交换信息时,必须通过支持的路由器来通信