USB网络控制通讯NCM
+ -

NCM以太网帧最大尺寸动态调整规则

2025-07-07 0 0

1. 最大尺寸的动态控制

  • 主机控制权
    主机可通过 SetMaxDatagramSize 控制请求 动态调整设备支持的最大以太网帧尺寸(不含CRC-32)。

    • 典型值:标准以太网帧为1514字节(14字节头 + 1500字节载荷)。
    • 扩展场景:支持VLAN标签(1522字节)、巨型帧(Jumbo Frame,如9014字节)等。
  • 设备能力发现
    主机需从设备的 以太网网络功能描述符(Ethernet Networking Functional Descriptor) 中读取 wMaxSegmentSize 字段,获取设备原生支持的最大帧尺寸,并 禁止 设置超出该值的尺寸。


2. 尺寸计算规则

组件 是否计入wMaxSegmentSize 是否计入NDP的wDatagramLength 示例(1514字节标准帧)
以太网帧头(14字节) ✔️ ✔️ 头 + 载荷 = 1514字节
载荷(如IP包) ✔️ ✔️
可选填充(Padding) ✔️ ✔️ 需满足最小帧长(64字节)
CRC-32(4字节) ✔️ 含CRC时总长度 = 1518字节
  • 关键约束
    • 主机设置的 SetMaxDatagramSize 仅限制帧头+载荷,CRC-32额外附加。
    • 若NDP签名指示附加CRC(0x31),则 wDatagramLength 需包含CRC长度(如1514→1518字节)。

3. 工作流程示例

  1. 初始化阶段

    • 主机读取设备的 wMaxSegmentSize(如发现支持9014字节巨型帧)。
    • 通过 SetMaxDatagramSize 设置实际使用的最大值(如设置为8000字节)。
  2. 数据传输阶段

    • 无CRC场景(NDP签名0x30):
      • 最大 wDatagramLength = 8000字节(14头 + 7986载荷)。
    • 含CRC场景(NDP签名0x31):
      • 最大 wDatagramLength = 8004字节(8000帧 + 4字节CRC)。
  3. 错误处理

    • 若主机尝试发送超过设定值的帧(如wDatagramLength=9000),设备应拒绝并返回错误。

4. 与对齐机制的协同

  • 填充(Padding)的影响
    对齐操作可能增加帧长度(在头与载荷间插入填充字节),但总长仍须满足:
  14(头) + 填充 + 载荷 + CRC ≤ wDatagramLength ≤ 当前MaxDatagramSize + CRC

5. 典型应用场景

  • VLAN扩展帧
    设置 SetMaxDatagramSize=1522,以容纳额外的4字节VLAN标签。
  • 巨型帧传输
    设备声明 wMaxSegmentSize=9014,主机设置 SetMaxDatagramSize=9000 预留冗余。
  • 低功耗设备
    主动限制最大尺寸(如1024字节),减少单次传输内存占用。

6. 开发者注意事项

  1. CRC处理一致性
    • 若设备要求CRC(0x31),主机必须在计算填充后附加CRC,并更新 wDatagramLength
  2. 动态调整的时机
    • 在连接建立或网络配置变更(如MTU调整)时调用 SetMaxDatagramSize
  3. 安全边界
    • 设备应验证所有输入的 wDatagramLength,防止缓冲区溢出攻击。

总结

NCM通过 SetMaxDatagramSizewMaxSegmentSize 的协同机制,实现了:

  • 灵活适配:支持从标准帧到巨型帧的多种以太网规格。
  • 安全控制:严格约束尺寸上限,避免设备过载。
  • 透明扩展:CRC-32独立于尺寸限制,确保兼容性。

此设计显著提升了USB网络设备在复杂场景(如数据中心、工业以太网)下的适应能力。

0 篇笔记 写笔记

关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB网络控制通讯NCM
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!