林晓辉 苏恭超
摘 要:在计算机网络的课程教学中,网络分层及各层功能定义是学生需要掌握的核心知识点。为了学生能对相关知识点形成清晰的认识,研究中将网络仿真器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.