实验名称

应用层与传输层网络协议分析

实验介绍

实验使用 Wireshark 工具对网络数据包进行抓取,并针对应用层和传输层封装的网络封包进行详细分析,通过实践观察加深对应用层HTTP协议以及传输层TCP协议具体实现过程的理解。
在这个实验中,我们将探讨 HTTP 协议的几个方面:基本/响应交互,HTTP 消息格式,检索大型 HTML 文件,检索 HTML 文件嵌入对象,HTTP 身份验证和安全。

实验目的

(1) 理解和掌握 Wireshark 等工具的使用方法;
(2) 利用 Wireshark 工具对应用层 HTTP 协议和传输层 TCP 协议进行分析。

背景知识和准备

HTTP协议以及TCP协议的理论知识。

HTTP协议
HTTP概述

HTTP是超文本传输协议,是Web的核心。它包括两个部分:客户及程序、服务器程序。它们分别运行在不同的端系统中,通过交换HTTP报文进行会话。HTTP协议定义了报文的格式以及客户机和服务器交换报文的方式。
用户请求一个Web页(如点击一个超链接),浏览器向服务器发出对该页所含对象的“HTTP请求报文”。服务器接受请求,回发包含请求对象的“HTTP响应报文”。
在这里插入图片描述

HTTP连接

HTTP连接包括非持续HTTP连接、持续HTTP连接两种,默认方式下使用持续连接。对于持续连接,服务器在发送响应后保持该TCP连接,相同客户机与服务器之间的后续请求和响应报文通过相同的连接进行传送。此外,一个TCP连接上可以传送多个Web对象。

HTTP请求报文

在这里插入图片描述

HTTP响应报文

在这里插入图片描述

TCP协议
TCP概述

i. 端到端
一个发送方, 一个接收方,连接状态与端系统有关,不为路由器所知。

ii. 可靠、有序的字节流

iii. 流水线
TCP拥塞和流量控制设置滑动窗口协议。

iv. 发送和接收缓冲区

v. 全双工网络
同一连接上的双向数据流。

vi. 面向连接
在进行数据交换前,初始化发送方与接收方状态,进行握手(交换控制信息)。

vii. 流量控制
发送方不能淹没接收方。

viii. 拥塞控制
抑止发送方速率来防止过分占用网络资源。

可靠数据传输

TCP在IP不可靠服务的基础上创建可靠数据传输服务。

TCP报文段结构

在这里插入图片描述

实验过程

1. 了解Wireshark工具的工作原理及使用方法

这一部分我会单独写一篇博客介绍。

2. 对HTTP协议进行分析

在这个实验中,我们将探讨 HTTP 协议的几个方面:基本/响应交互,HTTP 消息格式,检索大型 HTML 文件,检索 HTML 文件嵌入对象,HTTP 身份验证和安全。

1) 基本的HTTP请求/响应(file 1)

a) 启动web浏览器,以Microsoft Edge为例。
在这里插入图片描述
b) 启动Wireshark 的数据包嗅探器,然后输入“http”(不带引号)。
在这里插入图片描述
c) 稍等片刻,然后按下开始按钮,开始捕获 Wireshark 的数据包。
在这里插入图片描述
现在,正在进行捕获。
在这里插入图片描述
d) 在浏览器中输入以下网址:
http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file1.html
在这里插入图片描述
e) 停止 Wireshark 捕获数据包,Wireshark获取数据如下图:
在这里插入图片描述
f) 观察到上面捕获了较多的数据包,是不符合预期的,这不方便我们进行分析。推测原因在于,从捕获开始到捕获结束的这段时间内,除了访问指定网址以外,有其他应用程序(如QQ、网易云音乐等)传递的HTTP消息被同时捕获到。同时正在访问的其他网页对我们的捕获也产生了影响。因此,我关闭了其他应用程序,只访问指定的网页,快速地访问网页,之后马上停止捕获。此次的捕获结果为:
在这里插入图片描述
按下Ctrl+S,保存该报文。
在这里插入图片描述
g) 观察到HTTP响应状态为“304 Not Modified”,而不是“200 OK”,推测原因在于先前已经访问该网站,再次访问只起到了“刷新”的作用。我查了一下“304 Not Modified”的含义:
当客户端缓存了目标资源但不确定该缓存资源是否是最新版本的时候, 就会发送一个条件请求。在进行条件请求时,客户端会提供给服务器一个If-Modified-Since请求头,其值为服务器上次返回响应头中Last-Modified值,还会提供一个If-None-Match请求头,值为服务器上次返回的ETag响应头的值。
服务器会读取到这两个请求头中的值,判断出客户端缓存的资源是否是最新的,如果是的话,服务器就会返回HTTP/304 Not Modified响应头,但没有响应体。客户端收到304响应后,就会从本地缓存中读取对应的资源。 所以:当访问资源出现304访问的情况下其实就是先在本地缓存了访问的资源。
因此需要清除已缓存的数据:
在这里插入图片描述
再次尝试抓包,成功。
在这里插入图片描述
响应报文状态为200 OK。查阅资料得知,HTTP 200 OK成功状态响应码指示请求已成功。200响应默认是可缓存的。Wireshark 获取到的请求报文如下图:
在这里插入图片描述
Wireshark 获取到的响应报文如下图:
在这里插入图片描述
按下Ctrl+S,保存该报文。

2) HTTP条件请求/响应(file 2)

a) 启动网页浏览器,并确保浏览器的缓存清零。
在这里插入图片描述
b) 启动 Wireshark 的数据包嗅探器。具体步骤如1中所示。
在这里插入图片描述
c) 输入以下网址到浏览器:
http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file2.html
在这里插入图片描述
d) 再次快速输入相同的 URL 到您的浏览器(或只需选择浏览器上的刷新按钮)。
在这里插入图片描述
e) 停止 Wireshark 的数据包捕获,并在显示过滤器规格窗口输入“http”。
在这里插入图片描述
观察到,这就是我们在上一步实验中提前遇到的情况。第二次响应报文如下:
在这里插入图片描述
按下Ctrl+S,进行保存。

3) 检索长文档(file3)

a) 启动网页浏览器,并确保浏览器的缓存清零。
在这里插入图片描述
b) 启动 Wireshark 的数据包嗅探器。具体步骤如1中所示。
在这里插入图片描述
c) 输入以下网址到浏览器:
http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file3.html
在这里插入图片描述
d) 停止Wireshark的数据包捕获,并在显示过滤器规格窗口输入“http”,所以只捕获HTTP信息将被显示出来。
在这里插入图片描述
观察到与之前不同的是,服务器连续向浏览器发送了三个响应报文。这是由于发送的HTTP对象大小超过了MSS,所以需要分多个包进行传输,相应的包因此标记为“Continuation”。观察到第一个、第二个响应报文的长度均为1506,猜测该值对应MSS。第一个响应报文如下:
在这里插入图片描述
第二个响应报文如下:
在这里插入图片描述
第三个响应报文如下:
在这里插入图片描述

4) 嵌入对像的 HTML 文档(file4)

a) 启动网页浏览器,并确保浏览器的缓存清零。
在这里插入图片描述
b) 启动 Wireshark 的数据包嗅探器。具体步骤如1中所示。
在这里插入图片描述
c) 输入以下网址到浏览器:
http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file4.html
在这里插入图片描述
d) 停止 Wireshark 捕获数据包,并在显示过滤器规格窗口输入“http”,只显示捕获的 HTTP 信息。
在这里插入图片描述
由于该网页包含两个嵌入的图像,因此在浏览器发送第一个请求报文并收到来自服务器的响应报文之后,会再发送两个请求报文,用于请求这两个图像(其一为PNG格式,其二为JPEG格式)。理论分析与结果一致。第一个响应报文的结果如下图所示:
在这里插入图片描述
该HTML文件中存在两个对图像文件的引用,因此第二个请求报文为:
在这里插入图片描述
第三个请求报文为:
在这里插入图片描述
第二个响应报文:
在这里插入图片描述
第三个响应报文:
在这里插入图片描述
e) 对于嵌入对像的HTML文档,其条件请求/响应的情况会是怎么样的?出于兴趣,我再次启动 Wireshark 的数据包嗅探器,并刷新网页。结果如下:
在这里插入图片描述
观察到请求报文不变,响应报文由“200 OK”更改为“304 Not Modified”。

5) HTTP 认证(file5)

a) 确保浏览器的缓存清零,并关闭浏览器。然后,启动浏览器。
在这里插入图片描述
b) 启动 Wireshark 的数据包嗅探器。具体步骤如1中所示。
在这里插入图片描述
c) 输入以下网址到浏览器:
http://gaia.cs.umass.edu/wireshark-labs/protected_pages/HTTP-wireshark-file5.html

d) 在弹出框键入要求的用户名和密码。用户名是“wireshark-students”,密码为“network”。
在这里插入图片描述
浏览器成功访问到了该网页。
在这里插入图片描述
e) 停止 Wireshark 的数据包捕获,并在显示过滤器窗口输入“http”,确保只有捕获的HTTP 消息在分组列表窗口显示。结果如下:
在这里插入图片描述
观察到,浏览器向服务器发送了一个请求报文,之后收到一个由“401 Unauthorized”标识的响应报文,之后浏览器发送第二个请求报文,得到第二个响应报文。查阅资料得知,401 Unauthorized客户端错误状态响应代码指示该请求尚未应用,因为它缺少目标资源的有效认证凭证。这种状态类似403,但在这种情况下,身份验证是可能的。此状态与包含有关如何正确授权信息的WWW-Authenticate标头一起发送。
Wireshark捕获的第一个响应报文为:
在这里插入图片描述
输入账号与密码之后,浏览器发送的请求报文如下:
在这里插入图片描述
观察到在Authorization中包含有输入的账号与密码。

f) 那么对于这种情况,其条件请求/响应的情况会是怎么样的?出于兴趣,我再次进行尝试,结果如下:
在这里插入图片描述
由于本地缓存的存在,因此在这里并不需要再次输入账号与密码。如预期一样,响应报文的状态码为“304 Not Modified”。

3. 对TCP协议进行分析

这部分我另写了一篇博客详细介绍。地址为:
https://blog.csdn.net/qq_41112170/article/details/106546348


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41112170/article/details/106270724

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐