以太网 SNAP 帧 - 上层的类型决定仍然可能吗?

网络工程 以太网 协议理论
2021-07-06 02:34:50

IEEE 802.3第 3.2.6 节所述,前一个 Ethertype 字段可用作值 <= 1500 的长度字段。现在我想知道如何处理有关上层的此类数据包。使用长度字段的以太网帧是否仍然包含例如 IP 数据包?如果是,路由器或PC如何检测到这一点?路由器通常会如何处理使用长度而不是以太网类型的帧?

或者更普遍的问题:如果没有指定 Ethertype 但长度,接收器将如何决定如何处理有效载荷数据?

2个回答

使用长度字段的以太网帧是否仍然包含例如 IP 数据包?

是的,您问的是RFC 1042 中涵盖的 802.3 SNAP 帧上的 IP

802.3 SNAP IPv4 帧看起来像这样......

+----+----+----+----+----+----+----+----+---------+-----+
| DA | SA |  L | DS | SS | CL | OI | ET | Payload | FCS |
+----+----+----+----+----+----+----+----+---------+-----+
  • DA: 目标 Mac 地址 (6 字节)
  • SA: 源 Mac 地址 (6 字节)
  • L:长度(2字节);(长度 <= 0x05DC 十六进制,或 1500 十进制)
  • DS: DSAP (1 字节); (DSAP == 0xAA 十六进制,或 170 十进制)
  • SS: SSAP (1 字节); (SSAP == 0xAA 十六进制,或 170 十进制)
  • CL:控制(1字节);(控制 == 0x03 十六进制,或 3 十进制)
  • OI:组织唯一标识符(3 个字节);(OUI == 0x000000 十六进制,或 0 十进制)
  • ET:以太网类型(2字节);(以太网类型 == 0x0800 十六进制,或 2048 十进制)
  • Payload:以太网有效载荷(以太网有效载荷 <= 1492 字节);此有效负载大小包括IPv4 标头的大小。
  • FCS: 帧校验和(4 字节)

如果是,路由器或PC如何检测到这一点?

通过“检测此”,我假设您的意思是 802.3 SNAP 上的 IP;SNAP 帧首先与 Ether II / ARPA 帧区分开来,因为 Type / Length <= 0x05DC hex。然后路由器查看上面指定的其他字段......

计算机必须明确配置 SNAP 封装,以包含低于正常的 MTU(IP MTU <= 1492 字节)。虽然理论上可以将 802.3 SNAP IPv4 作为以太网 II (ARPA)包含在广播域中,但大多数人会认为您这样做很疯狂。

路由器通常会如何处理使用长度而不是以太网类型的帧?

剩下的 802.3 IP SNAP 网络不多了... Cisco IOS 用于在平底船路径中通过 SNAP 处理 IPv4但我已经很久没有深入研究了。

为了使用最近的 Cisco IOS 进行测试,我尝试debug ip icmp使用 802.3 SNAP IPv4 帧ping 我的一台 Cisco 3560 交换机(已启用),但该交换机只是给了我愚蠢的外观...

[mpenning@tsunami ~]$ sudo python
Python 2.7.3 (default, Jan  2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from scapy.all import SNAP, Dot3, LLC, IP, ICMP
>>> from scapy.all import srp1
>>> pak = Dot3(dst="64:ae:de:ad:be:ef", src="80:ee:73:20:00:00") / LLC() / SNAP() / IP(src="10.0.0.5", dst="10.0.0.1") / ICMP()
>>> pak
<Dot3  dst=64:ae:de:ad:be:ef src=80:ee:73:20:00:00 |
<LLC  dsap=0xaa ssap=0xaa ctrl=3 |<SNAP  code=0x800 |
<IP  frag=0 proto=icmp dst=10.0.0.1 |<ICMP  |>>>>>
>>> srp1(pak)
Begin emission:
Finished to send 1 packets.
...................^C
Received 19 packets, got 0 answers, remaining 1 packets

Christian:这个问题的背景是这样的:我想在 802.3 MAC 帧之上实现一个专有协议并使用长度字段。那么,使用长度字段对其他硬件和软件意味着什么?例如,将此类帧发送到 cots 系统是否安全,该系统不知道我的内部协议。

我个人不鼓励您实施私有以太网协议;二十或三十年前,人们一直在做这种事情,但今天找到自定义协议的情况越来越少。

为什么?就您所问的确切原因而言,这完全没有意义。实际上,全世界都在 IPv4 或 IPv6 之上使用“某种东西”。

  • 如果您想要“无连接”服务,则可以使用 UDP
  • TCP 或 SCTP 是“面向连接”服务的不错选择

如果您构建自己的协议会发生什么?

  • 即使在同一个以太网广播域中,也很难与其他任何事物交谈……因为其他事物总是使用 IP 和以太网类型(RFC 894) 帧。

  • 您没有路由(即能够跨多个以太网广播域发送流量,例如人们在城市和国家之间建立的网络);这也意味着你可以做一些事情,比如跨互联网桥接,这需要建立 IP 隧道。

  • 你想要网络服务吗?猜猜你要构建什么:

    • 想要文件传输?建立您自己的 FTP 或 TFTP
    • 想要名称解析?建立自己的DNS
    • 想要网络错误和监控?构建您自己的 ICMP 协议
    • 想要安全?构建您自己的防火墙、加密和 PKI (ick)
    • 想和其他电脑通话?为这些操作系统构建内核驱动程序(见下文)

从广义上讲,自定义以太网协议需要所有相关操作系统的内核驱动程序;您真的要构建和分发内核驱动程序吗?如果您使用 IP,那就更简单了,因为您可以让服务在现有 IP 内核驱动程序之上进行侦听;只需绑定到端口号并利用内置 IP 内核驱动程序即可。

然而,使用 IP 构建的代价是使用以太网 II (ARPA) 封装(即以太网帧中没有长度字段)。

也许您仍然想使用自己的自定义以太网协议;至少现在你对相关的权衡有了更多的了解。

当 MAC 帧具有长度字段 (L/T <= 05-DC) 时,有效载荷将发送到 LLC 层,而不是 IP。它用于 MAC 控制平面,例如用于生成树。

最好的问候,米歇尔