fs学习笔记(一)

fs是一个网络仿真工具,由Joel Sommers用Python编写的,它与传统的仿真工具不同,例如ns-2,传统的仿真工具是基于包层次的,而fs是基于流层次的,听说效率更高。

po主是第一次接触该工具,一些配置还不太清楚,都是根据关于fs的infocom论文来理解的,网上资源太少了。下面通过一个例子讲述一下fs配置文件的属性。

graph test {
    // 3 nodes: a, b, and c
    flowexport=text

    a [ 
        autoack="False"
        ipdests="10.1.0.0/16 10.10.0.0/16 10.128.0.0/9"
        traffic="m1"

        // basic harpoon setup 
        // build up and withdrawal of harpoon sources; 10 sources for duration
        // of 60 sec, followed by 20 sources for 60 sec, etc.
        //  m1="modulator start=0.0 generator=s1 profile=((60,),(10,20,30,30,20,10))"

        m1="modulator start=0.0 generator=s1 profile=((3600,),(1,))"
        s1="harpoon ipsrc=10.1.0.0/16 ipdst=10.3.1.0/24 flowsize=pareto(10000,1.2) flowstart=exponential(100.0) ipproto=randomchoice(6) sport=randomchoice(22,80,443) dport=randomunifint(1025,65535) lossrate=randomchoice(0.001)"
    ];

    b [ 
        autoack="False"
        ipdests="10.2.0.0/16" 
    ];

    c [ 
        autoack="False"
        ipdests="10.3.0.0/16 10.4.0.0/16 10.0.0.0/8" 
    ];

    // links 
    a -- b [weight=10, capacity=100000000, delay=0.043];
    b -- c [weight=10, capacity=100000000, delay=0.031];
    a -- c [weight=30, capacity=100000000, delay=0.123];
}

fs的配置文件可以是dot或者是json格式的,以上的是dot格式。配置文件中,首先定义了拓扑图的名字,然后用大括号包围拓扑图的详细信息。然后拓扑嘛,只有两个元素,节点和链路。

例子中节点数量是3个,a,b,c,每个节点都有可到达的ip以及是否自动ack,其中a节点是网络流量的发起者,因此a节点需要定义流量模块,其流量模块为m1,start属性表示什么时候开始发起流量,profile属性由两个列表组成,都是Python的tuple元组,第一个列表表示流量发起周期,第二个列表表示有几个流同时从源节点处被激活,逗号结尾表示循环。generator属性表示流量的发生器。例子中引用s1,每个发生器都有一个类型,例如s1的类型是harpoon,然后还有源节点和目的节点,注意这两个属性可以是单个元素,也可以是元组,flowsize属性表示流的大小,这里使用服从帕累托分布的随机变量;flowstart属性表示流开始的时间间隔,sport和dport代表源端口和目的端口,lossrate代表流的丢包率。

例子中一共有三条link,a到b,b到c,a到c,其中每条link中weight属性代表dijkstra算法中的边的权重,capacity代表链路带宽,delay代表链路延迟。

你可能感兴趣的:(网络,fs,流量)