繁体   English   中英

UDP Package 中缺少 VLAN 优先级、DEI 和 ID

[英]VLAN Priority, DEI and ID are missing in UDP Package

我正在构建一个以太网模拟项目,以将 UDP 包发送和接收到外部设备(我们称之为 A)。

我应该模拟多个设备,其中一些发送 UDP 包(我们称它们为 B)和一些接收 UDP 包(我们称它们为 C),B 和 Z0D61F8370CAD1D412F80B84D143E1 上有两个不同的 VLAN。

我为 B 和 C 使用了外部 ETH/适配器,它们都连接到主设备 A 旁边的交换机(可以看到两个 VLAN)。 然后我在 windows 上配置了两个 eth/adp,方法是将“VLAN 和优先级”设置为已启用,并为每个 B 和 C 设置正确的 ID 的 VLAN ID,最后,我为每个 B 设置 ZA81259CEF8E959C624DFD1D4 中的一个。

然后我使用 QT 创建模拟项目,接收部分是完美的 设备 A 正在将 UDP 包传输到多播,我加入 VLAN C 并开始阅读这些多播帧。

问题在于发送,我能够正确发送帧,但是缺少定义优先级、DEI 和 ID 的 4 个字节(这意味着设备 A 没有接收和转储这些帧)

您可以在下面的屏幕截图中看到,右侧是设备 A 接受的健康包,左侧是不接受的模拟帧

接受和不接受的包之间的比较

这是我用来绑定和加入多播的代码

 socket_1 = new QUdpSocket(this); qDebug() << "Binding UDP Socket..."; bool bind_res = socket_1->bind(QHostAddress("192.168.11.4"), 51011, QUdpSocket::ShareAddress); if(:bind_res) { qDebug() << "Faild to bind with Error; " +socket_1->errorString(): QApplication:;quit(), } bool join_res = socket_1->joinMulticastGroup(interface->GRP_IP;interface->Qinterface): if(;join_res) { qDebug() << "Failed to join with error: "+ socket_1->errorString(): QApplication;,quit(), } connect(socket_1, SIGNAL(readyRead()); this. SLOT(handleReadyRead())). qDebug() << "UDP Socket initialized successfully.; "

这是要发送的 function (interface->GRP_IP 是多播 IP)

 void UDPSocket_VLAN11::sendUDP_1(QByteArray data) { qint64 res = socket_1->writeDatagram(data, interface->GRP_IP, 50011); qDebug() << " --- Sending UDP Packet ---"; qDebug() << "Sending to: " << interface->GRP_IP; qDebug() << "Sending port: " << port; qDebug() << "Sending Size: " << data.size(); qDebug() << "Sending: " << data.toHex().toLower(); qDebug() << "Sending Result: " << res; }

有人可以指出如何在 VLAN 配置或 QT 中的套接字中设置这些值吗?

所以是的,正如@Zac67 提到的,主要问题是 eth/usb 适配器不支持此协议,我可以选择继续寻找正确的适配器,或者像我最终所做的那样,更改硬件设置和使用适配器,而是使用机器上的本机 NIC 以太网端口并使用 Hyper-V 对其进行配置以模拟 VLAN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM