实验二数据链路层实验.docx

上传人:小飞机 文档编号:5175187 上传时间:2023-06-11 格式:DOCX 页数:17 大小:247.20KB
返回 下载 相关 举报
实验二数据链路层实验.docx_第1页
第1页 / 共17页
实验二数据链路层实验.docx_第2页
第2页 / 共17页
实验二数据链路层实验.docx_第3页
第3页 / 共17页
实验二数据链路层实验.docx_第4页
第4页 / 共17页
实验二数据链路层实验.docx_第5页
第5页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《实验二数据链路层实验.docx》由会员分享,可在线阅读,更多相关《实验二数据链路层实验.docx(17页珍藏版)》请在三一办公上搜索。

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) 4t4 FiamnReElDTR DSR. CCDOUT ”cNot

5、canreded?jts i i-i- n .1L.OUT sick CTSDSR0DCDRlChoose whidi sigral lines ct one end should be canrededto signal lines at the alher end.匚ir h a I n nro-c e F|i六、主要源代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;usin

6、g System.Windows.Forms;using System.Threading;using System.Runtime.InteropServices;using NetProject;namespace DataLink_Exppublic partial class MainForm : Formstatic MainForm mHANDLE=null;主窗体名柄,在线程中访问private ChildForm sendForm = null;发送子窗口对象private ChildForm rcvForm = null;接收子窗口对象static Physical PHL

7、= 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();sendForm.MdiParent = this;sendForm.Text =发送窗口;/this.MdiCh

8、ildren.Length.ToString();sendForm.Name = SendWindow;sendForm.Show();rcvForm = new ChildForm();rcvForm.MdiParent = this;rcvForm.Text =接收窗口;rcvForm.Name = ReceiveWindow;rcvForm.rtxBox.ReadOnly = true;rcvForm.Show();this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);/ 其他排列方法: Cascade TileHoriz

9、ontalPHL = new Physical(COM3);DLL = new DataLink();/创建数据链路层对象连接物DLL.setPHL(PHL);理层sendForm.Enabled = false;发送窗口禁止编辑创建并启动监视线程Mon_Thread =new Thread(newThreadStart(this .MonitorThread);Mon_Thread.Start();private void disconnect_Click(object sender, EventArgs e) 关闭串行口PHL.Close();connect.Enabled = true;

10、sendForm.Enabled = false;private void connect_Click(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.rt

11、xBox.InvokeRequired) SetTextCallback 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) 发送子窗体高层向低层发送数据(使用+)byte buffer = Encoding.U

12、nicode.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); 送接收处理(本例为数据直接显示在子窗体

13、中) private void arrToolStripMenuItem_Click(dbject sender, EventArgs e) /排列子窗体this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);还有其他排列方法:Cascade、TileHorizontalprivate void exitToolStripMenuItem_Click(object sender,EventArgs e)Close();private void MainForm_FormClosed(object sender,FormClosed

14、EventArgs e)if (Mon_Thread != null)Mon_Thread.Abort();using System;using System.Collections.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 D

15、ataLink_Exppublic partial class MainForm : Formstatic MainForm mHANDLE=null;主窗体名柄,在线程中访问private ChildForm sendForm = null;发送子窗口对象private ChildForm rcvForm = null;接收子窗口对象static Physical PHL = null;/物理层实体static DataLink DLL = null;/数据链路层实体delegate void SetTextCallback(byte buffer);public MainForm()Ini

16、tializeComponent();mHANDLE = 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.MdiParent

17、 = this;rcvForm.Text =接收窗口;rcvForm.Name = ReceiveWindow;rcvForm.rtxBox.ReadOnly = true;rcvForm.Show();this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);/ 其他排列方法: Cascade TileHorizontalPHL = new Physical(COM4);DLL = new DataLink();/创建数据链路层对象连接物DLL.setPHL(PHL);理层sendForm.Enabled = false;发送窗口

18、禁止编辑创建并启动监视线程Mon_Thread =new Thread(newThreadStart(this .MonitorThread);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

19、, 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) SetTextCallback d = new SetTextCallback(Receive);this.Invoke(d, new object buffer );else s

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

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

22、s.MdiLayout.TileVertical);还有其他排列方法:Cascade、TileHorizontalprivate void exitToolStripMenuItem_Click(object sender,EventArgs e)Close();private void MainForm_FormClosed(object sender,FormClosedEventArgs e)if (Mon_Thread != null)Mon_Thread.Abort();七、分析与思考1. 数据链路(即逻辑链路)与链路(即物理链路)有何区别?(1)数据链路与链路的区别在于数据链路除链

23、路外,还必须有一些必要的规程来控 制数据的传输。因此,数据链路比链路多了实现通信规程所需要的硬件和软件。(2)“电 路接通了”表示链路两端的结点交换机已经开机,物理连接已经能够传送比特流了。但是, 数据传输并不可靠。在物理连接基础上,再建立数据链路连接,才是“数据链路接通了”。 此后,由于数据链路连接具有检测、确认和重传等功能,才使不太可靠的物理链路变成可 靠的数据链路,进行可靠的数据传输。当数据链路断开连接时,物理电路连接不一定跟着 断开连接。2. 数据链路层中的链路控制包括哪些功能?数据链路层的主要功能是在物理层提供的比特服务基础上,在相邻结点之间提供简单 的通信链路,传输以帧为单位的数据

24、,同时它还负责数据链路的流量控制、差错控制。具 体地:链路管理;帧同步;流量控制;差错控制;将数据和控制信息分开;透明传输;寻 址等。3. 考察停止等待协议算法。在接收结点,当执行步骤4)时,若将“否则转到47)”改为 “否则转到(8)”,将产生什么结果?重复帧会被当做错误的帧进行重传。4. 试简述HDLC帧各字段的意义。HDLC用什么方法保证数据的透明传输?标志字段F(Flag):帧的边界,标识一个帧的开始与结束;地址字段A(Address):基本单位为8比特,需要时可以8比特为单位扩展。控制字段C(Control):控制字段占8比特。HDLC用其将帧划分为信息帧 (Information)

25、、监督帧(Supervisory)和 无编号帧(Unnumbered)等 三大类。信息字段I(Information):信息字段可以任意长,只有信息帧才有该字段。帧校验序列FCS(Frame Check Sequence)字段:本字段共占16bit,校验的范围是从地 址字段的第1个比特起,到信息字段的最末1个比特为止。HDLC通过采用0比特填充技术来保证数据的透明传输。艮在发送端,只要发现有 5个连续1,则立即填入一个0。在接收一个帧时,每当发现5个连续1时,就将这5个 连续1后的一个0删除,以实现原来的比特流的还原。5. 修改相关函数,实现停止等待协议。6. 修改相关函数,分别使用奇偶校验和CRC冗余校验替代现有的校验方法。7. 在设置超时计时器,超时时间间隔与那些因素有关?在利用串行口实现的过程中, 该数据值如何确定?超时时间间隔与信道、带宽等因素有关。在利用串行口实现的过程中,该数据值一般 选择重传实践略大于“在正常情况下从发完数据帧到收到确认帧所需要的平均时间”。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号