以太网上的 UDP - UDP 信息将在我的以太网帧的有效负载中显示的确切位置和顺序是什么?

网络工程 以太网 第 2 层 UDP 第 4 层
2022-02-19 01:02:51

我需要捕获通过以太网帧传给我的 UDP 信息。我通过光纤与 1000BASE-X 以太网进行点对点连接。我收到的信息是 GMII 格式的;这是125 MHz速率的字节。

UDP 报头格式如下所示。

              0      7 8     15 16    23 24    31  
             +--------+--------+--------+--------+ 
             |     Source      |   Destination   | 
             |      Port       |      Port       | 
             +--------+--------+--------+--------+ 
             |                 |                 | 
             |     Length      |    Checksum     | 
             +--------+--------+--------+--------+ 
             |                                   |   
             |          data octets              |
             +-----------------------------------+                 

源端口 = SP 目标端口 = DP 长度 = L 校验和 = CS

作为参考,以太网帧如下所示。

    +-----------+-------+---------+---------+--------+------------------+---------+ 
    |  Preamble |  SFD  |   DA    |   SA    |   TL   | Data (Payload)   | CRC-32  | 
    |  6 bytes  |1 Byte | 6 bytes | 6 bytes |2 bytes | 46 to 1500 bytes | 4 bytes |
    +-----------+-------+---------+---------+--------+------------------+---------+

假设我的数据将放在 Etnernet 框架的 Data (Payload) 字段中,我的问题是:

1)双字节的顺序会是,第一个DP,第二个SP,第三个CS,第四个L,第五个数据byte1,第六个数据byte2,等等?2)首先是最低有效字节?

1个回答

您缺少网络层:

  • 第 1/2 层:以太网
  • 第 3 层:IPv4 或 IPv6
  • 第 4 层:UDP

以太网帧的有效负载可能是 IPv4 或 IPv6 数据包。您需要检查以太网帧头 EtherType 字段以确定什么,特别是有效负载。

UDP 数据报将是 IPv4 或 IPv6 数据包的有效负载。您可以检查 IPv4 数据包头协议字段或 IPv6 头 Next Header 字段来确定 IP 数据包的负载。

就字节顺序而言,IETF 有一个Network Byte Order

1.1。背景和动机

1980 年撰写的“ON HOLY WARS AND A PLEA FOR PACE”[ IEN-137 ] 文件认为该行业应该解决单个字节顺序。从那时起,IETF 基本上确定了一种称为“网络字节顺序”的单字节顺序,而这份备忘录旨在记录这种粗略的共识。不幸的是,CPU制造商之间的“圣战”仍在继续。

2.网络字节序的定义

当一个数字太大而无法容纳在单个字节中时,将使用多个字节对该数字进行编码。当通过面向字节的协议(例如,TCP 面向 8 位字节)发送此类数字时,必须选择字节顺序,以便两端以相同的方式解释数字,而与 CPU 架构无关。当构成这种多字节数的字节按照从最高有效字节到最低有效字节的顺序排列时,称为“网络字节序”或“大端序”。

例如,采用无符号十六进制数 0xFEEDFACE(十进制 4,277,009,102)。如果使用网络字节顺序(大端)将其作为 8 位字节序列发送,则该序列将是:0xFE、0xED、0xFA、0xCE。在小端(最低有效字节到最高有效字节)中,这将是:0xCE、0xFA、0xED、0xFE。

对于以太网和其他 IEEE LAN,目标地址是第一位的,但对于 IPv4、IPv6、TCP、UDP 和其他 IETF 标准,源地址是第一位的。