数据通信原理.docx
《数据通信原理.docx》由会员分享,可在线阅读,更多相关《数据通信原理.docx(12页珍藏版)》请在冰豆网上搜索。
数据通信原理
《数据通信原理》课程实验指导书
(ExperimentsforDataCommunication)
2005年12月
摘要
本课程实验内容由三个上机实验组成:
循环码的编码实验、基于socket的数据通信实验、采用TCP的Client/Server模式的数据通信实验。
循环码的编码实验:
2实验学时,主要目的是基本掌握一种数据通信编码的纠错检错方法。
基于socket的数据通信实验:
4实验学时;采用TCP的Client/Server模式的数据通信实验:
4实验学时;这两个实验主要是培养学生在网络环境下的数据通信程序的开发能力,加深对本门课程的学习理解。
前言
《数据通信原理》是网络工程专业本科生必修的一门专业基础课程。
通过本课程的学习使学生对数据通信获得较完整的概念,并掌握数据通信的基本理论,为以后学习相关网络课程打下必备的基础,为从事数据通信和计算机网络工作提供一定的技术支持。
数据通信主要包括数据传输、数据交换和数据通信网以及相关的通信协议。
《数据通信原理》也是一门实践性较强的课程,为了理论联系实际,安排了三个实验,实验内容基本突出了《数据通信原理》的重点部分。
从而能帮助学生加深对《数据通信原理》学习和理解。
为帮助学生熟悉掌握《数据通信原理》的基本理论与技术知识。
特编写本课程实验指导书,由于水平有限,错误和不妥之处在所难免,恳请各位批评指正。
实验一循环码的编码实验
一、目的和要求
1、实验目的
基本掌握循环码的编码过程及用程序实现的方法。
2、实验学时:
2学时
3、实验要求
(1)熟悉循环码的编码方法、译码方法。
(2)选取一个生成多项式,采用C/C++编写循环码的编码程序。
(3)上机调试通过,并用相关代码测试。
二、实验内容
国际上推荐使用的循环码生成多项式有以下三种:
CRC-12=x12+x11+x3+x2+x+1
CRC-16=x16+x15+x2+1
CRC-CTU-T=x16+x12+x3+1
选取其中一种,采用C/C++语言设计出一个通用的循环码生成程序,并上机调试通过。
并用设计的程序为下列代码生成循环码:
1、1100110100010101
2、10001100111011110001001000110110
三、仪器、设备和材料
1、PC微机
2、DOS操作系统或Windows操作系统
3、TurboC程序集成开发环境或VisualC++程序集成开发环境
四、实验原理
循环码是一种线性码,是在严格的代数学理论基础上建立起来的,具有较强的检错纠错能力。
在循环码中一般用码多项式表示码组,也就是把码组中各码元当作一个多项式的系数。
一个长度为n的循环码(n,k)的每一个多项式,它必定是按模(xn+1)运算的一个余式。
在(n,k)循环码中,存在一个n-k=r次的码多项式g(x)——生成多项式。
(n,k)循环码的编码可按下列步骤进行:
1、选择生成多项式g(x);
2、将待编码的信息多项式M(x)乘以xn-k;
3、用g(x)去除xrM(x),得到商式Q(x)和余式r(x);
4、以r(x)作为监督多项式附加在xrM(x)之后,得到所需的码组。
五、实验步骤
1、根据要求选取生成多项式;
2、采用C/C++语言,设计循环码生成函数;
3、编制测试程序(主函数main)。
4、调试程序:
输入一组编码,检查输出结果。
六、实验注意事项
1、实验报告应包括以下几个部分:
(1)循环码的生成原理、生成步骤;
(2)循环码编码的实现算法。
2、测试数据:
测试下列码组:
1100110100010101,10001100111011110001001000110110
3、思考题:
(1)循环码在数据通信中如何检错?
(2)循环码在数据通信中如何纠错?
实验二、基于socket的数据通信实验
一、目的和要求
1、实验目的
熟悉socket命令,掌握socket编程技术。
2、实验学时:
4学时
3、实验要求
在Windows平台或UNIX平台上,有C/C++编程实现。
二、实验内容
在计算机互联网络环境实现数据通信。
三、仪器、设备和材料
1、PC微机;
2、UNIX操作系统或Windows操作系统;
3、TurboC程序集成开发环境或VisualC++程序集成开发环境;
4、计算机互联网络环境。
四、实验原理
下面是一个简单的客户机/服务器程序的实现,它用套接字接口在TCP连接上发送消息。
这个程序是在UNIX平台上完成的,用到了其他的一些UNIX功能,希望在参考时注意。
在这个实例中允许用户在一端的计算机上输入文本数据并将其发送给另一端计算机用户。
1.客户端编程
从客户端向服务器端传送数据的步骤为:
采用远端的计算机机名作为参数,通过调用UNIX程序gethostbyname把远端计算机名转化为对应的IP地址,再构造套接字接口所需的地址数据结构(sin),这个数据结构表明整个过程将一直采用套接字与网络(AF_INET)相连接。
采用TCP端口号5432作为共知的服务器端口号。
最后一步是调用socket和connect。
当connect正确返回时,表明客户端到服务器的连接已建立起来,客户端程序就可以从标准输入设备读取文本数据并通过套接字发送给远端的服务器。
#include
#include
#include
#include
#include
#defineSERVER_PORT5432
#defineMAX_LINE256
int
main(intargc,char*argv[])
{
FILE*fp;
structhostent*hp;
structsockaddr_insin;
char*host;
charbuf[MAX_LINE];
ints;
intlen;
if(argc==2){
host=argv[1];
}
else{
fprintf(stderr,”usage:
simplex-talkhost\n”);
exit
(1);
}
/*将主机名翻译成对等实体的IP地址*/
hp=gethostbyname(host);
if(!
hp){
fprintf(stderr,”simplex-talk:
unknownhost:
%s\n”,host);
exit
(1);
}
/*建立地址数据结构*/
bzero((char*)&sin,sizeof(sin));
sin.sin_family=AF_INET;
bcopy(hp->h_addr,(char*)&sin.sin_addr,hp->h_length);
sin.sin_port=htons(SERVER_PORT);
/*主动打开*/
if((s=socket(PF_INET,SOCK_STREAM,0))<0){
perror(“simplex-talk:
socket”);
exit
(1);
}
if(connect(s,(structsockaddr*)&sin,sizeof(sin))<0){
perror(“simplex-talk:
connect”);
close(s);
exit
(1);
}
/*主循环:
获得并发送文本行*/
while(fgets(buf,sizeof(buf),stdin)){
buf[MAX_LINE-1]=’\0’;
len=strlen(buf)+1;
send(s,buf,len,0);
}
}
2.服务器端编程
在服务器上填上自己的端口号(SERVER_PORT)构造地址数据结构。
服务器端不要指明IP地址,这样应用程序可以接受来自本地网内任一IP地址的连接请求。
然后,服务器建立一个套接字,将它绑定到本地地址,设置允许同时连接的最大客户机数。
在完成了这些过程后,服务器就等待远端主机连接请求,当远端有客户机试图与之连接时,它就接收并输出连接上送来的字符。
#include
#include
#include
#include
#include
#defineSERVER_PORT5432
#defineMAX_PENDING5
#defineMAX_LINE256
intmain()
{
structsockaddr_insin;
charbuf[MAX_LINE];
intlen;
ints,new_s;
/*建立地址数据结构*/
bzero((char*)&sin,sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=INADDR_ANY;
sin.sin_port=htons(SERVER_PORT);
/*建立被动连接*/
if((s=socket(PF_INET,SOCK_STREAM,0))<0){
perror(“simplex-talk:
socket”);
exit
(1);
}
if((bind(s,(structsockaddr*)&sin,sizeof(sin)))<0){
perror(“simplex-talk:
bind”);
exit
(1);
}
listen(s,MAX_PENDING);
/*等待连接,然后接收并输出文本*/
while
(1){
if((new_s=accept(s,(structsockaddr*)&sin,&len))<0){
perror(“simplex-talk:
accept”);
exit
(1);
}
while(len=recv(new_s,buf,sizeof(buf),0))
fputs(buf,stdout);
close(new_s);
}
}
五、实验步骤
1、根据要求编写好客户机与服务器端程序;
2、调试客户器端程序;
3、调试服务器端程序;
4、作数据传输测试。
六、实验注意事项
1、实验报告应包括以下几个部分:
(1)说明SOCKET的用法;
(2)画出客户端、服务器端的工作流程图;
(3)说明数据通信的过程。
2、思考题:
(1)如何保证数据通信的安全性?
实验三、采用TCP的Client/Server模式的数据通信实验
一、目的和要求
1、实验目的
掌握TCPClient/Server模式的数据通信原理、方法。
2、实验学时:
4学时
3、实验要求
在Windows平台或UNIX平台上,有C/C++编程实现。
二、实验内容
采用TCP协议在客户端/服务器模式下实现数据通信。
三、仪器、设备和材料
1、PC微机;
2、UNIX操作系统或Windows操作系统;
3、TurboC++程序集成开发环境或VisualC++程序集成开发环境;
4、计算机互联网络环境。
四、实验原理
传输控制协议(TransportControlProtocol)是一种面向连接的,可靠的传输层协议。
面向连接是指一次正常的TCP传输需要通过在TCP客户端和TCP服务器端建立特定的虚电路连接来完成,该过程通常被称为“三次握手”。
可靠性可以通过多种方法来提供保证,在这里关心的是数据序列和确认。
TCP通过数据分段(Segment)中的序列号保证所有传输的数据可以在远端按照正常的次序进行重组,而且通过确认保证数据传输的完整性。
要通过TCP传输数据,必须在两端主机之间建立连接。
TCP客户端需要和TCP服务器端建立连接,过程示例如下:
TCPClient
Flags
TCPServer
1SendSYN
(seq=w)
----SYN--->
SYNReceived
2SYN/ACK
Received
<---SYN/ACK----
SendSYN(seq=x),ACK(w+1)
3SendACK(x+1)
----ACK--->
ACKReceived,Connection
Established
w:
ISN(InitialSequenceNumber)oftheClient
x:
ISNoftheServer
在第一步中,客户端向服务器端提出连接请求。
这时TCPSYN标志置位。
客户端告诉服务器端序列号区域合法,需要检查。
客户端在TCP报头的序列号区中插入自己的ISN。
服务器端收到该TCP分段后,在第二步以自己的ISN回应(SYN标志置位),同时确认收到客户端的第一个TCP分段(ACK标志置位)。
在第三步中,客户端确认收到服务器端的ISN(ACK标志置位)。
到此为止就已建立起完整的TCP连接,可以开始全双工模式的数据传输过程。
根据以上内容编写一个TCPClient/Server模式的通信程序。
通信程序由两个部分组成,它包括客户端程序和服务器端程序。
服务器端的建立步骤如下:
socket-->bind-->listen-->accept
客户端的建立步骤如下:
socket-->connect。
五、实验步骤
(1)编写TCPClient/Server模式的通信程序;
(2)调试并运行自己编写的实现程序;
六、实验注意事项
1、实验报告应包括以下几个部分:
(1)说明TCP传输控制协议的用法;
(2)画出数据的工作流程图;
(3)说明数据通信的过程。
2、思考题:
(1)了解UDPClient/Server模式的工作原理,与TCP比较二者的不同在哪?