计算机网络原理实验七实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 */在媒介中数据丢失