ns3学习笔记(5) 网络层

模拟之路 @ 网络层

源码 src/internet

架构

在这里插入图片描述

  • 网络层主要是指Ipv4和Ipv6两个协议
  • 默认情况下安装了TCP/IP协议栈的节点都是双栈节点
    • Ipv4和Ipv6分别各自有个v4和v6的基类
    • 本节主要以Ipv4协议栈为例讲解

网络层主要基类 及 扮演角色

Ipv4
  • 协议的基类 主要定义协议的接口函数
  • 主要算法在子类Ipv4L3Protocol中实现
  • 一个节点只能有一个Ipv4L3Protocol和一个Ipv6L3Protocol对象
Ipv4Interface
  • 网络层与链路层交互的媒介,执行与NetDevice相关的事情
  • 每个节点的NetDevvice对应唯一一个interface对象 ,其内部保存着所属NetDevice的一个或多个IP地址
  • 还做一些比如检查接口状态的事情,必要时使用ARP协议查询MAC地址
Ipv4RoutingProtocol
  • 路由协议的基类,各种路由协议都是其子类
  • 对于下行分组来说
    • 获取下一跳IP,确定发往哪个Ipv4Interface对象 , 然后后者做一些与NetDevice的关联操作
  • 对于上行分组来说
    • 分组先发给Node中的handler向量数据结构,确定前往哪个协议(e.g, v4还是v6 )
    • 然后相应的L3Protocol查询路由表,确定是接收、转发还是丢弃
    • 接受 根据提取的协议号来确定发给上层哪一个传输层协议对象

每个新的L3Protocol创建的时候都要在handler这个结构里面注册先

创建

安装

  • InternetStackHelper::Install( )除了安装传输层协议,还安装了网络层协议(Ipv4L3Protocol 和Ipv6L3Protocol )对象,同时建立了他们与相应的IpvxRoutingProtocol之间的关联
  • 默认安装双站街点,可以通过helper的serIpv4StackInstall选择卸载某一个

地址分配 p135-138还有补充讲解

  • 手动
  • Ipv4AddressHelper
    • .SetBase( ip ,mask )
    • assign( NetDevice ) // retrun IpvxInterface 【安装ip地址就返回IpvxInterface】
  • DHCP自动分配
    • DhcpHelper
  • 分配好的地址就存在IpvxInterface里

TC层次 (traffic-control) P132

  • ns3只实现了下行的,including CoDel 、RED 、FQ-CoDel 、PIE 和 MP队列控制算法
  • 可以参考ns-3 model library

脚本配置与trace

  • 本层的属性很少 常见的网络层配置是路由协议
  • 配置路由协议的例子和default setting 见p132

trace变量很多

  • 均属于IpvxProtocol类,都和分组的收发有关
  • 列举与差别见p133

Ipv4分组头

  • Ipv4Header 类 ipv4-header.h
  • 同样提供Print()功能
  • 暂不支持Option

Ipv6分组头

路由协议

  • 主要负责路由表的创建、更新和维护
    • 决定要接收还是转发的时候IpvxProtocol要查表,发送往下一跳的时候也要查表
  • 除了DSR和Click 其他的都是IpvxRoutingRrotocol的子类,对应的助手类的基类是IpvxRoutingHelper
  • 可以使用InternetStackHelper::SetRoutingHelper( )来为一个节点指定路由

列表路由 p139

  • 结点创建的时候默认使用这个 这不是个协议 是管理同一个节点上的多个协议的方法 [ 一个节点可以有多个路由协议 ] 按优先级来查询

每个协议都有个对应的IpvxProtocolHelper ( e.g. Ipv6StaticRoutingHelper 对应的就是Ipv6StaticRouting [ 这里命名隐去了Protocol我觉得是因为名字太长了2333 ] )

  • 默认情况下,ipv4的列表路由存的是静态和全局路由,其中静态优先级比较高,ipv6Protocol的list中存的只有静态( 目前只支持Ipv4分组的全局路由 )

  • Ipv4ListRouting 和 Ipv4StaticRouting等 其实是同一个父类的子类,查路由表的时候实际上是调用Ipv4ListRouting 的LookUp,在list里面按照优先级遍历每个路由表,如果在该路由表找到的话最好,没有找到的话就继续遍历

路由表打印 p140

  • 可以打印一个节点的、多个节点的、定时打印、反复打印 等等 都行

静态路由配置 p141

  • IpvxStaticRouting 默认的第一个查询的路由机制
    在这里插入图片描述
    tip : 因为路由协议是和网络层协议绑定的 所有要先从node里面找网络层协议,然后从网络层协议的聚合数组里面找路由协议

  • 可以禁止转发 设置下IpForward属性即可 p142

  • 常用函数

    • IpvxStaticRouting.SetDefaultRoute( ) 设置默认静态路由
    • Helper.AddHostRouteTo( 下一跳,转发地址, 接口索引号 )

全局路由 p142

  • 目前只支持Ipv4分组 Ipv4GlobalRouting类

一些具体细节可以再看看书

网络层协议开发

隧道协议

  • 既可以在网络层实现,又可以在链路层实现 【本节指的是网络层的 e.g. IP in IP (IP 隧道)、GRE

路由协议

其本身
  • 最好直接继承IpvxProtocol,需要实现几个虚函数 p146
  • 路由表
    • std::list
    • std::map
  • 助手类
  • 创建新的路由以后记得添加到RoutingList里面 p147有例程

联想

  • InternetStackHelper干了好多事情 : 安装网络层的协议,绑定对应的路由协议;安装传输层的L4Protocol,创建相应的Socket(实际上主要是L4Protocol完整)并且绑定这两层的接口

question

  • MANET(ad-hoc网络) OLSR协议 p132?
  • p132 全局路由协议? 应该是一类协议的全称?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值