实验2:配置Web服务器,分析HTTP交互过程
实验要求
(1)搭建Web服务器(自由选择系统),并制作简单的Web页面,包含简单文本信息(至少包含专业、学号、姓名)、自己的LOGO、自我介绍的音频信息。
(2)通过浏览器获取自己编写的Web页面,使用Wireshark捕获浏览器与Web服务器的交互过程,使用Wireshark过滤器使其只显示HTTP协议。
(3)现场演示。
(4)提交HTML文档、Wireshark捕获文件和实验报告,对HTTP交互过程进行详细说明。
相关概念
什么是Wireshark?
Wireshark 是一个广泛使用的开源网络协议分析器(也称为网络嗅探器或抓包工具)。它允许用户捕获网络接口上的实时流量,并提供详细的视图来检查每个数据包的内容。Wireshark 支持数百种协议,并且能够深入解析这些协议的数据,这对于网络故障排除、安全审计、开发人员调试以及教育学习等方面非常有用。
Wireshark 的主要特点包括:
1.实时捕获: 可以在各种网络接口上实时捕获数据包。
2.离线分析: 支持导入已保存的捕获文件(通常为 .pcap 或 .pcapng 格式)进行分析。
3.协议支持: 支持广泛的网络协议,从物理层到应用层的各种协议。
4.过滤功能: 提供强大的过滤功能,可以在捕获过程中实时过滤数据包,也可以在捕获后通过显示过滤器来查看特定的数据包。
5.解码能力: 能够解码多种协议的内容,并展示出易于理解的形式。
6.插件扩展: 具有插件架构,可以通过插件扩展其功能。
Wireshark 是网络工程师、安全专家和技术爱好者的重要工具之一。它可以帮助用户诊断网络问题,了解网络上的活动,以及学习网络协议的工作原理。由于它可以查看网络上的敏感信息,因此在使用时需要特别注意遵守法律法规,并确保只在授权的情况下使用。
什么是HTTP协议?
HTTP(HyperText Transfer Protocol)是用于从Web服务器传输超媒体文档(如HTML文档)到本地Web浏览器的应用层协议。它是互联网上用于传输数据的主要协议之一。HTTP定义了客户端(通常是Web浏览器)与服务器之间如何交换信息的标准方式。
HTTP是一个基于请求/响应模型的协议。客户端发送一个请求给服务器,服务器响应这个请求。
HTTP 协议广泛应用于 Web 应用程序中,用于传输网页、图片、视频等多种类型的数据。随着互联网的发展,HTTP 已经成为了互联网通信的基础之一。
请求消息
请求消息通常包含以下部分:
1.请求行: 包含方法、请求的资源URI和协议版本。
方法(Method): 如 GET、POST、PUT、DELETE 等。
URI(Uniform Resource Identifier): 指定要请求的资源位置。
协议版本(Protocol Version): 如 HTTP/1.1。
2.请求头(Headers): 包含客户端和请求的相关信息,例如 Content-Type、User-Agent 等。
3.请求体(Body): 可选部分,通常用于 POST 或 PUT 请求,包含客户端发送的数据。
响应消息
响应消息通常包含以下部分:
1.状态行: 包含协议版本、状态码和状态消息。
2.状态码(Status Code): 表示请求的结果,如 200(成功)、404(未找到)等。
3.状态消息(Reason Phrase): 对状态码的简短描述。
4.响应头(Headers): 包含关于响应的信息,例如 Content-Type、Content-Length 等。
5.响应体(Body): 可选部分,包含服务器返回的数据,如 HTML 页面、JSON 数据等。
实验过程
环境配置:
操作系统:CentOS
Web服务器:腾讯云轻量应用服务器
开发工具:VS2022
捕获工具:Wireshark
浏览器:Microsoft Edge
Web服务器,简单界面
搭建Web服务器(自由选择系统)
1.安装Web服务器软件。
2.配置Web服务器的基本设置。
3.创建一个HTML页面,包括:
文本信息(专业、学号、姓名)
自己设计的LOGO图像
自我介绍的音频文件
4.将HTML页面上传至Web服务器的根目录。
5.启动Web服务器,并在浏览器中输入服务器地址访问页面。
可以使用PHPstudy搭建
参考: PHPstudy搭建本地网站
这里我使用腾讯云服务器配合宝塔Linux面板搭建要求网站
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>个人信息</title>
</head>
<body>
<header>
<h1>个人信息</h1>
</header>
<main>
<section>
<p><strong>学号:</strong>2333333</p>
<p><strong>姓名:</strong>Anduin Wrynn</p>
<p><strong>专业:</strong>摸鱼高手</p>
<p></p>
<!-- 插入图片 -->
<figure>
<img src="LOGO.png" alt="LOGO" width="300" height="auto">
<figcaption>LOGO</figcaption>
</figure>
<!-- 插入音频 -->
<audio controls>
<source src="自我介绍.mp3" type="audio/mpeg">
您的浏览器不支持 audio 标签。
</audio>
</section>
</main>
</body>
</html>
Wireshark抓包
使用Wireshark捕获HTTP交互过程
1.打开Wireshark,选择网络接口开始捕获。
2.在浏览器中访问Web服务器上的页面。
3.停止Wireshark的捕获。
4.使用Wireshark的过滤功能(如http),筛选出HTTP相关的数据包。
建立连接
客户端:10.136.73.242
服务器:175.24.229.104
过滤:ip.addr == 175.24.229.104 显示源IP地址或目标IP地址为175.24.229.104的包
在TCP/IP协议栈中,客户端与Web服务器建立连接的过程通常涉及“三次握手”(Three-Way Handshake)。这是TCP协议为了确保可靠连接而设计的一种机制。下面是三次握手的过程详解:
第一步:SYN(同步序列编号)
客户端向服务器发送一个SYN(同步)数据包。这个数据包中包含了客户端想要使用的端口号以及一个初始序列号(ISN)。这表明客户端想要建立连接。
第二步:SYN-ACK(同步-确认)
服务器接收到客户端的SYN数据包后,会发送一个SYN-ACK(同步-确认)数据包作为回应。这个数据包包含服务器选择的一个初始序列号以及对客户端序列号的确认(确认号为X+1)。这意味着服务器同意建立连接。
第三步:ACK(确认)
客户端接收到服务器的SYN-ACK数据包后,会发送一个ACK(确认)数据包,确认收到服务器的SYN-ACK数据包(确认号为Y+1)。此时,三次握手完成,TCP连接建立成功。
为什么需要三次握手?
三次握手的设计是为了防止已失效的连接请求报文突然又传送到服务器,从而产生错误。如果没有第三次握手,服务器可能会因为过期的连接请求而建立不必要的连接。
实际应用中的三次握手
在Web浏览器与Web服务器之间建立连接时,三次握手确保了双方能够正确地协商连接,并准备好接收数据。一旦TCP连接建立成功,客户端就可以向服务器发送HTTP请求,服务器也可以向客户端发送HTTP响应。
使用Wireshark过滤器使其只显示HTTP协议
过滤:http and ip.addr == 175.24.229.104
断开连接
在TCP协议中,当客户端和服务器之间不再需要通信时,需要通过“四次挥手”(Four-Way Wave)的过程来关闭TCP连接。这个过程比三次握手稍微复杂一些,因为它涉及到了双方都要确认关闭连接。
四次挥手的过程
第一次挥手:FIN(终止标志)
客户端发起关闭请求,向服务器发送一个带有FIN标志位的数据包,表示客户端已经没有数据需要发送了。该数据包还包含一个序列号。
第二次挥手:ACK(确认)
服务器接收到客户端的FIN包后,会发送一个ACK确认包给客户端。这个ACK包包含对客户端序列号的确认(确认号为U+1),但并不立即关闭连接。这是因为服务器可能还有未发送完的数据。
第三次挥手:FIN
当服务器处理完所有的数据后,也会发送一个FIN包给客户端,表示服务器也没有数据需要发送了。该FIN包同样包含一个序列号。
第四次挥手:ACK
客户端接收到服务器的FIN包后,会发送一个ACK确认包给服务器,表示客户端确认收到了服务器的FIN包。此时,客户端进入TIME_WAIT状态,等待一段时间后才会关闭连接,以确保服务器的ACK包已经到达。
可能出现的问题
这里可能会出现不正常断开的情况
在TCP协议中,RST(Reset)标志位用于异常终止TCP连接。通常情况下,TCP连接的正常关闭是通过四次挥手来完成的。然而,在某些情况下,可能会使用RST包来立即中断连接。以下是关于RST包的一些关键点和应用场景:
1.RST标志位的作用
RST包用于:
·立即终止连接。
·表示连接中存在严重错误,无法通过正常的关闭流程解决。
·在连接尚未建立时,用于拒绝连接请求。
2.RST包的发送场景
RST包通常在以下几种情况下发送:
·非法连接尝试:
当客户端或服务器接收到一个非法的TCP数据包(如序列号不正确),可能会发送一个RST包来立即终止连接。
·端口不可达:
如果服务器接收到一个试图连接到未监听端口的请求,可能会发送一个RST包来拒绝连接。
·应用程序崩溃或重启:
如果应用程序突然崩溃或者服务器重启,可能会发送RST包来终止所有正在运行的TCP连接。
·安全措施:
在一些安全措施中,如防火墙或入侵检测系统检测到潜在的攻击行为时,可能会发送RST包来立即关闭可疑的连接。
·连接错误:
如果客户端或服务器检测到连接中的严重错误,可能会发送RST包来快速终止连接。
3.RST包的格式
一个带有RST标志位的TCP数据包通常不包含任何数据,但是包含一个序列号,该序列号通常是对端上次发送的数据包序列号的确认。这样可以确保对端知道连接已经被终止。
4.RST包与正常关闭的区别
与四次挥手的正常关闭过程相比,RST包具有以下几个特点:
·立即终止:RST包立即终止连接,不需要等待后续的ACK确认。
·无确认:接收方不需要发送确认ACK包,因为连接已经被立即关闭。
·异常情况:通常用于处理异常情况,而不是正常的连接关闭。
如果出现这种情况,可以关闭服务器端和客户端的防火墙,多抓几次。
实验总结
在本实验中,成功搭建了Web服务器,并通过HTML语言创建了一个展示个人基本信息的网页。使用Wireshark捕获的数据包清晰地展示了HTTP协议的工作流程。通过对这些数据包的分析,加深了对HTTP请求与响应机制的理解,尤其是对于请求方法、状态码、头信息等关键概念有了更直观的认识。
此次实验不仅巩固了对Web服务器工作原理的认知,还掌握了利用Wireshark工具进行网络数据包分析的基本技能。通过实际操作,验证了理论知识,提高了动手能力和问题解决能力。
PS:我是上周五(2024/10/25/18:30-19:00)检查的,助教可能会看一眼你的网站,检查你的LOGO能不能正常显示,音频能不能正常播放,然后让你现场用Wireshark抓包,需要你指出哪几个包是三次握手,哪几个包是四次挥手。都非常简单!
我是彩笔,仅供参考!