Lab3 链路层实验

注意事项

简介

到目前为止,我们主要在学习物理层,已经设计了帧同步算法和离线OFDM接收机的信号处理模块。在本次实验中,我们将开始学习链路层,特别是在物理层不可避免出现错误情况下,在链路层实现可靠传输。具体来说,我们将首先设计一个“ 发送机接收机 ”,并构建两个单向通信的节点(节点A作为发送机,节点B作为接收机);接着设计两个“收发机”,其中收发机既有发送模块也有接收模块,并构建两个双向通信的节点。

为了简化实现,本实验将使用简化的物理层,不进行物理层信号处理。即采用Socket直接模拟双向物理层通信链路传输数据包(该链路将有时延与丢包),然后要求同学们在非可靠物理层基础上实现ARQ可靠传输协议。该协议未来是可以在Pluto SDR平台上运行,将会用于大项目。这里 Socket 是计算机网络课程中介绍的一个重要概念,它是互联网多样应用程序的基石。Socket本身是应用层与传输层的接口,在传输层之下会有网络层、链路层与物理层。本实验只是用Socket在本地用来模拟两个收发机的通信链路,我们将会提供参考代码,同学们只需要简单的把它抽象成不可靠的通信链路即可。

此外,为了帮助实现收发机,我们将提供了一个基于多线程架构的参考实现,即代码分为链路层(即LLC)和物理层(即PHY),中间使用队列进行交互。在发送方向上,链路层负责根据协议状态生成帧,然后放入队列,物理层负责发送;在接收方向上,物理层负责接收,然后放入队列,链路层提取帧更新协议状态。同学们只需要在这个框架内完成一些函数实现,就能完成本次实验。这里线程是并发编程中的一个基本概念,是一种可以充分利用多核CPU进行处理的方法。

第一部分: 使用Socket PHY测试单向通信(15%)

在这一部分中,节点A只有发送机,节点B只有接收机。在我们提供的参考代码中,节点A发送,节点B接收。

步骤和要求

(py37)$ python test_nodeB.py -p socket -l single    # run first
(py37)$ python test_nodeA.py -p socket -l single

第二部分: 使用Socket PHY测试双向通信(20%)

在这一部分中,节点A和B都具有收发机。在我们提供的参考代码中,节点A触发包传输,并且在节点B接收到包后,它将回馈一个随机的包。然后节点A对随机包进行解码。整个过程继续。

步骤和要求

(py37)$ python test_nodeB.py -p socket -l double    # run first
(py37)$ python test_nodeA.py -p socket -l double

第三部分: 使用Socket PHY开发停止等待ARQ协议 (50%)

步骤和要求

(py37)$ python test_nodeB.py -p socket --arq-mode stop-and-wait-ARQ   # run first
(py37)$ python test_nodeA.py -p socket --arq-mode stop-and-wait-ARQ

说明与提示

第四部分: 使用停止等待ARQ协议实现可靠图像传输 (15%)

步骤和要求

提示

第五部分: 实现滑动窗口ARQ (可选,加分5%)

要求