HNU-计算机网络-实验3-应用层和传输层协议分析(PacketTracer)

计算机网络 课程基础实验三

应用层和传输层协议分析(PacketTracer)

计科210X 甘晴void 202108010XXX

【给助教的验收建议】

如果是助教,比起听同学读报告,更好的验收方式是随机抽取一个场景(URL/HTTPS/FTP),直接让同学现场做并讲解原理,并对流程中的一些操作或参数直接提问。

文章目录

一、实验目的

通过本实验,熟悉PacketTracer的使用,学习在PacketTracer中仿真分析应用层和传输层协议,进一步加深对协议工作过程的理解。

二、实验内容

研究应用层和传输层协议

从 PC 使用 URL 捕获 Web 请求,运行模拟并捕获通信,研究捕获的通信。

Wireshark 可以捕获和显示通过网络接口进出其所在 PC 的所有网络通信。Packet Tracer 的模拟模式可以捕获流经整个网络的所有网络通信,但支持的协议数量有限。我们将使用一台 PC 直接连接到 Web 服务器网络,并捕获使用 URL 的网页请求。

初识PacketTracer

PacketTracer是一款模拟仿真网络设备以及它们联系的工具,并且它还能允许你抓包查看数据包的流动以及协议的具体工作方式。这是一个非常有用的工具,很值得掌握。

简单入门PacketTracer:

简单入门PacketTracer

简单来说,在左边的画板上你可以按照自己的想法随意搭建网络(包括设备和连线),组建在左下角,自己稍微探索一下就可以掌握。

对于每一个你放入的网络组件,单机它就可以打开它,你此时就相当于在这个网络组件上操作。例如,打开一个PC时你就相当于现在在PC上操作,可以设置这个PC的IP地址,DNS服务器,网关,子网掩码等,也可以使用这个PC的命令行和浏览器。再如,打开一个服务器时你就相当于现在是服务器管理员,可以配置服务器的ip地址,配置服务器的服务(DNS,HTTP,FTP,DHCP)等。

这很灵活,相当于模拟了一整个网络的运行,挺好玩的。

如果仔细探索,你会爱上这款工具的。

【任务 1】从 PC 使用 URL 捕获 Web 请求

①模拟构建终端与连线并进行设置

在最左下角可以找到相应的组建,红色的闪电符号为wire(连线)

新建一个PacketTracer文件,在"终端 "中选择一台电脑和一个服务器,使用交叉线连接(工具栏里面的黑色虚线),实验拓扑图如下,连线选择FastEthernet而不是RS232出现绿点,说明连接成功。

对PC机进行IP配置( 双击PC0图标,上栏中选择Desktop,选择IP Configuration打开)

配置为静态IP192.168.1.1,并将DNS服务器IP地址配置为192.168.1.2。

对服务器进行IP配置( 双击Server0图标,上栏中选择Desktop,选择IP Configuration打开)

将IP配置为192.168.1.2,

并打开DNS服务,添加一个域名解析:

另外需要确保DHCP处于关闭状态

【DHCP】

动态主机配置协议是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。

这里我们是自己指定IP的,故不需要使用DHCP获得IP,将它控制在关闭状态。

②模拟运行

服务器的HTTP服务是默认打开的。PC机的DNS服务器设置为了192.168.1.2,当PC机对设置了域名解析的www.wolfvoid.com进行访问时,首先会发送DNS请求报文给该服务器,由该服务器进行DNS解析并返回IP地址192.168.1.2,然后PC机再向服务器发起HTTP请求。

切换到仿真模式,在PC机的浏览器中访问该域名,在事件窗口可以看到两个数据包。

让其运行全过程,在EventList中可以看到具体的数据包过程。

在上述数据包传递(获取部分之后就可以),可以发现PC0端的浏览器成功访问了该网址。

②步骤 2. 研究捕获的通信。

名词解释:

  • PDU(Protocol Data Unit),协议数据单元是指对等层次之间传递的数据单位。 协议数据单元(Protocol Data Unit )物理层的 PDU是数据位(bit),数据链路层的 PDU是数据帧(frame),网络层的PDU是数据包(packet),传输层的 PDU是数据段(segment),其他更高层次的PDU是报文(message)。
  • **OSI,开放系统互联(Open System Interconnection)**该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层,自底向上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

在 Event List中点开数据包,然后单击 Info列中的彩色正方形,会打开 PDU Information(PDU 信息)窗口。此窗口将按 OSI 模型组织。

例如,在我们查看的第一个数据包中,注意 DNS 查询(第 7 层)封装在第 4 层的 UDP 数据段中,等等。如果单击这些层,将会显示设备(本例中为 PC)使用的算法。查看每一层发生的事件。

查看第一个DNS数据包的PDU信息,可以在应用层看到这是一个DNS请求,在PDU详情中可以看到DNS请求的具体域名为www.wolfvoid.com

在这个对Web的访问请求中,数据包的协议类型有DNS,ARP,TCP,HTTP。可以查看每个数据包的PDU信息,PDU信息按照OSI参考模型组织,可以看到每一层的事件,也可以查看PDU的详细信息,在详细信息中,数据按照不同层次的协议组织。

我们也可以看看别的协议的OSI模型封装情况。

比如这是 ARP协议的PDU

比如这是HTTP协议的情况。HTTP协议是应用层协议,在第7层上。

接下来我们可以结合所学知识研究一下全过程:

其中,显示没有上一个设备的数据包是在设备端产生但未发送到的。其中HTTP请求是非持续连接,只发送了一个文件。还可以注意到断开连接时,服务器的FIN-ACK和FIN报文段合并了,因此只通过三个数据包就断开了连接。

【任务 2】从 PC 访问服务器的HTTPS服务,捕获数据包并分析

★★★请注意,任务2和任务3需要使用提供的文件完成,使用自己的文件是无法完成的(因为有些页面的组件我们自己建的文件里是没有的)。★★★

打开提供的文件,模型已经为我们构建好了,具体的要求也提好了。照做即可。

(1)使用HTTP协议访问Web页面

使用与任务一相同的方式,访问http://10.1.1.3

下面是访问的事件列表。

访问过程中,先出现两段文字,再先后出现两张图片的缩略图。这说明是在请求后获取这些网页的组件。

下面我们主要关注有效的HTTP报文(有效是指有源有目的端)

①获取索引页

首先关注到开始,客户端使用Get方法,试图从服务端获得资源。这里是第一个HTTP请求,推测这里想要获取的应该是那两段文字和这JPG和GIF图片的地址,因为下面马上就要尝试获取这两个了。

②分别获取两个较大的资源

使用Get方法尝试向服务器获取logo.gif

服务器返回无法找到该资源(提供文件的时候估计只给了链接,没给真正的资源)

使用Get方法尝试向服务器获取image.jpg

服务器同样没有找到。

总结这个过程,红框框出部分为HTTP协议的部分。

(右下角的时间远离足够远,此时传输已经结束很久了,保证不会遗漏)

(2)使用HTTPS协议访问Web页面

使用相同的方式,访问https://10.1.1.3

由于只是访问的方式不同而已,访问的资源是同一个,所以访问的结果是一样的。

这次发现有效的HTTPS协议只有一次,而之前的HTTPS协议有三次。

我们可以查看这次通信的内容如下:

(因为只有一次,所以直接查看来回)


我们发现无法查看https协议的内容。这样的原因是,http是超文本传输协议,信息通过明文传输,https则是具有安全性的ssl加密传输协议。因此总体来说,https更加安全。

对于Https,Packet Tracer并不实际加密和解密数据。数据包内容只是隐藏在PDU信息上,(可以理解,只是一个模拟器,让用户看知道不出来就可以了,没有必要真的去加密)

【任务3】从 PC 访问服务器的FTP服务,捕获数据包并分析

★★★请注意,任务2和任务3需要使用提供的文件完成,使用自己的文件是无法完成的(因为有些页面的组件我们自己建的文件里是没有的)。★★★

打开提供的文件,模型已经为我们构建好了,具体的要求也提好了。照做即可。

这是一个简单的FTP模型,有两个终端PC,一个交换机和一个路由器,最后连接到服务器上。

其中服务器提供FTP服务,支持文件的命名,删除,读写等操作;PC运行FTP客户端,访问服务器提供的FTP服务。

(0)使用命令行登录ftp
  1. 从PC0的Command Prompt输入"ftp www.ftpserver.com"连接服务器。
  2. 输入用户名:cisco,密码:cisco,进入FTP prompt界面。

使用命令行在PC0客户端登录ftp服务器,出现以下界面表示成功登录。

(1)测试写操作

使用put sampleFile.txt将文件上传到服务器。

此时打开服务端的ftp服务可以发现该文加已经被写入

分析数据包:

输入"FTP wwwftpserver.com"之后,服务器会提示需要输入用户名,此时会返回一个欢迎用户的信息,如图,是四个连续的FTP,路径为:Server------Router------Switch------PC。所以之后看到的信息或者命令的传递都会有3条,依次是从PC到Router到Switch再到PC,或者是返回来的路径。

此时点开这些数据包,发现都是同一条信息,即服务端向客户端发送的欢迎信息。

之后的写与读操作,都需要连接。

在这种情况下,服务器发送的响应表明数据连接已经建立,客户端可以开始在该连接上发送或接收数据。这通常是在进行文件传输时显示的消息。

这表示文件开始传输了。

(2)测试读操作

使用命令get sampleFile.txt可从服务端读取文件

截取到的由PC0向服务端传递请求读的申请。

(3)获取文件列表

使用dir可以从服务器读取所有文件列表,包括刚刚上传的sampleFilesampleFile.txt。

(4)重命名

使用rename,将sampleFile.txt文件重命名为:1.txt。

此时,再使用dir查看文件目录,可以发现文件名已经被更改。

(5)删除

使用delete,将刚刚的文件删除。

再次使用dir查看,发现该文件已经被删除。

(6)退出

使用quit退出。

数据包分析:

可以发现PC0很快地将这个退出指令向服务端Server传递。

然后服务端Server回传信息,表示同意断开。

延申:STP是什么?

我们发现在FTP中有一个STP在空闲的时候或者不空闲的时候一直在广播。即使在PC0明确表示退出连接之后。那么STP是什么?

为了提高网络可靠性,交换网络中通常会使用冗余链路。然而,冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,进而会影响到用户的通信质量。生成树协议STP(Spanning Tree Protocol)可以在提高可靠性的同时又能避免环路带来的各种问题。

STP的作用

  • Stp通过阻塞端口来消除环路,并能够实现链路备份目的
  • 消除了广播风暴
  • 物理链路冗余,网络变成了层次化结构的网络

STP操作

  1. 选举一个根桥
  2. 每个非根交换机选举一个根端口
  3. 每个网段选举一个指定端口
  4. 阻塞非根,非指定端口

三、实验感悟

总结来说,这次实验让我初步认识PacketTracer这个工具的使用,并且能够使用这个工具自己搭建小型的客户端-服务器模型并进行访问,同时能够使用仿真功能进行抓包并研究数据包的结构与内容。

在一步一步地学习过程中,我发现PacketTracer这个工具不仅仅是一个学生学习用的工具,在实际应用中,企业也会使用或是使用类似的工具,在正式网络上线运营之前先做一个模拟仿真,这能很好地降低试错成本。所以这个工具是有很大的实际意义的。

另外,在使用PacketTracer进行复现DNS,HTTP,HTTPS,FTP等协议的过程,我对于这些协议以及它们是如何工作的,有了更为深入的了解,感觉更加具象化了。而且我还可以对网络做出改变再看看它的变化,比书上无法改变的那种案例要好得多。

感觉PacketTracer真的是一个很好的学习工具。

相关推荐
BingoGo15 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack15 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack3 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
DianSan_ERP3 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅3 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
QQ5110082853 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe3 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5