APP下载

基于实际开发平台的Semi-TCP与ARQ协议的联合实现

2018-07-06张绍凤罗佳伟姜胜明

现代计算机 2018年16期
关键词:开发板接收端数据包

张绍凤,罗佳伟,姜胜明

(上海海事大学信息工程学院,上海 201306)

0 引言

Semi-TCP[1]通过将TCP的拥塞控制下放到链路层,已经提高了无线多跳网络下的拥塞控制性能[2],但是实现可靠性控制的ARQ重传机制和TCP并没有结合,因此导致ARQ传输节点传输压力很大,针对该种现状,Semi-TCP与ARQ协议相结合的差错控制的研究是很有意义的。ARQ是一种基于帧的差错控制技术[3],主要是通过重传链路中丢失或出错的数据帧来提高数据传输的可靠性,一般来讲,ARQ协议涉及了以下机制:链路错误检测、定时器、确认和重传。当发送方无法确认接收方是否正确收到某些数据帧时[4],它就自动重传这些帧。因此提出在无线多跳网络下,通过将数据链路层的ARQ协议和现有Semi-TCP联合实现来提高数据传输可靠性。

Semi-TCP协议已经在实际平台ARM开发板得以实现[3],现基于ARM内核的nRF51822开发板,通过C语言修改相关函数完成数据收发、手动定义发送帧、以及设置相应参数、不修改已有MAC层的底层帧和现有的硬件配置信息,完成链路层ARQ协议的添加并进行功能和性能测试[5]。

1 ARQ协议实现原理

1.1 ARQ 协议算法

差错控制一般是指监测和改正错误数据包的机制[6]。大多数ARQ的差错控制技术是基于ACK/NACK和重传。一般情况下有三种基本的ARQ理论[7]:stopand-wait ARQ,go-back-N ARQ 和 selective-repeat ARQ。

在stop-and-wait ARQ中,发送端每发出一个数据包都必须等待确认信号,在收到确认信号之前不发任何新的数据包。它的主要优点是构造简单、算法复杂度低,缺点是效率低下,目前很少单独使用。在goback-N ARQ中,发送端不考虑接收端的接收情况连续发出数据包,若没有错误产生,接收端确认所有收到的帧。如果接收端检测到错误,则向发送端发出NACK信号,发送端收到此信号后开始重新发送从错误包开始之后的所有数据,这样以来重发的数据包个数N不能确定,因此称作go-back-N ARQ。在接收端,如果一个数据包存在错误,那么在此数据包之后所收到的N个数据包都将被丢弃。这种算法的主要优点是复杂度低,缺点是信道利用率不高,当信道条件较差的时候通过率急剧下降。在selective-repeat ARQ中,仅重传错误数据包。它的效率最高,但是存在一个影响其应用的缺点:为保证重传数据包逻辑顺序的正确,接收端需要一个足够大的缓存来存储已经接收到的所有数据包直到错误数据重传成功。随着传输速率的加大,这种重传方案所需要的缓存数量是惊人的。

基于nRF51822开发板低功耗并且接收到数据能及时转发同时擦除缓存数据,采用selective-repeat ARQ相对较适宜,因此主要实现selective-repeat ARQ的算法流程。

1.2 ARQ 协议实现场景

ARQ协议的实现场景适用于无线网络场景下,而nRF51822作为一个一款集成nRF51x系列无线收发器的超低功耗的片上系统(SoC),包含32位ARM Cortex-M0 CPU等,同时具有完善的蓝牙协议栈,支持网络协议的添加和更改,是测试协议及其增强的良好平台,蓝牙协议栈的无线架构如图1所示。

图1 蓝牙协议栈无线架构概览

图1中从上到下依次是应用层、主协议层以及控制层,其中控制层(Controller)中从下到上分别是物理层、数据链路层和主机控制层(HCI),这三层主要位于控制器中。其中物理层主要负责从信道中发送接收数据,使数据符合数据流的格式;而数据链路层则负责链路的管理和控制,包括创建、维护、释放等;主机控制器则负责与数据无关的蓝牙系统的操作,例如询问蓝牙设备是否存在,连接蓝牙设备,或者让本地的蓝牙可以被其他设备发现或连接。为了执行响应的功能,HCI要求及通过基带的资源控制器访问传输媒介。同时,设备管理器还通过HCI命令控制本地设备的控制行为。

主协议层(Host)包括逻辑链路控制和适配协议(L2CAP),应用程序和服务提供了基于信道的抽象,包括进行数据分片化和组装应用程序的数据,复用和反复用多通道共享一个逻辑链路。除了L2CAP,主协议层还包括安全管理协议(SMP)和属性协议(ATT);安全管理协议(SMP)负责使用信道实现设备之间安全功能,属性协议(ATT)提供了在一个固定的L2CAP信道上传输少量数据的方法,也用于确定其他设备的服务和其他设备的功能;而通用属性(GATT)配置文件指定了配置文件数据交换的结构,该结构定义概要文件中使用的基本元素,如服务和特性;最后通用访问配置文件(GAP)定义了蓝牙设备的基本要求。

应用层(Apps)上定义了三种规范:特征、服务和概述。每种规范都是建立在GAP上,GAP定义了特征和服务的属性,应用层则定义如何使用这些属性组。

2 ARQ协议的具体实现

2.1 开发环境

nRF51822属于挪威NORDIC公司推出的nRF51系列2.4G无线低功耗片上方案解决系统中的一员,以Cortex M0内核为基础,结合BLE4.0的SoC,因此开发软件也与其他ARM芯片类似,都采用Keil进行开发,而Keil MDK-ARM是美国Keil软件公司出品的支持ARM微控制器的一款集成开发环境,包含了工业标准的编译器和调试器等组件,是目前来说比较完善的开发环境。一般而言,nRF51822芯片有两种开发方式,一种是直接在上面编写应用程序;一种是使用nRF51822的SoftDevice,SoftDevice是一个低功耗蓝牙协议栈,这个协议栈并没有像TI一样做成系统形式直接和应用代码一起下载,而是先必须把协议栈烧录到芯片内,然后再用Keil通过仿真器下载应用代码,并且安装协议栈工具nRFgostudio来实现协议栈的代码。

2.2 ARQ 协议实现的具体流程

ARQ协议的实现关键在于对于帧结构的定义以及定时器的设置。就停等式ARQ协议而言,发送数据的同时设置定时器开始计时,接收端收到数据则发送ACK确认帧,定时器规定时间内收到接收端的确认帧则发送成功,若数据帧在发送过程中丢失,则不会产生确认帧,等定时器时间到后重新发送该数据,若确认帧丢失,则也重新发送,最后若定时器未超时,数据校验后出现错误,也要重传数据。该ARQ协议实现流程如图2所示。

图2 ARQ算法实现流程图

在进行协议添加之前首先需要完成协议栈的初始化,其中包括使用timers_init()函数完成定时器的初始化,以及使用ble_stack_init()完成蓝牙协议栈的初始化,同时还有使用device_manager_init(eraser_bonds)完成设备管理初始化等,还包括使用gap_params_init()函数完成GAP参数的初始化,使用services_init()函数完成服务初始化和使用conn_params_init()函数完成更新过程的初始化,更为重要的是需要使用nrf_esb_init()函数完成esb初始化,然后通过nrf_esb_enable()函数打开esb。开发板进行通信之前也需要完成相应的参数配置,参数配置完成以及初始化完成后进行数据的相应发送和接收,主要通过application_timers_start()实现定时器开始计时,使用nrf_esb_add_packet_to_tx_fifo()将相应数据加入发送队列,发送方板子通过rx_char_add发送数据,接收方板子通过tx_char_add接收数据,接收到数据之后查看定时器时间,若未超时则触发函数发送ACK确认帧,然后根据判定条件完成数据分析,若判定条件为正确的,则完成一次数据发送。若规定时间内未收到发送数据或者数据分析判定条件显示错误,则不发送ACK确认帧,只等待数据的下一次发送。发送方在规定时间内未接收到ACK确认帧,则重新发送数据。

3 Semi-TCP与ARQ协议联合实现与测试结果

测试的目的主要是为了测试ARQ协议添加之后网络是否出现异常以及ARQ协议是否按照最初设想完成相应协议功能。测试环境首先需要两台开发板测试机,一台作为发送方测试机,一台作为接收方,然后通过端到端的连通测试工具ping命令对网络连通状态进行判断和分析[2],通过ping命令的反馈查看网络连通状态是否良好,是否连接畅通;其次在通过ARQ协议收发ACK确认帧数据的同时,也设置了相应的收发判断函数,通过该判断函数查看数据是否同ACK帧反应的收发情况一致。

通过ping命令反应发送方与接收方之间网络连接畅通,丢包率为0,只是时延略有一点延长;同时通过函数 void nrf_esb_tx_success(uint32_t tx_pipe,int32_t rssi)以及函数 void nrf_esb_tx_failed(uint32_t tx_pipe)以及函 数 void nrf_esb_rx_data_ready(uint32_trx_pipe,int32_t rssi)以及 void nrf_esb_disabled(void)完成结果测试,最终发现测试函数反映的数据收发情况与ACK确认帧反映的数据收发情况一致。

4 结语

随着对网络协议的研究深入,网络协议在实际平台上的实现与测试也变得愈发重要。在实际平台nRF51822开发板,通过函数的调用与协议栈的参数设置联合实现Semi-TCP与ARQ协议,并通过建立ARQ不同的纠错能力的多个场景,根据具体测试函数完成对该方案的测试,对其的性能进行分析。由此得知,Semi-TCP与ARQ协议的联合实现,确实在一定程度上提高了通信的可靠性,减小了ARQ节点传输压力,但仍需在平台不断调试优化。

[1]Jiang Sheng-ming,Zuo Qin,Wei Gang.Decoupling Congestion Control from TCP for Multi-hop Wireless Networks:Semi-TCP[C].Proc.of the 4th ACM Workshop on Challenged Networks.Beijing,China:ACM Press,2009.

[2]刘杰,姜胜明.Semi-Tcp协议在ARM开发板RP4412下的实现方法.上海:1007-1423(2017)11-0065-05,2017-04-10

[3]谢希仁.计算机网络[M](第4版).北京:电子工业出版社,2003.

[4]莫国庆,马涛.具有链路层ARQ机制的TCP研究.解放军理工大学,2007.

[5]熊晨霖.Semi-TCP在海洋互联网中的应用仿真研究[D].华南理工大学,2016.

[6]刘梅,姜胜明,陆以勤.无线多跳网络中Semi-TCP协议的实现[J].计算机工程,2012(09):79-82.

[7]W.Stallings.Data and Computer Communications.Upper Saddle River,NJ.Prentice Hall,1997.

猜你喜欢

开发板接收端数据包
二维隐蔽时间信道构建的研究*
基于扰动观察法的光通信接收端优化策略
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
基于STM32H7的FDCAN通信系统设计与实现∗
纯多播BC 信道并存单播MAC 信道的天线效率研究
手机无线充电收发设计
C#串口高效可靠的接收方案设计
开发板在单片机原理及接口技术课程教学中的应用
基于盲波束形成的MIMO雷达稳健参数估计
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证