gobackn协议实验报告

2018-12-04 17:01

一,描述本次实验的任务、内容和实验环境。 1,实验内容和任务: 利用所学数据链路层原理,自己设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道环境下。两站点之间无差错双工通信。信道模型为8000bps 全双工卫星信道,信道传播时延270毫秒,信道误码率为10-5,信道提供字节流传输服务,网络层分组长度在240~256字节范围。深刻理解数据链路层的字节填充方式的成帧技术,误码检测的CRC 校验技术,以及滑动窗口的工作机理。对参数进行设计,充分理解滑动窗口协议的工作原理并利用所学的理论知识,经过认真的推算,计算出最优取值,并通过程序的运行进行验证。 2,实验设备环境: WindowsXP环境PC机,Microsoft Visual C++ 6.0 集成化开发环境。 二, 协议设计: (1) 设计该协议的目的,基本原理 该实验协议包括物理层,数据链路层和网络层。 本实验主要设计数据链路层协议,实现有噪声环境下高信道利用率传输,采用了回退n帧技术的协议。接受方窗口大小为1,发送方窗口大小为N。通过捎带确认(piggybacking)来完成可靠的数据通信;由于出现信道误码而导致收帧出错时,接受方会丢弃所有的后续帧,待定时器超时后发送方重发。首先从网络层接受要发送的数据包,将之分拆成数据帧;然后按成帧方案完成分帧,加校验码,加ack等操作;再进行适当的流量判断和拥塞控制;最后启动定时器将之传递给物理层。数据帧经信道传送给接受方,接受方数据链路层执行与成帧相逆的操作;处理ack信息,终止定时器(或启动ack定时器,ack成帧传送);判断是否为预期数据,数据是否出错,提交给网络层。 (2) 成帧方案,帧边界和转义字符的定义及转义方法 使用的成帧方案:含字节填充的分界符法,即让每一帧都用一些特殊的字节(FLAG)作为开始和结束。当有效载荷域中含有标志字节或转义字节时,在每个在有效载荷域中出现的标志字节或转义字节前均要加一个转义字节(ESC)。接受端的数据链路层在将数据送给网络之前删除掉转义字节。 一个数据帧如图所示: 起始标志字节 本帧序号 捎带确认序号 有效数据 校验码 结束标志字节 其中有效数据和校验码可能含有转义字符。

(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) 用于发送从网络层得到的数据 函数调用图为:

between send_to_physrecv_from_phsend_data_fram 主函数main (3) 算法流程:画出流程图,描述算法的主要流程。

11.4 实验结果分析

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

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

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

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

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


gobackn协议实验报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:物业管理方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: