文档库 最新最全的文档下载
当前位置:文档库 › 数据链路层滑动窗口协议

数据链路层滑动窗口协议

湖南工业大学

课程设计

资料袋

计算机与通信学院学院(系、部)2011 ~ 2012 学年第 1 学期课程名称计算机网络原理指导教师职称副教授学生姓名专业班级学号

题目数据链路层滑动窗口协议

成绩起止日期2011 年11 月24 日~2011 年12 月 4 日

目录清单

序号材料名称资料数量备注

1 课程设计任务书 1

2 课程设计说明书 1

3

4

5

6

课程设计任务书

2011 —2012学年第1 学期

学院(系、部)计算机与通信学院专业软件工程班级091班

课程名称:计算机网络原理学生姓名:杨婷婷

设计题目:数据链路层滑动窗口协议指导教师:李建设

完成期限:自2011 年11 月24 日至2011 年12 月 4 日共 2 周

内容及任务一、设计内容

在一个数据链路层的模拟实现环境中,实现下面两个数据链路层协议。

1.“退回到N 重发”的滑动窗口协议(参考文献[2]);

2.“选择重发”的滑动滑动窗口协议(参考文献[2]);

3.发送和接收端均以图形方式显示

二、设计任务

课程设计说明书(纸质+电子版),内容包括:设计内容、系统分析(包括可行性分析、需求分析等)及功能分析;系统设计(要求画出系统整体功能框图、流程图、并给出相应地关键的代码且对所使用的主要数据结构进行说明等。)、设计总结(评价/遇到的问题/体会/建议等)、使用说明等。

三、设计要求

1.按功能要求开发系统,能正确运行。程序代码书写规范,有充足的注释。

2.课程设计所使用的编程语言任选,但建议使用C和C++;

3.绿色软件:程序运行不需安装,避免写系统和注册表;

进度安排

起止日期工作内容

2011-11-24~2011-11-27 选题

2011-11-28~2011-11-29 系统分析和设计;

2011-11-30~2011-12-3 熟悉软件开发工具、编码系统、系统测试

2011-12-04~2011-12-05 撰写并提交课程设计说明书(含电子文档)、源程序等。

主要参考资料[1] (美) Larry Peterson著,薛静锋等译. 《计算机网络:系统方法》(第4版) ,机械工业出版社,2009

[2] (荷) Andrew S.Tanenbaum著,潘爱民译. 《计算机网络》(第4版),清华大学出版社, 2004

[3] 谢希仁著.《计算机网络》((第5版) ,电子工业出版社, 2008.1

[4] 吴功宜等著.《计算机网络课程设计》,机械工业出版社,2005

指导教师(签字):年月日系(教研室)主任(签字):年月日

课程设计说明书

课程名称:计算机网络原理

设计题目:数据链路层滑动窗口协议

专业:软件工程班级: 091班

学生姓名: 杨婷婷学号: 09408300109 指导教师:李建设

2011年12 月4 日

目录

目录 (4)

1、课程设计简介 (5)

1.1 课程设计的目的 (5)

1.2 课程设计内容 (5)

2、课程设计实现过程 (7)

2.1实验环境所提供的文件和编译运行方法 (7)

2.3协议运行环境的初始化 (9)

2.4与网络层模块的接口函数 (10)

2.5事件驱动函数及程序流程 (11)

2.6与物理层模块的接口函数 (12)

2.7 CRC校验和的产生与验证 (13)

2.8定时器管理 (13)

2.9协议工作过程的跟踪和调试 (14)

2.10命令行选项 (14)

2.11错误信息 (16)

3 、TCP协议原理 (17)

3.1 TCP协议状态转移图 (17)

3.2 TCP报文格式 (18)

4 、正确性测试及性能测试 (19)

5、设计总结 (19)

参考文献 (20)

源代码清单 (20)

1、课程设计简介

1.1 课程设计的目的

利用所学数据链路层原理,自己设计一个滑动窗口协议并在仿真环境下编程实现有噪音信道环境下的可靠的双工通信。信道模型为8000bps全双工卫星信道,信道传播时延270毫秒,信道误码率为10-5,信道提供字节流传输服务,网络层分组长度在240~256字节范围。

通过该实验,进一步巩固和深刻理解数据链路层的字节填充方式的成帧技术,误码检测的CRC校验技术,以及滑动窗口的工作机理。滑动窗口机制的两个主要目标:(1) 实现有噪音信道环境下的无差错传输; (2)充分利用传输信道的带宽。在程序能够稳定运行并成功实现第一个目标之后,运行程序并检查在信道没有误码和存在误码两种情况下的信道利用率。为实现第二个目标,提高滑动窗口协议信道利用率,需要根据信道实际情况合理地为协议配置工作参数,包括滑动窗口的大小和重传定时器时限以及ACK搭载定时器的时限。这些参数的设计,需要充分理解滑动窗口协议的工作原理并利用所学的理论知识,经过认真的推算,计算出最优取值,并通过程序的运行进行验证。

通过该实验提高同学的编程能力和实践动手能力,体验协议软件在设计上各种问题和调试难度,设计运行期可跟踪分析协议工作过程的协议软件,巩固和深刻理解理论知识并利用这些知识对系统进行优化,对实际系统中的协议分层和协议软件的设计与实现有基本的认识。

1.2 课程设计内容

设数据链路层通信的两个站点分别为站点A和站点B,仿真环境利用WindowsXP环境下的TCP协议和Socket客户端/服务器机制构建两个站点之间的通信,其中,站点A 为服务器端,站点B为客户端。编译、链接之后最终生成的可执行程序(.exe文件)为字符界面命令行程序(不是图形界面程序)。可执行程序文件仅有一份,设为datalink.exe,在WindowsXP的两个DOS窗口中使用不同的命令行参数启动两个进程,分别仿真站点A 和站点B。例如:

启动站点A进程的DOS命令:dataink a

启动站点B进程的DOS命令:datalink b

其中,站点A以TCP服务器的身份运行,默认监听TCP的59144端口;站点B以TCP 客户端身份运行,默认呼叫127.0.0.1的TCP协议59144端口。默认端口号59144,必要的时候可以更改为其他端口,参见后面的说明。在程序运行时应注意WindowsXP的防火墙设置解除对所用TCP端口的访问阻止。

可执行程序中包括物理层,数据链路层和网络层三部分内容,其中,物理层和网络层程序由程序库提供,数据链路层程序由同学自行完成,最终链接为一个可执行文件。程序的总体结构与协议的分层结构相对应,如图1所示。

物理层:物理层为数据链路层提供的服务为8000bps,270ms传播延时,10-5 误码率的字节流传输通道。为了仿真实现上述服务质量的信道,利用在同一台计算机上TCP socket完成两个站点之间的通信。由于同一台计算机上TCP通信传播时延短、传播速度快、没有误码,物理层仿真程序在发送端限制发送速率以仿

真8000bps线路;在接收端误码插入模块利用一个伪随机数“随机地”篡改从TCP收到的数据,使得所接收到的每个比特出现差错的概率为10-5;接收到的数据缓冲后延时270ms 才提交给数据链路层程序,以仿真信道的传播时延特性。数据链路层利用接口函数send_byte()和rece_byte()发送和接收一个字节。

数据链路层:数据链路层程序由同学自己设计完成,通过物理层提供的单字节发送和接收函数利用物理层提供的字节流服务。通过get_packet()函数从网络层得到一个分组,当数据链路层成功接收到一个分组后,通过put_packet()函数提交给网络层。

网络层:网络层利用数据链路层提供的“可靠的分组传输”服务,在站点A与站点B 之间交换数据分组,分组的长度范围为240~256字节。网络层把产生的分组交付数据链路层,并接受数据链路层提交来的数据分组。

协议工作的正确性验证:如果数据链路层程序能够正确工作,站点A通过数据链路层发送的分组流,经过有噪音的信道传输后,站点B就能够以同样的顺序收到同样内容的分组流。验证数据链路层程序的正确性的一种方法为:在站点A记录发送的分组流,在站点B记录接收到的分组流,比较这两份记录是否相同。为了简化这项工作,这里的网络层程序实现了一个“分组序列发生器”。“分组序列发生器”根据一个伪随机数公式,按照一种固定的模式产生分组流,根据公式计算出的项目包括分组长度和分组中每个字节的值;在接收方用同样的公式计算一次,比对收到分组的分组长度和分组中每个字节的值是否与约

定的模式完全相同,这样就可以验证数据链路层是否实现了承诺的“无差错分组流传输”服务。一旦检查出数据链路层出错,程序打印错误信息后立刻中止运行。站点A到站点B 方向和站点B到站点A方向分别使用不同的伪随机数公式,在全双工通信条件下双向同时进行分组序列的产生和验证工作。程序库提供了多种选项,通过在启动站点进程的命令中用不同的命令行参数选项控制“分组序列发生器”的分组

产生模式,“命令行选项”中有详细的说明。本次实验中库程序提供的“分组层”仅仅用来对数据链路层功能的验证,未实现一个实际网络中分组层实体所具有的路由和转发等功能。

按照协议分层的原则,网络层分组作为数据链路层的数据,数据链路层不应当解读分组中数据内容。为了便于同学调试数据链路层程序,“分组序列发生器”生成的每个分组的前两个字节放置了一个两字节整数作为“分组ID”,例如:在调试数据帧重传功能时,可以打印出这个分组ID以分辨是哪个网络层分组数据在重传。设指针p的定义为unsigned char *p,并且p已指向某个分组的首字节,那么,打印整数*(short *)p就可以得到分组 ID。站点A产生的分组的分组ID取值为10000~19999,站点B产生的分组的分组ID取值为20000~29999,分组ID值递增,到最大值后回卷到最小值。

2、课程设计实现过程

2.1实验环境所提供的文件和编译运行方法

实验前必须事先安装好Visual C++ 6.0系统,或者兼容的更高版本。由实验指导教师提供的开发包解压缩后得到图2所示的目录树。其中,长方形图形符号表示目录,椭圆形符号表示文件。

datalink.dsw,datalink.dsp:Microsoft VC6.0的工程文件,包括Win32 Debug和Win32 Release两种配置。

protocol.h:库函数中包括的函数原型以及相关的宏定义,调用库函数的C语言源程序应当#include此文件。

datalink.c:应当由同学完成的数据链路层程序文件。许多同学C语言源程序书写格式凌乱,请参阅“附录一源程序书写格式要求”。

Debug/protocol.lib:Win32 Debug配置所需要的库文件。

Release/protocol.lib:Win32 Release配置所需要的库文件。

GoBackN.exe:使用搭载ACK技术的Go-Back-N协议的一种参考实现,可以直接运行以了解本次实验应达到的目的。

Selective.exe:使用选择重传协议的一种参考实现。

使用VC打开工程文件datalink.dsw之后,编辑datalink.c文件,输入自己所编的

程序,然后,编译链接,生成可执行文件,例如:在VC中选择Win32 Debug作为“活动

配置”(工程文件中的默认选择),

那么生成的可执行文件为Debug/datalink.exe。

打开一个DOS窗口,启动站点A的进程,在Debug目录下输入命令:datalink A

再打开一个DOS窗口,启动站点B的进程,在Debug目录下输入命令:datalink B

那么,协议程序就开始运行。默认情况下,协议程序会一直不停地运行,终止运行,

按Ctrl-C键。在运行过程中,将生成“日志”(log)文件。默认情况下,日志文件的放置

位置安排在与可执行文件相同的目录(注意:有可能执行文件所处目录与当前目录不是同

一个目录)。日志文件命名为可执行文件名加-A.log或者-B.log后缀,例如:可执行文件

名为datalink.exe,那么,日志文件的文件名为datalink-A.log和datalink-B.log 分别对应站点A和站点B的日志文件。关于日志文件使用,参见2.2“日志”。

使用工程文件datalink.dsp中的Win32 Debug配置,编译后链接库文件

Debug/protocol.lib,生成可执行文件Debug/datalink.exe;程序运行后,生成的日志

文件为Debug/datalink-A.log和Debug/datalink-B.log。

使用工程文件datalink.dsp中的Win32 Release配置,编译后链接库文件

Release/protocol.lib,生成可执行文件Release/datalink.exe;程序运行后,生成的

日志文件为Release/datalink-A.log和Release/datalink-A.log和

Release/datalink-B.log。

由于协议程序的工作需要毫秒数量级的实时操作,因此,在程序运行时务必关闭掉

其他导致CPU负载加重和内存占用的任务,否则,由于操作系统调度问题可能会导致协议

程序的运行产生秒数量级的阻塞或者停顿。

2.2日志

protocol.h头文件中定义的函数原型:

extern void log_printf(char *fmt, ...);

extern void lprintf(char *fmt, ...);

本实验中调试滑动窗口协议的程序时,常常需要用printf函数输出一条信息。例如:为了程序的调试,在接收到了一个长度为len的完整的帧,输出一条信息:

printf(”Received a frame, %d bytes\n”, len);

设该语句的输出为:

Received a frame, 248 bytes

这样的输出有两点不足。其一,类似这样的输出信息很多,在运行程序时,输出信息很快滚动过当前屏幕窗口;其二,一般来说,程序员不仅仅需要输出一条这样的信息而且很关心这条信息输出的时间坐标,用以判断超时重传等动作的正确性。因此,在库函数中维持一个时间坐标,时间坐标的0点设定为协议开始工作的时刻,时间刻度的精度为毫秒数量级,函数get_ms()可以获得当前的时间坐标值,单位为毫秒。为了达到前述两个目的,库函数提供了printf的一种改进版本log_printf,执行语句:

log_printf(”Received a frame, %d bytes\n”, len);

该语句输出:

23.176 Received a frame, 248 bytes

log_printf在输出信息之前首先输出当前的时间坐标,前面追加的23.176为执行这条语句时的当前时间坐标23.176秒,其余的输出内容与printf完全相同,输出在当前屏幕窗口中。除此之外,使用log_printf在当前屏幕窗口中输出的信息被同时保存在一个日志文件中,以便于事后检查,关于日志文件的放置位置和文件名,前面已经给出了描述。

使用下面的两条语句:

log_printf(”Received a frame, ”); log_printf(”%d bytes\n”, len);

所得到的输出:

23.176 Received a frame, 23.176 248 bytes

第二个语句输出的时间坐标会使得输出结果变得混乱,因此,提供了log_printf的轻量级版本lprintf,lprintf把输出信息显示在当前屏幕窗口的同时也存入日志文件,但是比log_printf的输出少了时间坐标信息。上面的两条语句应当修改为:log_printf(”Received a frame, ”); lprintf(”%d bytes\n”, len);

日志文件是程序员调用log_printf和lprintf在当前屏幕窗口输出信息的磁盘文件副本。

2.3协议运行环境的初始化

protocol.h头文件中定义的函数原型:

void protocol_init(int argc, char **argv);

文件datalink.c中的主程序main()必须首先调用此函数对运行环境初始化。该函数的两个参数必须传递main()函数的两个同名参数,这样做的目的是从命令行参数中获取站点名及某些选项以提供一种重新配置系统的某些参数的手段。这些选项包括重新指定日志文件,指定TCP端口号,设定误码率,等等。

当命令行中重新指定了新的参数值,默认值就不再起作用。

protocol_init()建立两个站点之间的TCP连接,并且设定时间坐标的参考0点,通信的两个站点的时间坐标0点在建立TCP连接时被设置成相同的参考时间点。

作为站点A,启动命令GoBackN A,函数protocol_init()的输出样例:

===================================================================== Station A

--------------------------------------------------------------------- Protocol.lib,version0.8,Build:Oct272007 (jiangy@https://www.wendangku.net/doc/6510331575.html,) Channel: 8000 bps, 270 ms propagation delay, bit error rate 1.0E-005

Log file "GoBackN-A.log", TCP port 59144, debug mask 0x00

Station A is waiting for station B on TCP port 59144 ... Done.

New epoch: Sat Oct 27 20:56:37 2007

===================================================================== 输出信息中包括:站点为A;库程序版本号0.8,编译创建该库程序的时间为2007.10.27,报告库程序BUG的E-mail地址;信道参数:速率8000bps,传播时延270ms,误码率10-5;日志文件名为GoBackN-A.log,TCP端口号59144,控制协议软件调试信息输出类别的控制字debug为0;TCP连接建立的信息;本次程序运行中的时间坐标0点设为2007.10.27 20:56:37。这里的误码率等参数可以调整,详见8.11“命令行选项”说明。

作为站点B,启动命令GoBackN B,函数protocol_init()的输出样例:

=====================================================================

Station B

--------------------------------------------------------------------- Protocol.lib,version 0.8, Build: Oct 27 2007 (jiangy@https://www.wendangku.net/doc/6510331575.html,) Channel: 8000 bps, 270 ms propagation delay, bit error rate 1.0E-005

Log file "GoBackN-B.log", TCP port 59144, debug mask 0x00

Station B is connecting station A (TCP port 59144) ... Done.

New epoch: Sat Oct 27 20:56:37 2007

=====================================================================

2.4与网络层模块的接口函数

protocol.h头文件中的相关定义和函数原型:

/* Network Layer functions */

#define MAX_PKT_LEN 256

#define MIN_PKT_LEN 240

void enable_network_layer(void);

void disable_network_layer(void);

int get_packet(unsigned char *packet);

void put_packet(unsigned char *packet, int len);

两个函数enable_network_layer()和disable_network_layer()的功能与教科书中相关示意性程序中同名函数的功能一致。在相邻的上下层软件实体之间进行有效的数据流量的控制和协调对于一个实用的协议软件的设计非常重要,这种流量控制不仅存在于网络层/数据链路层,也存在于数据链路层/物理层之间。

对于发送方向来说,网络层和数据链路层的约定为:数据链路层在缓冲区满等条件下无法发送分组时通过disable_network_layer()通知网络层;在能够承接新的发送任务时执行enable_network_layer()允许网络层发送数据分组。

当网络层有新的数据分组需要发送并且未被链路层disable,会产生NETWORK_LAYER_READY事件。数据链路层在事件处理程序中调用get_packet(p)函数将数据分组拷贝到指针p指定的缓冲区中,由于分组长度不等,函数返回值为分组长度。

put_packet()函数要求提供两个参数:存放收到分组的缓冲区首地址和分组长度。

库程序在put_packet()函数中增加了统计功能,如果本次调用put_packet()函数比上次调用该函数的时间间隔超过1秒,将给出一个接收方向的报告,格式如下所示:

26.703 ............ 101 packets received, 7591 bps (94.89%)

时间坐标为26.703秒,收到了101个分组,网络层有效数据传输率7591bps,实际线路利用率94.89%。如果接收方长期接收不到数据,就会长时间看不到这个报告。

发送方向的报告未能给出,可以通过检查对方站点的接收速率得到。

2.5事件驱动函数及程序流程

protocol.h头文件中的相关定义和函数原型:

int wait_for_event(int *arg);

#define NETWORK_LAYER_READY 0

#define PHYSICAL_LAYER_READY 1

#define DATA_INCOMING 2

#define DATA_TIMEOUT 3

#define ACK_TIMEOUT 4

函数wait_for_event()等待,直到一个事件发生。可能的事件有上述5种,函数返回值为上述5种事件之一。参数arg用于获得已发生事件的相关信息,仅用于DATA_INCOMING和DATA_TIMEOUT两种事件,分别获取物理层已到达的字节数和产生超时事件的定时器编号。

NETWORK_LAYER_READY:网络层有待发送的分组,此事件发生后就可以调用get_packet()得到网络层待发送的下一个数据分组。PHYSICAL_LAYER_READY:物理层发送队列低于100字节的水平,参见2.6“与物理层模块的接口函数”部分。

DATA_INCOMING:物理层收到了若干字节,参数arg中返回字节数,数据链路层根据这个字节数了解可以执行rece_byte()多少次以得到收到的字节。数据链路层程序在这里应当进行去除转义字节和判断帧边界等接收方成帧处理。如果未能收齐一整帧,将收到的内容缓冲起来;随后如果收齐一整帧,进行CRC校验,进而进行其他处理。

DATA_TIMEOUT:定时器超时,参数arg中返回发生超时的定时器的编号。有关定时器操作,参见2.8“定时器管理”部分。

ACK_TIMEOUT:所设置的搭载ACK定时器超时。

数据链路层程序的主控函数的总体流程框架与教科书中的示意性程序类似,但由于所支持的事件种类和流量控制机制不同,在细节处理上很不相同。程序的示意性整体流程如下:

int event, i, arg;

unsigned char ch;

enable_network_layer();

for (;;) {

event = wait_for_event(&arg);

switch (event) {

case EVENT_NETWORK_LAYER_READY:

len = get_packet(my_buf);

……

break;

case EVENT_PHYSICAL_LAYER_READY:

……

break;

case EVENT_DATA_INCOMING:

for (i = 0; i < arg; i++) {

ch = recv_byte();

……

}

break;

case EVENT_ACK_TIMEOUT:

... ...

break;

case EVENT_DATA_TIMEOUT:

... ...

break;

}

if (nbuffered < MAX_SEQ)

enable_network_layer();

else

disable_network_layer();

}

在初始的datalink.c中含有这个主控框架,并实现了将分组层的数据分组未加任何处理发送到对端站点并逐字节用16进制数字打印收到的内容。为了简化程序,可以使用全局变量用作发送缓冲区,记录发送窗口的上界、下界等,程序会比教科书中的示意性程序简单些。

2.6与物理层模块的接口函数

protocol.h头文件中的相关定义和函数原型:

unsigned char recv_byte(void);

void send_byte(unsigned char byte);

void phl_sq_clear(void);

int phl_sq_len(void);

函数send_byte()用于向物理层发送一个字节,recv_byte()从物理层接收一个字节。上下层协议实体之间的数据流量控制问题不仅存在于网络层/数据链路层,也存在于数据链路层/物理层之间。

为协调数据链路层和物理层之间的流量采用的机制是:只要在事件处理周期内至少一次调用过send_byte()函数,那么,事件等待函数wait_for_event()会在物理层发送队列低于100字节水平时,产生PHYSICAL_LAYER_READY事件。例如:物理层当前队列长度70字节,链路层9次调用send_byte()发送一帧,那么,随后的事件等待函数wait_for_event()会立即产生PHYSICAL_LAYER_READY事件;再如:物理层当前队列长度90字节,链路层260次调用send_byte()发送一帧,受限于信道8000bps的带宽,待发送数据不可能瞬间发送到线路上,wait_for_event()会在物理层队列由350字节降为100字节以下(至少需要251毫秒)后才产生PHYSICAL_LAYER_READY事件。

数据链路层在监测到PHYSICAL_LAYER_READY事件后如果暂时没有需要发送的数据,因系统不会再次送来PHYSICAL_LAYER_READY事件,应记录物理层状态,当有数据需要发送时直接发送。

不顾物理层队列的水平调用send_byte()发送多帧,受限于信道的8000bps能力,会导致数据堆积在物理层发送队列。物理层发送队列最多可以保留64K字节。

函数phl_sq_len()返回当前物理层队列的长度;函数phl_sq_clear()用于清空物理层队列。清空队列会导致随后的wait_for_event()函数立刻得到PHYSICAL_LAYER_READY 事件。

2.7 CRC校验和的产生与验证

protocol.h头文件中的函数原型:

unsigned int crc32(unsigned char *buf, int len);

本次实验采用的CRC校验方案为CRC-32,与IEEE802.3以太网校验和生成多项式相同。生成多项式为:

x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1+1

校验和的生成有硬件产生和软件计算两种方式。硬件产生通过移位寄存器电路实现。教科书中给出了计算CRC校验和的方法:根据CRC多项式得到一个33比特的除数;将待校验的n字节帧理解为8n比特的二进制数,并在后面追加32个0构成被除数;然后逐比特进行“模2”除法,得到32比特余数作为校验和。由于一般通用的CPU未提供按位“模2”除法的指令,需要通过软件模仿这种除法。目前通过软件计算的方式计算校验和,一般用查表并叠加的方式,将逐比特进行的模2除法改造为更高效率的逐字节进行模2除法,库函数中直接给出了实现校验和的函数调用。源程序来自于TCP/IP协议簇中的PPP协议相关文本RFC1662。

函数crc32()返回一个32位整数,设指针p的定义为char *p并且p指向一个缓冲区,缓冲区内有243字节数据,为这243字节数据生成CRC-32校验和,并且把这32比特校验和附在243字节之后,执行下面的语句:

*(unsigned int *)(p + 243) = crc32(p, 243);

注意:p所指缓冲区必须至少有247字节有效空间,以防内存访问越界。

验证校验和的方法,对上面的例子,只需要判断crc32(p, 243 + 4)是否为0:校验和正确为0,否则不为0。

2.8定时器管理

protocol.h头文件中的函数原型:

/* Timer Management functions */

unsigned int get_ms(void);

void start_timer(unsigned int nr, unsigned int ms);

void stop_timer(unsigned int nr);

void start_ack_timer(unsigned int ms);

void stop_ack_timer(void);

get_ms()函数获取当前的时间坐标,单位为毫秒。

start_timer()用于启动一个定时器。两个参数分别为计时器的编号和超时时间值。计时

器的编号只允许在0~63之间,超时时间间隔的单位为毫秒。超时发生时,产生DATA_TIMEOUT事件,并给出超时的定时器编号。例如:start_timer(3, 1200)启动3号定时器,定时器的长度为1.2秒。

定时器在把截止到该函数调用时刻为止已经放入物理层发送队列的数据发送完毕后才开始启动计时(不是从当前时间开始计时)。例如:当前时间坐标为5.100,物理层发送队列目前有300字节,信道速率8000bps,函数调用start_timer(3, 1200)会导致1.5秒之后在时间坐标6.600处3号定时器产生DATA_TIMEOUT事件。

使用stop_timer()中止一个定时器。在定时器未超时之前直接对同一个编号的定时器执行start_timer()调用,将按照新的时间设置产生超时事件。

start_ack_timer()和stop_ack_timer()两个定时器函数为搭载ACK机制设置。

start_ack_timer()与start_timer()有两点不同:首先,定时器启动时间为当前时间;其次,在先前启动的定时器未超时之前重新执行start_ack_timer()调用,定时器将依然按照先前的时间设置产生超时事件ACK_TIMEOUT。

两种定时器不同的定时处理方式,主要是为了适应协议软件开发的编程需要。

2.9协议工作过程的跟踪和调试

protocol.h头文件中的相关定义和函数原型:

extern void dbg_event(char *fmt, ...);

extern void dbg_frame(char *fmt, ...);

char *station_name(void);

协议软件的开发调试需要解决编译错误、内存越界、内存泄漏等语言级别错误。这里所提及的协议软件跟踪调试系统不是指语言级调试,指的是运行期对协议动作进行跟踪和观察分析以确定协议逻辑是否正确。在实际运行系统中,这种调试机制一般会被加入到发行版本的协议软件中。默认情况下,不产生任何调试信息的输出;通过某种命令可以打开调试开关,边运行边产生协议动作信息的输出。Cisco等系统中普遍提供这样的协议工作过程的跟踪和分析手段。

调试信息的输出格式和输出内容由协议程序设计者设计,并嵌入到源程序中。程序库内有一个名为debug_mask的静态整型变量(默认值0)用于调试信息的输出控制,可以通过命令行选项D对该变量赋值。debug_mask变量的设置方法参见“8.10命令行选项”。

使用debug_mask变量的不同比特位控制不同类别的调试信息输出。这里把调试信息分为两类,一类定义为“事件”,只有在发生某些不正常事件时才产生输出,例如:CRC 校验错,帧超长(可能是因为误码毁掉了帧边界字符),定时器超时重传,等等;另一类定义为“帧收发”,每发送和接收一帧,都打印出相关调试信息便于协议分析。为此,用debug_mask的比特0控制“帧收发”信息,比特1控制“事件”信息。提供了两个函数dbg_event()和函数dbg_frame(),当debug_mask的0号比特为0时,dbg_even的所有输出被忽略,反之,执行与log_printf相同的功能;当debug_mask的1号比特为0时,dbg_event() 的所有输出被忽略,反之,执行与log_printf相同的功能。

函数station_name()获取当前进程所对应的站点名,为字符串”A”或者”B”。

2.10命令行选项

在可执行程序文件(.EXE文件)运行时,可以附带一些选项对程序的执行进行控制。

这些选项用来指定启动的新进程是站点A还是站点B,控制分组序列发生器的工作模式(分组序列发生器的工作模式必须做到两个站点选项字符完全一致),控制debug_mask 前述的debug_mask取值以控制调试信息的输出,等等。设所生成的可执行文件为datalink.exe,那么,直接执行不带任何参数的该命令会给出帮助信息。

Usage:

datalink [-port ] [-ber ] [-log ]

Options :

A/B : Station name

u : Utopia channel (an error-free channel)

f : Flood traffic

l : Long packet only

s : Short packet only

e : Packet contains ESCape or FLAG char only

i : Set station B layer 3 sender mode as IDLE-BUSY-IDLE-BUSY-...

n : Do Not create log file

0~3 : Debug mask (default: 0)

-port : TCP port number (default: 59144)

-ber : Bit Error Rate (default: 1.0E-005)

-log : Using assigned file as log file

单字母的选项必须连写在一起,例如下面的命令指定了f, l, e, a, n, 3六个选项:datalink flean3

表1 命令行单字母选项功能表

功能

a/

b

指定启动的新进程是站点A还是站点B

u(Utopia)设置本站接收方向的信道误码率为0。默认值为1.0e-5

f(Flood)洪水模式。本站网络层有无穷量分组流及时供应给数据链路层发送。默认情况下,站点A以较平缓方式断断续续不停产生分组流,站点A以100秒为周期发一段停一段l(Long packet)网络层仅产生长分组,即256字节分组。默认情况下产生240~256范围内长度不等的分组

s(Short packet)网络层仅产生短分组,即240字节分组

e(ESCape char)网络层产生的分组中仅包括0x7e和0x1b两种字符。默认情况下每字节的值是0~255随机的

i(Idle-...)该选项仅对站点B有意义。站点B默认工作方式下,第一个100秒有数据发送,第二个100秒停止数据发送,第三个100秒又有数据发送,......,如此BUSY-IDLE-BUSY

-IDLE-......反复。指定i选项后,站点B的分组序列产生模式与此相反,以IDLE-BUSY-

IDLE-BUSY-......周期反复

n(No log)取消日志文件。如果需要连续24小时执行程序又不打算让日志信息占用磁盘空间,可以使用此选项。默认情况下,日志文件的位置和命名参见8.2

0-3设定debug_mask变量的值为0~3其中之一。用于控制程序中dbg_event()和dbg_frame()的输出。变量debug_mask的默认值为0

除单字母选项外,另有三个选项,每个选项都需要携带一个参数:

-port:指定TCP通信的端口号,默认为端口59144,如果与Windows系统中其他程

-log:自己指定一个日志文件名替代当前进程的默认日志文件。

-ber:指定信道误码率,使用C语言浮点数常数格式,如:误码率2×10-4,表示为2.0E-4。

例如:

datalink afe3 –port 8912 –log c:\temp\a.log –ber 2.0E-4

2.11错误信息

执行程序(.EXE文件)运行时,库程序的运行如果遇到错误,打印错误信息,然后立刻中止程序的运行。

表2 库文件中的错误信息列表

类别错误信息及说明

参数错Station name must be 'A' or 'B'

启动可执行文件时必须在命令行参数中指定站点名

检测到链路层工作失败Network Layer: incorrect packet length

Network Layer received a bad packet from data link layer

发送端站点使用伪随机数公式生成了分组流,分组的长度和分组中每个字节的内容都是通过公式计算所得,接收端利用与发送端相同的公式计算并与收到的分组流进行比对,发现错误,将给出这两条信息之一

操作系统软件环境问题Windows Socket DLL Error

Failed to create TCP socket

这类错误很少出现。如果出现,说明Windows安装有问题,无法进行socket通信

TCP通信故障Station A failed to bind TCP port

站点A作为TCP服务器端运行,绑定TCP端口号失败,将给出此错误信息。默认

端口号59144,可以通过命令行选项指定端口号。应注意WindowsXP网络放火墙或

所安装病毒监控软件的配置

Station B failed to connect station A

站点B作为TCP客户端运行,连接127.0.0.1地址的TCP端口59144或在命令行选

项中指定的端口。TCP连接失败,将给出此错误信息。应检查站点A的程序是否已

经启动,端口号是否与站点B的端口号一致

内存管理No enough memory

内存被消耗光,没有充足的内存。出现此错误,说明程序中存在“内存泄漏”问题

Memory used by 'protocol.lib' is corrupted by your program

库程序监测到它专用的内存被篡改。检查程序中是否有内存访问越界的问题

物理层发送队列溢出Physical Layer Sending Queue overflow

物理层发送队列溢出(队列最多可以缓冲64K字节)

函数调用错recv_byte(): Receiving Queue is empty

未产生DATA_INCOMING事件就执行recv_byte()获取物理层接收到的数据;或者

事件已发生并通告收到了17字节数据,但是recv_byte()却被调用18次

get_packet(): Network layer is not ready for a new packet

未产生NETWORK_LAYER_READY事件就执行get_packet()从网络层获取下一个

待发送分组

start_timer(): timer No. must be 0~63

系统最多支持64个定时器,定时器编号太大

3 、TCP 协议原理

3.1 TCP 协议状态转移图 Time_wait

Established Closed Fin_wait_2

Fin_wait_1

Syn_send Initiate a connection

Receive SYN&ACK Send ACK Send FIN Close connection Receive ACK

Send nothing Receive FIN

Send ACK

Wait 30 seconds

图3 客户端TCP 状态流程图

Closed

Last_Ack

Close_wait

Established

Listen Syn_Rcv Create a listen socket Receive SYN&ACK Send ACK Receive ACK Send nothing

Send ACK Send FIN

Receive ACK

图4 服务器端TCP 状态流程图

图3和图4分别对客户机和服务器端运行的TCP 流程进行了描述,表三中列出了两图中所用到的状态所代表的意义。

表3 TCP 状态

状态 说明

CLOSED 没有活动的连接,或者未完成的连接

LISTEN

服务器正等待进来的连接请求

SYN RCVD

一个连接请求到达,等待ACK SYN SEND

应用程序已经开始打开连接 ESTABLISHED

正常的数据传输状态 FIN WAIT 1

应用程序说它已经结束连接了 FIN WAIT 2

另一方已经同意释放连接 TIMED W AIT

等待所有的分组逐渐消失 CLOSE WAIT

另一方已经发起了释放连接的过程 LAST ACK 等待所有的分组的消失

3.2 TCP 报文格式

如图5所示,每个TCP 报文的起始部分都一个固定格式的20字节的头,固定的头之后可能跟着头选项,选项之后就是TCP 的数据部分,无任何数据的TCP 报文也是合法的,通常被用于确认和控制消息。

图5 TCP 报文格式

Source port 和Dest port 域标明了一个连接的两个端点,一个端口加上其上主机的IP 地址构成了一个48位的惟一端点,源端点和目的端点合起来标识了一个连接。

Sequence number 和 Acknowledgement number 域用于实现TCP 的可靠传输。后者指定的是下一个期望的字节,而不是已经正确接收到的最后一个字节。

TCP header length 指明了在TCP 头部包含多少个32位的字。此信息是必须的,因为Option 域是可变长度的,所以整个头部也是变长的。因而这个域实际上指明了数据部分在段内部的起始位置。

如果Urgent data pointer 被使用的话,那么URG 位将会被置为1。Urgent data pointer 被用来指示出紧急数据在当前数据段中的位置,它是一个相对于当前序列号的字节偏移值。

ACK 位被设置为1表示Acknowledgement number 是有效的。如果ACK 为0,则该数据段不包含确认信息,所以此时Acknowledgement 域应该被忽略。

PSH 位表示这是带有PUSH 标志的数据。因此,接收方在收到数据后应立即请求将数据递交给应用程序,而不是将它缓冲起来直到整个缓冲区接收满为止。

SYN 和FIN 位用于建立和断开连接的过程。

Receive window 域用于流量控制。它所显示的大小为接收端所能接收数据的缓冲区大小。

Options 域提供了一种增加额外设施的方法。最重要的选项是“允许每台主机指定它愿意接受的最大TCP 净荷长度”。在连接建立的过程中,每一方可以宣布它的最大净荷长度,并且查看对方给出的最大值。如果一台机器没有使用这个选项,那么它默认可以接受536字节的净荷。所有的主机都要求

Source port Dest port

Sequence number

Acknowledgement number

Header

length

U R G A C K P S H R S T S Y N F I N Receive Window Internet checksum Urgent data pointer

Options Data

能够至少接受536+20=556字节的TCP报文。而且两个方向上的最大长度可以不同。

4 、正确性测试及性能测试

滑动窗口机制的两个主要目标:实现有噪音信道环境下的无差错传输;充分利用传输信道的带宽。完成无差错传输只是达到了基本目标,追求信道实际利用率是关键。测试以下几种情况下你所设计的软件能否正常工作10分钟以上,记录线路利用率。注意,协议软件正常工作的标志是能否在发送端持续发送数据的情况下接收端网络层能够连续成功地接收到数据报,put_packet()函数接收到数据报之后会给出一个报告,这个报告应过一段时间就出现一次。在实验报告中分析这些数据,给出实际线路利用率离极限效率之间尚有多大差距,并解释产生这样结果的原因。

5、设计总结

这次课程设计,使我对数据链路层滑动窗口协议有了较深刻的了解,在网上计算机会有规律的发送和接收某些数据,遵循特定协议和模式,其中用我们上所学的知识可以进行基本的解释。

在课程设计中,我觉得最重要的是理论和实践的结合,有许多细节被我们忽视掉了。正因为这样,通过本次课程设计,我们加深了对IP,ICMP,DHCP等协议格式的理解,尤其是在算细节方面,算包的字节及其分片,可以很精确的了解协议。理论与实践有了结合,

收获很多。

在合作方面,最深的感受是要经常进行沟通比如说那个软件的问题。互相合作、互相讨论,我们也锻炼的合作的意识。

参考文献

[1] (美) Larry Peterson著,薛静锋等译. 《计算机网络:系统方法》 (第4版) ,机械工业出版社,2009

[2] (荷) Andrew S.Tanenbaum著,潘爱民译. 《计算机网络》(第4版),清华大学出版社, 2004

[3] 谢希仁著.《计算机网络》((第5版) ,电子工业出版社, 2008.1

[4] 吴功宜等著.《计算机网络课程设计》,机械工业出版社,2005

源代码清单

#include

#include

#include "protocol.h"

#define MAX_SEQ 15

#define NR_BUFS ((MAX_SEQ+1)/2)

#define DATA_TIMER 3000 //帧超时时间间隔

#define ACK_TIMER 240 //ack的超时间隔

struct FRAME {

unsigned char kind;

unsigned char ack;

unsigned char seq;

unsigned char data[PKT_LEN];

unsigned int padding;

};

int no_nak=1; //标志是否已经发送过nak

static int phl_ready = 0;

unsigned char oldest_frame=MAX_SEQ+1;

static int between(unsigned char a,unsigned char b,unsigned char c)

//窗口函数,判断帧号(ack号)是否在窗口内

{

if(((a<=b)&&(b

return 1;

else

return 0;

课程设计报告滑动窗口协议仿真

课程设计报告滑动窗口 协议仿真 公司内部档案编码:[OPPTR-OPPT28-OPPTL98-OPPNN08]

滁州学院 课程设计报告课程名称:计算机网络 设计题目:滑动窗口协议仿真 系别:计算机与信息工程学院 专业:计算机科学与技术 组别:第五组 起止日期: 2011年11月24日~2011年12月7日 指导教师:赵国柱 计算机与信息工程学院二○一一年制

课程设计任务书 一. 引言 二. 基本原理 窗口机制 1bit滑动窗口协议

后退N协议 选择重传协议 流量控制 三. 需求分析 课程设计题目 开发环境 运行环境 课程设计任务及要求 界面要求 网络接口要求 四. 详细设计 结构体的定义 发送方的主要函数 接受方的主要函数 五. 源代码 发送方的主要代码 接收方的主要代码 六. 调试与操作说明 致谢 [参考文献] 课程设计的主要内容1.引言

早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些问题。早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ协议,接收方不必对收到的帧逐个发送ack 确认,而是收到几个帧后,对按序到达的最后一个帧发送ack确认。同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,又提出了选择重传协议。当接收方发现某帧出错后,继续接受后面送来的正确的帧,只是不交付它们,存放在自己的缓冲区中,并且要求发送方重传出错的那一帧。一旦收到重传来的帧后,就可以将存于缓冲区中的其余帧一并按正确的顺序递交给主机。 2.基本原理 窗口机制

课程设计报告-滑动窗口协议仿真

滁州学院 课程设计报告 课程名称:计算机网络 设计题目:滑动窗口协议仿真 系别:计算机与信息工程学院 专业:计算机科学与技术 组别:第五组 起止日期: 2011年11月24日~2011年12月7日指导教师:赵国柱 计算机与信息工程学院二○一一年制

课程设计任务书

一. 引言 二. 基本原理 2.1 窗口机制 2.2 1bit滑动窗口协议 2.3 后退N协议 2.4 选择重传协议 2.5 流量控制 三. 需求分析 3.1 课程设计题目 3.2 开发环境 3.3 运行环境 3.4 课程设计任务及要求 3.5 界面要求 3.6 网络接口要求 四. 详细设计 4.1 结构体的定义 4.2 发送方的主要函数 4.3 接受方的主要函数 五.源代码 5.1 发送方的主要代码 5.2 接收方的主要代码 六. 调试与操作说明 致谢 [参考文献] 课程设计的主要内容

1.引言 早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家 不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在 数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快, 接收方就可能来不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些 问题。早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认 才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ 协议,接收方不必对收到的帧逐个发送ack确认,而是收到几个帧后,对按序到达的最后一 个帧发送ack确认。同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack 对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第 3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落, 只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,又提出了选择重 传协议。当接收方发现某帧出错后,继续接受后面送来的正确的帧,只是不交付它们, 存放在自己的缓冲区中,并且要求发送方重传出错的那一帧。一旦收到重传来的帧后, 就可以将存于缓冲区中的其余帧一并按正确的顺序递交给主机。 2.基本原理 2.1 窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。接受方为其窗口内的每一个序号保留了一个缓冲区。与每个缓冲区相关联的还有一位,用来指明该缓冲区是满的还是空的。 若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。1比特滑动窗口协议:发送窗口=1,接收窗口=1;后退N协议:发送窗口>1,接收窗口=1;选择重传协议:发送窗口>1,接收窗口>1。 2.2 1bit滑动窗口协议 当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。其发送方和接收方运行的流程图如图所示。

滑动窗口协议分析与实现

滑动窗口协议分析与实现 目录 1 引言 (2) 1.1 滑动窗口协议概述 (2) 1.2 本次设计任务 (2) 2 滑动窗口协议介绍 (3) 2.1 滑动窗口协议工作原理 (3)

1 引言 1.1 滑动窗口协议概述 滑动窗口协议可能是计算机网络中最著名的算法,它是TCP使用的一种流量控制方法。滑动窗口协议也称为回退N步协议Go-Back-N(GBN)协议,它可以有三个不同的功能,第一个功能,即在不可靠链路上可靠地传输帧。(一般来说,该算法被用于在一个不可靠的网络上可靠地传输消息。)这是该算法的核心功能。 滑动窗口算法的第二个功能是用于保持帧的传输顺序。这在接收方比较容易实现,因为每个帧有一个序号,接收方要保证已经向上层协议传递了所有序号比当前帧小的帧,才向上传送该当前帧。即,接收方缓存了(即没有传送)错序的帧。 滑动窗口算法的第三个功能是,它有时支持流量控制(flowcontrol),它是一种接收方能够控制发送方使其降低速度的反馈机制。这种机制用于抑制发送方发送速度过快,即抑制传输比接收方所能处理的更多的数据。 滑动窗口协议,允许发送方传输多个分组而不需等待确认,但它也受限于在流水账中未确认的分组数不能超过最大允许数N。只有在接收窗口向前滑动,即接收方向发送方发送了确认反馈,同时发送方收到确认消息时,发送窗口才能向前滑动。 1.2 本次设计任务 本次的设计任务是根据滑动窗口协议的工作原理,在WebRTC的基础上,用C++语言编写一个滑动窗口协议的程序。 要求该程序实现滑动窗口协议的基本功能功能,如:发送帧被接收与否的判断,帧超时重发,帧缓存等。同时需要设计一个测试机制,以检测该程序的正确性、可靠性。

课程设计报告滑动窗口协议仿真

滁州学院 课程设计报告 课程名称: 计算机网络 第五组 起止日期:2011年n 月24 口~2011年12月7 n 指导教师: 设计题目: 滑动窗口协议仿贞 别: 计算机与信息工程学院 业: 计算机科学与技术 计算机与信息工程学院二O —一年制 别: 赵国柱

课程设计任务书 一.引言二-基本原理 窗口机制 Ibit滑动窗口协议后退N协议选择重传协议流量控制三.需求分析 课程设计题目开发环境

运行环境 课程设计任务及要求 界面要求 网络接口要求 0. 详细设计 结构体的定义 发送方的主要函数 接受方的主要函数 五. 源代码 发送方的主要代码 接收方的主要代码 调试与操作说明 致谢 [参考文献] 课程设计的主要内容 L引言 早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能來不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些问题。早期我们使用的是Ibit滑动窗口协议,一次只发送一个帧, 等收到ack确认才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ协议,接收方不必对收到的帧逐个发送 ack确认,而是收到儿个帧后,对按序到达的最后一个帧发送ack确认。 同Ibit滑动窗口协议相比,大大减少了 ack数量,并消除了延迟ack对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了 5个帧,而中间的第3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,乂提出了

数据链路层协议分析

【里论套习 4、理解MAC '地址的作用; 实验二以太网链路层帧格式分析 一实验目的 1、分析EthernetV2 标准规定的MAC 层帧结构,了解IEEE802.3标准规定 的MAC 层帧结构和TCP/IP 的主要协议和协议的层次结构。 2、掌握网络协议分析软件的基本使用方法。 3、掌握网络协议编辑软件的基本使用方法。 "时]工严11 1 厶-*■ ―鼻八匸 二实验内容 1、 学习网络协议编辑软件的各组成部 ___________ Slepl:设走夹验环墳 2、 学习网络协议分析软件的各组成部分及其功能; — £伽|12:运行ipconfig 命令 3、学会使用网络协议编辑软件编辑以太网数据包;厂 5始閃:娠輻LLC 信息輔并灰洪 Step4:编頤IXC 噩拦巾贞和无 5、理解MAC 酩部中的LLC — PDU 长度/类型字段的功能; 6、学会观察并分析地址本中的 MAC 地址 三实验环境 四实验流程 图 2.1-2( 五实验原理 在物理媒体上传输的数据难免受到各种不可靠因素的影响而产生差错, 为了弥补 物理层上的不足,为上层提供无差错的数据传输,就要能对数据进行检错和纠错。 数据链路的建立、拆除、对数据的检 错,纠错是数据链路层的基本任务。 局域网(LAN)是在一个小的范围内,将分散的独立计算机系统互联起来,实现资 开始

源的共享和数据通信。局域网的技术要素包括了体系结构和标准、传输媒体、拓扑结构、数据编码、媒体访问控制和逻 辑链路控制等,其中主要的技术是传输媒体、拓扑结构和媒体访问控制方法。局域网的主要的特点是:地理分布范围小、数据传输速率高、误码率低和协议简单等。 1、三个主要技术 1)传输媒体:双绞线、同轴电缆、光缆、无线。 2)拓扑结构:总线型拓扑、星型拓扑和环型拓扑。 3)媒体访问控制方法:载波监听多路访问/冲突检测(CSMA/CD)技术。 2、IEEE802标准的局域网参考模型 IEEE802参考模型包括了OSI/RM最低两层(物理层和数据链路层)的功能,OSI/RM 的数据链路层功能,在局域网参考模型中被分成媒体访问控制MAC(MediumAccessCo ntrol) 和逻辑链路控制LLC(LogicalLi nkCon trol)两个 子层。由于局域网采用的媒体有多种,对应的媒体访问控制方法也有多种,为了 使数据帧的传送独立于所采用的物理媒体和媒体访问控制方法,IEEE802标准特意把LLC独立出来形成单独子层,使LLC子层与媒体无关,仅让MAC子层依赖于物理媒体和媒体访问控制方法。LLC子层中规定了无确认无连接、有确认无连接和面向连接三种类型的链路服务。媒体访问控制技术是以太网技术的核心。以太网不提供任何确认收到帧的应答机制,确认必须在高层完成。3、以太网帧结构 以太网中传输的数据包通常被称为“帧”,以太网的“帧”结构如下: 各字段的含义: 目的地址:6个字节的目的物理地址标识帧的接收结点。 源地址:6个字节的源物理地址标识帧的发送结点。

滑动窗口的仿真协议书范本

计算机网络课程设计书

计算机网络课程设计说明书 (封面) 学院名称:计算机与信息工程学院班级名称:网络工程一班 学生: 学号: 201321 题目:滑动窗口协议仿真指导教师 姓名:邵雪梅 起止日期: 2015.6.23-2015.6.29

第一部分:正文部分 一,选题背景 早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些问题。早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ协议,接收方不必对收到的帧逐个发送ack确认,而是收到几个帧后,对按序到达的最后一个帧发送ack确认。 同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,又提出了选择重传协议。当接收方发现某帧出错后,继续接受后面送来的正确的帧,只是不交付它们,存放在自己的缓冲区中,并且要求发送方重传出错的那一帧。一旦收到重传来的帧后,就可以将存于缓冲区中的其余帧一并按正确的顺序递交给主机。本文主要介绍如何根据滑动窗口协议的原理,在Visual C++的平台上设计一个滑动窗口协议模拟程序,并最终使该程序得以实现。本次程序设计分两部分:第一部分是发送方,第二部分是接收方。通过发送方和接收方之间的数据帧传输模拟,学习滑动窗口协议控制流量的原理和方法,以及滑动窗口协议的工作机制。

滑动窗口协议模拟程序的设计与实现

长沙理工大学 《网络协议编程》课程设计报告 梁碧莹 学院计算机与通信工程专业网络工程 班级网络08-02 学号200858080205 学生姓名梁碧莹指导教师王静 课程成绩完成日期2011年7 月 2 日

课程设计任务书 计算机与通信工程学院网络工程专业

课程设计成绩评定 学院计算机通信工程专业网络工程 班级网络08-02 班学号200858080205 学生姓名梁碧莹指导教师王静 课程成绩完成日期2011年7 月2 日指导教师对学生在课程设计中的评价 指导教师对课程设计的评定意见

滑动窗口协议模拟程序的设计与实现 学生:梁碧莹指导老师:王静 摘要:本文主要介绍如何根据滑动窗口协议的原理,在Visual C++的平台上设计一个滑动窗口协议模拟程序,并最终使该程序得以实现。本次程序设计分两部分:第一部分是发送方,第二部分是接收方。通过发送方和接收方之间的数据帧传输模拟,学习滑动窗口协议控制流量的原理和方法,以及滑动窗口协议的工作机制。 关键词:滑动窗口协议流量控制工作机制模拟程序 Design and Implementation of Sliding Window Protocol Procedures Student: Liang Biying Instructor: Wang Jing Abstract: This paper describes the principle of Sliding Window Protocol and how to design and implement a procedure about the Sliding Window Protocol. The program design in two parts, one is the sender, the other is the receiver. After all, studying the principle and method of how the Sliding Window Protocol control the flow, and how the Sliding Window Protocol works through the transmission of data between the sender and the receiver. Keywords: Sliding window protocol Flow control Working mechanism Simulation program

实验二数据链路层协议分析

实验二以太网链路层帧格式分析一实验目的 1、分析EthernetV2标准规定的MAC层帧结构,了解IEEE802.3标准规定的 MAC层帧结构和TCP/IP的主要协议和协议的层次结构。 2、掌握网络协议分析软件的基本使用方法。 3、掌握网络协议编辑软件的基本使用方法。 二实验内容 1、学习网络协议编辑软件的各组成部分及其功能; 2、学习网络协议分析软件的各组成部分及其功能; 3、学会使用网络协议编辑软件编辑以太网数据包; 4、理解MAC地址的作用; 5、理解MAC首部中的LLC—PDU长度/类型字段的功能; 6、学会观察并分析地址本中的MAC地址。 三实验环境 回2.1- L 四实验流程 小亠| /I J ■ v 开始

结束 图21 2| 五实验原理 在物理媒体上传输的数据难免受到各种不可靠因素的影响而产生差错,为了弥补物理层上的不足,为上层提供无差错的数据传输,就要能对数据进行检错和纠错。数据链路的建立、拆除、对数据的检错,纠错是数据链路层的基本任务。 局域网(LAN)是在一个小的范围内,将分散的独立计算机系统互联起来,实现资源的共享和数据通信。局域网的技术要素包括了体系结构和标准、传输媒体、拓扑结构、数据编码、媒体访问控制和逻 辑链路控制等,其中主要的技术是传输媒体、拓扑结构和媒体访问控制方法。局域网的主要的特点是:地理分布范围小、数据传输速率高、误码率低和协议简单等。 1、三个主要技术 1)传输媒体:双绞线、同轴电缆、光缆、无线。 2)拓扑结构:总线型拓扑、星型拓扑和环型拓扑。 3)媒体访问控制方法:载波监听多路访问/冲突检测(CSMA/CD技术 2、IEEE 802标准的局域网参考模型 IEEE 802参考模型包括了OSI/RM最低两层(物理层和数据链路层)的功能,OSI/RM 的数据链路层功能,在局域网参考模型中被分成媒体访问控制 MAC(Medium Access Control) 和逻辑链路控制LLC(Logical Link Control)两个子层。由于局域网采用的媒体有多种,对应的媒体访问控制方法也有多种,为

数据链路层通信协议

题目: 数据链路层网络通信协议计 姓名: 周小多 学号:2013302513 班号:10011302 时间:2015.11.12 计算机学院

目录 摘要 1 目的 (1) 2 要求 (1) 3 相关知识 (1) 4 设计原理及流程图........................ 错误!未定义书签。 5 实现思路及伪代码描述 (3) 6 意见或建议 (4) 7 参考文献 (4)

题目: 数据链路层网络通信协议设计

帧校验字段 紧跟在信息字段之后的是两字节的帧校验字段,帧校验字段称为FC (Frame Check )字段, 校验序列FCS (Frame check Sequence )。SDLC/HDLC 均采用16位循环冗余校验码CRC (Cyclic Redundancy Code ),其生成多项式为CCITT 多项式X^16+X^12+X^5+1。除了标志字段和自动插入的"0" 位外,所有的信息都参加CRC 计算。 CRC 的编码器在发送码组时为每一码组加入冗余的监督码位。接收时译码器可对在纠错范围内的错码进行纠正,对在校错范 围内的错码进行校验,但不能纠正。超出校、纠错范围之外的多位错误将不可能被校验发现 。 4、设计原理及流程图 ? 可靠性分析:(1)差错控制:检错(CRC-32);纠错(序号+确认反馈+超时重发);(2 )流量控制:采用选择重发协议(序号为3个比特位,发送缓冲区和接收缓存区,确定发送窗口和接收窗口,对缓冲区和窗口管理) ? 不可靠性分析:支持不可靠通信服务。 ? 协议分析:语法,语义和同步 ? 语法:数据帧格式 ? 起始定界符=终止定界符:01111110; ? 目的地址:(48):bbbbbb; ? 源地址:(48):aaaaaa; ? 控制字段:定义帧类型,实现差错控制和流量控制 ? 数据部分:46~1500字节 ? 语义:不同类型帧的含义

课程设计报告滑动窗口协议仿真精编

课程设计报告滑动窗口 协议仿真精编 Document number:WTT-LKK-GBB-08921-EIGG-22986

滁州学院 课程设计报告 课程名称:计算机网络 设计题目:滑动窗口协议仿真 系别:计算机与信息工程学院 专业:计算机科学与技术 组别:第五组 起止日期: 2011年11月24日~2011年12月7日指导教师:赵国柱 计算机与信息工程学院二○一一年制

课程设计任务书 一. 引言 二. 基本原理 窗口机制 1bit滑动窗口协议 后退N协议 选择重传协议 流量控制

三. 需求分析 课程设计题目 开发环境 运行环境 课程设计任务及要求 界面要求 网络接口要求 四. 详细设计 结构体的定义 发送方的主要函数 接受方的主要函数五. 源代码 发送方的主要代码 接收方的主要代码六. 调试与操作说明 致谢 [参考文献]

课程设计的主要内容 1.引言 早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些问题。早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ 协议,接收方不必对收到的帧逐个发送ack确认,而是收到几个帧后,对按序到达的最后一个帧发送ack确认。同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,又提出了选择重传协议。当接收方发现某帧出错后,继续接受后面送来的

数据链路层滑动窗口协议的设计和实现样本

数据链路层滑动窗口协议的设计和实现样本数据链路层滑动窗口协议的设计和实现本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 数据链路层滑动窗口协议的设计与实现实验报告 一、实验任务及内容利用所学数据链路层原理,设计一个滑动窗口协议并在仿真环境下编程实现有噪音信道环境下的可靠的双工通信。 信道模型为8000bps全双工卫星信道,信道传播时延270毫秒,信道误码率为10--55,信道提供字节流传输服务,网络层分组长度在240~256字节范围。 (1)实现有噪音信道环境下的无差错传输。 (2)运行程序并检查在信道没有误码和存在误码两种情况下的信道利用率。 (3)提高滑动窗口协议信道利用率,根据信道实际情况合理地为协议配置工作参数,包括滑动窗口的大小和重传定时器时限以及ACK搭载定时器的时限。 实验环境Windows7环境PC,机,Microsoft VisualC++集成化开发环境 二、协议设计协议的分层结构及层服务::包括物理层,数据链路层和网络层三层。

该实验主要设计数据链路层协议,为实现有噪声环境下高信道利用率传输,我们采用回本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 退n n帧(go backn)技术的协议。 发送方窗口大小为31;通过捎带确认来完成可靠的数据通信;出现信道误码导致收帧出错时,接受方丢弃所有后续帧,待定时器超时后发送方重发。 该层提供服务::从网络层接受要发送的数据包,将之分拆成数据帧;按一定的成帧方案完成分帧,加校验码,加ack等操作;进行适当的流量判断和拥塞控制;启动定时器将之传递给物理层。 数据帧经信道传送给接受方,接受方数据链路层执行与成帧相逆的操作;处理ack信息,终止定时器(或启动ack定时器,ack成帧传送);判断是否为欲接受数据,数据是否出错,提交给网络层。 退回N N步工作原理示意图::本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 实验所形成帧((成帧方案))::DATA Framen+=========+========+========+===============+======== +|KIND (1)|ACK (1)|SEQ

数据链路层协议综合概述

数据链路层协议综合概述 1.数据链路层介绍 数据链路层协议要实现的基本目标就是为网络实体提供可靠的数据通信服务,具体包括∶将物理层的位(1和0)组成俗称为"帧"或"包"的数据链路层服务数据单元,它是数据链路层逻辑信息交换单位。与字节一样,帧也是一系列连续的位组成的同层数据交换单位;传输差错检测及控制,能恢复时则予以纠正;数据流量控制;识别网上每台计算机,即网络数据链路层编址,这对局域网MAC尤为重要。 局域网数据链路层的功能通常划分为介质访问控制子层;逻辑链路控制子层。 (1)介质访问控制子层(MAC)。MAC子层控制收发器共享单一传输信道的方式。若使用MSAP支持LLC时,MAC子层负责帧的编址及其识别。MAC到MAC 操作通过同等层MAC协议实现。MAC还负责产生帧校验序列及其检验等功能。MAC的具体功能留待介质访问控制一节中专门讨论。 (2)逻辑链路控制子层(LLC)。LLC子层的功能是建立和维护及拆卸数据,以便数据帧无差错地从一台设备传向另一台设备。 LLC协议由IEEE 802.2定义,它是HDLC的一个兼容子集。它支持两种类型的链路层服务,即无连接LLC及面向连接LLC。网桥、智能集线器、网卡等互连硬件设备往往与数据链路层有关。 2.介质访问控制 逻辑拓扑结构使用特定的规则控制何时允许网络实体传送数据信号,这种控制规则就称为介质访问控制协议。它对共享介质型局域网具有非同一般的意义,类似日常生活中的交通控制,是IEE802MAC子层的核心内容。若没有介质访间控制协议,所有设备在它们准备好数据时就立即发送,就会出现一个或多个站点同时发送,其结果是不同的信号相互干扰破坏,甚至彻底丢失信号。这种情形叫做冲突,它破坏了站点间的有效通信。 介质访问控制协议要解决的问题就是尽可能地消除或减少多个并发信号之间的冲突或干扰,确定何时才允许网中设备发送数据。介质访问控制协议可分为

滑动窗口的仿真协议

计算机网络课程设计书 学 院 计算机与信息工程学院专业网络工程 课程名称计算机网络题目滑动窗口协议仿真完成期限自2015年6月23日至2015年6月29日共1周 内容及任务一、项目的目的 掌握滑动窗口协议的工作原理,并能够用所学计算机高级 语言进行编程模拟其运行过程;培养学生的动手实践和思考能力。 二,项目任务的主要内容和要求 (1)本次设计任务是根据滑动窗口协议的工作原理,在Visual C++ 6.0的平台上用C++语言编写一个基本TCP滑动窗口协议的模拟程序。 (2)要求该程序能够实现滑动窗口协议的发送和接收数据帧 功能,在此功能上体现滑动窗口协议的运作。 (3) 程序按照滑动窗口协议实现端对端的数据传送。包括协议的各种策略,如包丢失、停等应答、超时等都应有所仿真实现; (4) 显示数据传送过程中的各项具体数据。双方帧的个数变化,帧序号,发送和接受速度,暂停或重传提示等; 三、项目设计(研究)思路 (1) 查阅相关资料,理解滑动窗口协议的工作原理; (2) 设计滑动窗口协议实现端对端数据传送的功能流程图; (3) 编写代码实现滑动窗口协议工作的模拟程序,包括包丢失、停等应答、超时等; (4) 测试程序功能的实现情况。 四、具体成果形式和要求 (1)滑动窗口协议实现端对端数据传送的模拟程序。 (2)按照要求撰写课程设计报告并准备答辩。

进度安排 起止日期工作内容 2015.6.23-2015 .6.24 了解网络协议编程的基本知识; 2015.6.25-2015 .6.26 了解滑动窗口协议的工作机制; 2015.6.27-2015 .6.28 使用编程语言编写一个滑动窗口协议的模拟 程序,按要求实现程序。 2015.6.29最后汇总,调试,答辩 主要参考资料[1] 谢希仁. 计算机网络[M]. 4版. 北京:电子工业出版社, 2003. [2] 李仁发.何彦. 基于虚拟实验方法的滑动窗口协议分析[J]. 系统仿真学报. 2002. 8 (14) ; 1026 - 1063. [3] 李建中,张冬冬. 滑动窗口规模的动态调整算法[J]. 软件学报. 2004. 12 (15) : 1800 - 1814. [4] 王栩,李建中,王伟平. 基于滑动窗口的数据流压缩技术及连续查询处理方法[ J ]. 计算机研究与发展. 2004. 10 (41) : 1639- 1644. [5] 特南鲍姆. 计算机网络(第四版). 清华出版社 指导教师 意见 (签字):×年×月×日 系(教研 室)主任 意见 (签字):×年×月×日

计算机网络关于数据链路层协议的实验报告

实验报告 实验名称数据链路层协议的理解与实现课程名称计算机网络 姓名王颖学号16008404 日期地点 成绩教师王磊 电气工程学院 东南大学

实验一数据链路层协议的理解与实现 一.实验目的: 1.加深对流量控制、差错处理方法的理解; 2.熟悉TCP/IP编程, 将书本知识运用到实验中; 3.开拓学生的创新意识,培养学生的独立动手操作的能力; 二.实验内容: 1.利用已有的模拟信道程序,编制发送、接收程序的部分模块,使系统具有可靠的收发功能。具体要求 1)采用无连接Socket编程 2)地址与端口 发送端:地址:127.0.0.1 端口:8001 接收端:地址:127.0.0.1 端口:6001 3 4)需考虑的异常情况:出错、丢失、延时 5)采用停等协议 6)单工方式 7)ACK/NAK的表示:ACK:0x06 NAK:0x15 2.待完成模块要求 1)发送程序:偶校验;编码;发送、接收;差错处理、流量控制。 2)接收程序:检查偶校验;应答;发送、接收 三.实验环境(软件、硬件及条件): Microsoft visual C++ 6.0 四.实验原理 1、程序实现的原理 Windows Sockets(套接字) 是在Windows下一套开放的、支持多种协议的网络编程接口规范。为Windows下网络异步通信提供了一种方便的开发和运行环境。

Windows Sockets规范建立在BSD UNIX 中实现的Berkeley 套接字模型上,现已是TCP/IP网络的标准。它独立于底层的协议。 其原理示意图如下 1)数据链路层 数据链路层目的是建立在物理层基础上,通过一些数据链路层协议,在不太可靠的物理链路上实现可靠的数据传输。即数据链路层提供网络中相邻节点之间可靠的数据通信。 数据链路层的主要功能是为网络层提供连接服务,并在数据链路连接上传送帧。依据功能可以分为有连接和无连接两种。本实验采用的是有应答,无连接服务。 无连接服务时,发送方的数据链路层要发送数据时,就直接发送数据帧。接收方的数据链路层能够接受数据帧,或者收到的帧校验正确,就像源主机数据链路层发送应答帧;不能接受或接受到的帧校验不正确时,就返回否定应答,发送端要么重发原帧,要么进入等待状态。 面向无连接的socket使用方法如下:

窗口协议

ARQ与滑动窗口概念 滑动窗口协议,是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。 自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。ARQ可能包括停止等待ARQ协议、回退ARQ和连续ARQ协议,错误检测(Error Detection)、正面确认(Positive Acknowledgment)、超时重传(Retransmission after Timeout)和负面确认及重传(Negative Acknowledgment and Retransmission)等机制。 他们的概念是差不多的只是作用于不同的网络层。数据链路层的滑动窗口是“个数固定”的。而TCP的滑动窗口是“个数可变”的,可以由接收端设置WIN字段来修改。 传统自动重传请求分成为三种,即停等式(stop-and-wait)ARQ,回退n帧(Go-back-n)ARQ,以及选择性重传(selective repeat)ARQ。后两种协议是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续地流动,因此又称其为连续ARQ协议。三者的区别在于对于出错的数据报文的处理机制不同。三种ARQ协议中,复杂性递增,效率也递增。除了传统的ARQ,还有混合ARQ(Hybrid-ARQ)。 当发送窗口和接收窗口的大小都等于1时,就是停止等待协议。 当发送窗口大于1,接收窗口等于1时,就是回退N步协议。 当发送窗口和接收窗口的大小均大于1时,就是选择重发协议

PCIE数据链路层协议(Data Link Layer Specifications)

数据链路层协议 数据链路层作为处理层和物理层的中间层,为处理层TLP 在链路中传递提供可靠机制。数据链路层主要负责TLP的可靠传输。所以数据链路层完成的主要任务是:1、数据交换。接收发送方处理层的TLP包,并送到物理层。另外从物理层接收TLP 包并送到接收端的处理层。2、出错检测和裁决。LCRC和序列号(TLP Sequence Number)的生成;存储发送端的TLP用于再试重发;为TLP和DLLP做数据完成性检测(crc校验);DLLP 的ack和nack响应;错误指示;链接确认超时重试机制。3、初始化和电源管理。跟踪链路状态并传送链路活动、链路复位、链路失去连连等状态给处理层;4、生成DLLP。用于链路管理功能包括TLP确认、电源管理、流程控制信息(VC通道初始化)交流。在链接两端的数据链路层点对点传输. 数据完整性检测就是为DLLP和TLP做crc校验DLLP使用crc-16,TLP使用32bit的LCRC,此外,TLP还有一个序列号(sequence Number),用于检测TLP丢失与否。LCRC和sequence Number检测有误的TLP或者在发送过程中丢失的TLP,将被发送端重新发送。发送端存放TLP的备份,在需要的时候将备份发送或者在收到接收端的正确接收确认后清除备份。 数据链路层跟踪链路连接的状态,并和处理层和物理层交流链路状态,通过物理层来完成对链路的管理。链路层中包含状态机DLCMSM(Data Link Control and Management State Machine)

来完成这些任务,以下详细介绍。 ●DL_Inactive – Physical Layer reporting Link is non-operational or nothing is connected to the Port ●DL_Init – Physical Layer reporting Link is operational, initialize Flow Control for the default Virtual Channel ●DL_Active – Normal operation mode Status output: ●DL_Down – The Data Link Layer is not communicating with the component on the other side of the Link. ●DL_Up – The Data Link Layer is communicating with the component on the other side of the Link.

计算机网络原理 一位滑动窗口协议

计算机网络原理一位滑动窗口协议 一位滑动窗口协议是指发送窗口和接收窗口尺寸都是1。也就是说发送端在未接收到确认前只能发1数据帧;接收方也只能接收落在当前窗口内的1数据帧,并给出确认数据帧。停-等协议就属于1位滑动窗口协议,但它只适用于数据单向传输,向反方向发送确认数据帧的情况。而1位滑动窗口协议支持数据的双向传输,即支持双工通信。 在实际的双工通信中,是在数据帧中增加一个字段,用来携带给对方的应答信息。这种将应答信息搭载在数据帧上发送给对方的应答方式称为捎带应答。采取捎带应答的全双工通信的工作过程,是由通信双方的某一方首先开始发送数据,它从网络层获得一个分组,将该分组封装成帧,通过物理层发送出去。接收方收到后检查是否有错和重复,如果有错或重复就丢弃;如果无错就交给网络层。然后查看有无数据帧要发送,如果有就将应答信息捎带在数据帧上发送出去,如果没有就发一个独立的确认帧。发送方收到应答数据帧后,检验对方发来的数据帧,如果无误上交给网络层,在确认自己发送的上一帧已经被妥收后,准备发送下一帧,并将对对方数据帧的应答信息搭载在上面,一起发送给对方。图4-4给出了一位滑动窗口协议的工作情况。 发 01A0收 01A0 收 01A0 发 00B0 发 10A1收 10A1 收 11B1 发 11B1 发 01A2收 01A2 收 00B2发 00B2 发 10A3收 10A3 图4-4 一位滑动窗口协议的工作情况 在正常情况下,通过检查所接收的数据帧的发送序号,判定是否是重复帧,如果是重复帧就丢弃,否则就接收下来;通过检查应答序号,可以判定上次所发的帧是否被正确接收,如果未得到应答,就要超时重发。

下面哪些协议是数据链路层协议

编号:_______________本资料为word版本,可以直接编辑和打印,感谢您的下载 下面哪些协议是数据链路层协议 甲方:___________________ 乙方:___________________ 日期:___________________

下面哪些协议是数据链路层协议 篇一:数据链路层作业 第四章数据链路层练习题 一、填空题 1数据链路层最重要的作用就是:通过一些()协议,在不太可靠的物理链路上实现()数据传输。 (知识点:数据链路层的作用答案:数据链路层、可靠的) 2在数据链路层,数据的传送单位是()。 (知识点:数据链路层的作用答案:帧) 3在计算机通信中,采用()方式进行差错控制。 (知识点:数据链路层的功能答案:检错重发) 4所谓()就是不管所传数据是什么样的比特组合,都应当能够在链路上传送。 (知识点:数据链路层的功能答案:透明传输) 5物理层要解决()同步的问题;数据链路层要解决()同步的问题。(知识点:物理层及数据链路层的功能答案:比特、帧) 6所谓()就是从收到的比特流中正确无误地判断出一 个帧从哪个比特开始以及到哪个比特结束。

(知识点:数据链路层的功能答案:帧同步)7链路的两种基本配置,即()和()。 (知识点:hdlc答案:非平衡配置和平衡配置) 8用户接入internet 的一般方法有两种。一种是用户使 用(),另一种是使用()。 (知识点:internet 中的数据链路层答案:拨号电话线接 入,专线接入) 9、internet 中使用得最广泛的数据链路层协议是()协 议和()协议。(知识点:internet 中的数据链路层答案:slip 和ppp) 10、hdlc有(信息帧),(监督帧)和无编号帧三种不 同的帧 11、h dlc是面向(比特型)的协议,以一组特定的比特 模式 (01111110)来标志一帧的起始和终止。 12、为了数据帧的传送独立于所采用的物理媒体和媒体 访问控制方法,ieee802标准特意把(llc )独立出来,形成一个单独子层,使(ma。依赖于物理媒体和拓朴结构,而(llc )与媒体无关

数据链路层-ARQ协议

实验:数据链路层-ARQ协议 ?任务 1.同学编写数据链路层通信协议,由《发送端程序》和《接收端程序》实现,确保数据可靠传输; 2.总结实验过程(实验报告,左侧装订):方案、编程、调试、结果、分析、结论。 ?成绩评定 1. 若完全实现无差错传输(无丢失、无差错、不重叠、不乱序、...)且实验报告出色,5分; 2. 若完成部分无差错传输,依据实验结果定成绩,3~4分; 3. 若没有完成基本的传输任务,依据实验结果定成绩,1~2分; 4. 没有进行实验和无实验报告者,0分; ?实验环境 1. Windws 9x/NT/2000/XP/2003 2. TCP/IP协议 ?同学程序 1. 认真复习数据链路层内容,熟悉编程语言C、C++和WINDOWS程序设计技术(查阅参考书); 2. 开发工具:Visual C++ 6.0、Visual Basic 6.0、C++ Builder、Java、C#、Turbo C/C++或其它; 3. 程序示例:理想信道的《发送端程序》和《接收端程序》(含源码VC6.0); 1. ARQ基本协议1:_引入检错和应答帧 2. ARQ基本协议2:_引入超时计时器 3. ARQ基本协议3:_引入数据帧携带发送序号0~1 4. ARQ基本协议4:_引入确认帧携带发送序号0~1 5. ARQ基本协议5:_引入应答帧含有校验码 6. ARQ基本协议6:_引入数据帧和确认帧含有发送序号0~7,Ws=1,Ws=1 7. 下载:ARQ基本协议1~6及数字信道仿真程序 4. 示例实验指导 ?协议设计建议 -协议中不考虑成帧 1. 数据帧和应答帧以字节为单位; 2. 数据帧:低4位D3~D0为数据段(取值0000B~1001B,即0~9),最高位为校验位(D7),发送序号段:D6~D4; 3. 应答帧:确认帧ACK:低4位D3~D0取值1111B(FH),否认帧NAK:低4位D3~D0取值1110B(EH),发送序号段:

相关文档