网络基础学习知识原理实验报告(GBN)

合集下载

网络原理实验报告

网络原理实验报告

网络原理实验报告网络原理实验报告一、引言网络原理是计算机科学中的重要基础知识,通过实验可以更好地理解和掌握网络的工作原理。

本实验报告旨在总结和分析我们在网络原理实验中所做的实验内容和实验结果。

二、实验目的本次实验的主要目的是通过搭建一个简单的局域网,了解和掌握网络的基本概念和工作原理。

具体实验内容包括网络拓扑结构的搭建、IP地址的配置、网络通信的测试等。

三、实验过程1. 网络拓扑结构的搭建我们使用了三台计算机和一个交换机来搭建一个简单的局域网。

首先,我们将三台计算机连接到交换机上,确保每台计算机都能够正常连接到交换机。

然后,我们通过配置交换机的端口,将这三台计算机连接在同一个局域网中。

2. IP地址的配置在搭建好网络拓扑结构后,我们需要为每台计算机配置IP地址,以便它们能够相互通信。

我们使用了静态IP地址的方式进行配置,为每台计算机分配了一个唯一的IP地址。

通过配置IP地址,我们可以实现计算机之间的互联和数据传输。

3. 网络通信的测试在完成网络拓扑结构的搭建和IP地址的配置后,我们进行了网络通信的测试。

我们通过在不同计算机上运行ping命令,测试计算机之间的连通性。

通过ping命令,我们可以发送一个网络数据包到目标计算机,并接收到该计算机的响应。

通过测试,我们可以判断网络是否正常工作。

四、实验结果与分析通过实验,我们成功搭建了一个简单的局域网,并配置了IP地址。

在进行网络通信测试时,我们发现所有计算机之间都能够正常通信,ping命令的结果都为成功。

这表明我们的网络拓扑结构和IP地址配置是正确的。

在实验过程中,我们还发现了一些问题。

首先,网络拓扑结构的搭建需要注意连接线的正确插入。

如果连接线插入不正确,计算机之间可能无法正常通信。

其次,IP地址的配置要确保每台计算机的IP地址不重复,并且属于同一个网段。

如果IP地址配置错误,计算机之间也无法正常通信。

通过本次实验,我们深入理解了网络的工作原理。

网络是由多台计算机通过网络设备连接在一起,通过IP地址进行通信的。

网络基础实验报告心得

网络基础实验报告心得

一、实验背景随着信息技术的飞速发展,计算机网络已经成为我们生活中不可或缺的一部分。

为了更好地掌握计算机网络的基本原理和技能,我们进行了网络基础实验。

通过这次实验,我对计算机网络有了更深入的了解,以下是我对实验的心得体会。

二、实验目的1. 理解计算机网络的基本概念和原理;2. 掌握网络设备的安装、配置和调试方法;3. 熟悉网络拓扑结构的设计与实现;4. 提高动手实践能力和团队协作能力。

三、实验过程1. 实验一:网络设备认识与连接通过实验,我们了解了网络设备的种类、功能以及连接方式。

我们学习了交换机、路由器、集线器等设备的安装、配置和调试方法。

在实验过程中,我们学会了如何连接网线、配置IP地址、设置子网掩码等基本操作。

2. 实验二:网络拓扑结构设计在实验中,我们学习了网络拓扑结构的概念,并了解了常见的拓扑结构,如星型、环型、总线型等。

我们通过实际操作,设计了符合实验要求的网络拓扑结构,并实现了网络设备的连接。

3. 实验三:网络通信测试在实验过程中,我们利用ping命令测试了网络设备的连通性,并分析了网络故障的原因。

通过实验,我们掌握了网络通信测试的基本方法,提高了网络故障排查能力。

4. 实验四:网络安全配置我们学习了网络安全的防护措施,如设置防火墙、配置入侵检测系统等。

通过实验,我们掌握了网络安全配置的基本方法,提高了网络安全意识。

四、实验心得1. 理论与实践相结合:在实验过程中,我们将理论知识与实际操作相结合,提高了动手实践能力。

通过实际操作,我们更加深入地理解了计算机网络的基本原理。

2. 团队协作:在实验过程中,我们学会了与团队成员沟通、协作,共同完成任务。

这有助于提高我们的团队协作能力和沟通能力。

3. 网络安全意识:通过实验,我们认识到网络安全的重要性,学会了如何保护网络设备,防止网络攻击。

4. 不断学习:计算机网络技术更新迅速,我们需要不断学习新知识,跟上时代步伐。

实验过程中,我们意识到学无止境,要不断努力提高自己。

网络基本操作的实验报告

网络基本操作的实验报告

一、实验目的1. 熟悉网络基本设备的连接方法;2. 掌握网络设备的基本配置;3. 了解网络故障排除的基本方法。

二、实验环境1. 硬件设备:交换机、路由器、PC机、网线、Console线;2. 软件设备:网络设备驱动程序、网络管理软件、操作系统。

三、实验内容1. 网络设备连接;2. 交换机基本配置;3. 路由器基本配置;4. 故障排除。

四、实验步骤1. 网络设备连接(1)将PC机通过网线连接至交换机;(2)将交换机通过网线连接至路由器;(3)将路由器通过网线连接至另一台PC机;(4)将Console线连接至交换机和路由器的Console口。

2. 交换机基本配置(1)进入交换机Console口,输入命令进入用户视图;(2)输入命令进入系统视图;(3)输入命令进入接口视图,配置交换机端口;(4)配置VLAN,设置端口所属VLAN;(5)配置端口链路类型(Access、Trunk、Hybrid);(6)配置端口安全策略;(7)配置STP(生成树);(8)保存配置。

3. 路由器基本配置(1)进入路由器Console口,输入命令进入用户视图;(2)输入命令进入系统视图;(3)配置接口IP地址;(4)配置默认路由;(5)配置静态路由;(6)配置访问控制列表(ACL);(7)配置NAT(网络地址转换);(8)保存配置。

4. 故障排除(1)检查物理连接,确保网线连接正常;(2)检查设备配置,确认配置无误;(3)检查设备状态,查看接口状态和VLAN状态;(4)使用ping命令测试网络连通性;(5)查看设备日志,查找故障原因;(6)根据故障原因进行相应处理。

五、实验结果与分析1. 网络设备连接成功,PC机之间可以互相ping通;2. 交换机基本配置完成,VLAN划分合理,端口链路类型配置正确;3. 路由器基本配置完成,接口IP地址配置正确,默认路由和静态路由配置无误;4. 故障排除过程中,通过检查物理连接、设备配置、设备状态等方法,成功解决了网络故障。

网络基础知识实验

网络基础知识实验

网络基础知识实验网络技术在现今社会中发挥着越来越重要的作用,由于网络技术的发展,用户可以轻松地访问信息,完成实际任务,这对社会的发展有着极大的贡献。

因此,网络基础知识的研究和实施变得越来越重要。

网络基础知识实验的目的是为了提高网络基础知识和技能,更好地支持及促进社会的发展。

网络基础知识实验的内容包括,如何设计网络拓扑;如何分析网络性能;如何调试网络系统;如何开发网络应用程序;如何建立网络安全防护措施;如何使用网络监控工具,等等。

以上是网络基础知识实验的主要内容。

在以上网络基础知识实验的设计过程中,应采取相应的措施确保安全。

首先,要确保计算机网络安全,防止病毒传播和其它网络攻击。

为此,可以使用网络监控工具检测和分析网络,以发现潜在的问题。

其次,在网络系统设计和开发过程中,应采取适当的安全措施,如对网络应用程序进行安全加固,以及安装访问,审核和监控系统来保护网络系统,以防止恶意软件的攻击。

最后,要进行完整的安全测试,确保网络系统的安全性。

在测试过程中,可以采用白盒测试、黑盒测试、安全审计和penetration-testing等方法检测网络系统的安全性。

总之,网络安全测试是网络基础知识实验不可或缺的一部分。

网络基础知识实验是一个复杂的计算机科学领域,主要包括网络技术和信息安全等技术,因此,在进行网络基础知识实验时,需要有足够的技术知识和实践技能,才能够顺利实施和获得良好的结果。

综上所述,网络基础知识实验是一个非常重要的领域,其目的是为了提高网络各方面的技能,更好地支持及促进社会的发展,并且应采取严格的安全措施来确保安全性。

通过对网络基础知识实验的深入研究和实施,可以更好地利用网络技术,为社会的发展和进步做出更大的贡献。

网络基本原理实习报告

网络基本原理实习报告

实习报告实习单位:XX网络科技有限公司实习时间:2021年7月1日至2021年8月31日实习岗位:网络工程师一、实习背景及目的随着互联网技术的飞速发展,网络已经成为现代社会生活、工作的重要部分。

作为一名网络工程专业的学生,为了更好地将理论知识与实际工作相结合,提高自己的实际操作能力,我选择了网络基本原理实习,希望通过实习深入了解网络的工作原理和实际应用。

二、实习内容及过程1. 实习内容(1)学习网络基础知识,包括TCP/IP协议、网络拓扑结构、网络设备等;(2)了解公司网络架构,参与网络设备的配置和维护;(3)参与公司内部网络故障排查,提高网络问题解决能力;(4)学习网络安全知识,了解常见的安全威胁和防护措施;(5)参加公司举办的培训和讲座,拓宽知识面。

2. 实习过程(1)在实习初期,我通过阅读专业书籍、观看视频教程等方式,系统学习了网络基础知识,为实际操作打下基础;(2)在导师的指导下,我了解了公司网络架构,学会了使用网络设备,如路由器、交换机等,并参与了网络设备的配置和维护;(3)在实习过程中,我参与了公司内部网络故障的排查,通过实际操作,提高了网络问题解决能力;(4)我参加了公司举办的网络安全培训,了解了常见的安全威胁和防护措施,增强了网络安全意识;(5)实习期间,我还参加了多次讲座,拓宽了知识面,为今后的职业发展奠定了基础。

三、实习收获通过这次实习,我收获颇丰,具体表现在以下几个方面:1. 提高了自己的实际操作能力,将理论知识运用到实际工作中;2. 加深了对网络基本原理的理解,掌握了网络设备的配置和维护方法;3. 学会了网络安全知识和防护措施,增强了网络安全意识;4. 拓宽了知识面,为今后的职业发展奠定了基础;5. 增强了团队合作能力,学会了与同事沟通、协作。

四、实习总结通过这次网络基本原理实习,我深刻认识到理论知识与实际工作的重要性。

在今后的学习和工作中,我将继续努力提高自己的专业素养,将所学知识运用到实际工作中,为公司的发展贡献自己的力量。

计算机网络GBN和路由算法实验报告

计算机网络GBN和路由算法实验报告
义定时与超时提醒的功能,主要功能函数有:
A.Public void run()启动函数,标识开始计时(这
里预设的是2秒的时间),超时后提醒并且停止 计时器
B.Public Timers()――构造函数,清0计时器,等待
下一次启动
(4)GBN类:继承于Thread(线程)类,是主函数类,具
有本程序的核心功能,这里先作一部分简单介绍,主 要函数功能有:
计算机网络实验报告
----GBN和路由算法
GBh
1.
运用java编程语言实现基于Go-Back-N的可靠数据传输软件。
2.
通过本实验,使学生能够对可靠数据传输原理有进一步的理 解和掌握。
3.
Go-Back- N的有限状态机模型表示如下图所示:
rdt_send(data)if(nexteeqnum <base十N) t

6统计每一个数据包被发送过的次数(含重
发)并最终显示出来
C.static void OutputWi ndow(Se nder s)输出
当前窗口状态函数。
7•
(一)Sender类
import java.util.Timer;
public class Sen der exte nds Thread{
compute chksum
m ake_p kt(snd pktfnextseq num)),n extseqn umxJota;ch ksu m)udi_se nd(sndpkt(nextseq numj)
if (base==nextseqnum)
start」inn的
nextseqnum-nextseqnurm+1
lOExcepti on, In terruptedExcepti on()主函数,

计算机网络实验报告

计算机网络实验报告

计算机网络实验报告引言计算机网络是现代社会中不可或缺的基础设施,它使得我们能够在全球范围内实现信息交流与资源共享。

为了更好地理解计算机网络的工作原理,本次实验我们进行了一系列的网络实验。

一、网络拓扑实验首先,我们进行了网络拓扑实验,通过搭建不同拓扑结构的网络,观察其性能表现和通信效率。

我们尝试了星型、环状和总线型拓扑结构,并通过测量网络中的传输时延、带宽和吞吐量来评估不同拓扑结构的优劣。

结果显示,星型拓扑结构具有较好的扩展性和可靠性,但是对中央节点的要求较高,一旦中央节点故障,整个网络将无法正常运行。

而环状和总线型拓扑结构则相对简单,但是容易产生信号干扰和数据冲突等问题。

二、网络传输协议实验接下来,我们进行了网络传输协议实验,重点研究TCP/IP协议的性能和可靠性。

我们通过改变传输文件的大小、网络拥塞程度等因素,测试了TCP协议在不同情境下的传输速度和稳定性。

同时,我们也对比了UDP协议的传输效果。

实验结果表明,TCP协议在数据传输方面具有较好的可靠性和流量控制能力,但是在高丢包率的情况下会出现明显的传输延迟。

相比之下,UDP协议虽然传输速度较快,但是无法保证数据的可靠性,容易出现丢包和重传等问题。

三、网络安全实验随后,我们进行了网络安全实验,探讨了网络攻击与防御的相关技术。

我们采用了常见的入侵检测系统和防火墙来保护网络安全,通过模拟各种攻击手段,如拒绝服务攻击、端口扫描等,测试了网络的防护能力。

实验结果显示,入侵检测系统和防火墙能够有效地阻止大多数网络攻击,但是对于某些高级攻击手段,如零日漏洞攻击,仍然存在一定的漏洞。

因此,网络安全的保护需要综合运用各种技术手段,不断提升系统的安全性。

结论通过本次计算机网络实验,我们对网络拓扑结构、传输协议和网络安全等方面有了更深入的理解。

网络拓扑结构的选择应根据实际需求进行权衡,传输协议的选择应根据网络特性和应用场景进行调整,而网络安全则需要综合运用各种安全技术来确保系统的稳定性和数据的安全性。

计算机网络基础实验报告(认 知 网 络)

计算机网络基础实验报告(认 知 网 络)

计算机网络基础实验报告认知网络一·集线器(1)功能:集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。

(2)特点:在星型结构中,它是连接的中间结点,它起放大信号的作用。

所有设备共享Hub的带宽,也就是说,如果hub的带宽是10M,连结了10了设备,每个设备就是1M,Hub所有端口共享一个MAC地址。

(3)优点:同一网段使用的较多,比较便宜,设置方便缺点:i·用户数据包向所有节点发送,很可能带来数据通信的不安全因素,一些别有用心的人很容易就能非法截获他人的数据包;ii·由于所有数据包都是向所有节点同时发送,加上其共享带宽方式(如果两个设备共享10M的集线器,那么每个设备就只有5M的带宽),就更加可能造成网络塞车现象,更加降低了网络执行效率。

iii·非双工传输,网络通信效率低。

集线器的同一时刻每一个端口只能进行一个方向的数据通信,而不能像交换机那样进行双向双工传输,网络执行效率低,不能满足较大型网络通信需求。

(4)所在网络层:它工作于OSI(开放系统互联参考模型)参考模型第一层,即“物理层”。

(5)在网络层中的作用:信息分发,把一个端口接收的所有信号向所有端口分发出去。

一些集线器在分发之前将一些弱信号重新生成,一些集线器整理信号的时序以提供所有端口间的同步数据通信。

(6)当今市面上流行的该种设备的品牌:TP-LINK B-LINK 迅捷网络海联达D-LINK (7)各个集线器品牌现今流行的型号:TP-LINK TL-HP8MUTP-LINK TL-HP5MUB-LINK BL-HB24FAST FH05海联达Ai-H100B-Link BL-HB1二·交换机(1)功能:交换机也叫交换式集线器,它通过对信息进行重新生成,并经过内部处理后转发至指定端口,具备自动寻址能力和交换作用,由于交换机根据所传递信息包的目的地址,将每一信息包独立地从源端口送至目的端口,避免了和其他端口发生碰撞。

计算机网络原理实验报告

计算机网络原理实验报告

计算机网络原理实验报告一、实验目的1.了解计算机网络的基本概念和原理;2.掌握计算机网络的基本组成部分及其功能;3.学习使用网络配置工具进行网络的配置和管理;4.掌握网络通信的基本步骤和网络协议的作用;5.通过实验,加深对计算机网络的理论知识的理解和应用。

二、实验环境1. 操作系统:Windows 10;2. 软件工具:Packet Tracer;3.实验设备:计算机、路由器、交换机。

三、实验内容1.网络配置实验通过使用Packet Tracer软件,建立一个简单的局域网,包括一台计算机、一台路由器和一台交换机。

使用网络配置工具进行网络的配置和管理,实现计算机与路由器之间的通信以及计算机与交换机之间的通信。

2.网络通信实验通过Ping命令测试计算机与路由器之间的连通性,并观察分组的传输过程。

同时,使用Wireshark抓包工具,捕获网络数据包,并分析数据包的结构和内容。

可以观察到IP地址、MAC地址以及各类协议的使用情况。

四、实验步骤1. 打开Packet Tracer软件,创建一个场景,包括一台计算机、一台路由器和一台交换机。

2.使用网络配置工具,给计算机、路由器和交换机分配IP地址,并设置子网掩码。

3.配置路由器的路由表,将计算机所在的网段加入到路由器的路由表中。

4. 在计算机上通过命令行窗口,使用Ping命令测试与路由器的连通性。

5. 同时,启动Wireshark抓包工具,并对网络通信进行抓包。

6. 观察Ping命令的结果,判断是否与路由器连通。

7. 分析Wireshark抓包结果,观察数据包的结构和内容,了解网络通信的基本原理和过程。

五、实验结果与分析1.网络配置实验通过网络配置工具,成功配置了计算机、路由器和交换机的IP地址,并设置了子网掩码。

通过配置路由器的路由表,实现了计算机与路由器之间的通信以及计算机与交换机之间的通信。

2.网络通信实验Ping命令的结果显示,计算机与路由器之间连通正常。

计算机网络原理实验七传输层可靠传输协议GBN编程实验报告精编

计算机网络原理实验七传输层可靠传输协议GBN编程实验报告精编

计算机网络原理实验七传输层可靠传输协议GBN编程实验报告精编实验七:传输层可靠传输协议-GBN编程实验报告一、实验目的1. 理解传输层的可靠传输协议GBN(Go-Back-N)的工作原理;2. 利用Python编程实现GBN协议;3.通过实验验证GBN协议的可靠性。

二、实验环境1. 操作系统:Windows 10;2. 开发工具:Python3.9;3. Python库:socket, threading。

三、实验原理GBN(Go-Back-N)协议是一种滑动窗口协议,用于实现可靠的传输。

在GBN协议中,发送方可以连续发送一批数据包,每个数据包都有一个序号。

接收方会按照相同的序号顺序接收并确认收到的数据包,若一些数据包丢失,则接收方会等待一定时间,然后要求发送方重传从丢失的数据包开始之后的所有数据包。

在本实验中,我们将通过编程实现一个简化的GBN协议。

发送方和接收方将通过socket进行通信。

发送方将发送一定数量的数据包,接收方将模拟数据包丢失,并且在一段时间后要求发送方重传。

四、实验过程1. 建立发送方和接收方的socket连接,并互相绑定IP地址和端口号;2.发送方将一定数量的数据包发送给接收方;3.接收方按照GBN协议的规定接收数据包,并发送确认信息给发送方;4.发送方接收到确认信息后,继续发送下一批数据包;5.当接收方丢失数据包时,等待一段时间之后要求发送方重传;6.发送方收到重传请求后,重新发送从丢失的数据包开始之后的所有数据包;7.重复步骤2-6,直到所有数据包都被成功接收。

五、实验结果经过多次实验,数据包的发送与接收均顺利进行。

发送方能够根据接收方的确认信息进行滑动窗口的滑动,并实现重传功能。

接收方也能够检测到丢失的数据包,并要求发送方进行重传。

整个传输过程基本完成了GBN协议可靠性传输的要求。

六、实验总结通过本次实验,我深入理解了传输层的可靠传输协议GBN的工作原理,并通过编程实现了一个简化的GBN协议。

网基实验报告

网基实验报告

实验名称:基于网络平台的实验设计与实施实验日期:2023年10月15日实验地点:在线网络平台实验对象:计算机科学与技术专业学生实验目的:1. 掌握网络平台的基本操作和功能。

2. 熟悉在线实验的设计与实施流程。

3. 培养学生的团队合作能力和问题解决能力。

4. 提高学生的实践操作能力和创新能力。

实验内容:一、实验背景随着互联网技术的飞速发展,网络平台在教育教学中的应用越来越广泛。

通过网络平台进行实验,可以打破传统实验的时间和空间限制,提高实验效率,培养学生的自主学习能力和创新精神。

二、实验原理本实验以网络平台为载体,通过虚拟实验环境,实现实验的远程操作和实时监控。

实验过程中,学生可以自主选择实验项目,按照实验步骤进行操作,并通过网络平台提交实验报告。

三、实验步骤1. 实验准备:(1)学生登录网络平台,了解实验要求。

(2)学生根据实验要求,选择合适的实验项目。

(3)教师对学生进行实验指导,确保学生掌握实验原理和操作方法。

2. 实验实施:(1)学生按照实验步骤进行操作,记录实验数据。

(2)教师通过网络平台实时监控实验进度,及时解答学生疑问。

(3)学生遇到问题,可以通过网络平台与教师或其他同学进行讨论。

3. 实验总结:(1)学生根据实验数据,分析实验结果,撰写实验报告。

(2)教师对实验报告进行批改,给予学生反馈。

(3)学生根据反馈,对实验报告进行修改和完善。

四、实验结果与分析1. 实验结果:通过本次实验,学生掌握了网络平台的基本操作,熟悉了在线实验的设计与实施流程。

在实验过程中,学生能够独立完成实验任务,提高了实践操作能力和创新能力。

2. 实验分析:(1)网络平台为学生提供了丰富的实验资源,提高了实验效率。

(2)在线实验打破了传统实验的时间和空间限制,使学生能够随时随地进行实验。

(3)实验过程中,学生可以与教师和其他同学进行实时交流,提高了团队合作能力。

(4)实验报告的撰写过程,培养了学生的写作能力和逻辑思维能力。

网络原理实验报告(GBN)

网络原理实验报告(GBN)

姓名:班级:学号:教师:运用各种编程语言实现基于Go-Back-N的可靠数据传输软件。

PS:这里使用的是JAVA语言2.实验意义通过本实验,使学生能够对可靠数据传输原理有进一步的理解和掌握。

3.实验背景Go-Back-N的有限状态机模型表示如下图所示:(a)(b)图为Go-Back-N的有限状态机模型(a)发送端(b)接受端(1)选择合适的编程语言编程实现基于Go-Back-N的可靠数据传输软件。

(2)在实际网络环境或模拟不可靠网络环境中测试和验证自己的可靠数据传输软件。

5.实验环境(1)实验语言:JAVA(2)实验平台:Eclipse(3)引用库函数:.net库、随机(Random)库、计时库(Timer)6.类概览与描述(1)Sender类:继承于Thread(线程)类,模拟发送方的一切功能,主要功能函数有:A.Public void run()——启动函数,标识开始发送数据包B.Sender()——构造函数,分配并初始化窗口值C.Public void getack(in tack)——ACK接收函数,接收接收方返回的ACK并进行验证是否为期待的ACK值(若不是,则重发)D.Public void time()——定时器函数,初始化定时,计时并记录超时与否的状态(2)Receiver类:继承于Thread(线程)类,模拟接收方的一切功能,主要功能函数有:A.Public void run()——启动函数,标识开始等待并接收数据包B.Void Receive(int data,Sender s)——数据包接收函数,功能强大!主要包括:接收数据包,验证数据包,判断与丢弃数据包等C.Public void respond(int ack)——ACK发送函数,发送当前接收到的最后一次正确的数据包对应的ACK(3)Timers类:继承于TimerTask(计时器)类,具有自定义定时与超时提醒的功能,主要功能函数有:A.Public void run()——启动函数,标识开始计时(这里预设的是2秒的时间),超时后提醒并且停止计时器B.Public Timers()——构造函数,清0计时器,等待下一次启动(4)GBN类:继承于Thread(线程)类,是主函数类,具有本程序的核心功能,这里先作一部分简单介绍,主要函数功能有:A.Static void senddelay(int x) throwsInterruptedExceptionPublic Timers()——随机延迟函数,模拟数据包发送传输过程中的随机延迟,常用延迟值分别为:300ms, 750ms, 1200ms,3000ms等B.Public static void main(String[] args) throwsIOException, InterruptedException()——主函数,功能强大,主要包含以下几大方面:①开启发送端与接收端(包括计时器)②超时或者ACK不匹配等情况导致的发送方重新发送数据包③(第一次)发送当前窗口内的数据包④随机函数模拟数据包发送过程中的丢包情况⑤实时更新与显示当前窗口内的数据包情况⑥统计每一个数据包被发送过的次数(含重发)并最终显示出来7.代码展示与描述(一)Sender类import java.util.Timer;public class Sender extends Thread{public int windowsize=3; //发送方窗口长度设为3public String[] data={"data1","data2","data3","data4","data5","data6","data7"}; //模拟七个数据包public int sign[]={0,1,2,3,4,5,6}; //为7个数据包标号public int localack=-1; //保存最近收到的ACK public Timers litime=null; //定时器(这里定为2秒)public int switches=0; //超时标志,1为超时public int windowsign[]; //当前窗口内待发的数据分组的序号public int acksign=0;//为0表示收到正确ACK,为1表示收到错误的ACK,必须重发!public Sender(){windowsign=new int[windowsize];//给窗口分配指定大小的空间for(int i=0;i<3;i++)windowsign[i]=sign[i]; //窗口初始化时存放前3个序号}public void run(){System.out.println("发送方开始发送分组数据!");}public void getack(int ack){System.out.println("发送方收到了ACK,序号为"+ack+"并且开始加以确认!");if(ack!=localack+1){System.out.println("经验证,这不是发送方正期待的ACK,立刻重发序号为"+(localack+1)+"的数据分组!");acksign=1;}else{localack=ack; //表示正确确认了ACKacksign=0;}}public void time(){switches=0; //标志初始化为0litime=new Timers();Timer limit=new Timer();limit.schedule(litime, 0,100);}}(二)Receiver类import java.util.Random;public class Receiver extends Thread{public int lastdata;public Sender sender;public void run(Sender s){sender=s;System.out.println("接收方开始接收分组数据!");}void receive(int data, Sender s){sender=s; //发送方的参数传递System.out.println("接收方收到了序号为"+data+"的分组!");if(data!=0){if(data==lastdata+1){//数据包序号校验,若连续则是正确/所期待的System.out.println("该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!");lastdata=data; //更新本地保存的数据包序号变量respond(lastdata); //回送该正确接收的数据包对应的ACK }else{System.out.println("该数据分组不是接收方所期待的,该分组将被丢弃,接收方准备回送最后接受的数据分组对应的ACK!");respond(lastdata);//若不是所期待的数据包则丢弃并且重发上一次的ACK }}else{System.out.println("该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!");lastdata=data;respond(lastdata); //首次接收数据包并且回送ACK }}void respond(int ack){ //回送指定序号的ACKif(sender.litime.limit<20){ //判断是否超时(2秒)ack=lastdata; //获取本场保存的数据包序号sender.getack(ack);}else{System.out.println("计时超时!!(未丢包但是时间超过2秒)发送方准备重发序号为"+ack+"的数据分组!");sender.switches=1; //如果超时,设置超时状态并显示警告}}}(三)Timers类import java.util.TimerTask;public class Timers extends TimerTask {public int switches;public int limit;public void run(){if(limit<20) limit++; //计时2秒else {switches=-1;this.cancel();} //开关为-1表示超时,并且停止计时器}public Timers(){switches=0; //启动计时器时全部初始化limit=0;}}(四)GBN类import .*;import java.util.Random;import java.io.*;public class GBN extends Thread{static void senddelay(int x) throws InterruptedException{if(x==1) {sleep(300); System.out.println("发送数据分组时发生延迟:300毫秒!"); }else if(x==2) {sleep(750); System.out.println("发送数据分组时发生延迟:750毫秒!");}else if(x==3) {sleep(1200);System.out.println("发送数据分组时发生延迟:1200毫秒!");}else if(x==4) {sleep(3000);System.out.println("发送数据分组时发生延迟:3000毫秒!");}else;}public static void main(String[] args) throws IOException, InterruptedException {Sender s=new Sender();Receiver re=new Receiver();s.start(); //发送端启动re.run(s); //接收端启动sleep(1000); //延迟处理int[] retimes=new int[7];//计算每个分组被发送的次数for(int i=0;i<7;i++) retimes[i]=0; //数据包顺次发送for(int i=0;i<=s.sign.length;i++){while(i>s.localack+1){ //尚有未确认的数据包,重发!System.out.println("发送方开始重新发送序号为"+(s.localack+1)+"的数据分组");retimes[s.localack+1]++;int ran=new Random().nextInt(3);int randelay=new Random().nextInt(5);s.time();senddelay(randelay); //设置随机值,模拟数据传输延迟if(ran!=1) re.receive(s.localack+1,s);//设置随机值,模拟数据丢包过程else System.out.println("序号为"+(s.localack+1)+"的分组在传给接收方途中发生了丢包!");}if(i!=s.sign.length){System.out.println();System.out.println("发送方现在开始第一次发送序号为"+i+"的数据分组");retimes[i]++;if(i!=0){for(int k=0;k<3;k++){//表示至少成功发送并确认了一个数据分组s.windowsign[k]++;//这种情况下滑动窗口向前移动!}}System.out.println();System.out.println("当前窗口内的分组情况为:");//显示当前窗口内数据包情况for(int p=0;p<3;p++){if(s.windowsign[p]<=6)System.out.println("第"+p+"号窗口里面存放的是序号为"+s.windowsign[p]+"的马上待发送的数据分组!");elseSystem.out.println("第"+p+"号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!");}System.out.println();int ran=new Random().nextInt(3);int randelay=new Random().nextInt(5);s.time(); //计时开始(2秒时间)senddelay(randelay); //设置随机值,模拟数据传输延迟if(ran!=1) re.receive(s.sign[i],s);//设置随机值,模拟数据丢包过程else System.out.println("序号为"+i+"的分组在传给接收方途中发生了丢包!");}}System.out.println();System.out.println("以下是每个数据分组被发送过的次数的统计结果");for(int i=0;i<7;i++) //显示关于每个数据包发送次数的统计表System.out.println("序号为"+i+"的数据分组被发送过的次数为:"+retimes[i]);System.exit(0);}}8.程序运行结果部分截图。

计算机网络原理 实验报告

计算机网络原理 实验报告

计算机网络原理实验报告计算机网络原理实验报告引言计算机网络是现代社会中不可或缺的一部分,它使得信息的传递和共享变得更加高效和便捷。

本次实验旨在通过实际操作和观察,深入了解计算机网络的基本原理和工作机制。

实验一:局域网配置与通信在本实验中,我们使用了两台计算机和一台路由器来构建一个简单的局域网,并进行了配置和通信的实验。

1. 实验目的通过本实验,我们的目的是了解局域网的基本概念和配置方法,掌握IP地址和子网掩码的设置,以及实现计算机之间的通信。

2. 实验步骤和结果首先,我们需要将两台计算机和路由器连接起来。

我们使用了网线将计算机和路由器的LAN口连接在一起,并确保连接正确无误。

接下来,我们进行了IP地址和子网掩码的配置。

在计算机1上,我们设置了IP地址为192.168.0.1,子网掩码为255.255.255.0;在计算机2上,我们设置了IP地址为192.168.0.2,子网掩码同样为255.255.255.0。

配置完成后,我们进行了通信测试。

我们在计算机1上打开了一个命令行窗口,输入ping 192.168.0.2命令,发现能够成功与计算机2进行通信,返回了一些网络包的信息。

3. 实验总结通过本实验,我们了解了局域网的基本配置和通信原理。

我们学会了如何设置IP地址和子网掩码,并且成功地实现了计算机之间的通信。

实验二:网络协议分析在本实验中,我们使用Wireshark工具来对网络数据包进行抓包和分析,以深入了解网络协议的工作机制。

1. 实验目的通过本实验,我们的目的是熟悉Wireshark工具的使用方法,并能够分析网络数据包中的各个字段和协议。

2. 实验步骤和结果首先,我们下载并安装了Wireshark工具,并打开了一个网络抓包会话。

我们选择了一个局域网接口作为抓包的目标,并开始了抓包操作。

在抓包过程中,我们访问了一些网站和进行了一些网络操作,以产生一些网络数据包。

抓包结束后,我们停止了抓包会话,并开始分析抓到的数据包。

网络基础实验报告

网络基础实验报告

【精品】网络基础实验报告
精品网络基础实验报告是一种网络技术的实验报告,以满足现代企业的网络技术需求。

它全面、系统地描述了所有网络基础知识,包括但不限于:通信协议、网络构架、网络设备、网络管理、网络安全等。

通过实验,网络管理人员可以更加熟悉网络技术,以便为企业提供更好的服务。

此外,实验报告可以作为网络管理人员的参考,帮助他们进行网络故障诊断和解决方案制定。

精品网络基础实验报告的主要内容如下:
1. 网络架构:网络架构是网络实现的基础,它涵盖了应用层、传输层、网络层、数据链路层等各个层次的网络技术。

2. 网络设备:网络设备主要包括路由器、交换机、防火墙、无线设备、网络存储设备等。

3. 网络管理:网络管理主要包括网络性能监测、网络设备管理、网络安全管理等。

4. 网络安全:网络安全主要包括认证、访问控制、防火墙、VPN等。

以上就是精品网络基础实验报告的主要内容,可以为网络管理人员提供有用的参考资料,以便他们能够更好地管理网络,并避免出现安全漏洞。

《网络技术基础》实验报告

《网络技术基础》实验报告

《网络技术基础》实验报告姓名:实验1 计算机局域网的硬件连接本组成员姓名以及学号:日期:2010年11月1日估计时间:135分钟1—1实验目的1、学习双绞线的使用方法2、掌握使用双绞线作为传输介质,以集线器为中心设备组件小型局域网的硬件连接方法3、掌握配置局域网中IP地址的方法1—2实验设备1、非屏蔽5类双绞线、水晶头若干、专用压线钳2、集线器(HUB)1台。

3、测线器4、微机:3台,能运行windows 2000及以上版本1--3实验内容1、了解实验室工作台的布局2、利用双绞线以及水晶头,按照双绞线的排列顺序做直通线和交叉线3、掌握测量直通线和交叉线的方法4、利用作好的双绞线以及集线器通过硬件在本工作台组建局域网1—4实验原理1、局域网组件过程中的硬件安装以及连接是相对简单但非常重要的环节,其中涉及到网卡的安装,网线的制作、网络的连接、网络操作系统的安装、站点属性的配置等工作。

我们主要对双绞线制作及连接进行操作。

双绞线的传输距离比较短,一般为100米。

由于我们实验中采用集线器作为互连设备来组件小型的局域网,即同一工作台上的3台计算机互连,因此选择选用双绞线作为传输介质。

5 类线由4对双绞线组成,分别标识为白橙/橙、白绿/绿、白蓝/蓝、白棕/棕,每种颜色的花色线和纯色线为一对。

根据数字信号的编码和导线衰减特性的不同,双绞线的传输速率有所变化,最高可达1000Mbit/s。

2、根据连接方式的不同,双绞线分为直通线和交叉线。

如下图所示。

用户设备和网络设备之间(如用户计算机的网卡和集线器之间)使用直通双绞线;用户设备和用户设备之间或网络设备和网络设备之间(如集线器的级联,或两台计算机通过双绞线直接连接),需要使用交叉双绞线连接。

1—5实验步骤1、按照EIA/TIA-568标准排列双绞线电缆线对,每组做3条直通双绞线,3条交叉双绞线。

注意事项:使用压线钳时,要用力,使得水晶头中的金属针能与双绞线电缆中的导线完全接触。

网络基础实验报告心得

网络基础实验报告心得

网络基础实验报告心得在进行网络基础实验后,我对计算机网络的基本知识和实际操作有了更深入的理解。

以下是我的实验报告心得:通过这次实验,我了解到了计算机网络的基本组成和工作原理。

计算机网络是由多台计算机和其他设备通过通信链路连接起来,实现信息传输和资源共享。

网络中的主要设备有交换机、路由器和网卡,它们负责实现数据的转发和路由选择。

此外,了解了IP地址的作用和分类方法,子网掩码的作用以及广播和单播的概念和区别。

在实验中,我们通过实际配置网络设备,学习了局域网的搭建和配置。

我们配置了交换机和路由器,设置了IP地址和子网掩码,并进行了设备之间的连通性测试。

这个过程让我更加清楚地理解了网络设备之间的通信原理和配置方法。

在配置过程中,我也注意到了一些常见的问题和解决方法,比如IP地址冲突和网络设备配置错误等。

另外,我们还学习了基本的网络命令和工具的使用。

通过使用ping命令来测试设备之间的连通性,使用tracert命令来跟踪数据包的路由路径,以及使用ipconfig命令查看和配置IP地址等。

这些命令和工具在网络故障排除和网络性能调优等方面非常有用,对于理解网络运行状态和问题解决有很大帮助。

通过这次实验,我还了解了一些常见的网络协议和应用。

我们学习了HTTP协议的基本原理和请求与响应的交互过程,了解了FTP协议的文件传输过程,以及了解了SMTP协议的邮件传输过程。

这些协议在互联网中有广泛的应用,掌握了它们的工作原理和使用方法对于网络通信和应用开发都非常重要。

总的来说,通过这次网络基础实验,我对计算机网络的基本知识和实际操作有了更清晰的认识。

通过实际配置网络设备、使用网络命令和工具以及学习网络协议和应用,我对计算机网络的工作原理和实际应用有了更深入的理解。

这将对我今后的学习和工作都有很大的帮助。

我相信通过不断学习和实践,我能够进一步提升自己在计算机网络领域的能力。

计算机网络基础实验报告

计算机网络基础实验报告

实验一交换机的基本配置一、实验目的认识Cisco Packet Tracer 模拟器,利用Cisco Packet Tracer 模拟器,熟悉有关交换机配置的基本信息与常用的配置命令,并进行简单的Vlan划分。

二、技术原理交换机工作在数据链路层,与转发器和集线器有很大区别。

交换机的管理方式基本分为两种:带内管理和带外管理。

1. 通过交换机的Console端口管理交换机属于带外管理:这种管理方式不占用交换机的网络端口,第一次配置交换机必须利用Console端口进行配置。

2. 通过远程Telnet、拨号等方式属于带内管理。

三、实验背景苏理工某学院有两个专业:专业A和专业B。

该两个专业的学生同时上课时,将电脑都连接到一个交换机中。

请设计实验:1、使用一台主机通过Console端口配置交换机(包括修改交换机的名称、设置特权模式密码、telnet远程登录密码)并远程登录交换机;2、配置Vlan,使A、B两专业内部可以相互通信,但是A专业和B专业不能相互通信。

四、实验内容1. 认识Cisco Packet Tracer 模拟器,包括软件界面,设备、线路的选择与连接;2. 认识交换机的命令行操作模式,包括用户模式、特权模式、全局配置模式和端口配置模式等;3. 使用计算机与交换机的console端口进行连接,并配置交换机;4. 使用4台pc机,配置每一台pc的ip地址,并讲该4台电脑连接到一个交换机上,并进行Vlan划分。

五、实验要求1. 每位学生将交换机的名称修改为Sw_XXX,其中XXX为自己姓名第一个字母缩写;2. 每次进入交换机特权模式都需要输入密码;3. 拓扑中的四台pc机,pc1和pc3可以ping通,pc2和pc4可以ping通,但是pc1与pc2、pc3与pc4之间不可相互通信六、实验的主要配置界面和实验的拓扑结构PC0串口配置交换机:网络拓扑结构:PC1效果:实验二静态路由器的配置一、实验目的1. 理解静态路由选择策略的含义,并掌握静态路由的配置方法和技巧;2.通过静态路由方式实现网络的连通;3. 熟悉广域网线缆的连接方式。

计算机网络原理实验报告

计算机网络原理实验报告

计算机网络原理实验报告一、实验目的1.理解计算机网络基本原理2.掌握计算机数据传输的过程3.了解计算机网络的基本组成二、实验器材1.计算机2.网线3.路由器三、实验过程1.实验一:理解网络分层结构-计算机网络采用分层结构,分为物理层、数据链路层、网络层、传输层、应用层。

-物理层负责传输比特流,主要是光纤、双绞线等物理媒介。

-数据链路层负责将比特流转化为帧,并进行传输以保证数据的可靠性。

-网络层负责寻路和分组转发,将数据包从源节点传输到目标节点。

-传输层负责端到端连接的可靠性和流量控制。

-应用层为用户提供服务,负责通信协议的选择和具体的应用功能。

2.实验二:数据传输过程-数据从源主机通过物理媒介传输到目标主机的过程可以分为三个阶段:发送、传输和接受。

-发送端将数据按照层级结构封装,并通过物理媒介传输到接收端。

-接收端根据层级结构进行解封装和处理,最终将数据交给应用层使用。

3.实验三:计算机网络的基本组成-计算机网络由主机和链路两部分组成。

-主机包括终端设备和网络结点,终端设备有桌面电脑、笔记本电脑、智能手机等,网络结点有路由器、交换机等。

-链路是连接主机之间和主机与网络结点之间的通信路径。

四、实验结果在实验过程中,我成功地理解了计算机网络的基本原理,掌握了计算机数据传输的过程,并了解了计算机网络的基本组成。

实验结果表明,计算机网络是一个复杂的系统,需要多个层级结构相互配合才能实现数据的传输和通信。

五、实验总结通过本次实验,我深入理解了计算机网络的基本原理,掌握了计算机数据传输的过程,并了解了计算机网络的基本组成。

实验过程中,我遇到了一些问题,但通过与同学们的讨论和老师的指导,我成功地解决了这些问题,并达到了实验的目标。

六、总结和建议总的来说,本次实验对我来说是一次很好的学习机会,通过实践操作,我深入理解了计算机网络的基本原理。

然而,实验时间比较紧张,希望老师能够给予更多的实验训练的时间,让我们有更多的机会去实践和探索。

网络基础应用_实验报告

网络基础应用_实验报告

一、实验目的1. 理解网络基础概念,包括IP地址、子网掩码、默认网关等。

2. 掌握网络配置的基本方法,包括静态IP地址配置和动态IP地址配置。

3. 熟悉网络工具的使用,如ping、tracert等,用于检测网络连通性和路径追踪。

4. 了解网络故障排除的基本方法,提高网络应用能力。

二、实验环境1. 硬件环境:计算机、网络设备(交换机、路由器等)。

2. 软件环境:Windows操作系统、网络配置工具、网络诊断工具等。

三、实验内容1. IP地址配置(1)静态IP地址配置步骤:1)打开计算机的网络连接设置。

2)选择“Internet协议版本4(TCP/IPv4)”。

3)点击“属性”,进入TCP/IP属性设置界面。

4)选择“使用下面的IP地址”,填写IP地址、子网掩码和默认网关。

5)点击“确定”保存设置。

(2)动态IP地址配置步骤:1)打开计算机的网络连接设置。

2)选择“Internet协议版本4(TCP/IPv4)”。

3)点击“属性”,进入TCP/IP属性设置界面。

4)选择“自动获取IP地址”和“自动获取DNS服务器地址”。

5)点击“确定”保存设置。

2. 网络工具使用(1)ping命令功能:检测网络连通性。

步骤:1)打开命令提示符。

2)输入“ping IP地址”命令,如“ping 192.168.1.1”。

3)观察命令执行结果,判断网络连通性。

(2)tracert命令功能:追踪数据包在网络中的路径。

步骤:1)打开命令提示符。

2)输入“tracert IP地址”命令,如“tracert 192.168.1.1”。

3)观察命令执行结果,分析数据包在网络中的路径。

3. 网络故障排除(1)检查网络连接1)检查计算机的网络连接是否正常,如网线是否连接牢固、网络设备是否正常工作。

2)检查网络设置是否正确,如IP地址、子网掩码、默认网关等。

(2)检查网络设备1)检查交换机、路由器等网络设备是否正常工作。

2)检查网络设备的配置是否正确。

计算机网络原理实验报告

计算机网络原理实验报告

计算机网络原理实验报告计算机网络原理实验报告一、引言计算机网络是当今社会中不可或缺的一部分,它连接了世界各地的计算机,使得信息的传输和共享变得更加便捷。

本篇实验报告将介绍计算机网络的基本原理以及我们在实验中所学到的知识和经验。

二、实验目的本次实验的目的是通过搭建一个简单的局域网,理解计算机网络的基本原理,并掌握网络的搭建和配置方法。

三、实验环境我们使用了两台计算机和一台路由器来搭建局域网。

其中,计算机A和计算机B分别连接到路由器的两个端口上,路由器通过交换机将两台计算机连接起来。

四、实验步骤1. 首先,我们将路由器和计算机A、计算机B连接起来,确保物理连接正常。

2. 在路由器上进行基本配置,包括设置IP地址、子网掩码和默认网关。

这些配置将决定计算机A和计算机B之间的通信。

3. 在计算机A和计算机B上配置IP地址和子网掩码,确保它们与路由器的配置相匹配。

4. 进行网络连通性测试,确保计算机A和计算机B之间可以相互通信。

五、实验结果经过以上步骤的操作,我们成功地搭建了一个局域网,并实现了计算机A和计算机B之间的通信。

我们进行了一系列的网络连通性测试,包括ping命令和文件传输等,结果均显示两台计算机之间的通信正常。

六、实验总结通过本次实验,我们深入了解了计算机网络的基本原理,并通过实际操作掌握了网络的搭建和配置方法。

我们了解了IP地址、子网掩码和默认网关的作用,以及它们在网络通信中的重要性。

同时,我们也学会了如何进行网络连通性测试,以确保网络的正常运行。

在实验过程中,我们遇到了一些问题,如配置错误导致网络无法通信等。

通过仔细排查和调试,我们最终找到了问题的所在并解决了它们。

这些问题的出现使我们更加深入地理解了网络配置的重要性,并提醒我们在实际应用中要注意细节和正确性。

总的来说,本次实验使我们对计算机网络有了更深入的理解,并提高了我们的实际操作能力。

我们将继续学习和探索计算机网络的更多知识,为今后的工作和学习打下坚实的基础。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

姓名:班级:学号:教师:1.实验目的运用各种编程语言实现基于Go-Back-N的可靠数据传输软件。

PS:这里使用的是JAVA语言2.实验意义通过本实验,使学生能够对可靠数据传输原理有进一步的理解和掌握。

3.实验背景Go-Back-N的有限状态机模型表示如下图所示:(a)(b)图为Go-Back-N的有限状态机模型(a)发送端(b)接受端4.实验步骤(1)选择合适的编程语言编程实现基于Go-Back-N的可靠数据传输软件。

(2)在实际网络环境或模拟不可靠网络环境中测试和验证自己的可靠数据传输软件。

5.实验环境(1)实验语言:JAVA(2)实验平台:Eclipse(3)引用库函数:.net库、随机(Random)库、计时库(Timer)6.类概览与描述(1)Sender类:继承于Thread(线程)类,模拟发送方的一切功能,主要功能函数有:A.Public void run()——启动函数,标识开始发送数据包B.Sender()——构造函数,分配并初始化窗口值C.Public void getack(in tack)——ACK接收函数,接收接收方返回的ACK并进行验证是否为期待的ACK值(若不是,则重发)D.Public void time()——定时器函数,初始化定时,计时并记录超时与否的状态(2)Receiver类:继承于Thread(线程)类,模拟接收方的一切功能,主要功能函数有:A.Public void run()——启动函数,标识开始等待并接收数据包B.Void Receive(int data,Sender s)——数据包接收函数,功能强大!主要包括:接收数据包,验证数据包,判断与丢弃数据包等C.Public void respond(int ack)——ACK发送函数,发送当前接收到的最后一次正确的数据包对应的ACK(3)Timers类:继承于TimerTask(计时器)类,具有自定义定时与超时提醒的功能,主要功能函数有:A.Public void run()——启动函数,标识开始计时(这里预设的是2秒的时间),超时后提醒并且停止计时器B.Public Timers()——构造函数,清0计时器,等待下一次启动(4)GBN类:继承于Thread(线程)类,是主函数类,具有本程序的核心功能,这里先作一部分简单介绍,主要函数功能有:A.Static void senddelay(int x) throwsInterruptedExceptionPublic Timers()——随机延迟函数,模拟数据包发送传输过程中的随机延迟,常用延迟值分别为:300ms, 750ms,1200ms, 3000ms等B.Public static void main(String[] args)throws IOException, InterruptedException()——主函数,功能强大,主要包含以下几大方面:①开启发送端与接收端(包括计时器)②超时或者ACK不匹配等情况导致的发送方重新发送数据包③(第一次)发送当前窗口内的数据包④随机函数模拟数据包发送过程中的丢包情况⑤实时更新与显示当前窗口内的数据包情况⑥统计每一个数据包被发送过的次数(含重发)并最终显示出来7.代码展示与描述(一)Sender类import java.util.Timer;public class Sender extends Thread{public int windowsize=3; //发送方窗口长度设为3public String[] data={"data1","data2","data3","data4","data5","data6","data7"}; //模拟七个数据包public int sign[]={0,1,2,3,4,5,6}; //为7个数据包标号public int localack=-1; //保存最近收到的ACKpublic Timers litime=null; //定时器(这里定为2秒)public int switches=0; //超时标志,1为超时public int windowsign[]; //当前窗口内待发的数据分组的序号public int acksign=0;//为0表示收到正确ACK,为1表示收到错误的ACK,必须重发!public Sender(){windowsign=new int[windowsize];//给窗口分配指定大小的空间for(int i=0;i<3;i++)windowsign[i]=sign[i]; //窗口初始化时存放前3个序号}public void run(){System.out.println("发送方开始发送分组数据!");}public void getack(int ack){System.out.println("发送方收到了ACK,序号为"+ack+"并且开始加以确认!");if(ack!=localack+1){System.out.println("经验证,这不是发送方正期待的ACK,立刻重发序号为"+(localack+1)+"的数据分组!");acksign=1;}else{localack=ack; //表示正确确认了ACKacksign=0;}}public void time(){switches=0; //标志初始化为0litime=new Timers();Timer limit=new Timer();limit.schedule(litime, 0,100);}}(二)Receiver类import java.util.Random;public class Receiver extends Thread{public int lastdata;public Sender sender;public void run(Sender s){sender=s;System.out.println("接收方开始接收分组数据!");}void receive(int data, Sender s){sender=s; //发送方的参数传递System.out.println("接收方收到了序号为"+data+"的分组!");if(data!=0){if(data==lastdata+1){//数据包序号校验,若连续则是正确/所期待的System.out.println("该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!");lastdata=data; //更新本地保存的数据包序号变量respond(lastdata); //回送该正确接收的数据包对应的ACK }else{System.out.println("该数据分组不是接收方所期待的,该分组将被丢弃,接收方准备回送最后接受的数据分组对应的ACK!");respond(lastdata);//若不是所期待的数据包则丢弃并且重发上一次的ACK }}else{System.out.println("该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!");lastdata=data;respond(lastdata); //首次接收数据包并且回送ACK }}void respond(int ack){ //回送指定序号的ACKif(sender.litime.limit<20){ //判断是否超时(2秒)ack=lastdata; //获取本场保存的数据包序号sender.getack(ack);}else{System.out.println("计时超时!!(未丢包但是时间超过2秒)发送方准备重发序号为"+ack+"的数据分组!");sender.switches=1; //如果超时,设置超时状态并显示警告}}}(三)Timers类import java.util.TimerTask;public class Timers extends TimerTask {public int switches;public int limit;public void run(){if(limit<20) limit++; //计时2秒else {switches=-1;this.cancel();} //开关为-1表示超时,并且停止计时器}public Timers(){switches=0; //启动计时器时全部初始化limit=0;}}(四)GBN类import .*;import java.util.Random;import java.io.*;public class GBN extends Thread{static void senddelay(int x) throws InterruptedException{if(x==1) {sleep(300); System.out.println("发送数据分组时发生延迟:300毫秒!"); }else if(x==2) {sleep(750); System.out.println("发送数据分组时发生延迟:750毫秒!");}else if(x==3) {sleep(1200);System.out.println("发送数据分组时发生延迟:1200毫秒!");}else if(x==4) {sleep(3000);System.out.println("发送数据分组时发生延迟:3000毫秒!");}else;}public static void main(String[] args) throws IOException, InterruptedException {Sender s=new Sender();Receiver re=new Receiver();s.start(); //发送端启动re.run(s); //接收端启动sleep(1000); //延迟处理int[] retimes=new int[7];//计算每个分组被发送的次数for(int i=0;i<7;i++) retimes[i]=0; //数据包顺次发送for(int i=0;i<=s.sign.length;i++){while(i>s.localack+1){ //尚有未确认的数据包,重发!System.out.println("发送方开始重新发送序号为"+(s.localack+1)+"的数据分组");retimes[s.localack+1]++;int ran=new Random().nextInt(3);int randelay=new Random().nextInt(5);s.time();senddelay(randelay); //设置随机值,模拟数据传输延迟if(ran!=1) re.receive(s.localack+1,s);//设置随机值,模拟数据丢包过程else System.out.println("序号为"+(s.localack+1)+"的分组在传给接收方途中发生了丢包!");}if(i!=s.sign.length){System.out.println();System.out.println("发送方现在开始第一次发送序号为"+i+"的数据分组");retimes[i]++;if(i!=0){for(int k=0;k<3;k++){//表示至少成功发送并确认了一个数据分组s.windowsign[k]++;//这种情况下滑动窗口向前移动!}}System.out.println();System.out.println("当前窗口内的分组情况为:");//显示当前窗口内数据包情况for(int p=0;p<3;p++){if(s.windowsign[p]<=6)System.out.println("第"+p+"号窗口里面存放的是序号为"+s.windowsign[p]+"的马上待发送的数据分组!");elseSystem.out.println("第"+p+"号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!");}System.out.println();int ran=new Random().nextInt(3);int randelay=new Random().nextInt(5);s.time(); //计时开始(2秒时间)senddelay(randelay); //设置随机值,模拟数据传输延迟if(ran!=1) re.receive(s.sign[i],s);//设置随机值,模拟数据丢包过程else System.out.println("序号为"+i+"的分组在传给接收方途中发生了丢包!");}}System.out.println();System.out.println("以下是每个数据分组被发送过的次数的统计结果");for(int i=0;i<7;i++) //显示关于每个数据包发送次数的统计表System.out.println("序号为"+i+"的数据分组被发送过的次数为:"+retimes[i]);System.exit(0);}}8.程序运行结果部分截图。

相关文档
最新文档