当前位置:文档之家› 北京工业大学通信网络基础实验报告

北京工业大学通信网络基础实验报告

6
fd_set rfds, wfds; time_t t; int i; FD_ZERO (&rfds); FD_SET ( sockfd, &rfds ); FD_ZERO (&wfds); FD_SET ( sockfd, &wfds ); time (&t); for ( i = 0; i < MAX_SEQ; i++ )
if ( timer[i] != 0 && t - timer[i] > 5 ) {
printf ( "事件 : 超时\n" ); *event = timeout; return; } if ( select ( sockfd+1, &rfds, &wfds, NULL, NULL) != -1 ) { printf ( "事件 : 帧到达\n" ); *event = frame_arrival; return; } }
(六) ARQ 性能:
正确性(Correctness) 稳妥性(Safety):提交数据顺序、无重复 活动性(Liveness):持续送达 效率(Efficiency) 吞吐量:接收端向高层呈送帧的速率 时延:从发送端收到上层数据的第一个比特开始,到接收端将最后一个比特交付上层的时间 链路利用率:链路传输容量用于有效帧传送的比例
发送端发出一个包后,等待 ACK,收到 ACK,再发下一个包,没有收到 ACK、超时,重 发
重发时,如果 ACK 不编号,因重复帧而回复的 ACK,可能被错认为对其它帧的确认
(五) 发送端算法:
3
(1)SN = 0 (2)从高层接收数据,分配一个序号 (3)发送第 SN 号帧 (4)等待接收端的确认信号 (5)给定时间内收到确认帧,如果 RN > SN,设 RN 为 SN,发送该 SN 号帧 (6)给定时间内没有接收到确认帧,重复发送原 SN 号帧 (7) RN = 0 (8)接受到一个无错的、SN 序号等于 RN 的帧,向上层递交该帧,RN 加 1,在规定时间内, 向发送端回复一个带有 RN 的帧
int i, j, k, l; int bin[(int) (log (MAX_PKT)/log (2))+1]; for ( i = 0, j = 1, k = 0; i < MAX_PKT-1; i++ )
if ( i == j - 1 )
7
{ ham_code[i] = '0'; j *= 2;
(七) 停等式 ARQ 链路利用率
TD: 数据帧传输时间 TA: 确认帧传输时间 TP: 帧传播时间 S: 无差错传输时差 E: 链路利用率
4
(八) 有帧丢失时的传输效率
P:帧错误/丢失概率 发送成功需要帧数 X 的概率分布 P(X=1) =1-p P(X=2) = 2g = P(1 -P)

参数为 1-p 的几何分布(定义 1) X: 发送成功需要的平均帧数
5
#define ServerIP "127.0.0.1" #define inc(k) if (k < MAX_SEQ) k = k + 1; else k = 0 typedef unsigned int seq_nr; //typedef enum { false, true } bool; typedef enum { data, ack, nak } frame_kind; /* --- 定义包结构 --- */ typedef struct {
(一) 实验目的:
2
1. 理解数据链路层 ARQ 协议的基本原理 2. 提高解决问题的能力 3. 提高程序语言的实现能力
(二) 实验设备
微型计算机、Visual6.0 开发环境
(三) 实验内容
利用所熟悉的语言实现停等式 ARQ 协议
(四) 停等式 ARQ 简介
停等式 ARQ 的基本思想是在开始下一帧传送以前
(九)实验运行基本条件:
该实验必须在 LINUX 的 gcc 操作环境下使用,否则程序会出错。而选择 LINUX 操作系统的 原因在于 LINUX 系统较 WINDOWS 系统稳定。
(十)程序实现:
程序共四个部分,首先必须给传输信号输入一个共同遵守的传输
准则,即 protocol.h
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #define MAX_PKT 12 #define BUF_SIZE 18
unsigned char data[MAX_PKT]; } packet; /* --- 定义帧结构 --- */ typedef struct {
frame_kind kind; seq_nre;
/* --- 全局变量声明 --- */ struct sockaddr_in Server, Client; int sockfd, newsockfd; int Port, NumOfFrames = 10; char buffer[BUF_SIZE]; int NETWORK_LAYER, Index = 0; time_t timer[MAX_SEQ]; /* ----- ARQ 协议函数 ----- */ void wait_for_event ( event_type *event ); void Dec_Bin ( int Index, int Bin[] ); void generate_ham_code ( char data[], char ham_code[] ); int check_sum ( char ham_code[] ); void from_network_layer ( packet *p ); void to_network_layer ( packet *p ); void from_physical_layer ( frame *r ); void to_physical_layer ( frame *s ); void start_timer ( seq_nr k ); void stop_timer ( seq_nr k ); void start_ack_timer ( void ); void stop_ack_timer ( void ); void enable_network_layer ( void ); void disable_network_layer ( void ); /* -- 事件类型 -- */ void wait_for_event ( event_type *event ) {
Bin[i] = 0; i = 0; while ( Num != 0 ) {
Bin[len-1-i++] = Num % 2; Num = Num / 2; } }
/* --- 生成校验码 --- */ void generate ( char data[], char ham_code[] ) {
通信网络基础实验 报告
学号:12021130 姓名:周道
专业:电子信息工程实验班 指导老师:孙恩昌
1
目录
(一) 实验目的:.............................................................................................................................2 (二) 实验设备.................................................................................................................................3 (三) 实验内容.................................................................................................................................3 (四) 停等式 ARQ 简介.................................................................................................................. 3 (五) 发送端算法:.........................................................................................................................3 (六) ARQ 性能:........................................................................................................................... 4 (七) 停等式 ARQ 链路利用率...................................................................................................... 4 (八) 有帧丢失时的传输效率.........................................................................................................5 (九)实验运行基本条件:.............................................................................................................5 (十)程序实现:.............................................................................................................................5 程序共四个部分,首先必须给传输信号输入一个共同遵守的传输准则,即 protocol.h.......... 5 发送端发送程序(sender.c):........................................................................................................10 接收端程序(receiver.c):.............................................................................................................. 13 伪代码:........................................................................................................................................... 15 (十一)参考文献...........................................................................................................................16
相关主题