【问题标题】:Simulate a real UDP application and measure traffic load on OMNeT++模拟真实的 UDP 应用程序并测量 OMNeT++ 上的流量负载
【发布时间】:2015-10-20 02:49:17
【问题描述】:

所以我正在试验 OMNeT++,并创建了一个具有 Fat Tree 拓扑的数据中心。现在我想观察一个 UDP 应用程序是如何在(真实的)条件下工作的。我使用了 INET 框架并实现了 VideoStream Client-Server 应用程序。

所以我的问题是:

我的网络似乎运行良好,但我不想这样做。我想测量客户端接收到的数据率并将其与服务器的广播数据率进行比较。但是,即使我将大量流量放入网络(几个 UDP 和 TCP 应用程序),接收到的数据速率与广播的数据速率完全相同,我猜测在实际条件下,这种流量负载预计会在如此高度动态的环境中发生变化。那么如何在 OMNeT++ 上实现正确的条件来模拟真实的通信(可能存在丢包和排队时间等),以便测量这些流量负载?

有使用的.ini文件:

[Config UDPStreamMultiple]


**.Pod[2].racks[1].servers[1].vms[2].numUdpApps = 1
**.Pod[2].racks[1].servers[1].vms[2].udpApp[0].typename = "UDPVideoStreamSvr"
**.Pod[2].racks[1].servers[1].vms[2].udpApp[0].localPort = 1000
**.Pod[2].racks[1].servers[1].vms[2].udpApp[0].sendInterval = 1s
**.Pod[2].racks[1].servers[1].vms[2].udpApp[0].packetLen = 20480B
**.Pod[2].racks[1].servers[1].vms[2].udpApp[0].videoSize = 512000B

**.Pod[3].racks[0].servers[0].vms[0].numUdpApps = 1
**.Pod[3].racks[0].servers[0].vms[0].udpApp[0].typename = "UDPVideoStreamSvr"
**.Pod[3].racks[0].servers[0].vms[0].udpApp[0].localPort = 1000
**.Pod[3].racks[0].servers[0].vms[0].udpApp[0].sendInterval = 1s
**.Pod[3].racks[0].servers[0].vms[0].udpApp[0].packetLen = 2048B
**.Pod[3].racks[0].servers[0].vms[0].udpApp[0].videoSize = 51200B


**.Pod[0].racks[0].servers[0].vms[0].numUdpApps = 1
**.Pod[0].racks[0].servers[0].vms[0].udpApp[0].typename = "UDPVideoStreamCli"
**.Pod[0].racks[0].servers[0].vms[0].udpApp[0].serverAddress = "20.0.0.47"
**.Pod[0].racks[0].servers[0].vms[0].udpApp[0].serverPort = 1000


**.Pod[1].racks[0].servers[0].vms[1].numUdpApps = 1
**.Pod[1].racks[0].servers[0].vms[1].udpApp[0].typename = "UDPVideoStreamCli"
**.Pod[1].racks[0].servers[0].vms[1].udpApp[0].serverAddress = "20.0.0.49"
**.Pod[1].racks[0].servers[0].vms[1].udpApp[0].serverPort = 1000

**.Pod[2].racks[0].servers[0].vms[1].numUdpApps = 1
**.Pod[2].racks[0].servers[0].vms[1].udpApp[0].typename = "UDPVideoStreamCli"
**.Pod[2].racks[0].servers[0].vms[1].udpApp[0].serverAddress = "20.0.0.49"
**.Pod[2].racks[0].servers[0].vms[1].udpApp[0].serverPort = 1000

**.Pod[2].racks[1].servers[0].vms[1].numUdpApps = 1
**.Pod[2].racks[1].servers[0].vms[1].udpApp[0].typename = "UDPVideoStreamCli"
**.Pod[2].racks[1].servers[0].vms[1].udpApp[0].serverAddress = "20.0.0.49"
**.Pod[2].racks[1].servers[0].vms[1].udpApp[0].serverPort = 1000

提前致谢。

【问题讨论】:

  • 您能否提供有关您的模型的更多详细信息?您使用了哪种类型的附加 UDP 和 TCP 应用程序?它们是如何配置的?你是如何测量数据率的?你能把你模型的nedini文件的内容加进去吗?
  • @Jerzy 所有使用的 UDP 和 TCP 应用程序都来自 INET Framework(2.6 版)。我在模块之间配置了多个 UDP 和 TCP 连接。所有的模块要么是扩展 INET Framework 提供的 StandardHost 和 Router 的简单模块,要么是这些部分的复合模块。现在关于数据速率,在模拟运行的那一刻,我在一个模块上监视有关接收到的数据包的事件,并检查 OMNeT 自己保存的矢量图和直方图,我所看到的只是接收到的消息之间的间隔是相同的作为发送的间隔。
  • 您在哪个模块中监控收到的数据包 - 在 networkLayer 模块或 tcp/udp 应用程序模块中?你使用 INET 的统计/标量/向量吗?哪一个?老实说,如果没有关于模型配置和 TCP/UDP 应用程序配置的详细信息,每个人都很难为您提供帮助。
  • @JerzyD。我编辑了帖子,以便您可以看到它使用的 .ini 部分
  • @JerzyD。是的,所有这些。我有两个 StandardHost 通信,在 udp 应用程序模块的网络层中,我正在监视接收到的包的事件,然后我使用创建的向量来查看数据速率。

标签: c++ network-programming udp simulation omnet++


【解决方案1】:

因此,经过大量研究、思考和测试,我设法实现了我想要的目标。我做的是这样的:

因为数据中心的整个拓扑结构都是这样构建的,所以它将减少路由器的负载并平衡流量,为了采取必要的措施,我创建了一个较小的网络。只是来自 INET 框架的简单 3 个节点(StandardHost)和一个简单的 UDP 应用程序,它通过 midHost 从节点 A 到节点 B(例如 nodeA ---> midHost ---> nodeB)。在 .ini 文件中应该有几个命令,例如:

**.ppp[*].queueType = "DropTailQueue"
**.ppp[*].queue.frameCapacity = 50
**.ppp[*].numOutputHooks = 1
**.ppp[*].outputHook[*].typename = "ThruputMeter"

这些命令管理节点之间的链接,并且可以根据某人的需要进行扩展(可能调整帧容量或队列类型)。通过制作这个小型网络,您可以轻松自定义它并获取您需要的指标。我希望我可以帮助任何想要做同样事情的人来了解如何去做。

【讨论】:

    猜你喜欢
    • 2015-10-31
    • 2011-03-21
    • 1970-01-01
    • 2011-01-13
    • 2010-10-22
    • 2021-05-12
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    相关资源
    最近更新 更多