我是靠谱客的博主 愤怒鸡,最近开发中收集的这篇文章主要介绍高级计算机网络 ns3,NS3仿真工具在计算机网络课程教学中的应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

林晓辉 苏恭超

9946468d9684d4f5e7a5308689e107af.png

e7b0e35eda977e25ed38bf831610d1ab.png

872b098455307cf5781c124d7f77d4cb.png

摘 要:在计算机网络的课程教学中,网络分层及各层功能定义是学生需要掌握的核心知识点。为了学生能对相关知识点形成清晰的认识,研究中将网络仿真器NS3融入教学中。通过让学生对各层的功能进行编程,使其能更好地掌握计算机网络的层次结构概念,巩固对相关的知识点理解,同时也能很好地提升学生的编程能力。

关键词: 网络仿真器;计算机网络;课程教学

文章编号: 2095-2163(2019)03-0187-03 中图分类号: G434 文献标志码: A

1 计算机网络分层的概念

计算机网络是一门有着很强理论性及实践性的专业课程,并在中国高等院校的计算机类和电子信息类的专业中均有开设。在本质上,计算机网络技术是基于开放系统互联思想,其体系设计是基于国际公开的规范。通过标准设计派生出网络互操作的通信约定,使基于不同硬件技术的节点可借助通信来交换信息。因此,在课程内容结构中,网络分层设计思想是课程的核心重点内容。网络分层设计如图1所示。

将计算机网络通过分層描述,把网络通信划分为各个子层,可以有效地降低网络协议的设计复杂度[1]。通过网络功能分层设计,能为网络互联带来诸多便利。对此可做探讨阐述如下。

(1)分层后,各层在功能上相互独立,各层无需知道其他层的详细功能,而设计者只需要知晓各层接口的协议规范,因此在网络定义以及功能实现上,系统的复杂度得以降低。

(2)分层后,只要层间接口不变,各层的变化不会导致其他层的重新设计。因此在结构上,各层均可以最新的技术来独立研发,使得系统实现更加灵活,同时也便于维护,并能够促进标准化。

根据开放系统互联(Open System Interconnection)的定义,网络的层次划分如图1所示。在本文的课程实验环节中,研究将网络体系按由低到高的顺序分为:物理层、数据链路层、网络层、运输层及应用层。

2 NS3网络仿真器介绍

由于以上分层思想较为抽象,仅靠课堂上的讲授并不能让学生较好地理解掌握相关概念。为了达到理想的教学效果,研究采用NS3网络仿真器作为辅助教学工具,通过对网络各层功能进行编程,使得学生对分层目的及功能形成清晰的概念。

NS3是一个离散事件模拟器,始于2006年的开源项目[2],下载地址为:https://www.nsnam.org/releases/。网络模拟器全部是由C++编写,通过带有选择性的Python语言绑定。因此仿真脚本由C++或Python语言来编写,并通过nam进行演示,同时用其他工具通过trace文件来分析仿真过程。使用NS3进行网络仿真时,需要依序展开如下步骤,即:

(1)选择或编写定义相应模块。

(2)编写网络仿真脚本。

(3)实验仿真。

(4)数据采集与分析。

(5)根据仿真结果进行代码或者参数的调整。

其中,在编写仿真脚本时,拟将涉及到如下研究设计,可表述为:定义节点,包含定义节点/地址类型、队列模型、网卡、应用程序、协议栈等;安装网络设备,定义物理层信道及MAC层协议,如CSMA、WiFi、WiMAX、LTE或是点对点通信;定义网络层及传输层协议栈,其中网络层协议可以选择OLSR、AODV或Global,同时也可以定义IPv4/IPv6格式等,传输层可以是UDP或者TCP;安装应用层协议;定义其他配置,如节点移动性及能量管理;设置仿真时间及相关参数[3]。

3 NS3仿真器使用介绍

NS3网络仿真器的层功能模块如图2所示。图2中的节点定义包含了网络设备类型、各层协议栈、信道以及应用层参数。可以将节点当成一个空的终端框架,通过添加相应的应用层功能、协议栈、信道类型等内容,完成节点的定义。协议栈包含传输层控制、路由协议以及地址管理。信道的定义中,可以按照实际情况来加入时延、能耗、误码率、噪声等参数。

从以上的仿真器架构上看,仿真器的设计是按照网络的层次化结构来编写,因此可以通过在仿真器下书写仿真文本来定义各层的功能,从而实现网络的虚拟化仿真。为说明仿真器的功能,研究以Ad Hoc网络模拟作为实例来解析论述NS3的仿真功能。Ad Hoc是一种无控制中心的分布式网络,各个网络节点均可以移动,并且在移动过程中交换数据。各个节点以无线方式连接,通过其他节点中继的方式,将数据传输到目的节点。因此每个节点均为一个路由器,负责发现并维持路由。受篇幅限制,本文从文献[4]的源代码中抽取出定义各层功能的关键部分。各部分的基础设计详见如下。

(1)定义物理层信道

YansWifiChannelHelper channel = YansWifi ChannelHelper::Default ();

YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();

phy.SetChannel (channel.Create ());

(2)定义MAC层协议

WifiHelper wifi;

wifi.SetStandard(WIFI_PHY_STANDARD_80211a);

wifi.SetRemoteStationManager("ns3::Constant RateWifiManager","DataMode",StringValue("OfdmRate6Mbps"));

(3)定义移动方式

mobility.SetMobilityModel ("ns3::Random Walk2dMobilityModel",

"Bounds", RectangleValue (Rectangle (-500, 500, -500, 500)));

mobility.Install (AdHocNode);

(4)定义传输层与网络

PacketSinkHelper sink ("ns3::UdpSocket Factory",

InetSocketAddress (Ipv4Address::GetAny (), port));

Ipv4GlobalRoutingHelper::

PopulateRoutingTables ();

(5)定义应用层数据

NS_LOG_INFO ("Create Applications.");

uint16_t port = 9999;

OnOffHelperonOff1("ns3::TcpSocketFactory",Address(InetSocketAddress(AdHocIp.GetAddress(0),port)));

onOff1.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));

onOff1.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));

由以上代码可以看出,该仿真器实际上可以根据各层的功能进行灵活定义。通过课堂讲授层的基本功能,再通过仿真器对各层相关功能的定义及实现,仿真后通过收集数据并加以分析(见图3),观察数据是否与预期的相符。在整个过程中,学生能够对分层概念及层功能形成清晰的认识[4]。

4 结束语

作为一个开源的网络仿真器,NS3根据计算机网络的层次结构对各层进行了功能性定义。在课堂接受基本概念的基础上,学生通过课后的编程,以课程项目的形式来实现网络的定义。在此过程中,学生可以极大地加深对网络设计分层思想的理解,从而获得良好的教学效果。

参考文献

[1]KUROSE J F ROSS K W. Computer Networking:A top-down approach[M]. 陈鸣 译. 6th ed. 北京:机械工业出版社, 2014.

[2] 周迪之. 开源网络模拟器ns-3:架构与实践[M]. 北京:机械工业出版社,2019.

[3] 马春光, 姚建盛. ns-3网络模拟器基础及应用[M]. 北京:人民邮电出版社, 2014.

[4] CSDN. ns3模擬无线Ad hoc网络通信[EB/OL]. [2018-04-12]. https://blog.csdn.net/xiao_sheng_jun/article/details/79921889.

[5] ns-3 project. ns-3 manual[EB/OL].[2019-04-16]. https://www.nsnam.org/docs/manual/html/index.html.

最后

以上就是愤怒鸡为你收集整理的高级计算机网络 ns3,NS3仿真工具在计算机网络课程教学中的应用的全部内容,希望文章能够帮你解决高级计算机网络 ns3,NS3仿真工具在计算机网络课程教学中的应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部