数据链路层实验.
实验一 数据链路层协议的理解与实现

实验一数据链路层协议的理解与实现2011.5.1一、实验目的1、加深对流量控制、差错处理方法的理解2、熟悉TCP/IP编程, 将书本知识运用到实验中;3、开拓学生的创新意识,培养学生的独立动手操作的能力二、实验内容利用已有的模拟信道程序,编制发送、接收程序的部分模块,使系统具有可靠的收发功能。
三、设计原理实验基本设计原理为利用已经提供的模拟信道channel模拟物理信息介质,编写接收发送模块的部分功能,使得系统具有可靠的收发功能。
主要原理阐述如下:1、网络体系结构分层原理在网络分层结构中,每一层要为上一层服务,处在高层次的系统仅仅是利用较低层次的系统提供的服务和功能,体现了层次的封装性,处在不同系统中的同层次实体之间没有直接物理通讯能力,他们的通讯是逻辑通讯。
从实验中看,编程过程中,sender 与receiver并没有直接联系,而是通过套接字与channel 连接,通过channel获得连接通讯,而channel之中的通讯方式,并没有显化的体现在程序之中,这也体现了网络通讯层与层之间的封装思想;2、检错码工作原理——偶校验偶校验的工作原理是在原始数据字节的某一位添加一位附加位,使得结果中的1的个数为偶数,增加的位称为偶校验位。
在实验中利用encode函数将要发送的数据进行编码,将偶校验位体现的编码的第四位上;3、差错控制方法——ARQ停等协议本次实验采用自动重发协议ARQ中的停等方式实验差错控制,实验原理为发送方没发完一个数据报必须等待对方确认后才能发送下一个数据报。
在实验中具体是这样的,sender方发送一个数据报,该数据报已经包含偶校验位以及数据报总长度信息,待接收方receiver接收到数据报即对数据报的偶校验位以及发送序号进行检查,并与自己所缓存的待发送数据信息以及数据报长度信息进行对比,若是合格则在receiver方显示并返回带有ACK信息的应答帧,否则返回带有NAK信息的应答帧以要求sender方重新发送数据报;4、信道通信方式数据单向传输,接收方要对接收的数据进行检验,检验出错误则要求发送方重发原信息,对于正确的数据也要返回确认信息。
数据链路层实验.

数据链路层实验三层交换机实现VLAN 间通信一、实验设备2 台 3560 三层交换机,3 台电脑。
二、实验要求使在同一VLAN里的计算机系统能跨交换机进行相互通信,而在不同VLAN里的计算机系统也能进行相互通信。
三、实验步骤第一步:在交换机 SwitchA 上创建 Vlan 10 ,并将 0/5 端口划分到 Vlan 10中。
Switch>enSwitch#conf t!进入全局配置模式。
Enter configuration commands, one per line.End with CNTL/Z.Switch(config)#hostname SwitchA!修改 Switch 名字为 SwitchASwitchA(config)# vlan 10!创建 Vlan 10 。
SwitchA(config-vlan)# name sales!将 Vlan 10 命名为 sales。
SwitchA(config-vlan)#exitSwitchA(config)#interface fastethernet 0/5!进入接口配置模式。
SwitchA(config-if)#switchport access vlan 10!将 0/5 端口划分到 Vlan 10 。
SwitchA(config-if)#exit第二步:在交换机 SwitchA 上创建 Vlan 20 ,并将 0/8 端口划分到 Vlan 20中。
SwitchA(config)# vlan 20!创建 Vlan 20 。
SwitchA(config-vlan)# name technical!将 Vlan 20 命名为 technical 。
SwitchA(config-vlan)#exitSwitchA(config)#interface fastethernet 0/8!进入接口配置模式。
SwitchA(config-if)#switchport access vlan 20!将 0/8 端口划分到 Vlan 20 。
数据链路层实验报告

2、教师批改学生实验报告时间应在学生提交实验报告时间后 10 日内。
教务处制
实验目的与要求:
一、 实验目的
1、理解各种不同数据链路层协议的原理 2、熟悉并掌握各种不同数据链路层协议的性能
二、 实验要求
1. 根据所给各种协议的源代码,分析与理解各种协议的原理与算法思想。 2. 相同参数情况下,运行各种协议,得到各种协议的性能。 3. 对于协议 5,6,分别给定不同的负载、丢包率及校验和失败情况,对比两种协议的性能。
数据处理分析:
实验结论: 1. 当所有数据相同时,协议 6 的传输相率是最好的 2. 当协议 5 和协议 6 的丢包率都较低时,俩者的传输效率相差不大 3. 当协议 5 和协议 6 的负载都很大时,协议 6 的传输效率明显较高。
指导教师批阅意见:
成绩评定:
指导教师签字: 年 月 日 备注:
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
./protocol5 100000 40 2 10 7 0 ./protocol5 100000 40 20 10 7 0 6 ./protocol6 100000 40 0.2 10 7 0 ./protocol6 100000 40 2 10 7 0 ./protocol6 100000 40 20 10 7 0 5 ./protocol5 100000 40 20 0.2 7 0 ./protocol5 100000 40 20 2 7 0 ./protocol5 100000 40 20 20 7 0 6 ./protocol6 100000 40 20 0.2 7 0 ./protocol6 100000 40 20 2 7 0 ./protocol6 100000 40 20 20 7 0
计算机网络数据链路层实验报告

计算机⽹络数据链路层实验报告计算机⽹络数据链路层实验报告⽬录⼀、实验内容和实验环境描述(1)实验内容和⽬的(2)实验环境⼆、软件设计(1)数据结构(2)模块结构(3)算法流程三、实验理论分析四、实验结果:(1)性能测试记录表(2)截图(由于截图近200张,这⾥只列出最优参数的情况,其余参数对⽐图及其log⽂件在“参数对⽐“⽂件夹⾥)五、源程序清单六、实验结果分析七、研究和探索的问题⼋、实验总结和⼼得体会⼀、实验内容和实验环境描述(1)实验内容和⽬的利⽤所学数据链路层原理,⾃⼰设计⼀个滑动窗⼝协议,在仿真环境下编程实现有⾳信道环境下两站点之间⽆差错双⼯通信。
信道模型为8000bps 全双⼯卫星信道,信道传播时延270毫秒,信道误码率为10-5,信道提供字节流传输服务,⽹络层分组长度固定为256字节。
通过该实验,进⼀步巩固和深刻理解数据链路层误码检测的CRC 校验技术,以及滑动窗⼝的⼯作机理。
滑动窗⼝机制的两个主要⽬标:(1) 实现有噪⾳信道环境下的⽆差错传输; (2)充分利⽤传输信道的带宽。
在程序能够稳定运⾏并成功实现第⼀个⽬标之后,运⾏程序并检查在信道没有误码和存在误码两种情况下的信道利⽤率。
为实现第⼆个⽬标,提⾼滑动窗⼝协议信道利⽤率,需要根据信道实际情况合理地为协议配置⼯作参数,包括滑动窗⼝的⼤⼩和重传定时器时限以及ACK 搭载定时器的时限。
这些参数的设计,需要充分理解滑动窗⼝协议的⼯作原理并利⽤所学的理论知识,经过认真的推算,计算出最优取值,并通过程序的运⾏进⾏验证。
通过该实验提⾼同学的编程能⼒和实践动⼿能⼒,体验协议软件在设计上各种问题和调试难度,设计在运⾏期可跟踪分析协议⼯作过程的协议软件,巩固和深刻理解理论知识并利⽤这些知识对系统进⾏优化,对实际系统中的协议分层和协议软件的设计与实现有基本的认识。
(2)实验环境WindowsXP环境PC机,Microsoft Visual C++ 6.0 集成化开发环境。
数据链路层抓包实训报告

一、实训背景数据链路层是OSI七层模型中的第二层,主要负责在相邻节点之间可靠地传输数据帧。
为了更好地理解数据链路层的工作原理,我们进行了数据链路层抓包实训,通过Wireshark工具捕获和分析网络数据包,以了解数据链路层协议的工作过程。
二、实训目标1. 熟悉Wireshark工具的使用方法;2. 理解数据链路层协议的工作原理;3. 捕获和分析网络数据包,验证数据链路层协议的正确性;4. 掌握数据链路层抓包实训的步骤和方法。
三、实训工具1. Wireshark抓包工具;2. 电脑一台;3. 网络设备(如路由器、交换机等);4. 网络连接。
四、实训步骤1. 准备工作(1)确保电脑已接入网络,并安装Wireshark工具;(2)了解实验环境,包括网络拓扑结构、网络设备配置等。
2. 捕获数据包(1)打开Wireshark工具,选择合适的网络接口进行抓包;(2)设置抓包过滤器,例如只捕获特定协议的数据包;(3)启动抓包,观察网络数据包的传输过程。
3. 分析数据包(1)观察数据包的源MAC地址和目的MAC地址,了解数据包的传输路径;(2)分析数据包的帧头信息,包括帧类型、帧控制字段等;(3)查看数据包的数据部分,了解传输的数据内容;(4)根据数据包内容,分析数据链路层协议的工作过程。
4. 验证数据链路层协议(1)根据捕获到的数据包,分析数据链路层协议的帧结构;(2)验证数据链路层协议的工作过程,如数据帧的封装、校验和等;(3)对比协议规范,确认数据链路层协议的正确性。
5. 实验总结(1)整理实验过程中捕获到的数据包,分析数据链路层协议的工作原理;(2)总结实验过程中的经验和教训,提高网络抓包和分析能力。
五、实训结果通过本次实训,我们成功捕获并分析了数据链路层的数据包,了解了数据链路层协议的工作原理。
以下是实验过程中捕获到的部分数据包:图1:以太网帧结构图2:数据链路层协议帧结构通过分析数据包,我们发现数据链路层协议在数据传输过程中,确实按照规范进行了帧的封装、校验和等操作。
实验二 数据链路层实验

实验2 数据链路层实验学号:_______ ______专业:________________姓名:________ _《计算机网络原理》实验2.1 VLAN 配置一、实验目的掌握交换机上创建VLAN 、分配静态VLAN 成员、删除VLAN 的方法。
二、实验内容1.产生两个VLAN ,并验证配置结果;2.为每个VLAN 命名,并分配交换机成员端口给他们;3.进行删除VLAN 的操作;4.理解VLAN1为什么不能被删除。
三、实验环境以太网交换机1台,PC 机5台,标准网线5 根;console 线1根 四、实验组网图五、实验步骤1.准备工作(1)在关机状态下用控制台电缆连接交换机和计算机。
(2)配置各PC :停用组网实验不相关网卡(一般为Realtek 网卡),启用实验组网用(一般为Dlink )网卡,关闭其防火墙,配置IP 、子网掩码。
2.系统视图下输入sysname 命令给交换机重命名。
(1)[Quidway]sysname switchA (2)创建VLAN 2和VLAN 3Ip:192.168.2.14/24Ip:192.168.2.10/2444 Ip:192.168.2.11/24Ip:192.168.2.13/24PAPBPCPDIp:192.168.2.12/24 PC[switchA]vlan 2[switchA]vlan 3(3)查看当前交换机上有几个VLAN.[switchA]display vlan(disp vlan)(4)把端口1、2、3指定给VLAN 2[switchA] VLAN 2 ‘转入VLAN视图[switchA -VLAN 2]port e1/0/1 e1/0/2 e1/0/3 ‘指定该VLAN内包含哪些端口如果VLAN包含多个连续的端口时也可以通过如下命令实现[switchA -VLAN 2]port e1/0/1 to e1/0/3(5)把端口23指定给VLAN 3[switchA]inter e1/0/23 ‘进入接口视图[switchA-interface e1/0/23]port access vlan 3 ‘指定该端口属于VLAN 3(6)用上步的方法把端口24指定给VLAN3(7)查看VLAN 2的信息[switchA]disp vlan 2(8)用ping命令测试网络连通性(9)用display mac-address命令查看mac地址表(10)删除VLAN 2删除该VLAN 2包含的端口,两种方法:一种在接口视图下,一种在VLAN视图下。
计算机网络实验 第2章 数据链路层实验

采用总线型或星形拓扑。由于以太网是基于共享总线的广播类型的网络,
所以当网络中有两个或两个以上站点同时发送数据时将引起冲突,因此以 太网使用CSMA/CD协议作为媒体控制协议解决冲突问题。
CSMA/CD协议的基本原理是:站点发送数据前先监听信道,信道 空闲时发送数据;在发送数据过程中持续监听信道,如果监听到冲 突信号则立即停止发送数据;同时发送强化冲突信号,以使网络中 正在发送数据的其它站点能够监听到冲突。
PPP帧格式如图所示
2.PPPoE
PPP协议不适于广播类型的以太网和另外一些多点访问类型的网络,于是 产生了PPPoE(Point-to-Point Protocol over Ethernet)。它为使用桥接以太 网的用户提供了一种宽带接入手段,同时还能提供方便的接入控制和计费。 每个接入用户均建立一个独一无二的PPP会话。会话建立前PPPoE必须通过 发现协议获取远端访问集中器的MAC地址。
第2章 数据链路层实验
实验三: 集线器与交换机的对比试验
3.1
背景知识
1.冲突域与广播域 冲突域:共享信道的传输机制决定了在网络中只能有一个站点发送数据 。如果两个或两个以上站点同时发送数据将发生冲突。虽然以太网在 MAC层采用CSMA/CD协议有效地降低了冲突的可能性,但是由于传播时 延的存在以及多个站点同时监听到信道空闲等情况的存在,冲突仍会发生 。所谓冲突域是指在该域内某一时刻只能有一个站点发送数据,如果两个 站点同时发送数据会引起冲突,则这两个站点处于同一个冲突域内。 广播域:以太网是广播网络,采用共享信道的传输机制来传输数据。在 以太网中,一个站点向所有站点发送数据的传输过程称为广播,这一过程 中传输的数据帧称为广播帧。在以太网中,能够接收到任意站点发送的广 播帧的所有站点的集合称为一个广播域。
数据链路层实验报告

数据链路层实验报告数据链路层实验报告引言:数据链路层是计算机网络中的一个重要组成部分,负责将网络层传递下来的数据分割成帧,并通过物理介质进行传输。
在本次实验中,我们通过搭建实验环境,深入了解和学习了数据链路层的相关知识,并进行了一系列实验。
实验一:帧的构造和解析在这个实验中,我们学习了帧的构造和解析过程。
通过使用C语言编写程序,我们能够手动构造和解析帧。
首先,我们学习了帧的基本结构,包括帧起始标志、目的地址、源地址、数据和帧检验序列等字段。
然后,我们通过实际操作,将这些字段按照规定的格式组装成一个完整的帧,并通过解析程序将其还原。
这个实验帮助我们深入理解了帧的构造和解析过程,为后续实验奠定了基础。
实验二:差错检测在数据链路层中,差错检测是非常重要的一项功能。
在这个实验中,我们学习了差错检测的原理和方法,并通过实验验证了其可靠性。
我们使用C语言编写了差错检测程序,通过给定的数据帧计算CRC校验码,并将其附加到帧的末尾。
然后,我们通过修改帧中的某一位,引入差错,并再次计算CRC校验码。
实验结果表明,差错检测程序能够准确地检测出帧中的差错,并帮助我们进一步理解差错检测的原理。
实验三:流量控制在数据链路层中,流量控制是保证数据传输可靠性的一项重要技术。
在这个实验中,我们学习了流量控制的原理和方法,并通过模拟实验验证了其有效性。
我们使用C语言编写了发送端和接收端的程序,并通过模拟发送端发送数据,接收端接收数据的过程。
实验结果表明,当发送端发送的数据速度超过接收端处理的速度时,接收端能够通过发送ACK帧来控制发送端的数据流量,保证数据传输的可靠性。
实验四:链路管理在数据链路层中,链路管理是保证网络正常运行的重要环节。
在这个实验中,我们学习了链路管理的原理和方法,并通过实际操作验证了其可行性。
我们使用C语言编写了链路管理程序,实现了链路的建立、维护和释放过程。
实验结果表明,链路管理程序能够准确地建立和释放链路,并保证链路的正常运行。
Lecture 07 链路层实验

4
2
MAC 客户数据(46~1500 字节)
CRC 4
6
6
2
IEEE 802报文封装结构
8
数据链路层实验
数据链路层实验原理
数据链路层协议概述
局域网协议简介
以太网链路层帧格式
以太网交换机工作原理
虚拟局域网技术(VLAN)
广域网协议简介
9
数据链路层实验
CSMA/CD
传输之前先侦听,传输过程中检测,冲突
交换机;
小组1 小组2
PC A
PC B
路由器
PC C
PC D
交换机 A 交换机 B
36
数据链路层实验
实验组网
E0/1 PC A 192.168.1.22 255.255.255.0 S1
E0/2 PC B 192.168.1.21 255.255.255.0
PCA、PCB、S1的组网
37
数据链路层实验
数据链路层实验
以太网交换机工作原理- MAC地址学习 最初交换机的MAC地址表为空
目的MAC地址 发送端口号
E0/3 E0/5
E0/7 E0/16
PC1
MAC:M1
PC2
MAC:M2
PC3
MAC:M3
PC4
MAC:M4
16
数据链路层实验
以太网交换机工作原理- MAC地址学习 MAC地址表没有记录,数据帧从其它 所有端口转发出去 识别数据帧的源MAC地址,学习MAC 地址和端口对应关系
一个冲突域
14
数据链路层实验
以太网交换机工作原理-MAC地址表
交换机内部都有一张MAC地址表
E0/3
E0/5
实验二数据链路层实验

实验二数据链路层实验实验项目性质:设计性计划学时:4实验环境:实验日期:2015年10月14日一、实验目的1、理解并掌握数据链路层协议的功能。
2、进一步理解停止等待协议和滑动窗口协议的基本工作原理。
3、掌握计算机网络协议的基本实现技术。
4、利用RS 232C通信接口实现两台PC间传输文件。
二、实验内容与要求1、设计完成数据链路层相关类;2、开发一个使用RS232C接口在两台计算机之间采用停止等待协议传输信息(文件)的程序;3、开发一个使用RS232C接口在两台计算机之间采用滑动窗口协议传输文件的程序。
完成实验内容中的第1、2部分,有能力的同学完成全部内容。
三、实验(设计)仪器设备和材料清单计算机两台,串行电缆一根。
四.相关知识1 数据路层概述数据链路层协议应提供的基本功能有:(1) 数据在数据链路上的正常传输(建立、维护和释放)。
(2) 帧定界与同步,以实现透明传输。
(3) 差错控制和流量控制。
(4) 透明传输。
2 数据成帧方法在数据链路层,为实现透明传输及进行差错控制和流量控制,在把数据送到物理层之前,需将若干个数据组成一帧,并在其中加上其他必要的控制信息。
控制信息形成(数据成帧)的方法有以下几种:字符计数法、带字符填充的首尾界符法、带填充位的首尾标志法、物理层编码违例法。
3 差错控制与流量控制为确保帧可靠地交付接收方,接收方在收到帧后,应向发送方应答,告知是否正确收到帧,因此在数据链路层要建立差错控制机制:差错控制方法、CRC循环冗余校验、流量控制。
4 数据链路层协议(1)停止等待协议停止等待协议的基本原理是:发送方在数据帧中加入校验码(CRC),由接收方检查;若出错,返回NAK帧(否认帧),否则发送ACK帧(确认帧);发送方收到NAK帧后重发数据帧,若收到ACK帧可发送下一帧。
当超时计时事件发生时,重发丢失的帧,这样可通过等待发送来实现流量控制,如图3-2所示。
停止等待协议发送方的算法如下:(1) 从主机取一个数据帧。
实验4 链路层实验实验报告

链路层实验一、实验目的1)计算机网络的数据链路层协议保证通信双方在有差错的通信线路上进行无差错的数据传输,是计算机网络各层协议中通信控制功能最典型的一种协议。
2)本实验实现一个数据链路层协议的数据传送部分,目的在于使学生更好地理解基本数据链路层协议的基本工作原理,掌握计算机网络协议的基本实现技术。
二、实验内容在一个数据链路层的模拟实现环境中,用C 语言实现下面数据链路层协议。
分析一个理想的链路层协议的实现,熟悉它的实现环境。
对于前面实现的协议进行扩充,实现它的第一次改进,如何防止发方过快淹没收方。
对②再假设在不可靠的的链路上进行通信。
三、实验步骤1)实验程序a)发送端sender.c:#pragma comment(lib, "ws2_32.lib")#include <winsock.h>#include <stdio.h>////////////////////////////////////////////////////////////////////////////发送帧////////////////////////////////////////////////////////////////////////// voidSendFrame(int * frameNumCurrent,intwinSizeCurrent,SOCKET * socketConn){char sendBuffer[128]; //发送数据if (_snprintf(sendBuffer,sizeof(sendBuffer)-1,"%d",*frameNumCurrent) < 0){printf("写数据出错!\n");return;}else{sendBuffer[sizeof(sendBuffer)-1] = '\0';}//发送数据第几帧if(send(*socketConn,sendBuffer,sizeof(sendBuffer),0) == SOCKET_ERROR){printf("发送数据失败!\n");return;}else{printf("现在在传送帧%s\n",sendBuffer);}}////////////////////////////////////////////////////////////////////////////接收ACK////////////////////////////////////////////////////////////////////////// voidReceiveACK(int * frameNumCurrent,SOCKET * socketConn){char recvBuffer[128];//接收数据int length = sizeof(structsockaddr);intframeNum = 0;//接收到的ACK号//接收ACK,判断是否有超时或者是否错误ACKif(recv(*socketConn,recvBuffer,sizeof(recvBuffer),0) == SOCKET_ERROR)//出现超时{printf("接收数据超时!需要重新传送帧%d\n\n",*frameNumCurrent);return;}else{frameNum = atoi(recvBuffer);//正确ACKif (frameNum == *frameNumCurrent){//正确ACK 准备传送下一帧*frameNumCurrent ^= 1;printf("接收到正确的ACK,已经成功传送帧%d,将要传送帧%d\n\n",(*frameNumCurrent)^1,*frameNumCurrent);}//错误ACKelse if (frameNum == ((*frameNumCurrent) ^ 1)){//得到错误ACK 不进行操作,主函数中进行重传操作printf("接收到错误ACK,帧%d传送错误,需要重新传送帧%d\n\n",*frameNumCurrent,*frameNumCurrent);}}}////////////////////////////////////////////////////////////////////////////初始化发送端监听socket//////////////////////////////////////////////////////////////////////////BOOL InitSocketSender(SOCKET * socketSender){SOCKADDR_IN addrSender;WORD wVersionRequested;WSADATA wsaData;//版本wVersionRequested = MAKEWORD(1,1);//启动if (WSAStartup( wVersionRequested, &wsaData) != 0){printf("启动不成功!\n");return FALSE;}if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ){printf("版本错误!\n");WSACleanup();return FALSE;}//创建socket*socketSender = socket(AF_INET,SOCK_STREAM,0);if(*socketSender == INVALID_SOCKET){printf("创建套接字失败!\n");return FALSE;}//创建地址信息addrSender.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//所有地址addrSender.sin_family=AF_INET;addrSender.sin_port=htons(8000);//端口号//绑定端口if(bind(*socketSender,(SOCKADDR*)&addrSender,sizeof(structsockaddr)) == SOCKET_ERROR){printf("绑定失败!\n");return FALSE;}//监听if (listen(*socketSender,SOMAXCONN) == SOCKET_ERROR){printf("监听失败!\n");return FALSE;}return TRUE;}////////////////////////////////////////////////////////////////////////////线程函数用于处理一个客户端请求//////////////////////////////////////////////////////////////////////////DWORD WINAPI ConnectClient(LPVOID socketConn){int count = 0;//循环次数计数器intwinSizeCurrent = 0;//当前发送窗口大小intframeNumCurrent = 0;//当前发送的帧号printf("初始状态发送窗口是:%d,准备向接收端发送数据\n\n",winSizeCurrent);++winSizeCurrent;while(count < 20){SendFrame(&frameNumCurrent,winSizeCurrent,(SOCKET*)socketConn);ReceiveACK(&frameNumCurrent,(SOCKET*)socketConn);++count;}printf("模拟结束!\n");//关闭Socketclosesocket(*((SOCKET*)socketConn));free(socketConn);return 0;}void main(){HANDLE hThread;//线程句柄DWORD threadId;SOCKET socketSender;//监听socketSOCKADDR_IN addrReceiver;//服务器地址int length = sizeof(structsockaddr);inttimeOut = 3000;//超时3秒//初始化发送端监听socketif (!InitSocketSender(&socketSender)){printf("初始化失败,退出!\n");WSACleanup();return;}printf("等待建立连接\n\n");//循环等待请求while (TRUE){SOCKET *socketConn = (SOCKET *)malloc(sizeof(SOCKET));*socketConn = accept(socketSender,(structsockaddr*)&addrReceiver,&length);printf("连接建立成功!接收端的地址是:%s\n\n",inet_ntoa(addrReceiver.sin_addr));if(setsockopt(*socketConn,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeOut,sizeof(timeOut)) == SOCKET_ERROR){printf("设置接收时限错误!");closesocket(*socketConn);continue;}//开辟线程处理一个客户端请求hThread = CreateThread(NULL,0,ConnectClient,(LPVOID)socketConn,0,&threadId);}//清理操作closesocket(socketSender);WSACleanup();system("pause");}b)接收端receiver.c:#pragma comment(lib, "ws2_32.lib")#include <winsock.h>#include <stdio.h>#include <time.h>char buffer[128];int front=0;////////////////////////////////////////////////////////////////////////////接收帧//////////////////////////////////////////////////////////////////////////BOOL ReceiveFrame(int * frameExpect,int * frameRecv,intwinRecvSize,SOCKET socket){char recvBuffer[128];//接收数据intframeNum;//接收帧号//从发送端接收帧if(recv(socket,recvBuffer,sizeof(recvBuffer),0) == SOCKET_ERROR){printf("接收数据失败!\n");return FALSE;}frameNum = atoi(recvBuffer);if (frameNum != *frameExpect)//接收帧和希望接收帧号不匹配{printf("所要接收的帧和接收到的帧不匹配!,要接收的帧号是:%d,接收到的帧号是:%d\n",*frameExpect,frameNum);return FALSE;}else//接收帧和希望接收帧号匹配{*frameRecv = frameNum;printf("已经成功地接收帧%d,接收端窗口大小是:%d\n",*frameRecv,winRecvSize);}return TRUE;}////////////////////////////////////////////////////////////////////////////发送ACK//////////////////////////////////////////////////////////////////////////BOOL SendACK(int * frameExpect,int * frameRecv,SOCKET socket){//通过随机数随机产生正确ACK帧号、错误ACK帧号以及不发送ACK帧char sendBuffer[128];//发送数据int random = 0;//随机数0,1,2,0表示返回正确ACK 1表示返回错误ACK 2表示不返回ACKrandom = rand()%3;if (random == 0)//表示正确接收,并且正确回复ACK{if (_snprintf(sendBuffer,sizeof(sendBuffer)-1,"%d",*frameRecv) < 0){printf("写数据出错!\n");return FALSE;}else{sendBuffer[sizeof(sendBuffer)-1] = '\0';}//发送正确的ACKif(send(socket,sendBuffer,sizeof(sendBuffer),0) == SOCKET_ERROR){printf("发送数据失败!\n");return FALSE;}else{*frameExpect ^= 1;//经过确认,准备接受下一帧printf("针对已经接收到的帧%d回复ACK,回复的ACK号是%d:\n\n",*frameRecv,*frameRecv);}}else if (random == 1)//表示正确接收,并且错误回复ACK{if (_snprintf(sendBuffer,sizeof(sendBuffer)-1,"%d",(*frameRecv)^1) < 0){printf("写数据出错!\n");return FALSE;}else{sendBuffer[sizeof(sendBuffer)-1] = '\0';}//发送错误的ACKif(send(socket,sendBuffer,sizeof(sendBuffer),0) == SOCKET_ERROR){printf("发送数据失败!\n");return FALSE;}else{printf("针对已经接收到的帧%d回复ACK,回复的ACK号是%d:\n\n",*frameRecv,(*frameRecv)^1);}}else//表示正确接收,并且不回复ACK{//不发送ACKprintf("没有针对已经接收到的帧%d发送ACK\n\n",*frameRecv);}return TRUE;}////////////////////////////////////////////////////////////////////////////初始化发送端监听socket//////////////////////////////////////////////////////////////////////////BOOL InitSocketReceiver(SOCKET * socketRecv){WORD wVersionRequested;WSADATA wsaData;SOCKADDR_IN addrSender;int length = sizeof(structsockaddr);//版本wVersionRequested = MAKEWORD(1,1);//启动if (WSAStartup( wVersionRequested, &wsaData) != 0){printf("启动socket不成功!\n");return FALSE;}if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ){printf("版本错误!\n");WSACleanup( );return FALSE;}//创建socket*socketRecv = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); ;if(socket == INVALID_SOCKET){printf("创建套接字失败!\n");return FALSE;}//创建地址信息addrSender.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//发送端主机IP addrSender.sin_family = AF_INET;addrSender.sin_port = htons(8000); //端口//连接发送端if (connect(*socketRecv,(structsockaddr*)&addrSender,length) == SOCKET_ERROR) {printf( "连接服务器失败!\n" );WSACleanup();return FALSE;}return TRUE;}void main(){SOCKET socketRecv;//接收端socketintframeExpect = 0;//期待的帧号intwinRecvSize = 8;//窗口大小intframeRecv = 0;//接收的帧号int count = 0;//循环次数计数器BOOL recvFlag = FALSE;//是否正确接收帧//连接服务器if (!InitSocketReceiver(&socketRecv)){printf( "初始化客户端失败,退出!\n" );WSACleanup();return;}else{printf("已经成功连接服务器\n\n");printf("初始状态接收端窗口大小是:%d,准备接收发送端数据\n\n",winRecvSize);srand((unsigned)time(NULL));while(count < 20){recvFlag = ReceiveFrame(&frameExpect,&frameRecv,winRecvSize,socketRecv);if (recvFlag)//正确接收帧,发送ACK{SendACK(&frameExpect,&frameRecv,socketRecv);}else{printf("得到错误的帧!\n");}++count;}printf("模拟结束!\n");}//清理closesocket(socketRecv);WSACleanup( );system("pause");}2)实验结果a)发送端:b)接收端:四、实验小结本次实验我们实现的是ARQ协议,而本次实验程序设计的精妙之处在于对ACK的正确返回、ACK的错误返回以及ACK丢失三种情形的成功模拟。
数据链路层虚拟实验

实验三数据链路层虚拟实验一、实验目的(1)了解数据链路层两个主要协议的数据帧的格式(2)了解集线器和交换机如何转发数据(3)了解交换机的自学习算法建立地址转发表的过程二、Packet Tracer简要说明做计算机网络实验的平台有哪些?为什么采用PT(简称)?做计算机网络实验最好的是真实网络环境,但这显然难以满足。
其次是专设的计算机网络实验平台,比如远程计算机网络实验平台,一般也是建立在真实网络环境基础上,这个环境一般也不具备。
主流是各类网络虚拟平台,主流有以下:Ciscio Packet Tracer:这是思科公司提供的一个网络实验实验平台模拟器,就是通过编程实现模拟的网络环境,功能全面,但里面所有操作与数据都是逻辑虚拟的,并不是真实的。
GNS3:思科提供的一个基于模拟网络设备+真实网络配置管理系统(IOS)的实验平台,功能比PT强大不少,与真实网络环境相似率达99%以上,可以与真实网络真实通信,所有数据都是真实的。
WEB-IOU:思科的Ciscio-IOU改过来的,没有GNS3全面,但消耗资源较小,而且有方便操作的图形界面,一般与VMware等计算机硬件虚拟机配合使用。
ENSP:华为良心出品,集各家大成。
此外,还有向小凡模拟器等其他模拟器,不过大家知道,网络行业牛耳不过思科和华为,所以以上四个是最权威的。
考虑到我们的专业并非计算机网络方向,此外课时限制,所以放弃较为复杂的GNS3和ENSP,采用初学者易上手的PT模拟器,并且,我们的实验手段主要是观察和基础操作,即每个实验会提供一个构建好的虚拟网络环境,不需要大家组网跟网络配置,主要是在做一些基础命令操作、观察与体验,以增进对计算机网络原理的理解。
PT可以做CCNA和部分CCNP的实验,GNS3和ENSP是目前最强大的网络模拟器,可以搞定CCIE级别实验,如有兴趣同学可自行学习(我院计算机系应该统一采用GNS3做网络实验,大家感兴趣可跟他们交流)。
1实验一数据链路层实验

1实验一数据链路层实验实验1 数据链路层——检错与纠错一实验任务1通过【海明编码】和【CRC 检错】测试软件,验证纠错与检错功能和性能,掌握其工作原理;2编写海明编码程序和 CRC 编码程序;3总结实验过程(实验报告,左侧装订):方案、编程、调试、结果、分析、结论。
二实验环境1操作系统Windws 9x/NT/2000/XP/2003/2008/Vista/72软件Visual C++ 6.0/2005/2008/2010、Visual Basic 6.0/2005/2008/2010、Turbo C/C++3软件 C++ Builder 6.0/2006/2007/2009/2010/XE/XE2、Java、C# 或其它4数制转换与比较 (16进制、2进制转换;通过比较,找出差错个数、差错位置和突发差错长度)。
三海明编码实验下载【海明编码】测试软件,运行:1 验证纠错能力;2 验证检错能力;3 若数据=10011001,海明编码=?,校验位=?4若接收端收到的信息=101010101001(海明编码),数据=?5 尝试编写海明编码的程序。
四CRC编码实验下载【CRC-8检错】测试软件,运行:CRC8UndetectedErrors1验证检错能力,能检几位错?2 找出检错失败的信息码,并进行分析;3 若数据=“Hello!”,采用生成多项式107H,CRC校验码=?4若数据=“Hello!”,采用生成多项式131H,CRC校验码=?5若接收端收到的信息=4F6F1DH,采用生成多项式107H进行校验,结果如何?6自定义生成多项式,实验其性能,如何选择生成多项式?7试编写CRC-8编码程序;8试编写CRC-16编码程序,参考【CRC-16 检错】测试软件。
CRC16UndetectedErrors9 对比CRC-8、CRC-16、CRC-32的检错性能;10 试编写CRC-32编码程序,参考【CRC-32 检错】测试软件。
数据链路层模拟实验报告

数据链路层模拟实验报告1. 协议2模拟实验1.1模拟可靠信道上的传输执行以下命令:./protocol2 50 10 0 0 7得到如下运行结果(包括分析):Tick 10. Proc 1 got good frame: type=Data seq=0 ack=0 payload=1/*进程1收到一个正确帧,类型是Data;分组序列号为0;确认号为0;目前成功接收到1帧*/ Tick 10. Proc 1 sent frame: type=Ack seq=0 ack=0 payload=0/*进程1发送一个帧,类型是Ack;分组序列号为0;确认号为0 */Tick 13. Proc 0 got good frame: type=Ack seq=0 ack=0 payload=0/*进程0收到一个正确帧,类型是Ack;分组序列号为0;确认号为0 */Tick 13. Proc 0 sent frame: type=Data seq=0 ack=0 payload=2/*进程0发送一个帧,类型是Data;分组序列号为0;确认号为0;目前成功发送2帧*/Tick 15. Proc 1 got good frame: type=Data seq=0 ack=0 payload=2/*进程1收到一个正确帧,类型是Data;分组序列号为0;确认号为0;目前成功接收到2帧*/ Tick 15. Proc 1 sent frame: type=Ack seq=0 ack=0 payload=0/*进程1发送一个帧,类型是Ack;分组序列号为0;确认号为0;成功接收到0帧*/Tick 19. Proc 0 got good frame: type=Ack seq=0 ack=0 payload=0/*进程0收到一个正确帧,类型是Ack;分组序列号为0;确认号为0 */Tick 19. Proc 0 sent frame: type=Data seq=0 ack=0 payload=3/*进程0发送一个帧,类型是Data;分组序列号为0;确认号为0;目前成功发送3帧*/Tick 21. Proc 1 got good frame: type=Data seq=0 ack=0 payload=3/*进程1收到一个正确帧,类型是Data;分组序列号为0;确认号为0;目前成功接收到3帧*/ Tick 21. Proc 1 sent frame: type=Ack seq=0 ack=0 payload=0/*进程1发送一个帧,类型是Ack;分组序列号为0;确认号为0 */得出的结论:从实验的数据来看在协议2的模拟过程中Process0模拟的发送端,Process1模拟接收端.在Process0发送一个数据帧(Data)后,Process1接受到以后就立即发送一个确认帧(Ack),Process0接受到Process1的确认帧(Ack)后再接着发送下数据帧(Data),这样就完成了一个传输接收的周期,而payload则记录了成功接收到的帧的(Data)个数,可以将其理解为一个计数器,这个计数器只记录成功接收到的帧(Data)的个数,而不记录成功接收到确认帧(Ack)的个数,当Process0接收到Process1的确认帧后,Process0的payload就自动加1,表示成功发送了一帧(Data),对于Process1,每成功接收到一个数据帧(Data),其payload就自动加1,表示成功接收到了一帧(Data).通过模拟可以看出协议2是一个单工的停-等协议,接收端在接收到发送端发来的一个数据帧之后,发送一个确认帧,等待下一帧.而发送方在发送了一个数据帧之后就不再发送,等待接收方的接收确认帧,待接收到接收方发来的确认帧之后,确认发送成功才发送下一帧.这样的发送方式较无限制的单工协议要稳定,安全,可以保证接收的数据的正确性,同时又可以避免接收方被发送方发送的数据湮没的危险2.协议3模拟实验2.1模拟协议3在不可靠信道上的正常传输请执行以下命令:./protocol3 50 15 0 0 7得到如下运行结果(包括分析):(请在这里记录下运行的结果,并插入类似程序注释的形式对运行结果进行解说)……得出的结论:(请在这里概要性的说明你运行结果总的理解,以及自己得出的结论和感想)……2.2模拟不可靠信道传输中的超时错误请执行以下命令:./protocol3 50 5 0 0 7得到如下运行结果(包括分析):(请在这里记录下运行的结果,并插入类似程序注释的形式对运行结果进行解说)……得出的结论:(请在这里概要性的说明你运行结果总的理解,以及自己得出的结论和感想)……2.3模拟不可靠信道传输中的丢包错误请执行以下命令:./protocol3 100 10 10 0 7得到如下运行结果(包括分析):(请在这里记录下运行的结果,并插入类似程序注释的形式对运行结果进行解说)……得出的结论:(请在这里概要性的说明你运行结果总的理解,以及自己得出的结论和感想)……2.4模拟不可靠信道传输中的校验和错误请执行以下命令:./protocol3 100 10 0 10 7得到如下运行结果(包括分析):(请在这里记录下运行的结果,并插入类似程序注释的形式对运行结果进行解说)……得出的结论:(请在这里概要性的说明你运行结果总的理解,以及自己得出的结论和感想)……3.协议4模拟实验3.1模拟1位滑动窗口协议中的正常传输请执行以下命令:./protocol4 50 10 0 0 7得到如下运行结果(包括分析):(请在这里记录下运行的结果,并插入类似程序注释的形式对运行结果进行解说)……得出的结论:(请在这里概要性的说明你运行结果总的理解,以及自己得出的结论和感想)……3.2模拟1位滑动窗口协议中的超时错误请执行以下命令:./protocol4 50 8 0 0 7得到如下运行结果(包括分析):(请在这里记录下运行的结果,并插入类似程序注释的形式对运行结果进行解说)……得出的结论:(请在这里概要性的说明你运行结果总的理解,以及自己得出的结论和感想)……3.3模拟1位滑动窗口协议中的丢包错误请执行以下命令:./protocol4 50 10 10 0 7得到如下运行结果(包括分析):Tick 5. Proc 0 got good frame: type=Data seq=0 ack=0 payload=0/*进程0成功接收到一帧,类型为Data;序列号为0,确认号为0,目前成功发送0帧*/Tick 5. Proc 0 sent frame: type=Data seq=1 ack=0 payload=1/*进程0成功发送一帧,类型为Data;序列号为1,确认号为0,目前成功发送1帧*/Tick 10. Proc 1 got good frame: type=Data seq=1 ack=0 payload=1/*进程1成功接收到一帧,类型为Data;序列号为1,确认号为0,目前成功发送1帧*/Tick 10. Proc 1 sent frame: type=Data seq=1 ack=1 payload=1/*进程1成功发送一帧,类型为Data;序列号为0,确认号为0,目前成功发送1帧*/Tick 13. Proc 0 got good frame: type=Data seq=1 ack=1 payload=1/*进程0成功接收到一帧,类型为Data;序列号为1,确认号为1,目前成功发送1帧*/Tick 13. Proc 0 sent frame that got lost: type=Data seq=0 ack=1 payload=2/*进程0成功发送一帧,类型为Data;序列号为0,确认号为1,目前成功发送2帧*/Tick 21. Proc 1 got timeout for frame 1/*进程1得到一个超时帧(帧1)*/Tick 21. Proc 1 sent frame that got lost: type=Data seq=1 ack=1 payload=1/*进程0成功接收到一帧,类型为Data;序列号为1,确认号为1,目前成功发送1帧*/Tick 25. Proc 0 got timeout for frame 0/*进程0得到一个超时帧(帧0)*/Tick 25. Proc 0 sent frame: type=Data seq=0 ack=1 payload=2/*进程0成功发送一帧,类型为Data;序列号为0,确认号为1,目前成功发送2帧*/得出的结论:从实验的数据来看,协议4的模拟过程中,Process0,和Process1既是接收端也是发送端,两个进程同时可以接收和发送帧,协议4的一个接收和发送周期大概是这样的:Process0首先发送一个数据帧,Process1成功接收到以后,立即发送一个数据帧给Process0,Process0在接收到Process1发送的数据帧后又立即发送下一数据帧.payload是记录本机成功发送数据帧数的计数器,当收到一个数据帧是计数器就会自动加1.当传输发生超时错误时,发送数据的两端都会收到超时错误的提示,根据提示中的序列号进行数据帧的重传.通过模拟可以看出,协议4是一个双工协议,传输的两端都可以进行数据的传送和接收,一端在接收到对方的数据帧后就接着发送数据帧给对方.可见协议4的传输效率比较高,而且在出错时,可以根据错误提示中的信息将丢失的数据进行重传,保证了传输的数据的完整性,及正确性.3.4模拟1位滑动窗口协议中的校验和错误请执行以下命令:./protocol4 50 10 0 10 7得到如下运行结果(包括分析):(请在这里记录下运行的结果,并插入类似程序注释的形式对运行结果进行解说)……得出的结论:(请在这里概要性的说明你运行结果总的理解,以及自己得出的结论和感想)……下面是古文鉴赏,不需要的朋友可以下载后编辑删除!!谢谢!!九歌·湘君屈原朗诵:路英君不行兮夷犹,蹇谁留兮中洲。
数据链路层实验

实验三协议分析软件使用及数据链路层协议分析一、 实验目的TCP/IP 协议栈分为四层,从下往上依次为网络接口层、网络层、传输层和应用层,而 网络接口层没有专门的协议,而是使用连接在In ternet 网上的各通信子网本身所固有的协 议。
如以太网(Ethernet )的802.3协议、令牌环网(TokenRing )的802.5协议、分组交换网的X.25协议等。
目前Ethernet 网得到了广泛的应用,它几乎成为局域网代名词。
因此,对以太网链路 层的帧格式进行分析验证, 使学生初步了解 TCP/IP 链路层的主要协议以及这些协议的主要用途和帧结构。
(1) 掌握协议分析软件 sniffer 的使用; (2) 熟悉以太网链路层帧格式构成; 二、 实验要求能运用sniffer 工具进行以太网链路层帧格式协议分析。
三、 实验原理以太网简介IEEE 802参考模型把数据链路层分为逻辑链路控制子层(LLC, Logical Link Control )和介质访问控制子层 (MAC Media Access Control )。
与各种传输介质有关的控制问题都放在MAC 层中,而与传输介质无关的问题都放在LLC 层。
因此,局域网对 LLC 子层是透明的,只有具体到 MAC 子层才能发现所连接的是什么标准的局域网。
IEEE 802.3是一种基带总线局域网,最初是由美国施乐(Xerox )于1975年研制成功的,并以曾经在历史上表示传播电磁波的以太 (Ether )来命名。
1981年,施乐公司、数字设备公司(Digital )和英特尔(In tel )联合提出了以太网的规约。
1982年修改为第二版,即DIX Ethernet V2 ,成为世界上第一个局域网产品的规范。
这个标准后来成为IEEE802.3标准的基础。
在 802.3 中使用 1 坚持的 CSMA/Ct X Carrier Sense Multiple Access with CollisionDetection )协议。
《计算机网络基础及应用》 实训文档 第4章 数据链路层抓包实践

实验4-2 数据链路层抓包实践一、实验目的(1)理解数据链路层帧格式(2)掌握抓包软件的使用(3)掌握通过抓包软件抓取帧并进行分析的办法。
二、相关理论数据链路层的传输单位为帧(Frame或称分组),在发送端数据链路层将网络层的数据按照一定格式打包为帧并发送给物理层,在接收端数据链路层将物理层的数据按照一定格式解包为帧并发送给网络层。
目前,在数据链路层使用比较多的是以太网(Ethernet)协议。
以太网帧格式如下:目的Mac地址源Mac地址类型数据校验码6字节6字节2字节46-1500字节4字节目的Mac地址:下一跳的Mac地址,帧每经过一跳(即每经过一台网络设备如交换机)该地址会被替换,直到最后一跳被替换为接收端的Mac地址。
源Mac地址:发送端Mac地址。
类型:用来指出以太网帧内所含的上层协议。
对于IP报文来说,该字段值是0x0800。
对于ARP信息来说,以太类型字段的值是0x0806。
数据:从上层或下层传来的有效数据,如果少于46个字节,必须增补到46个字节。
校验码:CRC校验码,校验数据在传输过程中是否出错。
三、实验内容(1)掌握抓包软件的使用(2)掌握通过抓包软件抓取帧并进行分析的办法四、实验步骤(1)打开Wireshark,其主界面如下:(2)在“抓包”菜单中选中options,可以设置抓包选项,如下图所示,这里我们需要选择要对其进行抓包的网卡。
选择完成后按“start”开始抓包。
过几秒钟后选择菜单capture->stop停止抓包。
显示抓包结果:任意选中一帧,可以看到该帧所在的各层分组的头部如下:通过头部信息可以看出,该帧在数据链路层使用的是Ethernet II协议,到网络层被封装为IP 数据包,到传输层被封装为UDP数据包,没有应用层协议。
点开Ethernet II前的+号,可以看到该帧在数据链路层的详细信息:可以看出该帧的源Mac地址为00:30:18:a9:c5:aa,目的Mac地址为:94:0C:6d:66:00:8a, 类型特征码为0800(即表示IP封装),在数据区可以看到该帧的完整数据(16进制表示,可以在数据区右键选择2进制表示)。
实验二数据链路层实验

实验二数据链路层实验一、实验目的本实验旨在通过实际操作,加深对数据链路层的理解,掌握数据链路层的基本概念、协议和实现方法。
二、实验设备和工具1. 计算机:一台2. 网络摹拟器软件:如GNS3、Packet Tracer等3. 网络线:若干条4. 交换机:一台三、实验步骤1. 网络拓扑搭建a. 打开网络摹拟器软件,创建一个新项目。
b. 在项目中添加两台计算机和一台交换机,并连接它们。
c. 配置计算机的IP地址和子网掩码,确保它们在同一网段内。
2. 数据链路层基本概念实验a. 打开两台计算机的命令行界面。
b. 在计算机1上使用ping命令向计算机2发送数据包,并观察结果。
c. 分析ping命令的过程,了解数据链路层的作用和功能。
3. 数据链路层帧封装实验a. 在计算机1上创建一个文本文件,写入一段文字。
b. 使用数据链路层的帧封装方法,将文本文件封装成数据帧。
c. 将封装后的数据帧发送给计算机2,并接收并解析数据帧。
d. 比较发送前和接收后的数据是否一致,验证数据链路层帧封装的正确性。
4. 数据链路层差错检测实验a. 在计算机1上创建一个文本文件,写入一段文字。
b. 使用数据链路层的差错检测方法,对文本文件进行差错检测。
c. 将差错检测后的结果发送给计算机2,并进行差错检测验证。
d. 比较发送前和接收后的结果,验证数据链路层差错检测的准确性。
5. 数据链路层流量控制实验a. 在计算机1上创建一个较大的文件。
b. 使用数据链路层的流量控制方法,控制文件的发送速率。
c. 将文件发送给计算机2,并观察发送过程中的流量操纵情况。
d. 分析流量控制的效果,验证数据链路层流量控制的可行性。
6. 数据链路层可靠传输实验a. 在计算机1上创建一个文本文件,写入一段文字。
b. 使用数据链路层的可靠传输方法,将文本文件分割成多个数据包。
c. 将数据包发送给计算机2,并进行接收和重组。
d. 比较发送前和接收后的文本内容,验证数据链路层可靠传输的正确性。
计算机网络关于数据链路层协议的实验报告

实验报告实验名称数据链路层协议的理解与实现课程名称计算机网络姓名王颖学号16008404日期地点成绩教师王磊电气工程学院东南大学实验一数据链路层协议的理解与实现一.实验目的:1.加深对流量控制、差错处理方法的理解;2.熟悉TCP/IP编程, 将书本知识运用到实验中;3.开拓学生的创新意识,培养学生的独立动手操作的能力;二.实验内容:1.利用已有的模拟信道程序,编制发送、接收程序的部分模块,使系统具有可靠的收发功能。
具体要求1)采用无连接Socket编程2)地址与端口发送端:地址:127.0.0.1 端口:8001接收端:地址:127.0.0.1 端口:600134)需考虑的异常情况:出错、丢失、延时5)采用停等协议6)单工方式7)ACK/NAK的表示:ACK:0x06NAK:0x152.待完成模块要求1)发送程序:偶校验;编码;发送、接收;差错处理、流量控制。
2)接收程序:检查偶校验;应答;发送、接收三.实验环境(软件、硬件及条件):Microsoft visual C++ 6.0四.实验原理1、程序实现的原理Windows Sockets(套接字) 是在Windows下一套开放的、支持多种协议的网络编程接口规范。
为Windows下网络异步通信提供了一种方便的开发和运行环境。
Windows Sockets规范建立在BSD UNIX 中实现的Berkeley 套接字模型上,现已是TCP/IP网络的标准。
它独立于底层的协议。
其原理示意图如下1)数据链路层数据链路层目的是建立在物理层基础上,通过一些数据链路层协议,在不太可靠的物理链路上实现可靠的数据传输。
即数据链路层提供网络中相邻节点之间可靠的数据通信。
数据链路层的主要功能是为网络层提供连接服务,并在数据链路连接上传送帧。
依据功能可以分为有连接和无连接两种。
本实验采用的是有应答,无连接服务。
无连接服务时,发送方的数据链路层要发送数据时,就直接发送数据帧。
计算机网络-数据链路层实验一

北京邮电大学软件学院2014-2015学年第1学期实验报告课程名称:计算机网络实验名称:数据链路层实验实验完成人:姓名:学号:________成绩:姓名:________学号:________成绩:________姓名:________学号:________成绩:________姓名:________学号:________成绩:________姓名:________学号:________成绩:________指导教师:_____ ________________________日期: 2014 年 10 月 27 日实验目的通过本实验使学生理解数据链路层协议数据单元(PDU)的定义和数据链路层功能。
一、二、实验内容a)使用网络协议分析软件Wireshark抓取本计算机访问某网站(例如北京邮电大学网站,其网址为)时发送和接收到的数据包;b)对所抓取的数据包进行分析,分析数据链路层的帧结构及各字段的含义。
三、实验环境1.Windows操作系统2.Wireshark (版本1.10):Wireshark是一个开源的抓包工具。
四、实验结果抓包截图如下:从中选择第185号包进行分析,点进去之后帧的详细情况如下图:数据链路层信息截图:Destination,Source,Type字段:其中destination字段中存取的是该包的目标主机的Mac地址(74:e5:0b:d1:7c:58),占据了数据链路层串中前6个位,之后的(00:0f:e2:6a:3c:fd)知道就是Source字段,后面的08 00两位指的是协议类型为IPv4.如图所示,我的ip是10.125.115.161,如果包的Source的IP地址是这个的话,那么就是我发送的包,同理,destination是我的IP的话,就是我接受的包。
数据链路层实验

实验四:数据链路层实验实验准备实验环境:A192.168.0.10500:06:58:e3:4d:1d B192.168.0.10000:07:e9:53:87:d9 DHCP服务器192.168.0.100:06:25:8d:be:1d第一个实验地址解析协议ARP确定与本地网上一个IP地址对应的MAC地址主机A捕获的Ethernet跟踪记录保存在arp.cap第二个实验在主机B上,我们用命令ipconfig/release释放IP地址192.168.0.100后用命令ipconfig/renew重新获取IP地址。
主机A跟踪这些数据活动,并保存在dhcpRealMAC.cap文件中重新设置主机B的MAC地址为00:10:7b:59:18:64.MAC地址更变在计算机重启会生效.当B启动时,我们捕获所产生的网络通信流的Ethereal跟踪记录并分离DHCP分组。
跟踪保存在dhcpRebootNewMAC.cap文件中。
然后我们重设主机B的MAC地址为与主机A一样的MAC地址00:06:25:8d:be:1d。
重启主机。
使新的MAC地址生效DHCP服务器分配IP地址192.168.0.107给主机B(没有分配地址192.168.0.105.因为主机A在网络上并响应了该IP地址。
)我们捕获主机B ping主机B的跟踪记录并保存在duplicateMACs.cap文件中两台主机连接到一个以太网集线器上。
在实验过程中,主机A保持以太网MAC地址和IP地址不变,而主机B将分配多个MAC地址。
问题:1.在第一个实验中,如果我们计时ping命令要多久才能成功返回的话,就会发现第二次ping命令由于ARP请求要花费更长的时间。
ARP请求和应答增加了多少时间?你是如何知道的?0.0001390.000131通过查看arp.cap第一次ping的时候request与reply之间相差0.000139第二次ping的时候发送ARP广播请求在15.238511到15.238642应答完成2.以太网地址比IP地址多多少位?可以表示出多少个唯一的MAC地址?可以标识多少个唯一的IP地址?32位48位232个3.当分配一个重复的MAC地址给主机B时,寻找一个方法使DHCP服务器不分配192.168.0.105给主机B。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据链路层实验三层交换机实现VLAN间通信一、实验设备2台3560三层交换机,3台电脑。
二、实验要求使在同一VLAN里的计算机系统能跨交换机进行相互通信,而在不同VLAN里的计算机系统也能进行相互通信。
三、实验步骤第一步:在交换机SwitchA上创建Vlan 10,并将0/5端口划分到Vlan 10中。
Switch>enSwitch#conf t !进入全局配置模式。
Enter configuration commands, one per line. End with CNTL/Z.Switch(config)#hostname SwitchA !修改Switch名字为SwitchASwitchA(config)# vlan 10 !创建Vlan 10。
SwitchA(config-vlan)# name sales !将Vlan 10命名为sales。
SwitchA(config-vlan)#exitSwitchA(config)#interface fastethernet 0/5 !进入接口配置模式。
SwitchA(config-if)#switchport access vlan 10 !将0/5端口划分到Vlan 10。
SwitchA(config-if)#exit第二步:在交换机SwitchA上创建Vlan 20,并将0/8端口划分到Vlan 20中。
SwitchA(config)# vlan 20 !创建Vlan 20。
SwitchA(config-vlan)# name technical !将Vlan 20命名为technical。
SwitchA(config-vlan)#exitSwitchA(config)#interface fastethernet 0/8 !进入接口配置模式。
SwitchA(config-if)#switchport access vlan 20 !将0/8端口划分到Vlan 20。
SwitchA(config-if)#exit第三步:在交换机SwitchA上将与SwitchB相连的端口定义为tag vlan模式。
SwitchA(config)#interface fastethernet 0/24 !进入接口配置模式。
SwitchA(config-if)#switchport trunk encapsulation dot1q!将f 0/24端口封装dot1q协议,支持中继交换机;SwitchA(config-if)#swi mode trunkSwitchA(config-if)#%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/24, changed state to down%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/24, changed state to up!将fastethernet 0/24端口设为tag vlan模式。
作用是串联两个交换机;第四步:在交换机SwitchB上创建Vlan 10,并将0/5端口划分到Vlan 10中。
SwitchB # configure terminalSwitchB(config)# vlan 10SwitchB(config-vlan)# name salesSwitchB(config-vlan)#exitSwitchB(config)#interface fastethernet 0/5SwitchB(config-if)#switchport access vlan 10SwitchB(config-if)#exit第五步:在交换机SwitchB上将与SwitchA相连的端口定义为tag vlan模式。
SwitchB(config)#interface fastethernet 0/24 !进入接口配置模式。
SwitchB(config-if)#switchport trunk encapsulation dot1qSwitchB(config-if)#switchport mode trunk !将fastethernet 0/24端口设为tag vlan模式。
第六步:将三台PC机IP地址配置好之后验证PC1与PC3能互相通信,但PC2与PC3不能互相通信。
C:\>ping 192.168.10.3 !在PC1的命令行方式下验证能Ping通PC3 。
C:\>ping 192.168.10.3 !在PC2的命令行方式下验证不能Ping通PC3 。
截图;第七步:设置三层交换机VLAN间通讯。
SwitchA(config)# int vlan 10 ! 创建虚拟接口vlan 10SwitchA(config-if)#ip address 192.168.10.1 255.255.255.0 ! 配置虚拟接口vlan 10的地址SwitchA(config-if)#no shut !启动端口SwitchA(config-if)#exitSwitchA(config)# int vlan 20 ! 创建虚拟接口vlan 20SwitchA(config-if)#ip address 192.168.20.1 255.255.255.0SwitchA(config-if)#no shut !启动端口SwitchA(config)#ip routing !开启交换机三层路由功能第八步:将PC1和PC3的默认网关设置为192.168.10.1,将PC2的默认网关设置为192.168.20.1第九步:测试结果不同VLAN内的主机可以互相PING通【注意事项】两台交换机之间相连的端口应该设置为t a g v l a n模式。
需要设置P C的网关作业要求:将以上步骤的配置命令用自己做实验的相应截图替换;并且包含实验中间以及最后结果截图,以下实验类同;实验感受:用自己的话描述做此实验的个人感受,以下实验类同;VTP一、实验设备三台三层交换机,一台二层交换机。
二、实验要求能够学习到vlan信息。
三、实验步骤在S W1上的配置:switch(config)#ho SW1SW1(config) #int range fa0/1 – 3SW1(config-if)#switchport trunk encapsulation dot1qSW1 (config-if-range)# sw mo trSW1 (config-if-range)#endSW1 #vlan daSW1 (vlan)#vtp domain ggSW1 (vlan)#vtp serverSW1 (vlan)#exitSW1 #vlan daSW1 (vlan)#vlan 10SW1 (vlan)#vlan 20在S W2上的配置:Switch(config)#ho SW2SW2(config)#int f0/2SW2(config-if)#switchport trunk encapsulation dot1qSW2 (config-if)#sw mo trSW2 (config-if)#endSW2 #vlan daSW2(vlan)#vtp domain ggSW2 (vlan)#vtp clientSW2 (vlan)#exit在S W3上的配置:Switch(config)#ho SW3SW3(config)#int f0/1SW3(config-if)#switchport trunk encapsulation dot1qSW3 (config-if)#sw mo trSW3(config-if)#endSW3 #vlan daSW3(vlan)#vtp domain ggSW3 (vlan)#vtp clientSW3 (vlan)#exi在S W4上的配置:Switch(config)#ho SW4SW4(config)#int f0/3SW4 (config-if)#sw mo trSW4(config-if)#endSW4 #vlan daSW4(vlan)#vtp domain ggSW4(vlan)#vtp clientSW4 (vlan)#exi测试:在SW2-SW4上查询是否学到SW1(VTP Server)交换机创建的VLAN,命令是:SW2#sh vlan,此方法是测试VTP有效的一种方式并截图;在此基础上,设计另外测试VTP有效的方法。
(提示:删除已配置命令是在原始命令之前加一个no即可并截图;)实验感受:生成树STP一、实验设备3台2960交换机,3台PC机。
二、实验目的理解生成树协议STP的工作效果。
三、实验效果:使网络在有冗余链路的情况下避免环路的产生,避免广播风暴等。
四、实验拓朴五、实验步骤因为思科交换机默认开启spanning-tree,所以在这里只需要将拓扑建好并设置PC机的IP地址后即可测试;六、测试方法你能否解释Switch2处于稳定状态下的Fa0/1端口的颜色块是棕色吗?(棕色代表此端口处于阻塞状态)自己设计一个测试方法,将spanning-tree协议功能的效果图截出来。
备注:PC机连续ping命令的格式:ping –n 100 192.168.0.1 !连续发送100个测试包;实验感受:PPP PAP认证一、实验拓扑S1/2 S1/2DTE DCE二、拓扑说明本例子是PAP 配置,认证方的IP 地址为 1.1.1.2/24,被认证方的IP地址为1.1.1.1/24,要求设定的用户名和密码和认证方一样,分别是用户名RouterA,密码RouterA。
Router A为被认证方,Router B为认证方;三、实验步骤:路由器选择2620XM,添加的物理模块是:NM-4A/S,连接线选择Sierial DCE;这里应该从RouterB连向RouerA;连接好实验环境后,执行以下操作。
RouterB的配置:Router>enable!进入路由器特权模式Router #configure terminal!进入全局配置模式Router (config)# Hostname RouterB!将路由器重命名为RouterBRouterB(config)#interface Serial 1/2!进入Serial 1/2的接口配置模式RouterB(config-if)#ip address 1.1.1.2 255.255.255.0!配置IP 地址RouterB(config-if)#clock rate 64000!定义此机器为DCE,Data Communications Equipment(数据通信设备),它在DTE和传输线路之间提供信号变!换和编码功能,并负责建立、保持和释放链路的连接,由开放软件基金开发。