- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程名称: 计算机网络 数据链路层协议 系 别: 计算机科学系 年级专业: 学 号: 姓 名: 任课教师: 成绩: 2015 年 11 月 11 日
前言
数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。
数据链路层的最基本的功能是向该层用户提供透明的和可靠的数据传送基本服务。透明性是指该层上传输的数据的内容、格式及编码没有限制,也没有必要解释信息结构的意义;可靠的传输使用户免去对丢失信息、干扰信息及顺序不正确等的担心。在物理层中这些情况都可能发生,在数据链路层中必须用纠错码来检错与纠错。数据链路层是对物理层传输原始比特流的功能的加强,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一无差错的线路。如果您想用尽量少的词来记住数据链路层,那就是:“帧和介质访问控制”。
数据链路层
一、实习目的
计算机网络的数据链路层协议保证通信双方在有差错的通信线路上进行无差错的数据传输,是计算机网络各层协议中通信控制功能最典型的一种协议。?
本实验实现一个数据链路层协议的数据传送部分,目的在于更好地理解基本数据链路层协议的基本工作原理,掌握计算机网络协议的基本实现技术。
二、实习时间
(第 12 周到 13周)
三、 实习地点
福建农林大学东方学院网络实验室
四、实习单位和部门
福建农林大学东方学院
五、 实习内容
5.1实验内容
使用C?语言实现下面数据链路层协议:
1.?分析和实现一个理想的链路层协议?
2.?对于前面实现的协议进行扩充,实现它的第一次改进,如何防止发方过快淹没收方。?
3.?对上一步再假设在不可靠的的链路上进行通信。
5.2实验步骤?
1.?熟悉数据链路层协议的功能;?
2.?编写数据链路层协议的实现程序;?
3.?调试并运行自己编写的协议实现程序;?
4.?了解协议的工作轨迹,如出现异常情况,在实验报告中写出原因分析;?
5.?保留你实现的数据链路层协议,以备教师检查。??
? 5.3实验过程?
5.3.1程序功能及设计思路??
功能概述:?
用客户端/服务器模式代表A站、B站。先由客户端输入服务器IP地址,发送SYN同步帧,告诉服务器准备接受。客户端输入数据后,会进行CRC编码,再发送数据帧;服务器收到后,先进行校验,数据正确则发送ACK帧,客户端则发送下一帧数据;否则服务器发送NAK帧,客户端重新发送该数据。?
CRC校验:?
1)?将收到的字符转为int型(32位),并将其二进制码左移16位,存于data;?
2)?进行C(D)=Remainder[(S(D)?D^L)/g(D)?],即CRC校验,得到校验位。?
3)?将校验位加在信息元后,组成24位的码字,存于要发送的数据帧dframe。?
停等式ARQ协议:?Client:??
1)?置SN=0;?
2)?收到数据,将SN分配给该数据,如果没有收到,则等待;?
3)?存于要发送的数据帧中,发送给server;?
4)?如果从server收到确认帧,且RNSN,则SN加1(模2),返回2;如果收到NAK或RN=SN,则返回3,重传数据。??
Server:?
1)?置RN=0;?
2)?从client收到一个SN=RN的帧,进行CRC校验检查,无错后输出,并置RN
加1、发送ACK帧;否则发送NAK帧,请求重发。
5.4 C语言程序代码:
其客户端主要部分代码:
Client:
//*********************** client.c *****************************
#includewinsock.h //WINSOCK API的头文件,需要包含在项目中
#pragma comment(lib,ws2_32.lib) //WINSOCK API连接库文件
#includestdio.h
#includestring.h
in
文档评论(0)