《工业计算机网络与通信》实验一二09.docx

上传人:b****3 文档编号:4424884 上传时间:2022-12-01 格式:DOCX 页数:16 大小:261.91KB
下载 相关 举报
《工业计算机网络与通信》实验一二09.docx_第1页
第1页 / 共16页
《工业计算机网络与通信》实验一二09.docx_第2页
第2页 / 共16页
《工业计算机网络与通信》实验一二09.docx_第3页
第3页 / 共16页
《工业计算机网络与通信》实验一二09.docx_第4页
第4页 / 共16页
《工业计算机网络与通信》实验一二09.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

《工业计算机网络与通信》实验一二09.docx

《《工业计算机网络与通信》实验一二09.docx》由会员分享,可在线阅读,更多相关《《工业计算机网络与通信》实验一二09.docx(16页珍藏版)》请在冰豆网上搜索。

《工业计算机网络与通信》实验一二09.docx

《工业计算机网络与通信》实验一二09

 

《工业计算机网络与通信》

实验指导书

 

自动化学院控制工程系

编写:

李娟王巧玲

 

北京信息科技大学

2010年9月

实验一校验码的生成

一、实验目的

1.理解校验码的原理与校验过程;

2.掌握求和校验码的软件生成方法;

3.掌握CRC校验码的软件生成方法。

二、实验仪器及设备

1.PC机;

2.VisualC++6.0或TurboC3.0。

三、实验说明

1.CRC校验码(生成多项式取为CRC-16)

G(x)=x16+x15+x2+1,要求采用Modbus协议规定的CRC计算函数,参见附录1。

2.CRC校验码(生成多项式取为CRC-CCITT)

G(x)=x16+x12+x5+1,CRC码的计算可按下述三种算法之一进行:

1)按位计算CRC;2)按字节计算CRC;3)按半字节计算CRC。

1)按位计算CRC

算法步骤如下:

(1)令16位的CRC寄存器初值为0;

(2)取数据包的第1个8位字节(高字节);

(3)取当前字节的最高位;

(4)若CRC寄存器的最高位为1,则CRC寄存器的内容左移1位,最低位补0,然后与多项式值0x1021异或,得到新的CRC值;若CRC寄存器的最高位为0,则CRC寄存器的内容左移1位,得到新的CRC值;

(5)若当前字节的当前位为1,则CRC寄存器的内容与多项式值0x1021异或,得到新的CRC值;

(6)当前字节左移一位(即:

取当前字节的下1位);

(7)重复步骤4到6,直至当前字节的8位处理完;

(8)取数据包的下一字节;

(9)重复步骤3到8,直至所有字节被处理完;

关键算法:

计算本位后的CRC码等于上一位CRC码乘以2后除以多项式,所得的余数再加上本位值除以多项式所得的余数。

2)按字节计算CRC

关键算法:

计算本字节后的CRC码等于上一字节余式CRC码的低8位左移8位后,再加上上一字节CRC右移8位(也既取高8位)和本字节之和后查表所求得的CRC码。

3)按半字节计算CRC

关键算法:

计算本半字节后的CRC码等于上一字节CRC码的低12位左移4位后,再加上上一字节余式CRC右移12位(也既取高4位)和本半字节之和后查表所求得的CRC码。

按位计算CRC码的参考函数,及按字节、半字节计算的CRC码表参见附录一。

3.求和校验码

对数据包的内容累加求和,取累加和的低字节作为该数据包的求和校验码。

四、实验内容及步骤

(1)甲、乙两同学组成虚拟通讯小组,约定校验方式;

(2)要发送的数据序列包括6个字节,按发送的先后顺序依次为:

0x18,0x04,0x00,0x00,0x00,0x08。

(1)中规定的校验方式编程计算校验码,并按数据发送的先后顺序显示应发送的全部数据;

(3)甲、乙两同学分别任意设定欲发送数据序列,重新计算校验码,并交换应发送的全部码字作为接收数据,验证接收数据序列的正确性。

五、思考题与习题

1.甲、乙两同学计算出的校验码是否相同,如果不同,原因是什么?

2.串行通信中常用的差错校验方法还有哪些?

 

实验二基于PC的以太网通信实验

一、实验目的

1.熟悉以太网通信的基本参数配置;

2.掌握以太网交叉双绞线电缆的制作方法;

3.掌握网络协议分析的基本技术,深入理解以太网的协议格式、协议层次和应用数据封装过程。

二、实验仪器及设备

1.PC机;

2.五类双绞线电缆;

3.RJ45插头;

4.专用压线钳;

5.工具软件――网络协议分析仪Ethereal;

5.工具软件――以太网通信调试助手WizPortV2.5。

三、实验说明

1.网线

1)RJ-45连接器8根针脚的编号规定

RJ-45连接器包括一个插头和一个插孔(或插座)。

插孔安装在机器上,而插头和连接导线(现在最常用的就是采用无屏蔽双绞线的5类线)相连。

EIA/TIA制定的布线标准规定了8根针脚的编号。

如果看插孔,使针脚接触点在上方,那么最左边是①,最右边是⑧(见下图6.1(a))

如果看插头,将插头的末端面对眼睛,而且针脚的接触点在插头的下方,那么最左边是①,最右边是⑧(见下图6.1(b))。

(a)插孔(b)插头

图6.1RJ45连接器

在10Mbps和100Mbps以太网中只使用两对导线。

即使用下表中的4根针脚(1、2、3和6),1和2用于发送,3和6用于接收。

表6.1RJ45连接器的针脚定义

针脚1

发送

针脚2

发送

针脚3

接收

针脚4

不使用

针脚5

不使用

针脚6

接收

针脚7

不使用

针脚8

不使用

2)五类双绞线电缆与RJ45插头连接的规定

五类线缆内部包含4对双绞线,关于不同颜色的双绞线与RJ45插头针脚的连接,EIA/TIA-568标准规定了两种连接标准,即EIA/TIA-568A和EIA/TIA-568B。

这两种标准并没有实质上的差别,即:

1和2是一对线,而3和6又是一对线。

)在通常的工程实践中,T568B使用得较多。

这两种标准的连接方法如下图所示。

表6.2(a)T568A规定的连接方法

线颜色

白–绿

绿色

白–橙

蓝色

白–蓝

橙色

白–棕

棕色

线序

1

2

3

4

5

6

7

8

表6.2(b)T568B规定的连接方法

线颜色

白–橙

橙色

白–绿

蓝色

白–蓝

绿色

白–棕

棕色

线序

1

2

3

4

5

6

7

8

表中“白–绿”是指白色的外层上有些绿色,表示和绿色的是一对线;其它线对的确定方法类同。

注意:

线序是不能随意改动的。

3)将5类线电缆与RJ-45插头连接起来的具体操作步骤参见附录3。

2.PC机的TCP/IP属性设置

打开控制面板中的“网络连接”文件夹,打开该文件夹中的“本地连接”的属性对话框,在“常规”选项下,打开“Internet协议(TCP/IP)”的属性对话框,设置IP地址,显示界面如图6.2所示。

更新IP地址后,要将“本地连接”停用,然后再启用,使新设置的IP地址生效。

 

图6.2TCP/IP的属性设置

3.以太网通信调试助手WizPortV2.5

端口精灵WizPort是一个可以为工程技术人员调试以太网和串口带来方便的免费工具,支持WIN98/NT/2000。

它主要特点是:

①体积小,为一个348K的独立的可执行文件,无需安装,无需其它运行库或控件支持。

②在线修改串口的各种参数如端口号、波特率、数据位、停止位、校验方式以及RTS控制等。

③在线修改以太网的发送参数,如目的地址和端口号等。

软件支持以太网组播的发送和接收。

④灵活的数据显示控制,可以暂停、全屏显示报文或为显示报文打上时标;可以把显示的发送和接收报文保存为文本文件;可以对显示报文进行过滤。

⑤可以选择手动发送和定时自动发送。

软件的帮助中提供了建立到关闭一个端口的过程,以及常用快捷键说明。

Wizport的发送端口的参数设置界面如图6.3所示;接收端口只需设置端口号。

收发报文的显示窗口如图6.4所示。

图6.3wizport端口精灵发送端口的参数设置界面

图6.4wizport端口精灵的发送窗口

4.网络协议分析仪Ethereal

Ethereal是目前流行的开放源码的网络协议分析器,支持Linux和windows平台。

1998年发布最早的0.2版本,如今Ethereal已经支持五百多种协议解析。

网络分析系统首先依赖于一套捕捉网络数据包的函数库。

这套函数库工作在在网络分析系统模块的最底层。

作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。

从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。

Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包。

双击“Ethereal”图标,启动Ethereal,出现图6.5所示界面。

图6.5Ethereal主界面

点击Capture/Start菜单,出现选项设置界面,如图6.6所示。

在“Interface”框的下拉表中选择网卡接口;并将DisplayOptions下的三个选项全部选中。

最后点击OK按钮,被捕获的数据包将出现在Ethereal窗口中,如图6.7所示。

顶部视图显示每个网络分组的序号、时间戳、源和目的IP地址、协议类型和相应的描述项;中间视图显示选定分组的协议首部字段;底部视图是选定分组的十六进制显示区,在中间视图的协议树中选择一个字段,将高亮底部视图中对应的字节。

点击Capture/Stop,停止抓包。

保存数据包。

保存后的文件可用Ethereal打开。

 

图6.6Ethereal选项界面

 

图6.7Ethereal捕获的数据包

四、实验步骤

1.制作网线

准备好五类双绞线、RJ45插头和压线钳。

依据五类双绞线定义,RJ45定义。

制作双机点对点以太网交叉双绞线通信线缆,即:

将5类线电缆的两端各与一个RJ-45插头连接。

2.以太网的连接

用做好的网线连接两台PC机,构成独立的小型的以太网。

3.设置PC的以太网参数

甲、乙两同学分别设置以太网的其中一台PC机的TCP/IP参数;

4.测试网络的连通性

在DOS状态下,使用Ping命令测试网络的连通性。

5.启动Ethereal,监视以太网数据包

6.应用WizPort收发UDP数据包

打开WizPort的主界面,选择端口菜单中的新建命令,在弹出的对话框中选择以太网UDP报文接收端口设置项,然后设置UDP报文接收端口号(如:

1234),完成对UDP报文接收的设置。

回到WizPort的主界面,选择端口菜单中的新建命令,在弹出的对话框中选择以太网UDP报文发送端口设置项。

然后在UDP发送选项下,设置UDP报文发送的目的端口号,以及目标IP地址。

在发送报文选项下,编辑发送报文,完成发送UDP报文的设置。

7.协议分析

在Ethereal的顶部视图中选中一个报文分组,在底部视图中拷贝该报文,进行协议分析。

五、思考题与习题

1.以太网数据帧的封装分为哪几个层次?

其中UDP数据报的组成包括哪几部分?

2.是否可以将Modbus通信规约应用在以太网上?

 

附录1CRC校验码生成例程1

下述1~3中计算CRC码的生成多项式均选为CRC-CCITT:

G(x)=x16+x15+x2+1

1.按位计算CRC校验码

函数声明:

unsignedintcal_crc(unsignedchar*ptr,unsignedcharlen)

函数参数:

ptr――待发送数据序列存放起始地址指针;

len――待发送数据长度(字节数);

函数返回值:

16位的CRC校验码

unsignedintcal_crc(unsignedchar*ptr,unsignedcharlen)

{

unsignedchari;

unsignedintcrc=0;

while(len--!

=0)

{

for(i=0x80;i!

=0;i/=2)

{

if((crc&0x8000)!

=0)

{

crc*=2;

crc^=0x1021;

}/*余式CRC乘以2再求CRC*/

elsecrc*=2;

if((*ptr&i)!

=0)crc^=0x1021;/*再加上本位的CRC*/

}

ptr++;

}

return(crc);

}

2.按半字节计算CRC码表

数组crc_ta[16]中依次存放数据0x00~0x0f的CRC校验码,入下所示:

unsignedintcrc_ta[16]={0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,

0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef};

3.按字节计算CRC码表

数组crc_ta[256]中依次存放数据0x00~0xff的CRC校验码,如下所示:

unsignedintcrc_ta[256]={

0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0};/*CRC余式表*/

附录1MODBUSCRC校验码的生成函数

CRCGeneration

Example

Thefunctiontakestwoarguments:

unsignedchar*puchMsg;Apointertothemessagebuffercontaining

binarydatatobeusedforgeneratingtheCRC

unsignedshortusDataLen;Thequantityofbytesinthemessagebuffer.

ThefunctionreturnstheCRCasatypeunsignedshort.

CRCGenerationFunction

unsignedshortCRC16(puchMsg,usDataLen)

unsignedchar*puchMsg;/*messagetocalculateCRCupon*/

unsignedshortusDataLen;/*quantityofbytesinmessage*/

{

unsignedcharuchCRCHi=0xFF;/*highbyteofCRCinitialized*/

unsignedcharuchCRCLo=0xFF;/*lowbyteofCRCinitialized*/

unsigneduIndex;/*willindexintoCRClookuptable*/

while(usDataLen--)/*passthroughmessagebuffer*/

{

uIndex=uchCRCHi^*puchMsgg++;/*calculatetheCRC*/

uchCRCHi=uchCRCLo^auchCRCHi[uIndex];

uchCRCLo=auchCRCLo[uIndex];

}

return(uchCRCHi<<8|uchCRCLo);

}

High-OrderByteTable

/*TableofCRCvaluesforhigh–orderbyte*/

staticunsignedcharauchCRCHi[]={

0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,

0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,

0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,

0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,

0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,

0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,

0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,

0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,

0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,

0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,

0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,

0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,

0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,

0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,

0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,

0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,

0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1