ns3学习笔记(四):路由概述

基于官网文档的 Routing Overview 部分详细研究一下ns3中路由是怎么工作的
文档链接16.4. Routing overview — Model Library

一、概述

NS3整体的工作架构如下:

路由部分的工作架构如下:

路由部分目前大多数用到的算法都包含在Ipv4RoutingProtocol部分:

二、 Ipv4RoutingProtocol

抽象基类 Ipv4RoutingProtocol () 声明了一个最小接口,由两个方法组成:RouteInput()和RouteOutput(),这两个方法通过定义接口决定了数据包传输的路径
简单理解,对于所有数据包,传输协议都需要向 Ipv4 查询 Ipv4RoutingProtocol 对象接口,并通过 Ipv4RoutingProtocol::RouteOutput () 请求路由,并返回一个指向 Ipv4Route 对象的 Ptr
主要的几类路由协议在单播路由中介绍:

  1. Ipv4ListRouting
    用于在节点上储存一系列路由协议,根据优先级调用
  2. Ipv4StaticRouting
    这个之前写过一篇如何配置静态路由的文章,不细讲了,就是手动指定通信链路的端口
  3. Ipv4GlobalRouting
    安装InternetStackHelper时会默认添加的路由协议,采用的是OSPF算法,优先级低于静态路由,一般会在官方示例代码里看见这样给所有节点计算路由表:
    Ipv4GlobalRoutingHelper::PopulateRoutingTables();
    如果发生了一些变化需要重新计算路由表:
    Ipv4GlobalRoutingHelper::RecomputeRoutingTables();
    Simulator::Schedule(Seconds(5),&Ipv4GlobalRoutingHelper::RecomputeRoutingTables);
    路由表的计算还有两个属性可以修改:
    ① Ipv4GlobalRouting::RandomEcmpRouting:如果设置为 true,数据包将在等成本多路径路由上随机路由。如果设置为 false(默认值),则只持续使用一条路由。
    ②Ipv4GlobalRouting::RespondToInterfaceEvents:如果设置为 true,则会在发生接口通知事件(上/下或添加/删除地址)时动态地重新计算全局路由。如果设置为 false(默认值),路由可能会中断,除非用户在此类事件发生后手动调用 RecomputeRoutingTables()。
    PS.这两个属性的修改要放在主程序最前面,在创建接口之前:
    Config::SetDefault("ns3::Ipv4GlobalRouting::RandomEcmpRouting", BooleanValue(true)); // enable multi-path routing

     底层的源码在ns3目录下:src/internet/model/ipv4-global-routing.cc:

    TypeId 
    Ipv4GlobalRouting::GetTypeId (void)
    { static TypeId tid = TypeId ("ns3::Ipv4GlobalRouting").SetParent<Object> ().SetGroupName ("Internet").AddAttribute ("RandomEcmpRouting","Set to true if packets are randomly routed among ECMP; set to false for using only one route consistently",BooleanValue (false),MakeBooleanAccessor (&Ipv4GlobalRouting::m_randomEcmpRouting),MakeBooleanChecker ()).AddAttribute ("RespondToInterfaceEvents","Set to true if you want to dynamically recompute the global routes upon Interface notification events (up/down, or add/remove address)",BooleanValue (false),MakeBooleanAccessor (&Ipv4GlobalRouting::m_respondToInterfaceEvents),MakeBooleanChecker ());return tid;
    }

    先生成所有可能的路径,然后再用随机数选择一条,否则默认选择第一条路径:

      if (allRoutes.size () > 0 ) // if route(s) is found{// pick up one of the routes uniformly at random if random// ECMP routing is enabled, or always select the first route// consistently if random ECMP routing is disableduint32_t selectIndex;if (m_randomEcmpRouting){selectIndex = m_rand->GetInteger (0, allRoutes.size ()-1);}else {selectIndex = 0;}Ipv4RoutingTableEntry* route = allRoutes.at (selectIndex); // create a Ipv4Route object from the selected routing table entryrtentry = Create<Ipv4Route> ();rtentry->SetDestination (route->GetDest ());/// \todo handle multi-address casertentry->SetSource (m_ipv4->GetAddress (route->GetInterface (), 0).GetLocal ());rtentry->SetGateway (route->GetGateway ());uint32_t interfaceIdx = route->GetInterface ();rtentry->SetOutputDevice (m_ipv4->GetNetDevice (interfaceIdx));return rtentry;}

    传输的数据包速率、大小需要设置大一点,这样就可以看到RandomECMP同时用到多条路径进行传输的效果

路由部分的东西太多了,这篇先写到这里,下篇重点研究如何在ns3里面实现多路径路由

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将格内多行文字展开成多格

表格的A列是分类&#xff0c;B列由多行文字组成&#xff0c;即分隔符是换行符。 AB1Account NumberInteraction21Jan 1,2023 - Hello.32Jan 2, 2023 - Good morning. Jan 3, 2023 - Good night. Jan 4, 20 Jan 5, 2023 - Good night. Jan 6, 2023 - Good afternoon.43Jan 1,20…

基于Java技术的网上图书商城系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术、SpringBoot框架 工具&#xff1a;Eclipse、Navicat、Maven 系统展示 首页 用户注册界面…

RK3588开发笔记-ES8311音频芯片调试记录

目录 前言 一、ES8311 二、原理图连接 三、内核配置 四、设备树配置 五、设备调试 总结 前言 本篇博客主要记录如何在RK3588平台上调试ES8311音频芯片的过程。这包括硬件连接、内核配置、驱动程序调试和测试步骤。 一、ES8311 ES8311是一款高性能、低功耗的音频Codec,支持…

1996-2023年各省农村居民人均消费支出数据(无缺失)

1996-2023年各省农村居民人均消费支出数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;1996-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;农村居民人均消费支出 4、范围&#xff1a;31省 5、缺失情况&#xff1a;无缺失 6、指标解释&…

视频汇聚平台EasyCVR设备录像回看请求播放时间和实际时间对不上,是何原因?

安防监控EasyCVR视频汇聚平台可提供多协议&#xff08;RTSP/RTMP/国标GB28181/GAT1400/海康Ehome/大华/海康/宇视等SDK&#xff09;的设备接入、音视频采集、视频转码、处理、分发等服务&#xff0c;系统具备实时监控、云端录像、回看、告警、平台级联以及多视频流格式分发等视…

Java中的公平锁和非公平锁

1、什么是公平锁和非公平锁 公平锁和非公平锁是指在多线程环境下&#xff0c;如何对锁进行获取的顺序和策略的不同。 公平锁是指多个线程按照申请锁的顺序来获取锁&#xff0c;即先到先得的策略。当一个线程释放锁之后&#xff0c;等待时间最长的线程将获得锁。公平锁的优点是保…

java 中钻石操作符 <> 的使用场景

在 Java 中,<> 符号通常被称为 "钻石操作符" (Diamond Operator),主要用于泛型类型的简化表示。<> 操作符引入于 Java 7,以减少泛型实例化时的冗余代码。以下是 <> 符号在 Java 中的几种主要使用场景: 1. 泛型类型实例化 在 Java 7 之前,实…

Redis主从部署

文章目录 Redis主从部署1.下载安装Redis2.单点双副本主从配置1.修改配置信息2.修改配置文件redis.conf3.拷贝配置文件到每一个实例文件夹里4.修改每一个实例的端口和工作目录5.配置主从关系6.检查效果 3.哨兵模式监控主从1.创建实例目录2.复制配置文件并进行修改3.启动并测试 4…

微信定时推送LeetCode每日一题,再也不怕没人喊你刷题了

前段时间发过一篇关于微信机器人开发的文章&#xff0c;讲述了如何快速开发一个微信机器人&#xff0c;本篇文章就来实现一个最近开发的一个功能案例&#xff0c;在这个案例中会遇到了各种问题&#xff0c;可以帮助大家减少自己去踩坑的时间。通过此案例也可以帮助你去扩想一些…

Profibus_DP转ModbusTCP网关模块连马保与上位机通讯

Profibus转ModbusTCP网关模块&#xff08;XD-ETHPB20&#xff09;广泛应用于工业自动化领域。例如&#xff0c;可以将Profibus网络中的传感器数据转换为ModbusTCP协议&#xff0c;实现数据的实时监控和远程控制。本文介绍了如何利用Profibus转ModbusTCP网关&#xff08;XD-ETHP…

leetcode134双周赛 子数组按位与值为 K 的数目「动态规划」「位运算」

3209. 子数组按位与值为 K 的数目 题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回 nums 中有多少个子数组满足&#xff1a;子数组中所有元素按位 AND 的结果为 k 思路1:动态规划 打力扣打PTSD了&#xff0c;看什么题都是DP 状态&#xff1a; d p [ i …

c++ 宏和模板

&#xff08;1&#xff09;宏的应用 宏定义可以实现类似于函数的功能&#xff0c;但是它终归不是函数&#xff0c;而宏定义中括弧中的“参数”也不是真的参数&#xff0c;在宏展开的时候对 “参数” 进行的是一对一的替换。 assert() 断言 断言&#xff0c;是宏&#xff0c;…

【AMBA】AHB总线中的HTRANS、HSIZE、HBURST以及1K边界问题

HTRANS、HSIZE和HBURST共同决定下一次数据传输的地址。 HTRANS[1:0]定义传输类型 HTRANS[1:0]主机传输状态描述00IDLE空闲表示没有进行数据传输&#xff0c;默认状态。主设备虽然可能已经占用了总线&#xff0c;但是还没有开始传输数据。从设备需要返回OKAY响应01BUSY忙主设备…

springboot+vue项目实战2024第二集jwt

1.登陆注册校验token,jwt校验 <!--java-jwt--><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.4.0</version></dependency> <!--test--><dependency><groupId&…

在 Node.js 中,如何正确地使用 async/await 与 Promise 对象配合

在 Node.js 中&#xff0c;如何正确地使用 async/await 与 Promise 对象配合? 在Node.js中&#xff0c;async/await是ES2017引入的一种更简洁的处理异步操作的方式&#xff0c;它基于Promise来进行编写&#xff0c;使得异步代码看起来更像同步代码&#xff0c;易于理解和维护…

重塑视听盛宴:揭秘短剧系统开发背后的创意引擎与技术革新!

重塑视听盛宴&#xff0c;短剧系统的开发背后融合了强大的创意引擎与技术革新。这些创新不仅提升了观众的观剧体验&#xff0c;还极大地丰富了内容创作和分发的方式。 创意引擎 内容创新 1、多元化内容资源&#xff1a;短剧系统汇聚了全球各地的优质短剧资源&#xff0c;涵盖悬…

前端面试39(关于git)

针对前端开发者的Git面试题可以覆盖Git的基础概念、常用命令、工作流程、团队协作、以及解决冲突等方面。以下是一些具体的Git面试 Git基础知识 什么是Git&#xff1f; Git是一个分布式版本控制系统&#xff0c;用于跟踪计算机文件的更改&#xff0c;并协调多个人共同在一个项…

基于视觉的具身导航

基于视觉的具身导航 背景 什么是&#xff08;视觉的&#xff1f;&#xff09;具身导航 输入机器人观测的当前图像 o t o_t ot​和目标图像 o G o_G oG​&#xff0c;输出当前时间步的控制动作 u t u_t ut​&#xff0c;最终到达指定地点的算法流程。 通用的评价指标 性能指…

Git常见命令和用法

Git 文件状态 Git 文件 2 种状态: 未跟踪:新文件&#xff0c;从未被 Git 管理过已跟踪:Git 已经知道和管理的文件 常用命令 命令作用注意git -v查看 git 版本git init初始化 git 仓库初始化之后有工作区、暂存区(本地库)、版本库git add 文件标识暂存某个文件文件标识以终…

人工智能建立在对象存储上的真正原因

tl;dr: 在这篇文章中&#xff0c;我们将探讨 AI 工作负载依赖高性能对象存储的四个技术原因。 1. 对非结构化数据没有限制 在当前的机器学习范式中&#xff0c;性能和能力与计算成比例&#xff0c;计算实际上是数据集大小和模型大小的代理&#xff08;神经语言模型的缩放定律&a…