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]; }
例子中节点数量是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代表链路延迟。