Unicast routing
为IPv4和IPv6定义了以下单播路由协议:
- Ipv4ListRouting和Ipv6ListRouting(用于存储路由协议的优先级列表)
- Ipv4StaticRouting类和Ipv6StaticRouting类(包括单播和多播)
- Ipv4GlobalRouting(用于存储由全局路由管理器计算的路由,如果使用的话)
- Ipv4NixVectorRouting(一个更高效的全局路由版本,用于在数据包报头字段中存储源路由)
- Rip - IPv4 RIPv2协议(RFC 2453)
- RipNg - IPv6 RIPng协议(RFC 2080)
- IPv4优化链路状态路由(OLSR)(RFC 3626中定义的MANET协议)
- IPv4 Ad Hoc点播距离矢量(AODV)(RFC 3561中定义的MANET协议)
- IPv4目的地排序距离矢量(DSDV)(MANET协议)
- IPv4动态源路由(DSR)(MANET协议)
Ipv[4,6]ListRouting
本节介绍当前的默认ns-3 Ipv [4,6] RoutingProtocol。 通常情况下,用户空间支持多种路由协议,并协调在内核中写入单个转发表。 目前在ns-3中,实现允许多个路由协议建立/保持它们自己的路由状态,并且IP实现将查询这些路由协议中的每一个(按仿真作者确定的某个顺序)直到找到路由。
我们选择这个方法是因为它能更加便利的整合不同的路由方法,因为这些方法写入同一个表比较困难或者这些方法用来抉择下一条的信息不仅仅是IP地址,又或者某些数据包需要被缓存。
Ipv[4,6]ListRouting::AddRoutingProtocol
类Ipv4ListRouting和Ipv6ListRouting为允许添加路由协议的方法提供了一个纯虚函数声明:
void AddRoutingProtocol (Ptr<Ipv4RoutingProtocol> routingProtocol, int16_t priority);
void AddRoutingProtocol (Ptr<Ipv6RoutingProtocol> routingProtocol, int16_t priority);
这些方法分别由Internet模块中的Ipv4ListRoutingImpl类和Ipv6ListRoutingImpl类实现。
上面的优先级变量决定了路由协议被插入的优先级。 注意它是一个有符号的int。 默认情况下,在ns-3中,helper类将实例化一个Ipv [4,6] ListRoutingImpl对象,并添加一个优先级为零的Ipv [4,6] StaticRoutingImpl对象。 在内部存储Ipv [4,6]路由协议列表,并且按照优先级降序查询路由协议,以查看是否找到匹配。 因此,如果您希望您的Ipv4RoutingProtocol的优先级低于静态路由,请将其优先级小于0; 例如:
Ptr<MyRoutingProtocol> myRoutingProto = CreateObject<MyRoutingProtocol> ();
listRoutingPtr->AddRoutingProtocol (myRoutingProto, -10);
在调用RouteOutput()或RouteInput()时,列表路由对象将按优先级顺序搜索路由协议列表,直到找到路由。 这样的路由协议将调用适当的回调,并且不会搜索更多的路由协议。
网友评论