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