数据链路层协议的设计实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验内容
使用C语言实现下面数据链路层协议:
1.分析和实现一个理想的链路层协议
2.对于前面实现的协议进行扩充,实现它的第一次改进,如何防止发方过快淹没
收方
3.对上一步再假设在不可靠的的链路上进行通信
三、
1.熟悉数据链路层协议的功能;
2.编写数据链路层协议的实现程序;
3.调试并运行自己编写的协议实现程序;
2、C语言程序代码:
客户端Client:
#includevwinsock.h>//WINSOCK API的头文件,需要包含在项目中
#pragma comment(lib,"ws2_32.lib")//WINSOCK API连接库文件
#i nclude<stdio.h>
#in clude<stri ng.h>
计算机通信网络实验
数据链路层协议的设计与
实现
学院:
班级:
学号:
姓名:
2012
一、
计算机网络的数据链路层协议保证通信双方在有差错的通信线路上进行无差错的
数据传输,是计算机网络各层协议中通信控制功能最典型的一种协议。
本实验实现一个数据链路层协议的数据传送部分,目的在于更好地理解基本数据
链路层协议的基本工作原理,掌握计算机网络协议的基本实现技术。
if ( LOBYTE( wsaData.wVersio n ) != 1 || HIBYTE( wsaData.wVersion
1 ){
WSAClea nup();
}
return;
//基于32位系统,int型长度为4字节,CRC-16的生成多项式为
g(D)=DA16+DA15+DA2+1 void caculate_crc16( un sig ned char*msg,i nt len th, un sig ned int *crc)
{
int RN;//接收序号
char type[3];
//表明帧的类型:SYN同步、EOT送毕、ACK确认应答、NCK否定应答
};
struct dataFrame dframe;
struct conF rame cframe;
初始化
******************************
void in itializati on()
1)置SN=O;
2)收到数据,将SN分配给该数据,如果没有收到,则等待;
3)存于要发送的数据帧中,发送给server;
4)如果从server收到确认帧,且RN>SN,则SN加1(模2),返回2;如果收
到NAK或RN=SN,则返回3,重传数据。
Server:
1)置RN=O;
2)从client收到一个SN=RN的帧,进行CRC校验检查,无错后输出,并置RN加1、发送ACK帧;否则发送NAK帧,请求重发。
int err;
SOCKET sock;//用于服务器监听的Socket
SOCKADDR_IN addrSrv;〃服务端地址
un sig ned char sen dBuf[100];〃发送缓存
char serverIp[20];〃客户端ip地址
int sockle n=sizeof(SOCKADDR_IN); //Socket的地址值的长度
{
WORD wVersio nRequested;
WSADATA wsaData;
wVersio nRequested = MAKEWORD( 1,1 );//Win Socket1.1版本
err = WSAStartup( wVersi on Requested, &wsaData );
//wsaData用来存储系统传回的关于Win Socket的资料
int cf_len=sizeof(struct sockaddr);
struct dataFrame〃数据帧
{
int seq;//分段消息的序号
int SN;〃发送序号
unsigned int data[100];
in t msgle n;〃字符长度,采用长度计数的组帧技术
};
struct conF rame//控制帧
//itoa(*crc,s,2);
//printf("加上CRC校验位后的二进制码:%s\n",s); //test
}
发送数据帧
******************************
void Sen dFrame(){
〃建立socket,SOCK_DGRAM为使用不连续不可靠的数据包连接
sock=socket(AF」NET,SOCK_DGRAM,O);
CRC校验:
1)将收到的字符转为int型(32位),并将其二进制码左移16位,存于data;
2)进行C(D)=Remainder[(S(D) ?DAL)/g(D)],即CRC校验,得到校验位。
3)将校验位加在信息元后,组成24位的码字,存于要发送的数据帧dframe。
停等式Aቤተ መጻሕፍቲ ባይዱQ协议:
Clie nt:
4.了解协议的工作轨迹,如出现异常情况,在实验报告中写出原因分析;
5.保留你实现的数据链路层协议,以备教师检查。
四、
1、程序功能及设计思路
功能概述:
用客户端/服务器模式代表A站、B站。先由客户端输入服务器IP地址,发送SYN同步帧,告诉服务器准备接受。客户端输入数据后,会进行CRC编码,再发送数据帧; 服务器收到后,先进行校验,数据正确则发送ACK帧,客户端则发送下一帧数据;否 则服务器发送NAK帧,客户端重新发送该数据。
*crc=data<<16;
for(j=0;j<16;j++)
{
if((data&0x8000))
{
data=(data<<1)&0 xffff;
data=dataA0x8005;
else data=(data<<1)&0xffff;
}
*crc=*crc|data;//把校验位放在信息元后面,存在一个int变量中
if(sock==-1){
printf("Building a socket failed.'n");
return;
}
prin tf("i nput server's IP:");
{ un sig ned int data=0;
int i,j;
for(i=0;i<le nth;i++,crc++,msg++){
data=(i nt)*msg;
// itoa(data,s,2);〃把整数转为二进制码
//printf("第%d字的二进制码:%s\n",i+1,s); //test
相关文档
最新文档