NS2路由协议和数据转发

本文探讨了NS2中的路由协议和数据转发,特别是Classifier如何利用路由表进行数据包转发。作者提出,若要创建处理数据报的上层overlay,不能采用agent形式,因为agent间不透明。同时,文章讨论了Addr_Classifier和Port_Classifier在数据包流程中的作用,并提出了修改Addr_Classifier以处理overlay节点数据包的想法,以及实现该想法可能面临的挑战,如查询packet到达节点的地址和编写特定agent。
摘要由CSDN通过智能技术生成

今天刚在netforum上看到一个帖子,讨论的是NS2路由协议和数据转发,转载下:

 

我再写一次,看能不能发上来!在ns manual中有一章是介绍classifier的,这个classifier就是一个节点的入口,功能就是利用路由表,根据一定的规则将收到的数据包进行转发,单播路由中默认的分类器是DestHashClassifier,就是根据数据包的目的地址来转发。可以看出来,这个里面和路由协议是没有关系的。但是又不是真的没有关系,路由表就是路由协议形成的。路由协议其实也是在每个节点上有一个路由agent,任何节点上的agent都是有端口的,所以这个时候可以把路由agent看作是tcp层的(事实上也是),各个路由agent之间进行通信,通信的方式和我们的tcp层的agent的通信方式是一样的。所以这个agent肯定看不到本节点上其他agent的数据,所以想在路由协议里处理节点的数据包(非路由包)是不可能的事情。

void Classifier::recv(Packet* p, Handler*)
{
NsObject* node;
int cl = classify(p);
if (cl < 0 || cl >= nslot_ || (node = slot_[cl]) == 0) {
Tcl::instance().evalf("%s no-slot %d", name(), cl);
Packet::free(p);
return;
}
node->recv(p);
}

看见没有,这个是classifier的recv函数,就是接受到一个包后,根据一定的规则(classify)来查询路由表(一个表项就是一个slot),然后再用相应的节点的recv函数接收(就是把数据转发出去了)。

 

这也就是说明了一个问题,如果想要做一个能处理数据报的上层overlay,那么就不能做成agent的形式,因为agent之间是不透明,overlay agent是无法看到tcp or udp agent所产生的数据报,也就无从进行处理,这就很有意思了,应该怎么做呢……

 

08/25

也不见得就一定是不行,难道真的不能让一个agent接收其他agent的数据吗?

不管怎么说要先明白

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值