一、实验目的
通过本实验,熟练掌握Wireshark的操作和使用,学习对HTTP协议进行分析。
二、实验内容
1.HTTP 协议简介
HTTP 是超文本传输协议 (Hyper Text Transfer Protocol)的缩写,用于WWW 服务。
(1)HTTP 的工作原理
HTTP 是一个面向事务的C/S协议。使用TCP 作为底层传输协议,是无状态的,每个事务都是独立地进行处理。此外,客户可以使用多个端口和和服务器(80 端口)之间建立多个连接。
(2)HTTP 报文格式
HTTP有两类报文:从客户到服务器的请求报文和从服务器到客户的响应报文。
图1.2 和图1.3显示了捕获的HTTP 请求和响应报文:
图1.2 HTTP 请求报文示例
图1.3 HTTP 响应报文示例
2.实验环境与说明
(1)实验目的
在PC 机上访问Web 页面,截获报文,分析HTTP 协议的报文格式和HTTP 协议的工作过程(2
(2)实验设备与连接
本地实验室环境,无须设备连接;
注意:请通过访问可以连接的WWW 站点或使用IIS 建立本地WWW 服务器来进行实验。
(3)实验分组
每四名同学为一组,每人一台计算机独立完成实验
三、实验步骤
1.截获报文
(1)在PC机上运行Wireshark,开始截获报文
打开wireshark主页面后, 打开WLAN接口,此时wireshark开始抓包。
(2)从浏览器上访问Web 界面
打开Wireshark开始截获报文,从浏览器访问:http://hdjw.hnu.edu.cn/Njw2017/index.html#/student(湖南大学教务系统)
在Wireshark中截获了包括TCP,DNS,HTTP等各种协议的报文,可在截取报文的上方菜单栏选择HTTP协议进行过滤:
(3)将截获的报文命名为http-学号保存![](https://i-blog.csdnimg.cn/blog_migrate/1937fa12e755fd252e9fa9f9f65918a7.png)
2.报文分析
(1)问题1-2种HTTP报文
综合分析截获的报文,查看有几种HTTP 报文?
有两种HTTP 报文,分别为请求报文和应答报文:
- 请求报文:下图第1行为从客户端发往服务器的请求报文,其最左边箭头为向左表示请求报文。
其中Source的192.168.185.68 是客户端的ip,Destination的202.197.99.16是服务器的ip
- 响应报文:下图第2行为服务器发往客户端的响应报文。
其中Source的202.197.99.16是服务器的ip,Destination的192.168.185.68是客户端的ip
(2)问题2-HTTP报文格式
在截获的HTTP 报文中,任选一个HTTP 请求报文和对应的 HTTP 应答报文,填写表1.1 和表1.2。
- HTTP 请求报文:
表1.1 HTTP 请求报文格式
方 法 | GET | 版 本 | HTTP1.1 |
URL | /Njw2017/index.html | ||
首部字段名 | 字段值 | 字段所表达的信息 | |
HOST | hdjw.hnu.edu.cn | 接收请求的主机名 | |
Connection | keep-alive | 表示保持连接 | |
Upgrade-Insecure-Requests | 1 | 表示浏览器请求将当前的非安全(HTTP)请求升级为安全(HTTPS)请求,以增强安全性 | |
User-Agent | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46 | 表明用户代理,即可用的浏览器类型,此处使用的是Edge浏览器 | |
Accept | text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 | 描述接受响应的数据的数据类型。其中q表示相对质量因子,指示接受数据类型的优先级 | |
Accept-Encoding | gzip, deflate | 表示客户端可处理的压缩编码 | |
Accept-Language | zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 | 表示接收的语言类型 | |
Cookie | UM_distinctid=18885c6bd5b8f6-02ca2c23dab8e8-7b515473-1bcab9-18885c6bd5c1d91; qqmail_alias=duanfuzhao@hnu.edu.cn; sdp_app_session-80=355546de2560fc354a8672e8d135fd5661bd85522159e865cf4a098dbc21c1b209bd5a25af3287f534afa1 | Cookie值,用户标识 |
- HTTP 应答报文:
表1.2 HTTP 应答报文格式
版本 | HTTP1.1 | 状态码 | 200 |
短语 | OK | ||
首部字段名 | 字段值 | 字段所表达的信息 | |
Server | Sangine | 表示服务器应用程序 | |
Date | Mon, 06 Nov 2023 09:09:02 GMT | 表示响应生成的时间 | |
Content-Type | application/javascript; charset=utf-8 | 表示响应主体的内容类型 | |
Transfer-Encoding | chunked | 表明响应的传输编码方式(chunked-分块) | |
Connection | keep-alive | 表示持续建立连接 | |
Expires | Thu, 01 Jan 1970 00:00:01 GMT | 表示响应的过期时间 | |
Cache-Control | no-cache | 表示不缓存此响应 | |
Content-Encoding | gzip | 表示响应主体的内容编码方式 |
(3)问题3-连接、端口
分析在截获的报文中,客户机与服务器建立了几个连接?服务器和客户机分别使用了哪几个端口号?
查看所有报文的源端口与目的端口,
- 客户机与服务器共建立了3个连接。
- 端口号:
- 客户机的三个端口号为:51266、51267、51268;
- 服务器的是熟知端口号:80。
(4)问题4-HTTP协议工作过程
综合分析截获的报文,将结果填入表1.3 中。
表1.3 HTTP协议工作过程
HTTP客户机端口号 | HTTP服务器端口号 | 所包括的报文号 | 步骤说明 |
51268 | 80 | 10 | TCP连接请求报文段 |
51268 | 80 | 13 | TCP连接请求确认报文段 |
51268 | 80 | 14 | 普通的TCP确认报文段 |
51267 | 80 | 34 | TCP连接释放报文段【80>51267】 |
51267 | 80 | 35 | TCP确认报文段 |
51267 | 80 | 36 | TCP连接释放报文段【51267->80】 |
51267 | 80 | 38 | TCP确认报文段 |
51267 | 80 | 21 | HTTP请求报文 |
51267 | 80 | 33 | HTTP响应报文 |
通过浏览器访问一个网页时,浏览器和服务器的工作过程如下:
① 浏览器分析待访问页面的URL,并向本地DNS 服务器请求IP 。
② DNS 服务器解析出该HTTP 服务器的IP 地址并将IP 地址返回给浏览器。
③ 浏览器与HTTP 服务器通过三次握手建立TCP 连接。
④ 浏览器向HTTP 服务器发出请求报文 (含GET 信息),请求访问服务器的指定页面。
⑤ 服务器作出响应,将浏览器要访问的页面发送给浏览器,在页面传输过程中,浏览器会打开多个端口,与服务器建立多个连接。
⑥ 通过四次挥手释放TCP 连接。
⑦ 浏览器收到页面并显示给用户。
①TCP连接请求-三报文握手
1)TCP连接请求报文段
第一次握手:客户端发送SYN(标志位,表示请求建立连接)到服务器,并进入SYN_SENT状态。
Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据。
Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据。
2)TCP连接请求确认报文段
第二次握手:服务器收到请求后,回送SYN+ACK信令到客户端,此时服务器进入SYN_RECV状态。
Seq = 0 :初始建立值为0,表示当前还没有发送数据,
Ack = 1 : 表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。
3)普通的TCP确认报文段
第三次握手:主客户端收到SYN+ACK包,向服务器发送确认ACK包,完成三次握手。
ACK :标志位,表示已经收到记录。
Seq = 1 :表示当前已经发送1个数据。
②TCP连接释放-四报文挥手
1)TCP连接释放报文段【80>51267】
第一次挥手:发送一个[FIN+ACK],表示自己没有数据要发送了,想断开连接。
2)TCP确认报文段
第二次挥手:收到FIN后,知道不会再有数据从客户端传来,发送ACK进行确认
3)TCP连接释放报文段【51267->80】
第三次挥手:服务端发送[FIN+ACK]给对方,表示自己没有数据要发送了,然后直接断开TCP会话的连接,释放相应的资源。
4)TCP确认报文段
第四次挥手:客户端收到了服务端的FIN信令后,发送ACK确认消息。断开了到服务端的TCP连接,释放所有资源。当服务端收到客户端的ACK回应后,会进入CLOSE状态,并关闭本端的会话接口,释放相应资源。
③HTTP请求、响应报文
四、实验总结
通过这次实验学习到了很多的知识点。首先学会了使用wireshark来截取各种网络数据包,并可以对数据包详细信息进行一定分析。
同时对HTTP协议有了更深一层次的理解,尤其体会到了TCP建立的三次握手、取消的四次挥手的过程。
另外,在与同学交流中还遇到了下面的问题:
几个报文的ACK序号都一样,并且这些报文的Sequence Number都不一样,并且后一个Sequence Number为前一个Sequence Number加上前一个报文大小再加上1。
经查阅资料,TCP segment of a reassembled PDU:主机响应一个查询或者命令时,如果要回应很多数据(信息),而这些数据超出了TCP的最大MSS时,主机通过发送多个数据包来传送这些数据(注意:这些包并未被分片)。