计算机网络原理GBN协议代码
更新时间:2023-10-01 23:10:01 阅读量: 综合文库 文档下载
- 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 */
/* a \4 (students' code). It contains the data (characters) to be delivered to layer 5 via the students transport level protocol entities. */ 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 \#include
extern int TRACE = 1; /* for my debugging */
extern int nsim = 0; /* number of messages from 5 to 4 so far */
extern int nsimmax = 0; /* number of msgs to generate, then stop */
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 */
static int ncorrupt = 0; /* number corrupted by media*/
static int expectedseqnum = 0; /* expected sequence number at receiver side */
static int nextseqnum; /* next sequence number to use in sender side */
static int base; /* the head of sender window */
struct pkt winbuf[WINDOWSIZE]; /* window packets buffer */
static int winfront,winrear; /* front and rear points of window buffer */
static int pktnum; /* packet number of window buffer */
struct msg buffer[MAXBUFSIZE]; /* sender message buffer */
int buffront,bufrear; /* front and rear pointers of buffer */ static int msgnum; /* message number of buffer */
int packet_lost =0; int packet_corrupt=0; int packet_sent =0;
extern int packet_correct=0; extern int packet_resent =0; int packet_timeout=0;
extern struct event *evlist = NULL; /* the event list */
//计算校验和
void ComputeChecksum( struct pkt *packet) { int checksum; int i; checksum = packet->seqnum; checksum = checksum + packet->acknum; for ( i=0; i<20; i++ )
checksum = checksum + (int)(packet->payload[i]); checksum = 0-checksum; packet->checksum = checksum; }
//检查是否出错
int CheckCorrupted(struct pkt packet) { int checksum; int i; checksum = packet.seqnum; checksum = checksum + packet.acknum; for ( i=0; i<20; i++ )
checksum = checksum + (int)(packet.payload[i]); if ( (packet.checksum+checksum) == 0 ) return (FALSE); else return (TRUE); }
//A端向外发送数据
/* called from layer 5, passed the data to be sent to other side */ void A_output(struct msg message) { int i; struct pkt sendpkt; /* if window is not full */ if ( nextseqnum < base+WINDOWSIZE ) { printf(\New message arrives, send window is not full, send new messge to layer3!\\n\ /* create packet */ sendpkt.seqnum = nextseqnum; sendpkt.acknum = NOTUSED; for ( i=0; i<20 ; i++ ) sendpkt.payload[i] = message.data[i];
正在阅读:
计算机网络原理GBN协议代码10-01
关于女生幸福的微信英文个性签名11-20
300B 单端胆机的实作01-30
2020年银行客户经理工作计划范文12-11
道路交通安全工作方案2012-201305-06
中华人民共和国新劳动合同法全文04-15
大学教学教务管理系统需求分析10-23
生物化学复习资料12-21
药用植物学多套合集 - 图文10-22
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 计算机网络
- 原理
- 协议
- 代码
- GBN
- 福建省龙岩市高陂中学2015届九年级5月模拟语文试题(含答案)
- 实验四:TTL集成门电路逻辑变换(tian) - 图文
- 生物饲料技术内涵辨析
- 机械设计课程设计(二级展开式减速器)
- 高效液相色谱法测定食醋和酱油中苯甲酸钠和山梨酸钾含量
- 《广州市城市道路绿化养护管理质量标准》一级养护标准
- 通信原理实验模拟调制系统 - 图文
- 免费下载2004年咨询工程师《工程项目组织与管理》试题及答案
- 数据库报告
- 自写-六旋翼无人机发明实用新型专利撰写范例
- 安防私有云存储方案(NOV 4th)剖析 - 图文
- 最新部编本人教版三年级数学上册期中检测卷(附答案)
- 发动机常用术语英语翻译
- 兴仁县第三中学突发公共事件应急预案
- 惠农信息平台建设汇报
- 最新湘教版美术八年级上册第四课《触摸美丽》教案 doc
- 姓名笔划数看一生吉凶命
- 真空吸塑胶在真空吸塑贴膜中的应用
- 筏板基础施工方案
- 重庆市建设工程安全文明施工费计取及使用管理规定渝建发〔2014〕25号