试验平台: cygwin 和 ns2.31 ,没有任何补丁。
实验目的:深入学习以太网特性,深入了解 csma/cd 原理。
实验步骤:
构建一个如下图所示的以太网,在这个网络中, 4 个节点共享一个传输介质(总线),任何时间只能有一对节点传输数据。
在ns2中创建以太网(局域网)的方法是使用make-lan函数具体方法请参考手册。
实验代码:
set opt(tr) out set opt(namtr) "vlantest-flat.nam" set opt(seed) 0 set opt(stop) 4 set opt(node) 4 set opt(qsize) 100 set opt(bw) 10Mb set opt(delay) 1ms set opt(ll) LL set opt(ifq) Queue/DropTail #set opt(mac) Mac/Csma/Cd set opt(mac) Mac/802_3 set opt(chan) Channel set opt(tcp) TCP/Reno set opt(sink) TCPSink set opt(app) FTP proc finish {} { global ns opt $ns flush-trace exec nam $opt(namtr) & exit 0 } proc create-trace {} { global ns opt if [file exists $opt(tr)] { catch "exec rm -f $opt(tr) $opt(tr)-bw [glob $opt(tr)]" } set trfd [open $opt(tr) w] $ns trace-all $trfd if {$opt(namtr) != ""} { $ns namtrace-all [open $opt(namtr) w] } return $trfd } proc create-topology {} { global ns opt global lan node set num $opt(node) for {set i 0} {$i < $num} {incr i} { set node($i) [$ns node] lappend nodelist $node($i) } set lan [$ns make-lan $nodelist $opt(bw) / $opt(delay) $opt(ll) $opt(ifq) $opt(mac) $opt(chan)] } ## MAIN ## set ns [new Simulator] set trfd [create-trace] create-topology set tcp0 [$ns create-connection TCP/Reno $node(0) TCPSink $node(1) 0] $tcp0 set window_ 15 set ftp0 [$tcp0 attach-app FTP] set tcp1 [$ns create-connection TCP/Reno $node(2) TCPSink $node(3) 0] $tcp1 set window_ 15 set ftp1 [$tcp1 attach-app FTP] $ns at 1.0 "$ftp0 start" $ns at 0.1 "$ftp1 start" $ns at 3.0 "$ftp1 stop" $ns at $opt(stop) "finish" $ns run
可以看出在0.1s的时候节点2向节点3传输数据,在1s的时候节点0向节点1传输数据,从而构成一个竞争关系,在3.0s的时候,节点2停止向节点3传输数据,在4.0s整个实验结束。
实验结果分析:
产生的实验数据out文件为老trace格式,使用awk进行分析,思路就是统计节点1和节点3接受数据(tcp序列号)的时间关系。为了重复利用代码,使用简单的bash脚本如下:
#!/bin/bash NODE=$1 awk ' BEGIN{ i = $NODE; } { if($1=="r"&&$4=='$NODE'&&$5=="tcp") printf("%lf %d/n",$2,$11) } END{}' out > $NODE.out
保存文件analy,执行./analy 1和./analy 3,其中的1和3表示接受数据的节点是1和3。统计的是接受节点接受tcp序列号和时间的关系。使用gnuplot进行画图,结果如下:
通过此图我们可以得出以下几个结论:
1, 以太网可以比较公平为多个节点提供网络服务,所有节点共享网络带宽。
2, 因为竞争的关系,会出现比较大的网络延时,譬如红线(1.out)接受数据包序列号出现较大的缺口,这个是应为其他节点同时要求网络服务所形成的竞争导致的。
3, 需要进一步验证吞吐量的变化,为了验证吞吐量,采取一种图像化的相对表示比较简单,那就是统计单位时间内收到的数据包的个数,统计方法如下:
BEGIN{ interval = 0.05; base = 0; num = 0; } { if($1=="r"&&($4==1||$4==3)&&$5=="tcp"){ if($2-base>=interval){ printf("%lf %d/n",$2,num); num = 0; base = $2; }else{ num++; } } } END{ }
结果如图所示:
这个结果显示在多个节点同时传输数据的时候总的吞吐量并没有明显的变化。这说明在较少节点使用以太网时候,公平性可以得到很好的保障。
同时我们注意到在执行ns命令产生的结果中,除了一个out文件还有如下结果:
其中BEB是802.3标准中处理冲突的方法(Binary Exponential Backoff)即,csma/cd中使用的冲突处理方法,ns2中的csma使用的方法通过阅读mac-802.3.cc是持续监听的方式,没有采用非持续csma。而在BEB超出限制之后就会出现以上的错误。
进一步实验还可以完成(需要使用新的统计脚本):
1, 增加节点,观察在大量节点连接情况下以太网的效率。
2,FTP/TCP换成CBR/UDP观察不同速率情况下的多节点竞争环境下的吞吐量变化。
参考资料:潘爱民《计算机网络-第四版》