数据包有位错误。丢失。数据包未正确接收,将其作为控制消息发送到上层
Packet has bit Errors. Lost. Packet was not received correctly, sending it as control message to upper layer
在Veins 5.0
配置好仿真环境后,不同节点同时收发消息。但是,仅针对特定消息输出以下日志。
Packet has bit Errors. Lost
Packet was not received correctly, sending it as control message to upper layer
浏览各种资料后,我修改了omnetpp.ini
代码如下,但是输出的还是一样的传输丢失日志
omnetpp.ini
*.**.nic.phy80211p.allowTxDuringRx = true
*.**.nic.mac1609_4.txPower = 20mW
*.**.nic.mac1609_4.bitrate = 27Mbps
*.**.nic.phy80211p.minPowerLevel = -110dBm
*.connectionManager.maxInterfDist = 2600m
...
此外,每个节点根据特定的时间间隔发送消息。如果传输时间重叠,是否会出现此错误?节点中实现的部分代码如下:
A.h
...
const simtime_t TIME_MSG_INTERVAL = 1.0;
A.cc
...
BaseFrame1609_4* wsm = new BaseFrame1609_4();
wsm -> encapsulate(msg);
populateWSM(wsm);
sendDelayedDown(wsm, uniform(0.01, 0.50));
B.h
...
const simtime_t TIME_SYNC_INTERVAL = 1.0;
B.cc
...
BaseFrame1609_4* wsm = new BaseFrame1609_4();
wsm -> encapsulate(syncMsg);
populateWSM(wsm);
sendDelayedDown(wsm, uniform(0.01, 0.50));
我了解到不可能发生数据包冲突或同时发送和接收。但是有什么办法可以忽略这个吗?
还是应该增加TxPower
?我不知道原因。
您所描述的是冲突:如果一个节点同时接收到两个无线传输,则它很难理解任何一个传输。 (想象一下两个人同时对你说话:在这种情况下你也很难理解他们在说什么)。
通常情况下,802.11 会尝试避免这种情况(这就是 CSMA/CA、退避等的重点),但在某些情况下机制会失败:
一个众所周知的案例是“隐藏终端”情况,其中发送者不知道另一个发送者的存在(例如,另一个发送者隐藏在建筑物后面)。
另一种鲜为人知的情况是,两个发送方同时开始传输:两个发送方都会看到没有其他人在传输,将从接收模式变为传输模式,然后开始发送(完全没有意识到另一个发件人恰好在同一时间执行此操作)。实际上,这种情况并不常见(毕竟,两个发送方需要非常精确地同时开始发送)。不幸的是,在模拟中很容易错误地做到这一点:只需将两个节点配置为在 t=42s 传输,它们都将尝试在 exactly t=42s.
在Veins 5.0
配置好仿真环境后,不同节点同时收发消息。但是,仅针对特定消息输出以下日志。
Packet has bit Errors. Lost
Packet was not received correctly, sending it as control message to upper layer
浏览各种资料后,我修改了omnetpp.ini
代码如下,但是输出的还是一样的传输丢失日志
omnetpp.ini
*.**.nic.phy80211p.allowTxDuringRx = true
*.**.nic.mac1609_4.txPower = 20mW
*.**.nic.mac1609_4.bitrate = 27Mbps
*.**.nic.phy80211p.minPowerLevel = -110dBm
*.connectionManager.maxInterfDist = 2600m
...
此外,每个节点根据特定的时间间隔发送消息。如果传输时间重叠,是否会出现此错误?节点中实现的部分代码如下:
A.h
...
const simtime_t TIME_MSG_INTERVAL = 1.0;
A.cc
...
BaseFrame1609_4* wsm = new BaseFrame1609_4();
wsm -> encapsulate(msg);
populateWSM(wsm);
sendDelayedDown(wsm, uniform(0.01, 0.50));
B.h
...
const simtime_t TIME_SYNC_INTERVAL = 1.0;
B.cc
...
BaseFrame1609_4* wsm = new BaseFrame1609_4();
wsm -> encapsulate(syncMsg);
populateWSM(wsm);
sendDelayedDown(wsm, uniform(0.01, 0.50));
我了解到不可能发生数据包冲突或同时发送和接收。但是有什么办法可以忽略这个吗?
还是应该增加TxPower
?我不知道原因。
您所描述的是冲突:如果一个节点同时接收到两个无线传输,则它很难理解任何一个传输。 (想象一下两个人同时对你说话:在这种情况下你也很难理解他们在说什么)。
通常情况下,802.11 会尝试避免这种情况(这就是 CSMA/CA、退避等的重点),但在某些情况下机制会失败:
一个众所周知的案例是“隐藏终端”情况,其中发送者不知道另一个发送者的存在(例如,另一个发送者隐藏在建筑物后面)。
另一种鲜为人知的情况是,两个发送方同时开始传输:两个发送方都会看到没有其他人在传输,将从接收模式变为传输模式,然后开始发送(完全没有意识到另一个发件人恰好在同一时间执行此操作)。实际上,这种情况并不常见(毕竟,两个发送方需要非常精确地同时开始发送)。不幸的是,在模拟中很容易错误地做到这一点:只需将两个节点配置为在 t=42s 传输,它们都将尝试在 exactly t=42s.