HNU-计算机网络-实验1-应用协议与数据包分析实验(Wireshark)

计算机网络 课程基础实验一
应用协议与数据包分析实验(Wireshark)

计科210X 甘晴void 202108010XXX
在这里插入图片描述

一、实验目的:

通过本实验,熟练掌握Wireshark的操作和使用,学习对HTTP协议进行分析。

二、实验内容

2.1 HTTP 协议简介

HTTP 是超文本传输协议 (Hyper Text Transfer Protocol)的缩写,用于WWW 服务。
(1)HTTP 的工作原理
HTTP 是一个面向事务的客户服务器协议。尽管HTTP 使用TCP 作为底层传输协议,但 HTTP 协议是无状态的。也就是说,每个事务都是独立地进行处理。当一个事务开始时,就在web客户和服务器之间建立一个TCP 连接,而当事务结束时就释放这个连接。此外,客 户可以使用多个端口和和服务器 (80 端口)之间建立多个连接。其工作过程包括以下几个阶段。
① 服务器监听TCP 端口 80,以便发现是否有浏览器 (客户进程)向它发出连接请求;
② 一旦监听到连接请求,立即建立连接。
③ 浏览器向服务器发出浏览某个页面的请求,服务器接着返回所请求的页面作为响应。
④ 释放TCP 连接。
在浏览器和服务器之间的请求和响应的交互,必须遵循HTTP 规定的格式和规则。
当用户在浏览器的地址栏输入要访问的HTTP 服务器地址时,浏览器和被访问HTTP 服
务器的工作过程如下:
① 浏览器分析待访问页面的URL 并向本地DNS 服务器请求IP 地解析;
② DNS 服务器解析出该HTTP 服务器的IP 地址并将IP 地址返回给浏览器;
③ 浏览器与HTTP 服务器建立TCP 连接,若连接成功,则进入下一步;
④ 浏览器向HTTP 服务器发出请求报文 (含GET 信息),请求访问服务器的指定页面;
⑤ 服务器作出响应,将浏览器要访问的页面发送给浏览器,在页面传输过程中,浏览
器会打开多个端口,与服务器建立多个连接;
⑥ 释放TCP 连接;
⑦ 浏览器收到页面并显示给用户。

(2)HTTP 报文格式
HTTP 有两类报文:从客户到服务器的请求报文和从服务器到客户的响应报文。图 5.46
显示了两种报文的结构。

在这里插入图片描述

在图1.1 中,每个字段之间有空格分隔,每行的行尾有回车换行符。各字段的意义如下:

① 请求行由三个字段组成:

  • 方法字段,最常用的方法为 “GET”,表示请求读取一个万维网的页面。常用的方法还有 “HEAD(指读取页面的首部)”和“POST(请求接受所附加的信息)

  • URL 字段为主机上的文件名,这时因为在建立TCP 连接时已经有了主机名

  • 版本字段说明所使用的HTTP 协议的版本,一般为 “HTTP/1.1”

    ② 状态行也有三个字段:

  • 第一个字段等同请求行的第三字段

  • 第二个字段一般为 “200”,表示一切正常,状态码共有41 种,常用的有:301 (网站已转移),400(服务器无法理解请求报文),404(服务器没有锁请求的对象)等

  • 第三个字段时解释状态码的短语

    ③ 根据具体情况,首部行的行数是可变的。请求首部有Accept 字段,其值表示浏览器 可以接受何种类型的媒体;Accept-language,其值表示浏览器使用的语言;User-agent 表明可用的浏览器类型。响应首部中有Date、Server、Content-Type、Content-Length 等字段。在请求首部和响应首部中都有 Connection 字段,其值为Keep-Alive 或 Close,表示服务器在传送完所请求的对象后是保持连接或关闭连接。

    ④ 若请求报文中使用 “GET”方法,首部行后面没有实体主体,当使用 “POST”方法时,附加的信息被填写在实体主体部分。在响应报文中,实体主体部分为服务器发送给客户的对象。

    图1.2 和图1.3显示了捕获的HTTP 请求和响应报文,结合上面的介绍,请自己分析和体会。
    在这里插入图片描述
    在这里插入图片描述

2.2实验环境与说明

(1)实验目的
在PC 机上访问Web 页面,截获报文,分析HTTP 协议的报文格式和HTTP协议的工作过程。
(2)实验设备和连接
本地实验室环境,无须设备连接;
注意:请通过访问可以连接的WWW 站点或使用IIS 建立本地WWW 服务器来进行实验。
(3)实验分组
每四名同学为一组,每人一台计算机独立完成实验。

2.3实验步骤

​ 步骤1:在PC 机上运行Wireshark,开始截获报文;

在这里插入图片描述

​ 步骤2:从浏览器上访问Web 界面(http://csee.hnu.edu.cn)。打开网页,待浏览器的状态栏出现 “完毕”信息后关闭网页。

​ 步骤3:停止截获报文,将截获的报文命名为http-学号保存。

​ 分析截获的报文,回答以下几个问题:
1)综合分析截获的报文,查看有几种HTTP 报文?

有TCP,DNS,ARP,HTTP,SSL,ICMPV6,TLSv1.3等报文

2)在截获的HTTP 报文中,任选一个HTTP 请求报文和对应的 HTTP 应答报文,仔细分析它们的格式,填写表1.1 和表1.2。

▲请求报文截图:
在这里插入图片描述

表1.1 HTTP 请求报文格式:

方法:GET

版本:HTTP/1.1

URL: /favicon.ico

首部字段名字段值字段所表达的信息
Hostcsee.hnu.edu.cn接收请求的主机名
Connectionkeep-alive连接
User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36表明可用的浏览器类型,这里使用的是GoogleChrome浏览器。
Acceptimage/avif,image/webp,image/apng,image/svg+xml,image/,/*;q=0.8描述接收响应数据的数据类型,q表示相对质量因子,指示接收数据类型的优先级
Refererhttp://csee.hnu.edu.cn/提供访问来源信息,即从那里来到的这个页面
Accept-Encodinggzip, deflate表示客户端可处理的压缩编码
Accept-Languagezh-CN,zh;q=0.9接收的语言类型

▲回复报文截图:

在这里插入图片描述

表1.2 HTTP 应答报文格式 :

版本:HTTP/1.1

状态码:200

短语:OK

首部字段名字段值字段所表达的信息
DateThu, 12 Oct 2023 05:23:46 GMT响应时间
Server*********服务器应用程序
X-Frame-OptionsSAMEORIGIN表示该页面可以在相同域名页面的frame中展示(即可以在同域名页面的frame中嵌套)
Cache-Controlno-store指定不缓存响应,表明资源不进行缓存
Pragmano-cache在 HTTP/1.1 协议中,它的含义和 Cache-Control:no-cache 相同
ExpiresThu, 01 Jan 1970 00:00:00 GMT过期时间
Content-Typeimage/gif;charset=UTF-8实体的内容类型
Content-Length0实体的字节大小
Set-CookieJSESSIONID=B3F69D4683D77B4FA0BBD8B423973CED; Path=/; HttpOnlycookie值
Keep-Alivetimeout=5, max=99持续连接的参数
ConnectionKeep-Alive建立持续链接
Content-Languagezh-CN实体的语言

3)分析在截获的报文中,客户机与服务器建立了几个连接?服务器和客户机分别使用 了哪几个端口号?

★菜单栏“编辑”,“首选项”,“外观”,“列”中添加两项,就可以查看端口和端口号了。这一步灵感来源于https://blog.csdn.net/h1580824951/article/details/120333571

在这里插入图片描述

按照以上方式可得到所有HTTP报文对应的端口号

在这里插入图片描述

答案如下:

客户机与服务器建立了7个连接,
服务器使用的都是端口号80,
用户机使用了端口号51900,52004,52008,52017,52019,52018,52032
其中三次使用52008是TCP的三次握手

4 )综合分析截获的报文,理解HTTP 协议的工作过程,将结果填入表1.3 中。

实际上,由于我的页面打开初始是www.baidu.com,所以上面的初始一部分实际上在跟www.baidu.com进行通讯。我略去这一过程,只关注与http://csee.hnu.edu.cn进行通讯的过程。

注意到这里报文类型实际上也是一个需要关注的点,故加入这一列。另由于端口过多,只关注部分端口(尤其是端口52019,另外的52108、52107与这个类似)的连接与断开。

HTTP客户机端口号HTTP服务机端口号所包括的报文号报文类型步骤说明
585085310337DNS请求报文
535850810352DNSDNS响应报文,返回域名对应的IP地址
520088010477TCPSYN报文,请求建立与服务器的连接
805200810479TCPSYN ACK报文,允许客户与服务器建立连接
520088010480TCP对SYN ACK的确认,连接已建立
520088010481HTTP对网页的请求报文
805200810488HTTP响应报文
520198013629HTTP请求报文
805201913707HTTP响应报文
520198013708TCPACK报文
805201913709TCPFIN ACK报文(服务端发的第一个释放连接的请求)
520198013710TCPACK报文(客户端给服务端回应确认消息)
520198013711TCPFIN ACK报文(客户端发给服务端释放连接的请求)
805201913727TCPRST报文(本来应该是ACK表示服务端发确认消息,这里是连接突然终止了)

上面只重点列出了一个TCP连接的建立和释放的过程,其他两个连接是类似的,以上报文体现了HTTP的工作过程。

特别需要指出的是:典型的关闭请求,有时由客户端发起中断连接。但在这里的关闭请求由服务端发起,即http://csee.hnu.edu.cn主动发起并请求中断TCP连接。

★中间解题过程与截图如下:

DNS部分略

TCP三次握手建立连接

在这里插入图片描述

52017,52018,52019端口的结束报文

在这里插入图片描述

52019端口:RST报文

在这里插入图片描述

52019端口:正常传输

在这里插入图片描述

52019端口:四次挥手中的前三次

在这里插入图片描述

知识补充:三次握手与四次挥手

三次握手

在这里插入图片描述

四次挥手

在这里插入图片描述

最后的四次挥手原理讲解可以参考如下的讲解

https://blog.csdn.net/weixin_41033105/article/details/123861500

https://blog.csdn.net/m0_52650621/article/details/127797022

三次握手

第一次握手:这是客户端发起给服务器的报文,用于请求建立连接。

第二次握手:这是服务器回复给客户端的报文,用于确认并同意连接请求。

第三次握手:是客户端发给服务器的,是对上一个同意连接请求的确认。

四次挥手

第一次挥手:当数据传输首先结束的端(比如客户端),会率先发起结束断开连接的请求。

第二次挥手:对上一个断开连接请求的报文进行确认。并同时,停止接受数据。

第三次挥手:服务器端也结束数据发送了,所以也会发起一个断开连接的请求。

第四次挥手:是客户端对服务器断开连接请求的进行确认。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/112423.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WPF RelativeSource属性-目标对象类型易错

上一篇转载了RelativeSource的三种用法,其中第二种用法较常见,这里记录一下项目中曾经发生错误的地方,以防自己哪天忘记了,又犯了同样错误—WPF RelativeSource属性-CSDN博客 先回顾一下: 控件关联其父级容器的属性—…

Window下coturn服务器的搭建

Window下搭建coturn服务器: 准备材料: 1、安装Cygwin,地址:https://cygwin.com/install.html 由于Window无法直接部署coturn,因此需要下载安装Cygwin在Window上部署Linux虚拟环境。 在安装的时候需要安装几下packe…

当贝PadGO闺蜜机?多的是你不知道的玩法

一、当贝PadGO性能强在哪? 1、金属机身 当贝PadGO独有CD型底盘更有设计风格、后扶手设计更稳,且采用全金属的材质更有质感。并且在配色上还有熊猫白和唱片黑两种可以选择。屏幕采用AG磨砂类纸屏,自带纸张柔和效果,防眩光。并且拥有德国莱茵低蓝光、无频闪双重护眼认证,还可以…

【C语法学习】3 - fgetc()函数

文章目录 1 函数原型2 参数3 返回值4 比较5 示例5.1 示例15.2 示例2 1 函数原型 fgetc():从指定流stream中读取一个字符,函数原型如下: int fgetc(FILE *stream)2 参数 fgetc()函数只有一个参数stream: 参数stream是一个指向F…

SpringBoot_第七章(读写分离)

这里列举了三种读写分离实现方案,分别是如下三种 1&#xff1a;MybatisPlus&#xff08;读写分离&#xff09; 1.1&#xff1a;首先创建三个数据库1主2从 表名是user表 1.2&#xff1a;代码实例 1&#xff1a;导入pom <!--MybatisPlus的jar 3.0基于jdk8--><depend…

gRPC源码剖析-Builder模式

一、Builder模式 1、定义 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的的表示。 2、适用场景 当创建复杂对象的算法应独立于该对象的组成部分以及它们的装配方式时。 当构造过程必须允许被构造的对象有不同的表示时。 说人话&#xff1a…

sql-50练习题11-15

sql-50练习题11-15 前言数据库表结构介绍学生表课程表成绩表教师表 1-1 查询没有学全所有课程的同学的信息1-2 查询至少有一门课与学号为01的同学所学相同的同学的信息1-3 查询和1号的同学学习的课程完全相同的其他同学的信息1-4 查询没学过张三老师讲授的任一门课程的学生姓名…

【自用】vmware workstation建立主机window与虚拟机ubuntu之间的共享文件夹

1.在windows中建立1个文件夹 在vmware中设置为共享文件夹 参考博文&#xff1a; https://zhuanlan.zhihu.com/p/650638983 2.解决&#xff1a; &#xff08;1&#xff09;fuse: mountpoint is not empty &#xff08;2&#xff09;普通用户也能使用共享目录 参考博文&#x…

第06章 索引的数据结构

第06章 索引的数据结构 1. 索引及其优缺点 1.1 索引概述 MySQL官方对索引的定义为&#xff1a;索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。 **索引的本质&#xff1a;**索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”&#xff…

Swagger + DOCWAY 一步导出为优雅完整的Markdown、Pdf接口文档

只要开发&#xff0c;只要写接口应该没人不知道Swagger&#xff0c;但DOCWAY可能知道的人不多&#xff0c;但知道用过后就离不开了&#xff0c;不管是作为多方联调的接口文档&#xff0c;还是交接给客户的文档&#xff0c;都是可以的&#xff0c;具体如何使用&#xff0c;详细步…

都2023年了,不会还有人不会设计软件测试用例叭?不会吧不会吧

一、概念 测试用例的基本概念&#xff1a; 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合&#xff0c;这组集合包含&#xff1a;测试环境、操作步骤、测试数据、预期结果等要素 。 主要步骤&#xff1a; 测试环境——测试步骤—…

大数据Doris(十四):Doris表中的数据基本概念

文章目录 Doris表中的数据基本概念 一、​​​​​​​Row & Column

第四章 套接字通信

1.套接字socket 1. 概念 局域网和广域网 局域网&#xff1a;局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。广域网&#xff1a;又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。 IP&#xff08;Inter…

从零开始制作一个桶装水小程序

随着互联网的发展&#xff0c;越来越多的消费者通过线上购买桶装水。为了满足这一需求&#xff0c;我们需要制作一个专门的小程序商城&#xff0c;以便用户可以方便地购买桶装水。本文将通过乔拓云平台&#xff0c;从零开始制作一个桶装水小程序&#xff0c;并详细解析制作步骤…

Apollo上机实践:一次对自动驾驶技术的亲身体验

上机实践 概述自动驾驶通信分布式系统开发模式开发工具 自动驾驶感知传感器特性感知流程及算法部署感知模型 自动驾驶决策规划决策规划流程和算法使用 Dreamview 进行控制在环的规划调试开发规划场景和算法 福利活动 主页传送门&#xff1a;&#x1f4c0; 传送 概述 Apollo 是…

GAMP源码阅读:卫星位置钟差计算

原始 Markdown文档、Visio流程图、XMind思维导图见&#xff1a;https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 1、satposs_rtklib()2、ephclk()1. eph2clk()&#xff1a;时钟校正参数&#xff08; a f 0 、 a f 1 、 a f 2 a_{f0}、a_{f1}、a_{f2} af0​、af…

【设计模式】第22节:行为型模式之“状态模式”

一、简介 状态模式一般用来实现状态机&#xff0c;而状态机常用在游戏、工作流引擎等系统开发中。不过&#xff0c;状态机的实现方式有多种&#xff0c;除了状态模式&#xff0c;比较常用的还有分支逻辑法和查表法。该模式允许对象内部状态改变使改变它的行为。 二、适用场景…

如何在MacOS使用homebrew安装Nginx

文章目录 Homebrew安装nginxbrew启动Nginxbrew关闭Nginx 参考文章地址 Homebrew安装nginx 在确保MacOS 安装Homebrew成功以后&#xff0c;执行如下命令 brew install nginx注意&#xff1a;Nginx安装成功后会提示目录位置&#xff1b;每个人的系统可能因为Homebrew的安装位置…

Linux0.11内核源码解析-exec.c

主要实现对二进制可执行文件和shell文件的加载和执行&#xff0c;其中主要的函数是do_execve(),它是系统中断调用int 0x80的功能号__NR_execve()调用&#xff0c;是exec()函数的主要实现以下几点功能&#xff1a; 1.执行对参数和环境参数空间页面的初始化操作&#xff0c;初始…

Spring两大核心之一:AOP(面向切面编程)含设计模式讲解,通知类型切点;附有案例,实现spring事务管理

模拟转账业务 pom.xml <dependencies><!--spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.29</version></dependency><!--lombok-->…