为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

计算机网络原理仿真程序

2017-09-26 46页 doc 609KB 18阅读

用户头像

is_212655

暂无简介

举报
计算机网络原理仿真程序计算机网络原理仿真程序 的设计与实现 –––CRC校验仿真、数字信道仿真 The Design and Implementation of The Principles of Computer Network Simulation Program –––CRC Checking、Digital Channel Emulator 摘要 计算机网络是计算机技术和通信技术紧密结合而形成的新的技术领域,《计算机网络原理》课程是高等院校计算机相关专业重点课程,计算机网络人才是我国社会发展和知识经济时代的基础人才,社会对于...
计算机网络原理仿真程序
计算机网络原理仿真程序 的与实现 –––CRC校验仿真、数字信道仿真 The Design and Implementation of The Principles of Computer Network Simulation Program –––CRC Checking、Digital Channel Emulator 摘要 计算机网络是计算机技术和通信技术紧密结合而形成的新的技术领域,《计算机网络原理》课程是高等院校计算机相关专业重点课程,计算机网络人才是我国社会发展和知识经济时代的基础人才,社会对于网络人才的需求更是呈显著增长的趋势。但是抽象晦涩难懂的网络原理知识已经阻碍了很多人对网络的学习,而网络原理仿真程序的开发在一定程度上解决了这个不好局面,让同学们更加直观的理解和学习网络原理的知识。 在这次的毕业设计中,我做了关于网络原理的仿真程序,其中包括CRC校验的仿真、海明码的仿真以及数字信道的仿真。CRC校验仿真程序实现了数据在传输过程的检错功能,我们通过互联网相互通信,难免会在通信时发生错误,因此通过CRC校验就能让通信双方的通信变得可靠。由于CRC校验能检错不能纠错,所有海明码的纠错功能就显得尤为重要,海明码能纠正数据信息中的一位差错,加上CRC校验的检错,这样我们的通信就更加的可靠而且快捷。为了能看到数字信道是如何处理信息的,我设计了一个数字信道仿真程序,这个仿真程序让数字信道透明化的展示在我们的面前,我们也对数字信道有了更深刻的理解。 关键词: 计算机网络; CRC 校验; 海明编码;数字信道 I Abstract Computer network is a new technology field with the formation of the computer and communication technologies in close connection,<> is computer-related professional course that universities focus on Computer network experts are the basic experts for China's social development and knowledge economy, the society's demand to network experts is significantly increasing. But the abstract obscure knowledge of the network principles has already hampered many people on the network's learning, however the development of the network simulation program solved this bad situation in some way, helping them become more intuitive to understand and learn the knowledge of network principles. In this graduating design, I did a simulation program on the network principle, including the simulation of CRC check、Hamming codes and digital channels. Simulation program for CRC check achieves error detection function on data transmission process, we communicate with each other over the Internet, it is inevitable when an error occurs in the process, therefore we will be able to make it reliable to communicate both sides through the CRC check. As the CRC check can achieve error detection but it can't make error correction, all Hamming codes' error correction function becomes more important, Hamming codes are able to correct one-bit error in data information, adding to CRC check's error detection, so our communication would be more reliable and efficient. I also designed a digital channel simulation program to see how the digital channels deal with information, this simulation program makes digital channels display in front of us transparently, we also have a more profound understanding of digital channels. Key words: computer network; CRC checking; hamming code; digital channel emulator II 目 录 摘要 ................................................................................................................ I Abstract ...................................................................................................... II 目 录 ..................................................................................................... III 第1章 绪论 ................................................................................................. 1 1.1 引言 .................................................................................................... 1 1.1.1网络协议仿真程序的研究目的 .................................................... 1 1.1.2网络协议仿真的发展状况及特点 ................................................ 1 1.1.3网络协议仿真的指导思想及主要问 ........................................ 2 1.1.4 本程序设计的主要内容 ............................................................ 3 1.2 毕业设计的论文结构 ......................................................................... 3 第2章 登陆界面 .......................................................................................... 5 2.1 登录界面的设计 ................................................................................. 5 2.2登录界面的实现 .................................................................................. 5 第3章 CRC校验仿真程序设计 ................................................................. 8 3.1 需求分析 ............................................................................................. 8 3.2 系统设计与实现 ................................................................................. 8 3.2.1 生成多项式端的设计与实现 ....................................................... 8 3.2.2 文本文档端的设计与实现 ........................................................... 8 3.2.3发送端的设计与实现 ................................................................... 9 3.2.4 数字信道端的设计与实现 ......................................................... 10 3.2.5接收端的设计与实现 ................................................................. 11 3.3 系统运行与测试 ............................................................................... 12 3.3.1 主程序界面的运行与测试 ......................................................... 12 3.3.2文本文档端的运行与测试.......................................................... 13 3.3.3 仿真程序的整体运行与测试 ..................................................... 14 第4章 海明码仿真程序设计 .................................................................... 18 4.1 需求分析 ........................................................................................... 18 4.2 系统设计与实现 ............................................................................... 18 4.2.1 发送端的设计与实现 ................................................................ 18 4.2.2数字信道端的设计及实现.......................................................... 20 4.2.3接收端的设计与实现 ................................................................. 21 4.3 系统运行与测试 ............................................................................... 22 4.3.1主程序界面的运行与测试.......................................................... 22 4.3.2发送端的运行与测试 ................................................................. 23 4.3.3接收端的运行于测试 ................................................................. 23 III 4.3.4仿真程序的整体运行与测试 ...................................................... 24 第5章 数字信道仿真程序设计 ................................................................ 27 5.1 需求分析 ........................................................................................... 27 5.2 系统的设计与实现 ........................................................................... 27 5.2.1 发送端的设计与实现 ................................................................ 27 5.2.2 数字信道的设计与实现 ............................................................ 28 5.2.3接收端的设计与实现 ................................................................. 30 5.3系统运行与测试 ................................................................................ 30 5.3.1主程序界面的运行与测试.......................................................... 30 5.3.2仿真程序的整体运行测试.......................................................... 31 第6章 结 论.............................................................................................. 34 致 谢 ........................................................................ 错误~未定义书签。35 参考文献 ..................................................................................................... 35 IV 第1章 绪论 1.1 引言 随着计算机网络的不断发展,网络知识显得尤为重要。因此要想学好网络知识就必须要掌握好网络中的协议,在所有的书本中所讲解的网络协议知识都比较的晦涩难懂而且还很枯燥无味。在此情况下,人们想用一种仿真软件来实现网络中协议传输的透明化,让大家很直观的看到网络中协议是如何传输的、如何封装的、在出错的情况下是如何处理的等等。因此,计算机网络协议的仿真软件就应运而生了。 1.1.1网络协议仿真程序的研究目的 书本《计算机网络原理》课程介绍的网络知识抽象,晦涩难懂,目前各高校《计算机网络原理》课程教学,都是以书本教学方式和多媒体课件方式为主,学生被动的接收较为抽象的网络知识,理解的程度不深刻,毕业后很难应对纷繁复杂的网络问题。因此,整个高校的《计算机网络原理》课程教学都在呼吁和探索新的教学方式,迫切的需要一种工具或来改变目前网络课程教学的现状。将网络协议仿真教学系统应用到《计算机网络原理》课程教学和实践正是应时代所需,对《计算机网络原理》课程的教学方式的有益创新。 我们研究的课题正是计算机网络原理的仿真程序设计及实现,它一方面解决计算机网络与通信精品课程原创性素材比较少的局面,一方面解决理论讲解与程序实现脱节的问题。该仿真程序的主要功能: 1)对于学生,帮助他们更加形象生动的理解晦涩难懂的抽象网络知识。提高大家 对网络协议的理解和运用。 2)对于教师,通过动态的仿真,使得老师能够把自己的知识更快、更好的传授给学生。也使得老师和学生的理解和沟通更容易。 3)对于教学,提高了教学质量和教学进度。 1.1.2网络协议仿真的发展状况及特点 随着计算机技术的发展,计算机网络与通信的重要性是不言而喻的,它已成为从事计算机和通讯领域研究、开发和应用的技术人员必须掌握的基础技能之一 。为了社会的需要,学生就必须十分精通网络知识,但是在学习中网络知识的抽象、晦 1 涩难懂阻碍了老师和同学们之间的沟通和交流。而计算机网络原理程序仿真就解决了这一难题,它使得老师能够形象、直观的展示出网络协议的传输,学生们也就将这抽象的网络知识实例化到了脑海中,这样不仅让学生们学到了更多的知识,也使得教学更加有效率。目前计算机网络的仿真软件有很多,比如:美国的Cisco 公司,他们开发的packet tracer 软件,它就能仿真我们网络中的传输以及在网络中模拟配置路由器、配置网段等等功能。中国的华为公司,他们在基础通信网络、业务与软件、终端和专业服务等四大领域都确立了端到端的领先地位。他们凭借在固定网络、移动网络和IP数据通信领域的综合优势,华为已成为全IP融合时代的领导者。他们开发的软件HW-RouteSim3.0 也实现了仿真网络中的传输以及网络中的配置问题。目前也有别的网络仿真软件,而我们设计的这个仿真软件是对网络中的CRC校验、ARP协议、分布式自适应路由协议等协议的仿真。 网络仿真技术是一种通过建立网络设备和网络链路的统计模型, 并模拟网络流量的传输, 从而获取网络设计或优化所需要的网络性能数据的仿真技术。由于仿真不是基于数学计算, 而是基于统计模型,因此,统计复用的随机性被精确地再现。而我们设计的网络原理仿真程序则是模拟了数据在网络中传输的过程。 网络仿真技术的特点: 1)全新的模拟实验机理, 使其具有在高度复杂的网络环境下得到高可信度结果的特点。网络仿真的预测功能是其他任何方法都无法比拟的; 2)使用范围广, 既可以用于现有网络的优化和扩容, 也可以用于新网络的设计,而且特别适用于中大型网络的设计和优化; 3)初期应用成本不高, 而且建好的网络模型可以延续使用, 后期投资还会不断下降。 1.1.3网络协议仿真的指导思想及主要问题 本毕业设计的指导思想是:一方面解决计算机网络与通信精品课程原创性素材比较少的局面,一方面解决理论讲解与程序实现脱节的问题。通过我们设计的仿真软件,让网络协议更透明、让老师教学更直观、让同学们理解的更形象生动。 在有了这样的指导思想下,我们要解决的就是具体实现的问题,下面就是本课题要解决的主要问题。 首先,要理解和掌握所设计的网络协议的基本原理和实现方法。 2 其次,写好需求分析,并根据设计原理选择最佳。 再次,根据需求分析设计详细的程序。 最后,调试程序,让程序完成预想的所有功能。 1.1.4 本程序设计的主要内容 在这次的计算机网络协议仿真程序毕业设计中,我主要完成了CRC校验仿真、海明码的仿真、数字信道的仿真。 下面是具体内容: 1) CRC校验:主要设计了CRC_8、CRC_16、CRC_32的仿真程序,其中数据输入端的内容可以是任意输入数据,也可以是文本文档的内容作为数据的输入。在校验中,可以选择无差错传输或者随机一位差错传输再或者随机两位错传输,这样就仿真了CRC校验的过程。 2) 海明码仿真:数据输入端是一个8位的0、1数据,将数据经过海明方法编码就形成了所要发送的海明码;接收端对接收到的海明码进行解码,方知其传输中是否出现错误,若出现一位错误,则将其改正并正确接收。在传输过程中也可以选择无差错或者随机一位差错再或者随机两位差错。 3) 数字信道仿真:连续发送数据A到Z,在数字信道中作处理,如:随机丢失、随机差错、超时、正确传输这四种处理。在接收端,如果发生了随机丢失,则发送端再次发送原数据,如果发生了随机差错,接收端接收到数据,然后再让发送端发送原数据,如果超时了,则发送端继续发送原数据,如果正确传输,则发送端发送下一个数据。 1.2 毕业设计的论文结构 第1章 绪论部分,包括了计算机网络协议的研究目的、发展状况以及网络仿真的特点。 第2章 登录界面的设计,通过登录界面能连接到每一个仿真程序,这样就把三个独立的小程序整合到了一起。 第3章CRC校验仿真程序的设计,在这里主要通过需求分析和系统的设计来实现CRC校验仿真程序。 第4章 海明码仿真程序的设计,通过需求分析和系统的设计再加上具体模块的设计来实现海明码的仿真程序。 3 第5章 数字信道的仿真程序设计,在需求分析和系统设计下,完成数字信道的仿真程序。 第6章 结论,在这里主要写了本毕业设计主要完成的内容,在设计和实现过程中遇到的问题和解决方法以及对未来在该领域的建议。 4 第2章 登陆界面 2.1 登录界面的设计 在登录界面上需要连接CRC校验仿真界面、海明码仿真界面、数字信道仿真界面以及设计一个计时功能,因此选择对应操作就能实现各个仿真界面。登录界面设如图2.1所示。 图2.1 登录界面 运行界面如图2.2所示。 图2.2 登录的运行界面 2.2登录界面的实现 下面是登录界面的具体实现。 5 private void buttonCRC_Click(object sender, EventArgs e)//连接CRC校验界面 { this.Visible = false; timer1.Stop(); labeltimer.Text = "30"; CRC.CRC my = new CRC.CRC(); my.ShowDialog(); this.Visible = true; timer1.Start(); } private void buttonHMcode_Click(object sender, EventArgs e)//连接海明码界面 { this.Visible = false; timer1.Stop(); labeltimer.Text = "30"; HaiMing_Code.HaiMingCoding my = new HaiMing_Code.HaiMingCoding(); my.ShowDialog(); this.Visible = true; timer1.Start(); //this.Close(); } private void buttonDCE_Click(object sender, EventArgs e)//连接数字信道界面 { this.Visible = false; timer1.Stop(); labeltimer.Text = "30"; DigitalChannelEmulator.Digital_Channel_Emulator my = new DigitalChannelEmulator.Digital_Channel_Emulator(); my.ShowDialog(); this.Visible = true; timer1.Start(); } 6 private void timer1_Tick(object sender, EventArgs e)//对定时器的编辑,实现每秒减1 { labeltimer.Text = Convert.ToString(Convert.ToUInt32(labeltimer.Text) - 1); if (labeltimer.Text == "0") this.Close(); } private void Login_Load(object sender, EventArgs e)//启动定时器 { timer1.Start(); } 7 第3章 CRC校验仿真程序设计 3.1 需求分析 本仿真程序是将CRC_8、CRC_16、CRC_32的仿真程序综合到一起的一个仿真程序。在选取何种仿真程序时,对应的也就选择了相应的生成多项式。如:如果选择CRC_8仿真程序,则也就选择了多项式107H=100000111B。这时在输入端输入要传送的数据,通过校验将生成的校验码加到输入数据的尾部一并作为发送的数据传送给数字信道;在数字信道中可以做无差错的传输,也可以做随机一位差错的传输,亦可以做随机两位差错的传输;这时将数字信道处理的数据传送给接收端,在接收端再对接收到的数据进行一次求余运算,如果余数为0,则传输正确,反之则传输中初选错误。另外,在数据输入端也可以选择文本文档的内容作为要传送的数据。根据以上的描述,我认为把该程序设计成五个模块,它们是:生成多项式端、文本文档段、发送端、数字信道端、接收端。这样的设计很清晰的显示出了各个模块的功能。 3.2 系统设计与实现 本程序的设计与实现包括:生成多项式端、文本文档端、发送端、数字信道端、接收端,通过对这五部分的详细设计及整合,就完成了关于CRC校验仿真程序的设计。 3.2.1 生成多项式端的设计与实现 生成多项式端就是做模二运算时的除数,生成多项式有很多很多种,但是在这个仿真程序中,每种校验方法我只设计了一个生成多项式。这样是为了更加简便的看到仿真的结果。而在实现时只需用radiobutton就能实现对不通校验方法的选择。例如:radiobutton1就是CRC_8所对应的多项式107H,当radiobutton1被选择时,说明现在选择的是CRC_8校验,同时也说明这时所用的多项式是107H。同样,如果radiobutton2对应CRC_16和radiobutton3对应CRC_32操作过程是一样的。 3.2.2 文本文档端的设计与实现 设计一个按钮,点击此按钮就能选择想要打开的文本文档,这时,文本文档中的内容就显示在数据输入端,并且在一个文本编辑框中显示打开的此文本文档的路 8 径。这样简单的设计就实现了打开一个文本文档、显示其路径和在输入端显示其内容。主要代码如下: private void OpenTxt_Click(object sender, EventArgs e) { try { openFileDialog1.Filter = "文本文件(*.txt)|*.txt"; openFileDialog1.ShowDialog(); textBoxtext.Text = openFileDialog1.FileName; StreamReader SReader = new StreamReader(textBoxtext.Text, Encoding.Default); textData.Text = SReader.ReadToEnd(); } catch { MessageBox.Show("请选择文件"); } } 3.2.3发送端的设计与实现 首先要清楚的知道,在发送端发出的数据是带校验码的数据,因此,在发送端就有CRC编码的设计,通过运算将输入数据所得到的CRC码显示在label上,这样就很清晰的知道每个数据通过对应的多项式所生成的CRC校验码。当点击发送按钮时,发送端的数据就是输入端的数据加上生成的对应的校验码。这样就将带有校验码的数据发送出去,以便数字信道做处理和接收端接收。下面是CRC_8的编码程序实现,其它略。 /// /// CRC_8的编码过程 /// /// /// private void byteCRC8(ref int CRC, char ch) { CRC^= ch; 9 for (int i = 0; i < 8; i++) if ((CRC & 0x80) >= 0x80) { CRC = (CRC << 1) ^ genPoly;// genPoly=107H } else { CRC <<= 1; } CRC &= 0xff; } private int blockCRC8(string block) { int CRC = 0; for (int i = 0; i < block.Length; i++) { byteCRC8(ref CRC, block[i]); } return CRC; } 3.2.4 数字信道端的设计与实现 数字信道端对发送端发送来的数据做一个处理,这个处理包括:无差错、随机一位差错、随机两位差错。然后将处理的数据发送给接收端,让接收端进行处理。在出错处理中,选择了对应的radiobutton也就选择了对应的出错处理方法,这样处理数据就能让接收端的再次校验出现不同的结果,实现仿真的目的。而在出错处理中,随机一位差错和随机两位差错是设计的重点,我使用随机函数解决了随机哪位出错的问题。比如随机一位差错,首先产生一个随机数,这个随机数是接收到的数据的长度值和1内的任意一个数,这个数也是要出错的那一位,吃时再得到随机数后,将对应为改变(1换成0或者0换成1),然后将改变后的数据传送给接收端。 10 随机两位差错和随机一位差错大同小异,只是在产生随机数时有所不同,这时需要同时产生两个随机数,并且这两个随机数不能相同,其它步骤和随机一位差错一样,因此在产生两个不同的随机数时我使用了do-while 语句,这样就能产生出来两个不一样的随机数,随机两位差错便得到了解决。 产生一位随机差错具体实现如下: System.Random ran = new Random(System.DateTime.Now.Millisecond); int Rankey = ran.Next(1,s.Trim().Length); 产生两位随机差错具体实现如下: int Rankey, Rankey1; do { System.Random ran = new Random(System.DateTime.Now.Millisecond); Rankey = ran.Next(0, s.Trim().Length - 1); Rankey1 = ran.Next(0, s.Trim().Length - 1); } while (Rankey == Rankey1); 通过产生的这两种随机数的形式,再将对应位的数据修改,这样便实现了有差错的传输。 3.2.5接收端的设计与实现 在接收到接收端发送来的处理数据后,接收端要再次对此数据进行校验,如果其余数为0,则说明数据正确传输,反之数据则在传输过程中出现了错误。因此在接收端首先要设计一个接收数字信道传送过来数据的textbox,然后将接收到的数据进行解码处理,看其余数。若余数为0,则在label上显示正确,并将除去校验码的数据显示在接收的结果出;若余数不为0,则在label上显示出现差错,并且在数字信道的label上显示出左数第几位出现差错。在接收端主要实现的就是解码,其具体代码如下:(以CRC_8的解码为例) Private int byteCRC9(ref int CRC, int ch) { CRC ^= ch; for (int i = 0; i < 8; i++) 11 if ((CRC & 0x80) >= 0x80) { CRC = (CRC << 1) ^ genPoly;// genPoly=107H } else { CRC <<= 1; } CRC &= 0xff; return CRC; } 3.3 系统运行与测试 根据系统的设计和实现,将界面搭建完成,再添加具体的代码,就完成了CRC仿真程序的设计。 3.3.1 主程序界面的运行与测试 首先是CRC校验仿真程序的总体设计界面,如3.1所示。 图 3.1 CRC校验仿真程序的总体设计界面 在完成总体界面设计后,添加相应的代码,就能实现CRC校验的仿真程序。 12 CRC仿真程序的运行界面,如图3.2所示。 图3.2 CRC仿真程序的运行界面 在程序运行后,默认生成多项式是CRC_8的多项式107H(可以选择CRC_16仿真和CRC_32仿真),传输端默认无随机差错传输数据。 3.3.2文本文档端的运行与测试 首先运行程序,点击打开,选择桌面上文本文档在,其路径为:C:\Documents and Settings\Administrator\桌面\新建 文本文档.txt (如图3.3),其内容为12。 图3.3 文本文档的路径 13 在程序上的显示,如图3.4所示。 图 3.4文本文档内容的显示 通过对文本文档的操作,文本文档的信息正确的显示在了数据的输入端,这说明此功能正确实现。 3.3.3 仿真程序的整体运行与测试 下面是对仿真程序进行的整体测试,以下测试的生成多项式都是以CRC_8=107H、数据以12为例来进行整体测试。 首先,数据12的编码如图3.5所示。 图3.5 数据12的编码过程 14 数据12的解码如图3.6所示。 图 3.6 数据12的解码过程 其次,在传输端有三种处理方式,它们是:无差错传输、随机一位差错传输、随机 两位差错传输。下面是详细的测试结果。 1) 无差错传输的测试 在数据输入端输入数据12,在传输端选择无差错传输,点击发送按钮,则 接收端正确无误的接收到发送端发送的数据。如图3.7所示。 图 3.7 数据12的无随机差错传输 15 在无差错的情况下,在发送端通过生成多项式107H所产生的CRC校验码是72H,这和在手工操作下的编码结果是一致的,这说明无随机差错设计正确。 2) 随机一位差错测试 在数据输入端输入数据12,在传输端选择随机一位差错传输,点击发送按 钮,则接收端接收到的数据有了一位随机的差错,这时再将此数据进行CRC校 验时,其余数不为0,这也就说明了传输中出现了错误。此时在传输端的label 上则显示出左数第几位出现了错误。如图3.8所示。 图3.8 数据12的随机一位差错传输 在发送端发送的数据是313272H,经过一次出错处理后,数据改变成为 317272H。 由于 313272H=0 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0 0 1 1 1 0 0 1 0 B 317272H=0 0 1 1 0 0 0 1 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 0 B 由此可以看出,从左数第十位出现了错误,因此接收端报错。这也说明了随 机一位差错设计正确。 3) 随机两位差错测试 在数据输入端输入数据12,在传输端选择随机两位差错传输,点击发送按钮, 这时传输端将接收到的数据做随机两位出错,并将处理后的结果传送给接收端, 然后接收端再做一次CRC校验,此时若余数为0,则说明正确传输,若余数不 ,则说明在传输过程中出现错误。此时在传输端的label上显示出具体哪两为0 位出现了错误。如图3.9所示。 16 图3.9 数据12的随机两位差错传输 在发送端发送的数据是313272H,经过一次出错处理后,数据改变成为213072H。 由于 313272H=0 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0 0 1 1 1 0 0 1 0 B 213072H=0 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 0 1 1 1 0 0 1 0 B 由此可以看出,从左数第四位和第十五位出现了错误,因此接收端报错,这说明随 机两位差错设计正确。 17 第4章 海明码仿真程序设计 4.1 需求分析 为了解决CRC校验只能检错不能纠错的问题,海明码也就应运而生了。海明编码能纠正一位错误,在海明码的编码部分,对一个字节8(D8…D1)比特的信息添加四位冗余位(P1、P2、P3、P4),构成12比特的一个比特串,此比特串为: b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 P1 P2 D1 P3 D2 D3 D4 P4 D5 D6 D7 D8 将此比特串作为数据发送到数字信道端,在信道传输中,有三种情况处理方式:无差错传输、随机一位差错传输、随机两位差错传输。在这三种处理方式下生成一个新的12比特的比特串,并将其传送给接收端;在接收端接收到数据后,对数据进行解码操作,定义一个解码规则,如果数据在传输过程中出现错误,通过解码规则就能知道这个数据是在哪出现的错误,并将其纠正然后在接收端就接收到正确的信息。 4.2 系统设计与实现 本仿真程序设计与实现包括:发送端、数字信道端、接收端。通过发送端实现了海明编码,通过数字信道实现了对信息的处理,在接收端实现了纠正一位错误的操作。 4.2.1 发送端的设计与实现 在发送端实现了海明的编码,首先在输入数据的textbox文本框中,只能是0或者1,而且是小于等于8位的比特0或者1。倘若位数大于8位,且比特串中没有不适0或者1的比特位,则只取前8位的比特位来作为输入的数据;倘若位数大于8位且中间有不是0或者1的比特位,则将发送数据置为8个1;倘若位数小于等于8位且中间有不是0或者1的比特位,则将发送数据置为8个1;倘若位数小于等于8位且中间没有不是0或者1的比特位,这时在数据尾部补1直至够8比特位。判断在输入的数据中是否有不是0或者1的比特位的具体算法如下: private bool Isnumber(string ZNumber) { return System.Text.RegularExpressions.Regex.IsMatch(ZNumber, @"^[0-1]*$"); } 18 关于发送端的数据输入问题具体算法如下: private string CheckInNumber(string c, int len) { if (c.Length >= len) { c = c.Substring(0, len); if (!Isnumber(c)) { string k = "1"; while (k.Length < len) k += "1"; return k; } return c; } else { if (!Isnumber(c)) { string k = "1"; while (k.Length < len) k += "1"; return k; } else { while (c.Length < len) c += "1"; return c; } 19 } } 在完成了海明编码后,倘若想修改数据来继续检验,这时当删除数据输入端里的一位数时,其它所有显示信息的textbox内容全部清空,具体实现如下: private void textData_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Delete) { label3.Text = ""; textBoxSenderData.Text = ""; textBoxTransportData.Text= ""; textBoxCompare.Text = ""; textBox4.Text = ""; textBox5.Text = ""; } } 4.2.2数字信道端的设计及实现 数字信道端对从发送端发送来的数据进行处理,在这个仿真程序中,出错处理包括:无差错传输、随机一位差错传输、随机两位差错传输。在这个出错处理中我使用了随机函数,这个随机函数是用来随机产生一个数,而在随机一位差错中,这个数正是要出错的那一位,将此位的0改换成1,或者把1改换成0,形成新的数据,并将新数据发送给接收端,让接收端继续解码校验。这样就实现了数字信道的正确传输和出错传输。在随机一位差错中产生一个差错数的具体实现如下: System.Random ran = new Random(System.DateTime.Now.Millisecond); int Rankey = ran.Next(1,s.Trim().Length); 在随机两位差错中产生的两个差错数的具体实现如下: int Rankey, Rankey1; do { 20 System.Random ran = new Random(System.DateTime.Now.Millisecond); Rankey = ran.Next(0, s.Trim().Length - 1); Rankey1 = ran.Next(0, s.Trim().Length - 1); } while (Rankey == Rankey1); 在随机函数的作用下,实现了数字信道的这三种功能。 4.2.3接收端的设计与实现 接收端首先将数字信道传输的数据接收到自己这里,然后做一个处理,根据解码规则,也就是要首先求出S1、S2、S3、S4,其中S1= b1^ b3^ b5^b7^ b9^b11,S2= b2^ b3^ b6^b7^ b10^b11 S3=b4^b5^ b6^b7^ b12,S4= b8^ b9^ b10^b11^ b12。然后通过判断S1、S2、S3、S4的值来确定是无错还是具体哪一位错误,最后将这位数据改正,最后输出正确的解码结果。 如: S4=0 S3=0 S2=0 S1=0 无 错 S4=0 S3=0 S2=0 S1=1 b1 错 S4=0 S3=0 S2=1 S1=0 b2 错 S4=0 S3=0 S2=1 S1=1 b3 错 S4=0 S3=1 S2=0 S1=0 b4 错 S4=0 S3=1 S2=0 S1=1 b5 错 S4=0 S3=1 S2=1 S1=0 b6 错 S4=0 S3=1 S2=1 S1=1 b7 错 S4=1 S3=0 S2=0 S1=0 b8 错 S4=1 S3=0 S2=0 S1=1 b9 错 S4=1 S3=0 S2=1 S1=0 b10 错 S4=1 S3=0 S2=1 S1=1 b11 错 S4=0 S3=0 S2=0 S1=1 b12 错 通过这4位数据的值就能知道具体哪一位出现了错误,然后将出错的位数纠正,最后在数据接收端把冗余码去掉,输出正确的8位数据,这8位数据应该和输入的数据一致。在接收端主要是实现错误的处理,我在具体实现时使用了if-else语句,虽然有点繁琐,但是还是实现了上面的13种情况,顺利的达到了预期的目的。 21 4.3 系统运行与测试 根据本程序的设计要求和需求分析,我成功的搭建出来了主程序界面,并在相应的空间上添加了具体的代码,程序运行正确且达到了预期的效果。以下是我对各个模块进行的运行与测试,以便更加具体的说明程序的完整性和准确性。 4.3.1主程序界面的运行与测试 首先是海明码校验仿真程序的主程序界面设计,如图4.1所示。 图 4.1 海明码主程序界面的设计 在对相应的控件进行详细编码后,海明码仿真程序就能正确的运行并处理输入的相关信息了。在启动登录时,数字信道默认选择无差错传输,倘若你想测试随机一位差错或者随机两位差错,则做相应的选择即可。海明码的运行界面如图4.2所示。 图 4.2 海明码仿真程序的运行界面 22 4.3.2发送端的运行与测试 在发送端输入一个正确的8比特数据后,接着求出这8位数据的冗余码,即求出P1、P2、P3、P4,然后将这4位冗余码插入到新生成的12位数据中,如下形式:P1、P2、D1、P3、D2、D3、D4、P4、D5、D6、D7、D8。这个12位的数据就是要求的海明码,并且这12位数据与b1--b12相对应,其中P1= b3^ b5^b7^ b9^b11,P2= b3^ b6^b7^ b10^b11,P3= b5^ b6^b7^ b12,P4= b9^ b10^b11^ b12。因此发送的海明码是:P1P2D1P3D2D3D4P4D5D6D7D8(也就是b1 b2 b3 b4 b5 b6b7 b8 b9b10 b11 b12)。在输入的数据确定后,点击编码按钮,这时就会生成带冗余码的海明码。下面输入的数据都以10101010为例来进行测试。如图4.3所示。 图 4.3编码过程 4.3.3接收端的运行于测试 接收端接收到从数字信道处理的程序后,在解码规则的作用下,就能计算出来在传输过程中是否出现了差错,若出现了一位差错,则在接收端将其纠正,并接收到正确的结果并显示在接收数据端,若出现了两位错,则就不能正确的接收到发送端发送的数据。如图4.4所示。 23 图 4.4 解码过程 4.3.4仿真程序的整体运行与测试 首先,我们应该了解和掌握海明码的纠错方法,如图4.5所示。 图 4.5 海明码的纠错方法 通过定义的编码和解码规则,这样就实现了海明码仿真程序的设计。在知道海明码的纠错方法和编码解码规则以后,接下来就是要实现发送端、数字信道、接收端的设计并运行和测试其正确性。 在输入端输入数据10101010后,我们在数字信道端也有三种选择,它们是:无差错传输、随机一位差错传输、随机两位差错传输。以下就是对整个程序在这三种情况下的运行与测试。 1) 无差错传输 在数字信道中数据正确的传输,没有错误发生。如图4.6所示。 24 图 4.6无差错传输 2) 随机一位差错 在数字信道中选择随机一位差错,这时数字信道接收到发送端发来的数据后,随机生成一个数,这个数也就是要出错的那一位。这时接收端也报错,并在数字信道端的label上显示出第几位出错的信息。如图4.7所示。 图4.7随机一位差错传输 25 然而 源端的海明码是:0 0 0 1 1 0 1 0 0 1 0 1 经过处理后的是:0 0 0 0 1 0 1 0 0 1 0 1 由此可以看出左数第四位出现了错误,这也说明了该仿真程序对于随机一位差错的设计和实现是正确的。 3) 随机两位差错 在数字信道中选择随机两位差错,这时在接收到发送端发来的数据后,同时 产生两个不同的随机数,这两个数也就是要出错的那两位。接收端通过编码 的计算也会报错,这首数字信道的label上会显示具体哪两位出现了错误。 如图4.8所示。 图 4.8随机两位差错传输 然而 源端的海明码是:0 0 0 1 1 0 1 0 0 1 0 1 经过处理后的是:0 0 0 1 0 0 1 0 1 1 0 1 由此可以看出左数第5位和左数第9位出现了错误,在接收端也报出了错误,而这时是不能纠错的,而且通过编写的纠错方法得到的结果和发送端的不一致,因为海明码只能纠正一位差错,因此随机两位差错的设计和实现也是正确的。 26 第5章 数字信道仿真程序设计 5.1 需求分析 数字信道仿真是对数字信道透明化的具体体现,在数字信道仿真中,首先定义一个连续发送数据的发送端,一个对发送的信息的处理端,然后将处理好的信息发送到数字信道上做处理,然后将处理后的发给接收端,这时在接收端有如下操作,如果在接收端发现传输错误,则接收端给发送端一个重发信号,让发送端重发刚才那一帧信息,如果接收端发现信息帧丢失,则接收端也给发送端一个重发信号,让发送端重传信息,如果接收端发现信息帧超时,同样让发送端重传该帧,只有在接收端正确接收到该帧信息后,这时接收端给发送端一个发下一帧的信号,然后就来接收下一帧的信息。 5.2 系统的设计与实现 数字信道仿真程序在点击通信按钮后,首先将要发送的信息链成一个队,依次发送每一个信息,发送下一个信息的信号是接收端正确接收该帧信息后。 5.2.1 发送端的设计与实现 在发送端发送的数据都要给其加上一个带四位信息的头,以便下一步对该信息的处理。并且在发送信息端,信息是一个一个进行处理的,在等到接收端发来的正确接收信号后,发送端就发送下一个数据,如果是信息帧出错、超时、丢失则都还继续发送该帧信息。具体实现如下: private void Senda() { int i; List mylist = new List(); byte an1 = new byte(); an1 = 0xFF; byte an2 = new byte(); n2 = 0xFF; a byte an3 = new byte(); an3 = 0xFF; 27 byte an4 = new byte(); an4 = 0xFF; byte an5 = new byte(); for (i = 0; i < 26; ) { an5 = Convert.ToByte(i + 65); //发送 A -- Z ; mylist.Add(an1); mylist.Add(an2); mylist.Add(an3); mylist.Add(an4); mylist.Add(an5); SendQ(mylist);//调用SendQ函数,把mylist传送过去。 mylist.Clear(); if (Flag == 2) { i++; if (i == 26) break; } else// if(Flag==1)//flag==1 { } } Flag = 0; } 当标志Flag=0时,点击通讯按钮就可以连续发送数据,Flag=1时,这时说明在传输过程中出现了信息帧的丢失、超时和出错,然后重发该信息帧,Flag=2时,说明该帧信息已经在接收端正确接收,继续发下一帧信息。 5.2.2 数字信道的设计与实现 将封装好的信息帧传送到数字信道处理端,在这里主要是对信息帧的处理,信息帧在数字信道端会有四种情况,它们是:信息帧丢失、信息帧超时、信息帧出错、信息帧正确传输。通过对发送端信息帧的处理,实现了数字信道在两主机通信中的 28 作用。在这个设计中,我选择了从1到6这6个数,并且每一个数都代着一种数字信道的处理情况,如:1代表正确传输,2代表出错等等。这样在开始时我在1到6中随机产生一个数,接下来选择该数字对应的操作,如果超时或者丢失,就让发送端重发该信息帧,如果出错和正确则把信息帧发送给接收端, 在接收端进行处理。主要代码如下: 首先,选择一个操作,用随机函数实现。 int Rankey; do { System.Random ran = new Random(); Rankey = ran.Next(1, 7); } while (Rankey == CheckRandKey); CheckRandKey = Rankey;//保证下一次选的和这次的数不相同 然后用switch—case语句来实现相关操作。 Switch(Rankey) { Case 1: //正确传输 Break; Case 2: //出错 Break; Case 3: //丢失 Break; Case4: //超时 Break; Case 5: //正确传输 Break; Case 6: //出错 Break; } 29 5.2.3接收端的设计与实现 在接收端接收到数字信道发送来的信息后,检查信息是否出现了差错,若出现了差错则接收端给发送端一个信号,让发送端重传该帧,若接收端正确接收信息,则接收端给发送端一个发送下一帧的信号,这时发送端发送下一帧给数字信道,而接收端则等待接收下一帧信息。 5.3系统运行与测试 根据系统的设计与实现,我成功的搭建出来了我所要求的界面,并在相应的位置添加了代码,实现了我所要求的内容,下面是我对具体模块的运行与测试。 5.3.1主程序界面的运行与测试 根据需求分析以及设计的要求,主程序的界面如图5.1所示。 图5.1 数字信道仿真主程序界面 根据界面设计在相应的控件上添加完整的代码,这样就实现了数字信道的仿 30 真。如图5.2所示,数字信道仿真程序的运行界面。 图 5.2 数字信道仿真程序的运行界面 5.3.2仿真程序的整体运行测试 数字信道仿真程序的具体实现过程:首先将要发送的信息封装成要求的数据帧格式的形式,然后将其发送给数字信道,数字信道接收到数据帧后,通过选择的出错处理方式来对数据帧进行处理,然后将处理后的数据帧发送给接收端,接收端将其信息字段再做一次CRC的校验,看其是否在传输中出现差错,若出现差错,发送端立即重新传该帧,且将出错的信息显示在ListView上;若正确,则将准确的信息业显示在ListView上;若在信道中出现了超时,则此时信道给发送端一个回应,让其重传该帧;若在信道中出现了丢失,则信道也给发送端一个重发信息的回应,这时发送端将重新发送该数据帧,直道这一个数据帧正确被接收端接收到,此时接收端给发送端的回应是让发送端发送下一个数据帧。这样就很好的仿真了数字信道的作用。该仿真程序的测试数据包括两个方面,一个是用于自测试的数据,另一个是传输的数据,自测试的数据是数字0到9,传输的数据是A到Z。下面是具体的测 31 试。 1) 自测试数据的运行和测试 在运行界面上找到自测试按钮,点击按钮后就会在listview就显示出数 据0到9通过信道处理的信息。在运行程序时,默认数据帧的丢失、差错、 超时和正确传输是同时存在的。如图5.3所示。 图 5.3 自测试数据(0到9)的数字信道仿真结果 2) 传输数据的运行和测试 在运行界面上点击通信按钮,发送端就连续的发送数据A到Z,数字信 道对每发过来的信息进行一个处理,然后接收端接收处理后的信息,若接收 端正确收到数据,则发送下一个数据,若出现丢失、差错和出错,则一直发 送该数据,直到数据成功被接收端接收。如图5.4所示。 32 图 5.4 传输数据(A到Z)的数字信道仿真结果 3) 复位 在程序运行界面点击复位按钮,这时将listview的内容清空,如果点击通信的次数很多,这时listview的内容就很多,假如想看别的数据的仿真结果会很麻烦,所有在点击了此按钮后将listview的内容清空,这样计数就从新开始,想看的仿真结果页一目了然。 33 第6章 结 论 虽然我是一名计算机科学与技术专业的同学,但是在做毕业设计时我还是毅然决然的选择了计算机网络方面的毕业设计。首先我比较喜欢计算机网络,也想通过这次的毕业设计加深对计算机网络的了解,为今后的工作打下一个基础。 我的毕业设计所涉及的就是计算机网络原理仿真程序的设计,其中包括:CRC校验仿真程序、海明码仿真程序、数字信道仿真程序。在设计初期,在老师的帮助下我完成了基本界面的搭建和界面设计,通过和老师的多次接触,最后选择了C#语言来完成我的这次毕业设计。 在完成这三个项目中,我碰到了很多的问题,比如,在CRC校验和海明码的仿真程序中都有随机差错的问题,对于这个随机差错不知道如何解决,后来经过和老师以及同学的探讨,最后使用随机函数来实现随机差错的处理;在海明码的数据输入端,所要输入的数据不能有不是0或者1的数出现,因此在判断输入的数据是不是0或者1时,用到了正则表达式,一段简单的代码就解决了困扰我很久的问题。我所完成的这三个小程序和网络协议密切相关,这也让我更加深入的理解了网络的协议,通过这三个小程序的设计,不仅让我的编程能力有所提高,而且还让我多次的体验到从理论到实际中的艰难。 通过这次的毕业设计,让我深切的体会到了计算机网络的重要性,网络知识虽说多而杂,但是想要精通网络,也并非难事,只要仔仔细细、认认真真的从一点一滴学起,就一定能有所得。 34 参考文献 [1] 王新梅,肖国镇.纠错码,原理与方法[M].西安:西安电子科技大学出版社,2001 [2] 罗伟雄,韩力,原东昌,丁志杰 .通信原理与电路[M].北京:北京理工大学出版社,1999 [3] 王仲文.ARQ编码通信[M].北京:机械工业出版社,1991 [4] 吴功宜,吴英.计算机网络教程[M] .北京:电子工业出版社 .2003. [5] 谢希仁.计算机网络[M].北京:电子工业出版,社2003 [6]王群. 计算机网络教程[M]. 清华大学出版社. 2005.12 [7] 谢希仁.计算机网络简明教程[M]. 北京:电子工业出版,社2003 [8] 胡伏湘,邓文达. 计算机网络技术教程[M].北京:清华大学出版社, 2007 [9] 钟勤. 计算机网络基础与应用[M]. 重庆:重庆大学出版社, 2009 [10] 肖金立. 现代计算机网络技术[M]. 北京:电子工业出版社. 2002 [11] 宋一兵. 计算机网络基础与应用[M].北京:人民邮电出版社,2010 [12] 张曾科.计算机网络与通信[M]. 北京:机械工业出版社, 2009 [13] 韩希义. 计算机网络基础-第2版[M].北京: 高等教育出版社, 2009 [14] 郭秋萍. 计算机网络技术[M]. 北京:清华大学出版, 2008 [15] 王路群. 计算机网络基础及应用[M]. 北京:电子工业出版社, 2004 [16] 唐伟. 计算机网络实用技术[M]. 北京:电子工业出版社, 2004 [17] Ross Williams, A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS,1993 [18] Simp son, W. Editor, ―PPP in HDLC Framing‖, RFC1549,December 1993. [19] P. E. Boudreau,W. C. Bergman and D. R. lrvin,―Performance of a cyclic redundancy check and its interaction with a datascrambler‖, IBM J. RES. DEVELOP. VOL. 38 NO. 6, November 1994. [20] William Stallings, Computer Networking with Internet Protocols and Technology, Prentis Hall,2003 35
/
本文档为【计算机网络原理仿真程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索