当前位置:文档之家› gobackn协议实验报告

gobackn协议实验报告

一个数据帧如图所示:

其中有效数据和校验码可能含有转义字符。

(3) 帧中各个字段的定义和编码,计算CRC校验和的多项式定义

帧的定义编码:帧中的第一比特为开头FLAG,第二比特是帧的类型,共定义了{data,ack,nak} frame_kind三种类型,用枚举常量表述,第三比特是顺序编码,用于确定到达帧的顺序,第四比特是ACK捎带确认讯息,记录了当前已收到帧的确认情况,这是数据帧的头部。若为数据帧,从第五比特开始为网路层的数据,到网路层包裹信息结束后,接上4比特的CRC校验讯息,后有一结束字符FLAG表明该帧结束。

CRC校验数:CRC校验数据由函数crc32()产生,函数crc32()返回一个32位整数为数据生成CRC-32校验和,并且把这 32比特校验和附在数据字节之后。

多项式定义:采用的CRC校验方案为CRC-32,生成多项式为:

x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1+1

校验和附加在数据帧尾部,接受方用带校验和的数据来逻辑除以生成多项式,余数为零则数据无误码,反之有误码等待发送方重传。

(4) 协议工作时两个站点之间信息交换的过程控制,尤其是发生误码条件下的控制方案

协议工作时,两个站点通过互发数据包交换数据,而控制讯息则稍带在数据讯息中传递,当遇到超时情况时,则主动发送空数据包以提供讯息。

当出现帧丢失时,如收到帧的序号有跳跃,或者出现CRC校验出错丢弃了某帧,会主动发送NAK否定帧,提示重传,接收方丢弃所有的后续帧。若长期未产生放送消息,则出现ACK超时事件,主动发送ACK帧提示确认,对方收到确认后,滑动窗口继续发送,若一直未收到确认讯息,则出现数据帧超时事件,发送方会自动重发未确认帧。

11.3 软件设计

给出程序的数据结构,模块之间的调用关系和功能,程序流程。

(1)数据结构:数据结构是整个程序的要点之一,程序维护者充分了解数据结构就可以对主

要算法和处理流程有个基本的理解。描述程序中自定义结构体中各成员的用途,定义的全局变量和主函数中的变量的变量名和变量所起的作用。

采用字符数组结构来存放数据帧:

typedef unsigned char seq_nr;

typedef unsigned char packet[PKT_LEN];

typedef unsigned char frame_kind;

typedef struct FRAME {

frame_kind kind; /* FRAME_DATA */

seq_nr ack;

seq_nr seq;

packet info;

unsigned int padding;

} frame;

其中:

frame kind 是帧的类型。

Ack 捎带确认数据帧是否正确传到

Seq 是数据帧传输的序号

info是帧传输的内容

Padding是帧经过CRC校验之后所添加的内容

定义的全局变量:

static int phl_ready 表示物理层的状态

int out_buffer_len[MAX_SEQ + 1] 从网络层得到的数据包的长度

主函数中的变量的变量名和变量:

int event 接收方等待的发生事件

int arg 物理层到达的字数

packet buffer[MAX_SEQ+1]; 发送方的数据包缓存区

seq_nr nbuffered 当前帧号

seq_nr next_frame_to_send 下一个要发送的帧的序号

seq_nr ack_expected 期望收到的确认

seq_nr frame_expected; 期望接收到对方的帧的编号

frame r; 变量帧

(2)模块结构:给出程序中所设计的子程序所完成的功能,子程序每个参数的意义。给出子

程序之间的程序调用关系图。

函数between(seq_nr a,seq_nr b,seq_nr c)用于判断收到的ACK序号是否在发送窗口内。a 为下限,b为ack序号,c为上限。

函数send_to_physical(unsigned char *out_buf, int slen)用字符填充方式将帧发送到物理层

函数recv_from_physical(unsigned char *in_buf, int arg)用于从物理层接收一个字节并做处理

函数send_data_frame(frame_kind fk, seq_nr frame_nr, seq_nr frame_expected, packet buffer) 用于发送从网络层得到的数据

函数调用图为:

主函数main

between send_to_phys recv_from_ph send_data_fram

(3) 算法流程:画出流程图,描述算法的主要流程。

11.4 实验结果分析

(1)描述所实现的协议软件是否实现了有误码信道环境中无差错传输功能。

能实现协议软件是否实现了有误码信道环境中无差错传输功能,采用了CRC校验和重传技术是错误得以被发现和纠正。

(2) 程序的健壮性如何,能否可靠地长时间运行。

程序健壮性较好,在高负荷和高误码率等条件下均能工作。

在较低误码率的信道条件下,该程序运行平稳,没有出现任何差错,健壮性良好,在高误码率的信道条件下,程序运行有时会出现中断,但大多数时候运行时间较长,故本程序健壮性良好。

相关主题