计算机网络原理实验七实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验七、传输层可靠传输协议GBN编程实验报告

一、实验目的:

1、编程实现简单可靠的数据传输GBN协议,模拟可靠数据传输

2、理解TCP协议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。

二、实验指导:

参考教材。

三、实验要求:

编程实现一个GBN传输协议,采用编程语言不限,要求能将发送――接收流程以及处理方法

表现出来.附源代码及注释并附上实验结果截图。

一、GBN.h

#pragma once

#include

//基础功能模块的数据结构声明

#define BIDIRECTIONAL 1 /* change to 1 if you're doing extra credit and

write a routine called B_output */ 如果你想做酷文解码和写一个程序叫

B_output就改变值为1

/* a "msg" is the data unit passed from layer 5 (teachers code) to layer

4 (students' code). It contains the data (characters) to be delivered to

layer 5 via the students transport level protocol entities. */

一个“msg”是从第五层传送到第四层的数据单元.它包含通过传送层协议被传送到

第五层的数据

struct msg

{ char data[20];

};

/* a packet is the data unit passed from layer 4 (students code) to layer

3 (teachers code). Note the pre-defined packet structure, which all

students must follow. */一个数据包从第四层传送到第三层的数据单元.声明提

前定义的学生必须遵守的数据包结构

struct pkt

{

int seqnum;

int acknum;

int checksum;

char payload[20];

};

#define WINDOWSIZE 8

#define MAXBUFSIZE 50

#define RTT 15.0

#define NOTUSED 0

#define NACK -1

#define TRUE 1

#define FALSE 0

#define A 0

#define B 1

//网络仿真部分数据结构声明***********************************************************

struct event

{

float evtime; /* event time */ 事件时间

int evtype; /* event type code */ 事件类型代码

int eventity; /* entity where event occurs */ 所在的实体事件

发生时

struct pkt *pktptr; /* ptr to packet (if any) assoc w/ this event */用指针来显示这个数据包

struct event *prev;

struct event *next;

};

/* possible events: */可能发生

#define TIMER_INTERRUPT 0

#define FROM_LAYER5 1

#define FROM_LAYER3 2

#define OFF 0

#define ON 1

//基础功能模块的函数声明******************************************************************* void ComputeChecksum(struct pkt *packet);//计算校验和

int CheckCorrupted(struct pkt packet);//检查数据是否出错

void A_output( struct msg message);//A端向外发送数据

void A_input(struct pkt packet);//A端接收数据

void A_timerinterrupt();//A计时器超时

void A_init();//A端初始化

void B_output(struct msg message);

void B_input(struct pkt packet);

void B_timerinterrupt();

void B_init();

//网络仿真部分的函数声明

**************************************************

void init(); //初始化仿真器

float jimsrand();//随机数发生器[0,1]

//处理事件列表部分的函数声明*********************************************

void generate_next_arrival();//产生下一个到达的分组

void insertevent(struct event *p);//向事件列表中插入一条新的事件

void printevlist();//打印事件列表

//******************************************************************** //**********************计时器模块*********************************** void stoptimer(int);//停止计时器

void starttimer(int,float);//启动计时器

//******************************************************************** *

//**************************网络各层之间传送模块***********************

void tolayer3(int AorB,struct pkt packet);//向第3层发送信息

void tolayer5(int AorB,char datasent[20]);//向第5层发送信息

二、GBN.c

#include "GBN.h"

#include

#include

#include

extern int TRACE = 1; /* for my debugging */ 为我的调试

extern int nsim = 0; /* number of messages from 5 to 4 so far */ 目前为止信息的数字是从5到4

extern int nsimmax = 0; /* number of msgs to generate, then stop */ 如果信息产生的数字为0,然后就停止

extern float time = 0.000;

float lossprob; /* probability that a packet is dropped */数据包可能会丢失

float corruptprob; /* probability that one bit is packet is flipped */这一点的数据包可能会被弹出去

float lambda; /* arrival rate of messages from layer 5 */ 从

第五层到达的信息的次序int ntolayer3; /* number sent into layer 3 */被传送到第三层的数据

static int nlost = 0; /* number lost in media */在媒介中数据丢失

相关文档
最新文档