信息工程专业课程实验指导书.docx
《信息工程专业课程实验指导书.docx》由会员分享,可在线阅读,更多相关《信息工程专业课程实验指导书.docx(34页珍藏版)》请在冰豆网上搜索。
信息工程专业课程实验指导书
信息工程专业课程实验指导书
一、《信息论与编码》课程实验指导书;
实验1Huffman编码(4学时)
一、实验目的
1.复习C++程序基本编写方法,熟悉VC编程环境。
2.会用VC调试Huffman编码程序。
二、实验内容
1.复习C++代码基本语法(结构体、树等数据结构定义)
2.根据Huffman编码源代码,学习算法实现流程,培养自己动手能力,在C++编译器下按步调试跟踪算法。
三、实验仪器、设备
1.计算机-系统最低配置256M内存、P4CPU。
2.C++编程软件-VisualC++7.0(MicrosoftVisualStudio2003)
VisualC++8.0(MicrosoftVisualStudio2005)
四、实验原理
1.Huffman编码原理:
①将信源符号按概率从大到小的顺序排列,令
p(x1)≥p(x2)≥…≥p(xn)
②给两个概率最小的信源符号p(xn-1)和p(xn)各分配一个码位“0”和“1”,将这两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,
结果得到一个只包含(n-1)个信源符号的新信源。
称为信源的第一次缩减信源,
用S1表示。
③将缩减信源S1的符号仍按概率从大到小顺序排列,重复步骤2,得到只含(n-2)个符号的缩减信源S2。
④重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号的概率之和必为1。
然后从最后一级缩减信源开始,依编码路径向前返回,就得到各
信源符号所对应的码字。
2.Huffman树的编码原理:
步骤1:
将各个符号及其出现频率分别作为不同的小二叉树(目前每棵树只有根节点)
步骤2:
在步骤1中得到的树林里找出频率值最小的两棵树,将他们分别作为左、右子树连成一棵大一些的二叉树,该二叉树的频率值设为两棵子树频率值
之和。
步骤3:
对上面得到的树林重复步骤2的做法,直到所有符号都连入树中为止。
五、实验步骤
1.VC环境下,建一个C++控制台应用程序,并把源代码考到该程序目录下。
2.项目文件中含有一个预编译头文件,一个主函数入口文件和Huffman编码算法文件。
3.在入口文件中,输入任一个离散信源进行编码调试。
4.设置好程序断点,仔细分析Huffman树每步的建立过程。
5.输出离散信源中每个符号的Huffman编码,并与手工运算的结果进行比较。
六、实验报告要求
1.按照实验一附3中实验报告样式书写本次实验报告。
2.总结C++语言学习心得,并结合Huffman编码实验总结自己的得失,指出今后自己要练习改进之处。
根据自己实验情况,对本实验写出建议。
七、实验注意事项
1.指针数据结构定义
typedefstruct
{
unsignedlongweight;
intparent,lchild,rchild;
}HTNode,*HuffmanTree;
typedefchar**HuffmanCode;//指向存放数组指针的数组即二维数组
2.二叉树生成操作放在数组中(节点n和数组大小m关系为:
m=2*n-1)。
每次在树中找到两颗最小子树,其函数为Select(HuffmanTreeHT,intn,int*s1,int
*s2),实际实现的是在数组中找到最小两个元素。
另外注意C++的数组起始索引是0,Matlab起始索引是1;程序中为了方便从1开始索引数组,HT[0].weight
的大小设为0xffffffffL。
为了输出二进制Huffman码,程序最后对每个符号进行深度优先搜索,得到该符号的二进制字符,然后进行字符串拷贝,直到最后输出。
实验二CRC校验码编码实验(4学时)
一、实验目的
1.学习CRC编码基本流程,学会调试循环冗余校验码编码程序。
2.掌握CRC校验码的编码原理,重点掌握按字节(Byte)编码方法。
二、实验内容
1.根据实验原理掌握CRC校验码编码/解码基本流程。
2.在C++编译器下能够调试编码算法每一个步骤,重点掌握按字节编码的过程。
三、实验仪器、设备
1.计算机-系统最低配置256M内存、P4CPU。
2.C++编程软件-VisualC++7.0(MicrosoftVisualStudio2003)
VisualC++8.0(MicrosoftVisualStudio2005)
四、实验原理
1.CRC校验码介绍
CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。
在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。
16位的CRC码产生的规则是先将要发送的二进制序列数左移16位(乘以216)后,再除以一个多项式,最后所得到的余数既是CRC码。
求CRC码所采用模2加减运算法则,既是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。
接收方将接收到的二进制序列数(包括信息码和CRC码)除以多项式,如果余数为0,则说明传输中无错误发生,否则说明传输有误。
2.按位计算CRC
一个二进制序列数可以表示为
求此二进制序列数的CRC码时,先乘以216后(左移16位),再除以多项式G(X),
所得的余数就是所要求的CRC码。
可以设:
其中Qn(X)为整数,Rn(X)为16位二进制余数,将上式代入前式得:
再设:
其中Qn-1(X)为整数,Rn-1(X)为16位二进制余数,继续代入前式,多次迭代得到:
根据CRC的定义,很显然,十六位二进制数R0(X)即是要求的CRC码。
3.按字节计算CRC
对于一个二进制序列数可以按字节表示为下式,其中Bn(X)为一个字节(共8
位):
求此二进制序列数的CRC码时,先乘以216后(左移16位),再除以多项式G(X),所得的余数即是所要求的CRC码。
可以设:
其中Qn(X)为整数,Rn(X)为16位二进制余数,将上式代入前式得:
由于:
其中RnH8(X)是Rn(X)的高八位,RnL8(X)是Rn(X)的低八位,代入前式得到:
显然,十六位二进制数R0(X)即是要求的CRC码。
五、实验步骤
项目文件建立步骤同实验二,下面列出对给定字符串CRC校验主要步骤:
步骤1:
从主函数入口输入一个字符串,并且确定按字节32位CRC校验编码,编码多项式采用CCITT标准形式多项式。
步骤2:
调用编码函数,依次读入字符串每个自己,进行模2除法运算。
步骤3:
将原来字符串左移32位,将除法最后的余式追加到字符串的后32位中去,得到该字符串CRC校验编码结果。
步骤4:
如果要解码,首先确认编码多项式,然后将接收字符串除以编码多项式。
如果能够整除,说明字符串在传输或存储中没有发生错误;否则,表明字
符串在传输或存储中产生错误,导致CRC校验失败。
六、实验报告要求
1.按照实验一附3中实验报告样式提交本次实验报告。
2.要求写出CRC校验编码学习心得,最好是能够结合硬件设计谈一下校验编码的设计体会。
根据自己实验情况,写出自己的做实验中遇到的具体问题,对本实验提出建议。
七、实验注意事项
1.几个重要概念在实验前一定搞清楚:
1)模2加减法=异或(XOR)。
2)多项式的表示方法。
3)CRC校验的基本理论
a可以参考前面文中的推导。
b自己通过一个除法运算推导。
4)常用的两种方法:
aBit长度运算
bByte长度运算(可以将字节除法余式表保存下来,通过查表,计算比较快)
2.程序设计时注意内容:
1)注意检查字节输入顺序与多项式的关系
a高字节前,低字节后,采用通常理论推导公式编写程序。
b低字节前,高字节后,采用向右移位方式。
(这是数据通信中常用方式,多项式采用反转多项式,添加余式时注意低位在前,高位在后)
2)注意寄存器初始值选择
CCITT和CRC32如果用在通信中,常采用初始值为0xffff或0xffffffffL,可以开始纠正数字通信中几个bit连续为0的情况。
为保持其输出和采用初始值为
0xffff或0xffffffffL一致,最后CRC校验值要与0xffff或0xffffffffL进行异或运算(XOR)得到最终CRC校验码。
实验三典型信道容量计算方法实现
[实验目的]
掌握用递推算法计算典型信道的容量的方法。
[实验学时]
2学时
[实验准备]
1.熟悉二进信道的概率转移矩阵表示,掌握信道容量的递推算法,设计用递推算法计算二进信道容量的数据结构和算法;
2.编写用递推算法计算二进信道容量的书面程序代码。
[实验内容及步骤]
用递推算法计算二进信道的容量
说明:
(1)构造各种二进信道的概率转移矩阵;
(2)用递推算法计算各种二进信道的容量;
(3)不断调整误差精度对系统进行测试,并进行对比分析;
(4)编写本次实验的实验报告。
二、《信息网络系统》课程实验指导书;
实验一 网络简单观察实验
一、实验目的
1.观察了解网卡、线缆、集线器等设备;
2.了解WINDOWS中的网络组成及参数;
3.了解通过TCP/IP协议连接上网的方法;
4.了解Ethereal软件的作用,以及利用Ethereal软件捕获、查看网络数据包的方法。
二、原理概述
Ethereal是一个免费的网络协议分析软件,支持Linux、Windows等多种平台。
由于网络上产生的数据包很多,通常我们只对其中一部分数据包感兴趣,因此在捕捉具体的数据包之前需要定义一个过滤器(filter),以滤除不需要的信息。
一个过滤器实质上是一组规则,只有收到的数据满足规则时才保存,否则丢弃。
过滤器通常可以是多个规则的逻辑组合。
在Ethereal中捕捉数据包前,首先要选择要监听的接口。
点击菜单中“Capture”“Interface”,此处选择接口“NDIS5Driver”。
在捕捉前还要设置一些参数,如过滤器。
点击“prepare”,出现设置窗口,在“CaptureFilter”一栏中填写感兴趣的数据包对应规则(见使用手册)。
点击“Start”按钮开始捕捉。
打开浏览器访问一些站点后,然后关闭浏览器,最后点击“Stop”按钮,结束数据包的捕捉。
所有捕捉的数据包都显示在主窗口中。
窗口中上面的列表框为所有捕获数据包(帧)的列表,记录了这些数据包的捕获时间、来源、目的地、协议等信息。
中间的文本框为当前选中的捕获帧经Ethereal解释后的协议信息。
屏幕最下面的窗口中以二进制形式显示当前选中的数据包的原始内容。
如果需要保存所捕获的数据,可选择菜单“File”中的“Saveas…”进行保存。
Ethereal支持多种文件格式。
三、实验内容
1.了解网卡的配置情况;
2.了解对等网的相关数据;
3.了解TCP/IP协议的相关参数配置;
4.阅读Ethereal软件的相关使用手册。
四、实验方法
1.实验原理
计算机1
计算机2
以太网交换机
计算机3
本实验是是在实验室的基于WINDOWS的网络上,观察网络的硬件软件,和相关的网络参数,并可以进行进一步的上网和共享硬盘等网络应用。
见下图。
2.实验步骤
步骤1:
实验前准备
在实验前已经建立计算机网络,并已经设定好网络设备参数及相关协议,如:
TCP/IP等。
步骤2:
读取网络相关数据
●网络组件
打开计算机电源,启动WINDOWS操作系统,右击“我的电脑”“属性”“硬件”“设备管理器”“网络适配器”的顺序,了解网卡类型、中断请求、内存范围、输入输出范围的参数。
●网络协议
按“控制面板”“网络和Internet连接”“网络连接”“本地连接”“属性”的顺序,了解“已安装的网络组件”中的协议,并读出TCP/IP协议的设置参数(IP地址、子网掩码、网关、DNS配置等)。
步骤3:
计算机标识
右击“我的电脑”“属性”,了解计算机名称、工作组等数据。
步骤4:
上网及共享数据
◆使用IE浏览器上网,URL地址:
HTTP:
//;
◆使用“网上邻居”,观看相邻计算机。
步骤5:
试运行Ethereal软件
1)查看本主机的IP地址
2)启动Ethereal,设置过滤器
(1)在桌面或开始菜单中选择Ethereal图标,双击运行。
(2)选择菜单“Capture”→“Interfaces...”→“prepare”。
(3)在“Interface”下拉列表框里选中要监视的本地网络适配器。
(4)设置包捕捉过滤器为“host(本主机的IP地址)”,例如:
若IP地址为192.168.0.1,则设置包捕捉过滤器为“host192.168.0.1”
(5)点击“Start”按钮开始捕捉数据包。
(6)打开浏览器,在地址栏中输入“
(7)点击“Stop”按钮停止数据包捕捉。
3)查看并保存所捕获的数据包
(1)在Ethereal软件中查看所有窗口显示的内容;
(2)双击最上面的窗口中的一栏。
观察中间窗口中的有关显示;
(3)在最下面的窗口中查看捕获的数据包中的原始数据;
(4)选择菜单“File”→“Saveas”,将有关数据保存在文件中。
4)设置过滤器,记录主机在浏览网页过程中产生的所有HTTP数据包
(1)设置包捕捉过滤器为“tcpport808”或者“tcpport80”
(2)点击“Start”按钮开始捕捉数据包。
(3)打开浏览器,在地址栏中输入
(4)点击“Stop”按钮停止数据包捕捉。
5)查看并保存所捕获的数据包
(1)在Ethereal软件中查看所有窗口显示的内容,比较此次捕获的数据和上述数据有何不同;
(2)选择菜单“File”→“Saveas”,将有关数据保存在文件中。
五、实验报告要求
1.记录实验步骤2和步骤3中观察到的相关数据;
2.记录实验步骤5中两次捕获数据包的数量及有关类型;按时间次序记录所有数据包的有关信息,如source、destination、protocol以及info等各字段信息。
实验二物理层和数据链路层
一、实验目的
1.了解以太网协议
2.利用Ethereal软件观察以太帧的结构
二、原理概述
以太网(Ethernet)是现有局域网采用的最通用的通信协议标准。
Xerox、DEC和Intel公司与1980年联合起草了以太网标准,并于1982年发表了第2版的以太网标准(EthernetII)。
1985年,IEEE802委员会吸收以太网为IEEE802.3标准。
以太网为广播网络,采用CSMA/CD(载波监听多路访问/碰撞检测)技术来解决信道共享问题。
EthernetII帧格式如图2.1所示。
不及前导、帧起始及校验字节,以太帧长最大为1514字节,其中数据部分最大为1500字节。
以太帧最短为64字节,不足部分填充0。
7字节1字节6字节6字节2字节1~1500字节0~46字节4字节
前导
帧起始
目的地址
源地址
类型
数据
填充
CRC校验
图2.1以太帧格式
以太帧头为14字节,包括6字节目的地址、6字节源地址和2字节类型。
以太网地址(即MAC地址)用于唯一地表示网络设备。
MAC地址48位6个字节,常用冒号隔开的十六进制来表示,如00:
d0:
f8:
38:
a2:
06,其中前24位生产厂商代码。
如果MAC地址全部为1,则表示广播地址。
正常情况下,当网络设备监听到目的MAC地址是自己需要的数据帧或广播帧时,就会接收该帧,否则丢弃。
以太帧中2字节类型域表示封装的上层数据协议类型。
如IP协议为“0800”。
三、实验内容
利用Ethereal来观察ping命令中产生的以太数据帧的结构。
四、实验步骤
1.查看本主机的IP地址
2.启动Ethereal,设置过滤器
1)在本主机的桌面或开始菜单中选择Ethereal图标,双击运行。
2)选择菜单“Capture”→“Interfaces...”→“prepare”。
3)在“Interface”下拉列表框里选中要监视的本地网络适配器。
4)设置包捕捉过滤器为“host(本主机的IP地址)”,例如:
若IP地址为192.168.0.1,则设置包捕捉过滤器为“host192.168.0.1”
5)点击“Start”按钮开始捕捉数据包。
3.在本主机上用ping命令访问另一台主机
在本主机的命令窗口下输入:
ping(另一台主机的IP地址)
例如:
ping192.168.200.100
4.停止数据包捕捉
点击Etherreal的捕捉窗口中的“Stop”按钮。
5.查看捕获的数据包
1)在Ethereal中查看所有的窗口显示内容。
2)查看以太帧中目的地址和源地址。
3)查看捕获的以太帧中“类型”的字段有哪些。
4)保存捕获结果。
五、实验报告要求
记录ping命令中产生的以太帧及其类型。
六、思考
1.网络上传输的数据字节次序和本地计算机中数据一样吗?
观察以太帧中地址是如何传送的(最高字节先发送还是后发送)?
2.以太帧中有7个字节的前导、1个字节的起始帧字节和4个字节的校验字节,而在Ethereal捕获的数据帧有这几项吗?
3.以太帧中最短帧长是多大,最大帧长为多大?
在以太帧中填充域的作用是什么?
4.在全世界范围内,任何机器是否需要一个唯一的MAC地址?
5.以太网中发送数据产生冲突时,如何解决?
查看Ethereal中接口上发送数据的统计信息。
6.以太帧上运行的协议有哪些?
实验三网络层
一、实验目的
1.了解IP协议。
2.了解ICMP协议及其作用。
二、原理概述
1.IP协议
IP(InternetProtocol)协议是TCP/IP协议族的核心组成部分,是目前应用最广的网络互联协议。
IP层对应于ISO/OSI七层参考模型中的网络层。
通过IP数据包和IP地址屏蔽掉了不同的物理网络(如以太网、令牌环网等)的帧格式、地址格式等各种底层物理网络细节,使得各种物理网络的差异性对上层协议不复存在,从而使网络互联成为可能。
IP协议只提供了不可靠的数据包传送服务,不能保证数据正确到达目的。
在IP网络中,每个通信节点有一个唯一的32位地址,通常记成点分十进制形式(如192.168.0.1)。
地址分为两部分,网络号和主机号,网络号的长度通常用子网掩码来确定。
每个主机都属于一个网络。
在IP网络上通信是通过分组交换方式完成的,即通过不同的路由器来实现转发,最后发送到目标主机所在网络上。
在转发过程中,链路层协议以及链路层每帧能够发送的最长数据可能不一致,路由器必须处理这些差异。
2.ICMP协议
ICMP协议用于IP主机和路由器之间传递控制消息,如指主机是否可达、路由是否可用等消息。
这些控制消息不传输用户数据,而用于报告用户数据传递情况。
ICMP报文分为两种类型,即ICMP差错报文和ICMP询问报文。
三、实验内容
1.利用Ethereal来观察ping命令中产生的IP及ICMP数据。
2.利用Ethereal来观察ping一个不存在的网络地址时产生的IP及ICMP数据。
3.利用ping发送长度为5000的数据来观察IP分段。
四、实验步骤
1.查看本主机的IP地址
2.启动Ethereal,设置过滤器,开始捕捉
(1)在本主机桌面或开始菜单中选择Ethereal图标,双击运行。
(2)选择菜单“Capture”→“Interfaces...”→“prepare”。
(3)在“Interface”下拉列表框里选中要监视的本地网络适配器。
(4)设置包捕捉过滤器为“icmp”。
(5)点击“Start”按钮开始捕捉数据包。
3.在本主机上用ping命令访问另一台主机
在本主机的命令窗口输入:
ping(另一台主机的IP地址)
例如:
ping192.168.200.100
4.停止数据包捕捉
点击Etherreal的捕捉窗口中的“Stop”按钮。
5.查看捕获的数据包
(1)在Ethereal中查看ping产生的IP、ICMP数据。
(2)查看IP各个分组中的头部长度、总长度、协议(protocol)字段、序号(identification)、TTL值、flags及offset等字段。
注意序号、TTL等的变化。
(3)查看ICMP报文中的类型(type)、代码(code)、identification以及sequencenumber等字段。
注意上述序号和IP分组中的实际序号不同。
(4)保存捕获结果。
6.捕捉ping一个不存在的主机100.0.0.1时产生的数据包
(1)设置包捕捉过滤器为“icmp”。
(2)开始捕捉
(3)在本主机的命令窗口上输入:
ping100.0.0.1
(4)停止数据包捕捉
点击Ethereal的捕捉窗口中的“Stop”按钮。
(5)查看捕获的数据包
观察当主机不存在时ICMP的Echo请求和返回的报文。
(6)保存有关结果
7.观察IP分段
(1)设置包捕捉过滤器为“icmp”。
(2)开始捕捉
(3)在本主机的命令窗口下输入:
ping–l5000192.168.0.1
其中,-l是指echo请求时发送数据大小,默认为32字节。
此处选择5000个字节(注意,以太网帧的数据最大为1500)。
(4)停止数据包捕捉
点击Ethereal的捕捉窗口中的“Stop”按钮。
(5)查看捕获的数据包
观察一个大的IP分组分解成的多个小段。
观察这些的序号、flags、offset、checksum等字段。
(6)保存有关结果
五、实验报告要求
1.记录ping命令中产生的IP分组结构。
2.记录ping命令中产生的ICMP报文结构(包括echo请求及echo应答)。
3.记录实验中大的IP分组分段结构。
六、思考
1.IP分组中TTL字段是什么意思,有何作用?
利用Ethereal观察ping互联网上一台主机时TTL字段如何变化?
2.IP分组最大有多大?
为什么在一个具有小的MUT链路层上传输大的IP分组要分段?
IP分组中哪些字段与分段有关?
接收方如何确定哪些分段属于同一个IP分组?
分组中的校验和是整个段的还是整个IP分组的?
3.IP协议能保证接收方收到发送方所有的IP分组吗?
4.ping命令中主要发送了哪些ICMP报文?
5.ICMP报文中的“identification”和“sequencenumber”有什么作用?
利用E