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 系统展示 首页 用户注册界面…

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;等待时间最长的线程将获得锁。公平锁的优点是保…

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…

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

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

前端面试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…

C#开发:下载node.js指定版本

一、打开官网 二、找到指定版本 三、选择程序包msi下载 四、验证下载是否成功 cmd输入&#xff1a; node -v npm -v

请跳至打印机属性的“Adobe PDF设置”页面,取消选择“仅停靠系统字体;不使用文档字体”

场景&#xff1a; 当使用adobe pdf打印时&#xff0c;出现如下提示“请跳至打印机属性的“Adobe PDF设置”页面&#xff0c;取消选择“仅停靠系统字体&#xff1b;不使用文档字体””&#xff0c;该如何解决。 描述 □“仅停靠系统字体&#xff1b;不使用文档字体” 复选本框…

基坑安全:自动化监测系统的革新力量

在日新月异的基坑工程领域&#xff0c;基坑安全自动化监测系统犹如一位守护者&#xff0c;以其独特的优势&#xff0c;为工程的安全与质量保驾护航。该系统集先进的测量仪器、计算机技术与现代传感技术于一体&#xff0c;对基坑的围护结构及周边环境进行全方位、高精度的实时监…

从零开始学量化~Ptrade使用教程(四)——股票普通买卖与回购业务

股票普通买卖 股票买入 通过选择委托方向实现股票的买入与卖出&#xff0c;可根据输入的价格自动查询可买数量。 用鼠标点击【买入】&#xff0c;如图所示&#xff1a; 输入股票代码并选中后&#xff0c;选择委托类型&#xff0c;若为限价类型&#xff0c;输入委托价格&#xf…

【漏洞复现】锐捷校园网自助服务系统 任意文件读取

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 锐捷校园网自助服务系统是用于学校网络管理的一个平台&#xff0c;login_judge.jsf接口存在任意文件读取…

中职网络安全B模块渗透测试server2380

使用nmap扫描添加参数-sV Flag:2.4.38 添加参数-A不然扫不全 &#xff08;这两题可以直接加-sV -A&#xff09; Flag: 4.3.11-Ubuntu 根据nmap扫描发现系统为ubuntu系统&#xff0c;ubuntu操作系统在某些版本中默认包含一个名为"ubuntu"的用户帐户。这是为了方…

重生奇迹mu自带四重箭加穿透的弓

1.烈风射手 烈风射手是自带四重箭加穿透的弓之一。该职业的技能树中有一个叫做“四箭连发”的技能&#xff0c;可以让玩家在一次攻击中发射四支箭矢&#xff0c;每支箭矢都带有穿透效果。 2.影魅猎人 影魅猎人也是自带四重箭加穿透的弓之一。该职业的技能树中有一个叫做“穿…