数据链路层滑动窗口协议的的设计与实现 的讲义ch3Lab.pptVIP

  • 7
  • 0
  • 约4.14千字
  • 约 16页
  • 2018-06-29 发布于福建
  • 举报

数据链路层滑动窗口协议的的设计与实现 的讲义ch3Lab.ppt

数据链路层滑动窗口协议的的设计与实现 的讲义ch3Lab

数据链路层 滑动窗口协议的设计与实现 基本内容 实验内容 设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道两站点间无差错双工通信 信道模型 8000bps全双工卫星信道 单向传播时延270毫秒 信道误码率为10-5 物理层接口:提供帧传输服务,帧间有1ms帧边界 网络层属性:分组长度固定256字节 实验组人数 1~3人 实验设备环境 WindowsXP,Microsoft Visual C++ 6.0 Linux (Ubuntu, Fedora, RedHat) 实验步骤 熟悉编程环境 安装好VC6.0或兼容的更高版本的C语言编程环境 了解程序的主体运行框架 可利用的子程序 协议设计和程序总体设计 设计好要实现的滑动窗口协议,定义帧字段,规划程序的总体结构,相关子程序的设置 编码和调试 将所设计的协议编码实现并上机调试通过,实现数据链路层两个站点之间的通信。 软件测试和性能评价 在无误码信道环境下运行测试 有误码信道环境下的无差错传输 要求:稳定运行20分钟以上,效率不能太低 实验报告及程序验收 Windows环境编译和运行 编译 程序运行(启动两个进程) A站:datalink.exe a3 B站:datalink.exe b3 产生的日志文件 datalink-A.log datalink-B.log Linux环境编译和运行 操作系统 RedHat,Fedora Ubuntu 编译 make 程序运行(启动两个进程) A站:./datalink a3 B站:./datalink b3 产生的日志文件 datalink-A.log datalink-B.log 程序运行:命令行选项 启动执行EXE文件时,在命令行中附带一些选项对程序的执行进行控制 日志函数 函数 extern void log_printf(char *fmt, ...); extern void lprintf(char *fmt, ...); 举例 log_printf(”Received a frame, %d bytes\n”, len); 该语句输出: 23.176 Received a frame, 248 bytes log_printf(”Received a frame, ”); log_printf(”%d bytes\n”, len); 所得到的输出: 23.176 Received a frame, 23.176 248 bytes 应使用 log_printf(”Received a frame, ”); lprintf(”%d bytes\n”, len); 日志文件 log_printf和lprintf在当前屏幕的输出存于日志文件中 上下层接口函数 运行环境的初始化 void protocol_init(int argc, char **argv); 与网络层模块的接口 #define PKT_LEN 256 void enable_network_layer(void); void disable_network_layer(void); int get_packet(unsigned char *packet); void put_packet(unsigned char *packet, int len); 与物理层模块的接口 int recv_frame(char *buf,int size); void send_frame(char *buf, int len); 事件驱动函数 int wait_for_event(int *arg); #define NETWORK_LAYER_READY 0 #define PHYSICAL_LAYER_READY 1 #define FRAME_RECEIVED 2 #define DATA_TIMEOUT 3 #define ACK_TIMEOUT 4 样例程序datalink.c 样例程序实现了简单的全双工“停-等”协议 未设ACK定时器,收到数据就立刻回复ACK 未实现NAK 编辑,编译 运行 分别在两个DOS窗口运行datalink a和datalink b,那么会启动两个站运行。 如果运行datalink a3和datalink b3,那么,会打印出协议运行信息。协议运行信息的输出,也是在datalink.c中设定的 CRC校验和的产生与验证 unsigned int crc32(unsigned char *buf, int len); 校验和产生 char *p;为p指向的缓冲区内243字节数据生成校验和,并把校验和附在243字节之后 *(unsigned

文档评论(0)

1亿VIP精品文档

相关文档