您的当前位置:首页正文

高级计算机网络 ns3,NS3仿真工具在计算机网络课程教学中的应用

2024-11-13 来源:个人技术集锦

林晓辉 苏恭超

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

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

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

1 计算机网络分层的概念

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

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

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

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

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

2 NS3网络仿真器介绍

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

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

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

(3)实验仿真。

(4)数据采集与分析。

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

3 NS3仿真器使用介绍

从以上的仿真器架构上看,仿真器的设计是按照网络的层次化结构来编写,因此可以通过在仿真器下书写仿真文本来定义各层的功能,从而实现网络的虚拟化仿真。为说明仿真器的功能,研究以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.

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

Top