问题描述
在Veins 5.0
中配置模拟环境后,不同节点同时发送和接收消息。但是,以下日志仅针对特定消息输出。
数据包有位错误。迷路了
未正确接收数据包,将其作为控制消息发送给上层
浏览各种资料后,我修改了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
...
此外,每个节点都会根据特定的时间间隔发送消息。如果传输时间重叠,是否会出现此错误?节点中实现的部分代码如下:
啊
...
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,0.50));
我已经读到数据包冲突或同时传输和接收是不可能的。但是有什么办法可以忽略这一点吗?
还是应该增加TxPower
?我不知道原因。
解决方法
您所描述的是冲突:如果一个节点同时接收两个无线传输,则很难理解其中任何一个传输。 (想象两个人同时对你说话:在这种情况下,你也很难理解对方在说什么)。
通常,802.11 会尽量避免这种情况(这是 CSMA/CA、退避、...的全部意义所在),但也存在机制失败的情况:
一个众所周知的案例是“隐藏终端”情况,即发送方不知道另一个发送方的存在(例如,另一个发送方隐藏在建筑物后面)。
另一种鲜为人知的情况是,两个发送方同时开始传输:两个发送方都将看到没有其他人在传输,将从接收模式更改为传输模式,然后开始发送(完全不知道另一个发件人正在完全相同的时间执行此操作)。实际上,这种情况并不常见(毕竟,两个发送方需要非常精确地同时开始发送)。不幸的是,在模拟中很容易错误地做到这一点:只需将两个节点配置为在 t=42s 传输,它们都会尝试在 恰好 t=42s 传输。