我将Omnet ++仿真内核嵌入到我的应用程序中,并且我正在使用inet框架进行模拟。我遇到的问题是,我需要估计数据包是否会到达目的地。
更具体:有两个名为H0和H1的EtherHost(inet.node.ethernet.EtherHost)和一个名为switch(inet.node.ethernet.EtherSwitch)的EtherSwitch,这三个连接如下:
H0 - < - > C - C - 。开关< - > C - C - 。 H1
C表示DatarateChannel,数据速率= 100Mbps,延迟= 0.1us。当H0中的EtherAppCli将EtherAppReq发送到H1时,我需要在传输所述数据包期间在EterAppReq数据包上获得ETA。
我的第一个想法是始终获得EtherAppReq的封装包,它在EtherLLC和EtherMAC模块中添加,但这并不像我想象的那么简单。我需要更改所有较低层中的所有封装功能总是得到一个指向封装包的指针,或者我错了吗?
或者是否有其他方法可以在传输中获得数据包的ETA?
编辑:出于我的目的,我只需要到达下一个模块的到达时间,所以如果数据包在H0的mac模块中,我需要在交换机的mac层到达时间(所以没有多模块跳跃)。就像你有一个cMessage一样,你可以在消息上调用getArrivalTime(),如果我没弄错的话,可以估计到达时间。
非常感谢您的帮助!
答案 0 :(得分:0)
预先无法获得数据包的ETA。
数据包到达的时间取决于许多因素(例如在实际网络中),例如:主机和交换机队列中的当前数据包数,交换机中的处理时间,交换机的CPU数量,主机中MAC层的处理时间等因此,在发送数据包时,主机和模拟环境都不知道该数据包何时到达目的主机。因此,我们准备一个模型并进行模拟,以便衡量这个时间并了解一些因素如何影响它。
顺便说一下:你的身材中没有H1。