计算机网络---数据链路层实验

计算机网络—数据链路层实验

一、实验目的

  1. 理解并掌握数据链路层协议的功能。

  2. 掌握差错控制、流量控制、错误检测和纠正基本原理。

  3. 进一步理解停止-等待协议和滑动窗口协议的基本工作原理。

  4. 掌握数据链路层帧的设计方法。

  5. 掌握计算机网络协议的基本实现技术。

二、实验环境和任务

​ 在已经实现的物理层基础上:

​ (1) 设计简易可行的数据链路层帧格式以及差错校验方案。

​ (2) 设计并实现“停止-等待”协议。

​ (3) 设计并实现“连续重传ARQ”的滑动窗口协议。

三、实验步骤及实验结果记录

​ 1、实验步骤说明与截图

​ (1)创建并连接两个虚拟接口

image-20211123192507775

​ (2)用c#创建一个主窗口和两个子窗口用于接收和发送信息

image-20211123192536225

image-20211123192546115

2、实验结果说明与截图

image-20211123192624827

四、实验结果分析和总结

  1. 数据链路(即逻辑链路)与链路(即物理链路)有何区别?

答:数据链路与链路的区别在于数据链路除链路外,还必须有一些必要的规程来控制数据的传输。因此,数据链路比链路多了实现通信规程所需要的硬件和软件。

  1. 数据链路层中的链路控制包括哪些功能?

答:为实现基于两个直接相连的点对点数据链路的高效率数据通信的目的,数据链路控制功能包括帧同步、流量控制、差错控制、寻址、控制信息与数据合用链路、链路管理等。

  1. 考察停止等待协议算法。在接收结点,当执行步骤(4)时,若将“否则转到(7)”改为“否则转到(8)”,将产生什么结果?

答:表明发送方没有收到接收方发出的ACK,于是重传上次的帧。若“转到(8)”,则接收方要发送NAK。发送方继续重传上次的帧。

  1. 试简述HDLC帧各字段的意义。HDLC用什么方法保证数据的透明传输?

答:

(1) 标志字段baiF :标识一个帧的开始与结du束;帧与帧间无信息传输时的填充;实现数据zhi传输的透明性。

(2) 地址字段daoA:使用非平衡方式传送数据时,地址字段总是写人次站的地址。但在平衡方式时(采用ABM),地址字段总是填人应答站的地址。地址字段为全1地址是广播方式,而全0地址是无效地址。

(3) 控制字段C:用于区分信息帧I、监控帧S、无编号帧U。

其中:发送序号N(S),表示当前发送的信息帧的序号。接收序号N(B),表示一个站所期望收到的帧的发送序号,确认[N®-1](mod 8)的帧以及在这以前的各帧。P/F (Poll/Final)表示询问/结止。S帧的第3、4位的具体含义如下表所示。U帧中M为命令和响应的编码,例如:设置平衡配置的异步平衡方式命令SABM,无编号确认UA、拆除链路命令DISC等等。

  1. 修改相关函数,实现停止等待协议。

答:

发送端:	
	public Server()
{
	try
	{
		socket = new DatagramSocket(8888);
		last = 1;   //因为第一个需要的是0号packet
		writeFile = new FileOutputStream("receive.txt");
		receive[0] = 1;
	}
	catch (SocketException e)
	{
		e.printStackTrace();
	}
	catch (FileNotFoundException e)
	{
		e.printStackTrace();
	}
}
接收端:
public Client ()
{
	try
	{
		socket = new DatagramSocket();
		socket.setSoTimeout(TIMEOUT);
		inputFile = new FileInputStream("read.txt");
		order = 0;  //刚开始发送的是0数据包
		inetAddress = InetAddress.getByName("localhost");
		port = 8888;
	}
	catch (SocketException | FileNotFoundException e) {
	e.printStackTrace();
} catch (UnknownHostException e)
{
	e.printStackTrace();
}	 
	}

  1. 修改相关函数,分别使用奇偶校验和CRC冗余校验替代现有的校验方法。
protected override void HashCore(byte[] buffer, int offset, int count)
{
	for (int i = 0; i < buffer.Length; i++)
	{
		byte index = (byte)(_crc ^ buffer[i]);
		_crc = (ushort)((_crc >> 8) ^ _crc16Table[index]);
	}
}
protected override byte[] HashFinal()
{
	byte[] finalHash = new byte[2];
	ushort finalCRC = (ushort)(_crc ^ _allOnes);
	finalHash[0] = (byte)((finalCRC >> 0) & 0xFF);
	finalHash[1] = (byte)((finalCRC >> 8) & 0xFF); return finalHash;
}

  1. 在设置超时计时器,超时时间间隔与那些因素有关?在利用串行口实现的过程中,该数据值如何确定?

答:信道和带宽,略大于从发完数据帧到收到确认帧所需要的平均时间

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值