如何在Omnet++节点中嵌入多个Sink应用并区分不同类型数据包?
数据包统计需求
我们需要按源节点和数据包类型区分目标节点接收的数据包,具体统计要求如下:
| Source | Destination | Type | Count |
|---|---|---|---|
| n1 | n5 | UdpBasicApp | 3 |
| n1 | n5 | PingApp | 75 |
| n2 | n5 | VoIPApp | 2 |
| n2 | n6 | VoIPApp | 32 |
| n1 | n7 | UdpBasicApp | 8 |
建议:可以在目标节点中使用多个Sink应用,每个应用对应一类需要区分的数据包
问题解答
1. 如何为每个节点配置使用多个Sink应用?
在OMNeT++的NED文件或INI配置文件中,直接为目标节点添加多个Sink应用实例即可,每个实例通过设置专属参数(如端口号、数据包过滤规则)匹配特定类型的数据包。
NED文件配置示例:
node n5 { gates: inout g[]; submodules: udpSink: UdpSink { parameters: localPort = 1000; // 匹配UdpBasicApp的发送端口 } pingSink: PingSink { parameters: // 利用PingApp专属的数据包标识做匹配 } voipSink: VoIPSink { parameters: localPort = 2000; // 匹配VoIPApp的发送端口 } connections: g++ --> udpSink.in; g++ --> pingSink.in; g++ --> voipSink.in; }
INI文件配置示例:
**.n5.udpSink.localPort = 1000 **.n5.pingSink.display-name = "Ping接收Sink" **.n5.voipSink.localPort = 2000
每个Sink应用会独立监听并统计匹配到的数据包,后续可通过OMNeT++的结果收集工具(如scalar)获取各Sink的接收计数。
2. 是否需要为每种类型的数据包分别嵌入一个Sink应用?
是的,需要为每种需区分统计的数据包类型单独配置对应的Sink应用。比如节点若要分别统计UdpBasicApp和VoIPApp类型的数据包,就得嵌入UdpSink和VoIPSink两个实例。
不同类型的数据包通常有专属标识(如端口号、协议字段、应用层标记),单个Sink很难同时精准区分多种类型并分别统计。每个Sink专注处理一类数据包,既能保证统计准确性,也便于后续结果分析和数据提取。
内容的提问来源于stack exchange,提问作者Maryam
相关产品推荐
相关产品推荐

