Omnet++ 数据包有位错误。迷路的数据包未正确接收,将其作为控制消息发送到上层

Omnet++ 数据包有位错误。迷路的数据包未正确接收,将其作为控制消息发送到上层,omnet++,veins,Omnet++,Veins,在Viels 5.0中配置仿真环境后,不同节点同时发送和接收消息。但是,以下日志仅针对特定消息输出 数据包有位错误。失落的 数据包未正确接收,将其作为控制消息发送到上层 在浏览了各种信息之后,我修改了omnetpp.ini的代码,如下所示,但输出了相同的传输损耗日志 omnetpp.ini *.**.nic.phy80211p.allowTxDuringRx = true *.**.nic.mac1609_4.txPower = 20mW *.**.nic.mac1609_4.bitrate =

在Viels 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
...
此外,每个节点根据特定的时间间隔发送消息。如果传输时间重叠,是否会发生此错误?节点中实现的一些代码如下所示:

A.h

...
const simtime_t TIME_MSG_INTERVAL = 1.0;
...
const simtime_t TIME_SYNC_INTERVAL = 1.0;
A.cc

...
BaseFrame1609_4* wsm = new BaseFrame1609_4();
wsm -> encapsulate(msg);
populateWSM(wsm);
sendDelayedDown(wsm, uniform(0.01, 0.50));
...
BaseFrame1609_4* wsm = new BaseFrame1609_4();
wsm -> encapsulate(syncMsg);
populateWSM(wsm);
sendDelayedDown(wsm, uniform(0.01, 0.50));
B.h

...
const simtime_t TIME_MSG_INTERVAL = 1.0;
...
const simtime_t TIME_SYNC_INTERVAL = 1.0;
B.cc

...
BaseFrame1609_4* wsm = new BaseFrame1609_4();
wsm -> encapsulate(msg);
populateWSM(wsm);
sendDelayedDown(wsm, uniform(0.01, 0.50));
...
BaseFrame1609_4* wsm = new BaseFrame1609_4();
wsm -> encapsulate(syncMsg);
populateWSM(wsm);
sendDelayedDown(wsm, uniform(0.01, 0.50));
我已经读到数据包冲突或同时传输和接收是不可能的。但有没有办法忽视这一点


或者我应该增加
TxPower
?我不知道原因。

您描述的是冲突:如果一个节点同时接收到两个无线传输,那么它很难理解其中一个传输。(想象两个人同时对你说话:在这种情况下,你也很难理解对方在说什么)

通常,802.11试图避免这种情况(这是CSMA/CA、退避等的全部要点),但在某些情况下,机制会失败:

一个相当著名的情况是“隐藏终端”情况,其中发送者不知道另一发送者的存在(例如,另一发送者隐藏在建筑物后面)


另一种不太为人所知的情况是,两个发送方在完全相同的时间开始发送:两个发送方将看到没有其他人在发送,将从接收模式更改为发送模式,并将开始发送(完全不知道另一个发送方在完全相同的时间执行此操作)。在实践中,这种情况相当罕见(毕竟,两个发送者需要在非常精确的时间开始发送)。不幸的是,在模拟中很容易出错:只需将两个节点配置为以t=42秒的速度传输,它们都将尝试以t=42秒的速度传输。

您描述的是冲突:如果一个节点同时接收两个无线传输,则很难理解其中一个传输。(想象两个人同时对你说话:在这种情况下,你也很难理解对方在说什么)

通常,802.11试图避免这种情况(这是CSMA/CA、退避等的全部要点),但在某些情况下,机制会失败:

一个相当著名的情况是“隐藏终端”情况,其中发送者不知道另一发送者的存在(例如,另一发送者隐藏在建筑物后面)


另一种不太为人所知的情况是,两个发送方在完全相同的时间开始发送:两个发送方将看到没有其他人在发送,将从接收模式更改为发送模式,并将开始发送(完全不知道另一个发送方在完全相同的时间执行此操作)。在实践中,这种情况相当罕见(毕竟,两个发送者需要在非常精确的时间开始发送)。不幸的是,在模拟中很容易出错:只需将两个节点配置为在t=42秒时传输,它们都将尝试在t=42秒时传输。

我想得到一个关于网络拓扑内基础设施的简单计数。我能够理解碰撞的概念。但这是不切实际的,但是,该机制不能忽略此类冲突吗?@MinwooKim如果您对OMNeT++模拟中给定类型的节点数感兴趣,您可以查询模拟内核以获取此值查询内核的确切含义是什么?很抱歉,这里不清楚:您可以为任何OMNeT++调用cModule类层次结构的方法模块。这些方法将允许您获取模块的子模块、父模块、类型等。我想获取有关网络拓扑内基础设施的简单计数。我能够理解碰撞的概念。但这是不切实际的,但是,该机制不能忽略此类冲突吗?@MinwooKim如果您对OMNeT++模拟中给定类型的节点数感兴趣,您可以查询模拟内核以获取此值查询内核的确切含义是什么?很抱歉,这里不清楚:您可以为任何OMNeT++调用cModule类层次结构的方法模块。这些方法将允许您获取模块的子模块、父模块、类型。。。