实验二数据链路层实验_第1页
实验二数据链路层实验_第2页
实验二数据链路层实验_第3页
实验二数据链路层实验_第4页
实验二数据链路层实验_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二数据链路层实验实验项目性质:设计性计划学时:4实 验 环 境: 实验日期:2015年10月14日一、实验目的1、理解并掌握数据链路层协议的功能。2、进一步理解停止等待协议和滑动窗口协议的基本工作原理。3、掌握计算机网络协议的基本实现技术。4、利用RS 232C通信接口实现两台PC间传输文件。二、实验内容与要求1、设计完成数据链路层相关类;2、开发一个使用RS232C接口在两台计算机之间采用停止等待协议传输信息(文件)的程序;3、开发一个使用RS232C接口在两台计算机之间采用滑动窗口协议传输文件的程序。完成实验内容中的第1、2部分,有能力的同学完成全部内容。三、实验(设计)仪器设备和材料

2、清单计算机两台,串行电缆一根。四相关知识1 数据路层概述数据链路层协议应提供的基本功能有:(1) 数据在数据链路上的正常传输(建立、维护和释放)。(2) 帧定界与同步,以实现透明传输。(3) 差错控制和流量控制。(4) 透明传输。2 数据成帧方法在数据链路层,为实现透明传输及进行差错控制和流量控制,在把数据送到物理层之前,需将若干个数据组成一帧,并在其中加上其他必要的控制信息。控制信息形成(数据成帧)的方法有以下几种:字符计数法、带字符填充的首尾界符法、带填充位的首尾标志法、物理层编码违例法。3 差错控制与流量控制为确保帧可靠地交付接收方,接收方在收到帧后,应向发送方应答,告知是否正确收到帧,

3、因此在数据链路层要建立差错控制机制: 差错控制方法、CRC循环冗余校验、流量控制。4 数据链路层协议(1) 停止等待协议停止等待协议的基本原理是:发送方在数据帧中加入校验码(CRC),由接收方检查;若出错,返回NAK帧(否认帧),否则发送ACK帧(确认帧);发送方收到NAK帧后重发数据帧,若收到ACK帧可发送下一帧。当超时计时事件发生时,重发丢失的帧,这样可通过等待发送来实现流量控制,如图3-2所示。停止等待协议发送方的算法如下:(1) 从主机取一个数据帧。(2) V(s) <-0,发送方状态变量初始化。(3) N(s)<- V(s)(置发送序号),将数据帧送发送缓冲区。(4) 将

4、发送缓冲的数据发送。(5) 置超时定时器。(6) 等待(下列三种情况)。(7) 收到回答ACK ,从主机取一个新数据帧, V(s) <-1-V(s),转(3)。图3-2停止等待协议工作原理示意图(8) 收到回答NAK ,转(4)。(9) 超时,转(4)。接收方的算法如下:(1) V(r) <-0, 接收方状态变量初始化。(2) 等待。(3) 收到一个数据帧后,测试正确继续;否则传输出错,转(8)。(4) 如果接收到的帧序号等于期待的帧序号( N(s) = V(r) ,继续;否则丢弃该数据,转(7)。(5) 将接收帧的数据部分上交主机。(6) V(r) <-1- V(r)。 (

5、7) 向发方发ACK ,转(2)。(8) 向发方发NAK ,转(2)。停止等待协议的算法流程如图3-3所示,其中V(s) 和V(r)分别是发送方和接收方维护的状态变量,N(s)是发送序号。图3-3停止等待协议的算法停止等待协议算法简单,只适合传送少量的大的帧的情况。但大的数据块要分成许多帧传送,此时停止等待协议不适用,原因是本协议只允许同时只有一帧在链路上传送,链路利用率低。(2) 连续重传ARQ协议为了提高信道利用率,发送方发完一帧后,不必停下来等待对方的应答,可以连续发送若干帧;如果在发送过程中收到接收方的肯定应答,可以继续发送;若收到对其中某一帧的否认帧,则从该帧开始的后续帧全部重发,如

6、图3-4。由于减少了等待时间,整个通信的吞吐量就提高了,提高了信道利用率。但回退重传(Go-back-N)会导致某些已正确接收的帧的重传,因此降低了发送效率。当误码率较低时,连续重传ARQ优于停止等待协议;反之则不一定。图3-4连续重传ARQ协议工作原理示意图(3) 滑动窗口协议(Sliding Window Protocol)在使用连续重传ARQ协议时,如果发送端一直没有收到对方的确认信息,那么实际上发送端并不能无限制地发送其数据帧。这是因为:(1) 当未被确认的数据帧的数目太多时,只要有一帧出了差错,就可能要有很多的数据帧需要重传,这必然要白白花费较多的时间,因而增大开销。(2) 为了对所

7、发送出去的大量数据帧进行编号,每个数据帧的发送序号也要占用较多的比特数,这样又增加了一些不必要开销。连续ARQ协议中,每一个要发出的帧都包含一个序列号,范围从0到最大(0 2n 1,一般用n个二进制位表示),使得序列号能恰好放入n位的字段中,n同时表示缓存器的大小。滑动窗口协议的工作原理如下:(1) 任何时刻,发送端始终保持一个已发送但尚未确认的帧的序号表,称为发送窗口。发送窗口的上界表示要发送的下一个帧的序号,下界表示未得到确认的帧的最小编号。发送窗口 = 上界下界,大小可变;窗口内的序列号代表已发送了的但尚未确认的帧。(2) 发送端每发送一个帧,序号取上界值,上界加1;每接收到一个正确响应

8、帧,下界加1;(3) 接收端有一个接收窗口,大小固定,但不一定与发送窗口相同。接收窗口的上界表示允许接收的序号最大的帧,下界表示希望接收的帧;(4) 接收窗口表示允许接收的信息帧,落在窗口外的帧均被丢弃。序号等于下界的帧被正确接收,并产生一个响应帧,下界加1。接收窗口大小不变。正因为收发两端的窗口按照以上的规律不断地向前滑动,因此这种协议又称为滑动窗口协议。当发送窗口和接收窗口的大小都等于1时,就是最初讨论的停止等待协议。下图3-5为滑动窗口的原理,它采用三位编码,顺序号为0-7,图中方框内表示发送方可以发送7帧,序号从6开始,每发送一帧,窗口左边界向里收缩,每收到一个确认,窗口向右滑动。接收

9、方每一帧,窗口左边向右收缩,每发送相应后窗口向右扩展。图3-5滑动窗口协议中的发送窗口和接收窗口假设窗口为7帧,最上面的A发送7帧,但发送后3帧未收到确认,于是A把窗口收缩到4帧F3-F7。但此时B发送确认RR3表明已经收到0-2帧,并准备接收3-7帧。A收到确认RR3,窗口向外滑动3帧,表示A可以从F3开始发送7帧。接着发送F3-F6。 若B返回确认RR4,表示已经接收这些帧,并允许A发送F7开始的7帧。图3-6滑动窗口协议工作原理示意图。AB图3-6滑动窗口协议工作原理示意图可以证明,当用 n个比特进行编号时,若发送窗口的大小为WT,接收窗口的大小为WR,则只有WT2n-1 和WT+WR2

10、n成立时,滑动窗口协议才能正常工作。(4) 选择重传ARQ协议 为了进一步提高信道的利用率,可设法只重传出现差错的数据帧或者是定时器超时的数据帧。但这时必须加大接收窗口,以便先收下发送序号不连续但仍处在接收窗口中的那些数据帧,等到所缺序号的数据帧收到后再一并送交主机。这就是选择重传ARQ协议。使用选择重传ARQ协议可以避免重复传送那些本来已经正确到达接收端的数据帧。但付出的代价是在接收端要设置具有相当容量的缓存空间,这在许多情况下是不够经济的。因此选择重传ARQ协议在目前就远没有连续重传ARQ协议使用得那么广泛。5 面向比特的链路控制规程HDLC高级数据链路控制HDLC(High-level

11、Data Link Control)是在IBM公司著名的体系结构SNA上的数据链路层的面向比特的规程SDLC(Synchronous Data Link Control)基础上发展起来的,由ISO把SDLC修改后称为国际标准ISO 3309。从网络层交下来的分组,变成为数据链路层的数据。数据链路层的数据传送是以帧为单位的。也就是说,数据链路层的PDU是帧。帧是一个具有固定的格式数据块。一个HDLC帧由标志、地址、控制、信息及帧校验等5个字段组成。如图3-7所示。HDLC有三种帧类型,由控制字段加以区分。HDLC帧中各字段的作用及含义如下:标志F地址A控制C信息Infor帧校验序列FCS标志F帧

12、校验区间透明传输区间图3-7HDLC帧结构(1) 标志字段F(Flag)帧的边界,标识一个帧的开始与结束;当连续传输两个帧时,前一个帧的结束标志字段F可以兼作后一帧的起始标志字段。其内容为:01111110。在两个标志字段之间的比特串中,如果碰巧出现了和标志字段F一样的比特组合,那么就会误认为是帧的边界。为了避免出现这种错误,HDLC采用零比特填充法使一帧中两个F字段之间不会出现6个连续1。 (2) 地址字段A(Address)基本单位为8比特,需要时可以8比特为单位扩展。这时用地址字段的第1位表示扩展位,其余7位为地址位。当某个地址字段的第1位为0时,则表示下一个地址字段的后7位也是地址位。

13、当这个地址字段的第1位为1时,即表示这已是最后一个地址字段了。(3) 控制字段C(Control)标志F地址A控制C信息Infor帧校验序列FCS标志F比特序号信息帧I监控帧S无编号帧U123456780N(S)P/FN(R)10SP/FN(R)11MP/FM控制字段占8比特,其定义如图3-8所示。HDLC用其将帧划分为信息帧(Information)、监督帧(Supervisory)和无编号帧(Unnumbered)等三大类。它们的简称分别是I帧,S帧和U帧。图3-8控制字段(4) 信息字段I(Information)信息字段可以任意长,只有信息帧才有该字段。(5) 帧校验序列FCS(Fra

14、me Check Sequence)字段本字段共占16bit,校验的范围是从地址字段的第1个比特起,到信息字段的最末1个比特为止。它采用的生成多项式是x16十x12+x5十1,即CRCCCITT。HDLC的通信过程要经过建立数据链路、数据传输、数据链路拆除三个阶段。五、结果分析(可根据需要附加页)6、 主要源代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System

15、.Windows.Forms;using System.Threading;using System.Runtime.InteropServices;using NetProject;namespace DataLink_Exp public partial class MainForm : Form static MainForm mHANDLE=null; /主窗体名柄,在线程中访问 static Thread Mon_Thread=null; /监视线程 private ChildForm sendForm = null; /发送子窗口对象 private ChildForm rcvFo

16、rm = null; /接收子窗口对象 static Physical PHL = null; /物理层实体 static DataLink DLL = null; /数据链路层实体 delegate void SetTextCallback(byte buffer); public MainForm() InitializeComponent(); mHANDLE = this; private void MainForm_Load(object sender, EventArgs e) /初始化,创建子窗体,启动监视线程 sendForm = new ChildForm(); sendFo

17、rm.MdiParent = this; sendForm.Text = "发送窗口" /this.MdiChildren.Length.ToString(); sendForm.Name = "SendWindow" sendForm.Show(); rcvForm = new ChildForm(); rcvForm.MdiParent = this; rcvForm.Text = "接收窗口" rcvForm.Name = "ReceiveWindow" rcvForm.rtxBox.ReadOnly = t

18、rue; rcvForm.Show(); this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);/其他排列方法:Cascade、TileHorizontal PHL = new Physical("COM3"); DLL = new DataLink(); /创建数据链路层对象 DLL.setPHL(PHL); /连接物理层 sendForm.Enabled = false; /发送窗口禁止编辑 /创建并启动监视线程 Mon_Thread = new Thread(new ThreadStart(this.M

19、onitorThread); Mon_Thread.Start(); private void disconnect_Click(object sender, EventArgs e) /关闭串行口 PHL.Close(); connect.Enabled = true; sendForm.Enabled = false; private void connect_Click(object sender, EventArgs e) /打开串行口/ port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One

20、); PHL.Open(); sendForm.Enabled = true; connect.Enabled = false; disconnect.Enabled = true; private void Receive(byte buffer) /接收数据并显示 /写实际接收代码 if (this.rcvForm.rtxBox.InvokeRequired) SetTextCallback d = new SetTextCallback(Receive); this.Invoke(d, new object buffer ); else string Msg = Encoding.Uni

21、code.GetString(buffer, 0, buffer.Length); /编码格式转换 this.rcvForm.rtxBox.Text += Msg; /收到的信息显示 public static void Send(string Msg) /发送子窗体高层向低层发送数据(使用<Ctrl>+<T>) byte buffer = Encoding.Unicode.GetBytes(Msg); /发送前进行编码格式转换 DLL.Send(buffer);/ PHL.Send(buf); /数据送物理层SAP下行队列,发送数据(物理层实验用) /监视线程函数,运

22、行协议处理方法,接收传输给当前应用的数据。 private void MonitorThread() byte Msg; while (true) DLL.Run(); /运行数据链路层协议处理方法 if (Msg = DLL.Receive() != null) /数据链路层有向高层递交的数 /是,从数据链路层接收数据(数据存储在Msg中) Receive(Msg); /送接收处理(本例为数据直接显示在子窗体中) private void arrToolStripMenuItem_Click(object sender, EventArgs e) /排列子窗体 this.LayoutMdi(

23、System.Windows.Forms.MdiLayout.TileVertical); /还有其他排列方法:Cascade、TileHorizontal private void exitToolStripMenuItem_Click(object sender, EventArgs e) Close(); private void MainForm_FormClosed(object sender, FormClosedEventArgs e) if (Mon_Thread != null) Mon_Thread.Abort();using System;using System.Col

24、lections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Threading;using System.Runtime.InteropServices;using NetProject;namespace DataLink_Exp public partial class MainForm : Form static MainForm mHANDLE=null; /主窗体

25、名柄,在线程中访问 static Thread Mon_Thread=null; /监视线程 private ChildForm sendForm = null; /发送子窗口对象 private ChildForm rcvForm = null; /接收子窗口对象 static Physical PHL = null; /物理层实体 static DataLink DLL = null; /数据链路层实体 delegate void SetTextCallback(byte buffer); public MainForm() InitializeComponent(); mHANDLE =

26、 this; private void MainForm_Load(object sender, EventArgs e) /初始化,创建子窗体,启动监视线程 sendForm = new ChildForm(); sendForm.MdiParent = this; sendForm.Text = "发送窗口" /this.MdiChildren.Length.ToString(); sendForm.Name = "SendWindow" sendForm.Show(); rcvForm = new ChildForm(); rcvForm.MdiP

27、arent = this; rcvForm.Text = "接收窗口" rcvForm.Name = "ReceiveWindow" rcvForm.rtxBox.ReadOnly = true; rcvForm.Show(); this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);/其他排列方法:Cascade、TileHorizontal PHL = new Physical("COM4"); DLL = new DataLink(); /创建数据链路层对象 DLL

28、.setPHL(PHL); /连接物理层 sendForm.Enabled = false; /发送窗口禁止编辑 /创建并启动监视线程 Mon_Thread = new Thread(new ThreadStart(this.MonitorThread); Mon_Thread.Start(); private void disconnect_Click(object sender, EventArgs e) /关闭串行口 PHL.Close(); connect.Enabled = true; sendForm.Enabled = false; private void connect_Cl

29、ick(object sender, EventArgs e) /打开串行口/ port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); PHL.Open(); sendForm.Enabled = true; connect.Enabled = false; disconnect.Enabled = true; private void Receive(byte buffer) /接收数据并显示 /写实际接收代码 if (this.rcvForm.rtxBox.InvokeRequired) Se

30、tTextCallback d = new SetTextCallback(Receive); this.Invoke(d, new object buffer ); else string Msg = Encoding.Unicode.GetString(buffer, 0, buffer.Length); /编码格式转换 this.rcvForm.rtxBox.Text += Msg; /收到的信息显示 public static void Send(string Msg) /发送子窗体高层向低层发送数据(使用<Ctrl>+<T>) byte buffer = En

31、coding.Unicode.GetBytes(Msg); /发送前进行编码格式转换 DLL.Send(buffer);/ PHL.Send(buf); /数据送物理层SAP下行队列,发送数据(物理层实验用) /监视线程函数,运行协议处理方法,接收传输给当前应用的数据。 private void MonitorThread() byte Msg; while (true) DLL.Run(); /运行数据链路层协议处理方法 if (Msg = DLL.Receive() != null) /数据链路层有向高层递交的数 /是,从数据链路层接收数据(数据存储在Msg中) Receive(Msg);

32、 /送接收处理(本例为数据直接显示在子窗体中) private void arrToolStripMenuItem_Click(object sender, EventArgs e) /排列子窗体 this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical); /还有其他排列方法:Cascade、TileHorizontal private void exitToolStripMenuItem_Click(object sender, EventArgs e) Close(); private void MainForm_FormClosed(object sender, FormClosedEventArgs e) if (Mon_Thread != null) Mon_Thread.Abort(); 七、分析与思考

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论