SimPy 上的网络仿真

问题描述

我正在尝试模拟许多节点使用的网络链接SimPy一个 Python 库)上进行通信。我把网络当作 simpy.Resource(env,1) 因为所有的通信通道一般都是 FIFO。每当节点需要发送数据时,它都会请求网络资源,然后传输数据。

def transfer(env,data_size):
    net_delay = data_size/WAN_BANDWIDTH
    with network_queue.request() as req:
        yield req
        yield env.timeout(net_delay)

但是正因为如此,传输大量数据的节点会占用通道,而小的传输会排队。我确信这不是真正的网络传输的工作方式。每次传输都会获得相等且分开的带宽。有什么建议可以解决这个问题吗?

以下是我想出来的。

def transfer(env,transfer_size):
    transfer_size_remaining = transfer_size
    while(transfer_size_remaining>0):
        with network_queue.request() as request:
            yield request
            
            data_size = min(transfer_size_remaining,MTU)
            yield env.timeout(data_size/WAN_BANDWIDTH)
            
            transfer_size_remaining -= data_size

我将在每个请求中请求网络队列和 MTU(1500 字节)字节数。我认为这应该会自动使其循环并在所有传输数据的节点之间分配等量的带宽。

我的解决方案有什么问题吗?有没有更好的方法来做到这一点?或者是否有使用 SimPy 执行此操作的标准正确方法

提前致谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)