如何在同一个节点上使用不同的应用层协议呢?
发现所以的资料都只有介绍在一个节点上使用一个协议,是不是因为觉得同时使用多个应用协议是理所当然的而没有
介绍,不得而知,但是前几天有人问我是不是可以使用多个协议在一个节点上,我才意识到其实还是有很多人并不了
解,下面简短介绍一下,经过测试,同时使用cbr和sip是可以做到的。
首先要明确agent的功能,agent是产生数据流的起点,为什么呢?因为agent产生数据包,并且每个agent有自己
的端口号,这一点有类似于linux下传输层的socket,提供数据流服务,类似socket,每个agent都提供基本对数
据进行操作(接受等)的功能,应用层只需要调用agent提供的功能就能完成自己的功能了。说的太泛了,不过基本
原理就是这样的,可以通过Agent/UDP看看就了解了。
一开始我觉得如果在一个节点上使用不同的应用层应用就只需要一个agent,然后给不同的application分配不同的
端口号就可以了,不过ns2不是这么实现的,因为不同的agent有不同的端口号。
首先:new一个agent,譬如UDP
set udp0 [new Agent/mUDP]
$ns attach-agent $n0 $udp0
Simulator instproc attach-agent { node agent } {
$node attach $agent
。。。。。。
}
Node instproc attach { agent { port "" } } {
#如果第二个节点不填写默认为"",类似与c++里面的f(int b,int a =1);
。。。。。。
if { $port == "" } {
set port [$dmux_ alloc-port [[Simulator instance] nullagent]]
}
$agent set agent_port_ $port
$self add-target $agent $port
}
所以不同的agent端口号就不同了。关键是不同的端口号port分类器就可以讲包分流了,所以把agent理解为一个带不同端口
号的传输层代理,而tcp/ip里的是不同的应用使用不同的端口号,这里不同的agent就有不同的端口号,所以不同的application
就要关联到不同的agent了
set tcp1 [new Agent/TCP]
$ns attach-agent $s1 $tcp1
set tcp [new Agent/TCP]
$ns attach-agent $s1 $tcp
set ftp [new Application/FTP]
$ftp attach-agent $tcp
set telnet [new Application/Telnet]
$telnet attach-agent $tcp1
其实很简单,不过看网上很多的例子都没有讲可以多个应用在一个节点上,不免让很多人长生误解,我在这里只不过是提醒一下
新手们这是完全可以的,可以照此方法去实际各种的模拟了。