如何解决数据包有位错误丢失的数据包未正确接收,将其作为控制消息发送给上层
在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 传输。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。