HNU计算网络实验一 应用层协议数据与路径分析实验(Wireshark等)

目录

一、实验目的

二、HTTP协议与数据包分析

2.1 HTTP 协议简介

  2.2实验环境与说明

  2.3实验步骤

三次握手(TCP 三路握手)过程详解:

四次挥手(TCP 四路挥手)过程详解:

三、数据包路径分析

3.1 观察traceroute的工作过程

3.2 数据包路径分析

3.3 观察网站服务器IP地址的变化

3.4 观察负载均衡器的存在

3.5 分析网络故障


一、实验目的

通过本实验:

  1. 熟练掌握Wireshark的操作和使用,学习对HTTP协议进行分析;
  2. 练习traceroute 等工具的使用,学会跟踪数据包在网络中经过的路由路径,观察DNS、CDN以及负载均衡设备的存在,练习基本的网络管理和故障排除技能。

二、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 HTTP 的请求报文和响应报文结构                        

    在图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 请求和响应报文,结合上面的介绍,请自己分析和体会。

                             图1.2 HTTP 请求报文示例

                             图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 报文?

      有两种,如下图所示,分别为请求报文和响应报文

请求报文:下图第三行为从客户端发往服务器的请求报文,其最左边箭头为向左表示请求报文。其中Source的10.69.147.45是客户端的ip,Destination的23.214.95.200是服务器的ip

响应报文:下图第二行为服务器发往客户端的应答报文 。其中Source的23.214.95.200是服务器的ip,Destination的10.69.147.45是客户端的ip

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

 

                                  表1.1 HTTP 请求报文格式

方 法

GET

版 本

HTTP/1.1

URL

/system/resource/code/datainput.jsp?owner=1418316019&e=1&w=1707&h=1067&treeid=1001&refer=&pagename=L2luZGV4LmpzcA%3D%3D&newsid=-1

首部字段名

字段值

字段所表达的信息

Host

csee.hnu.edu.cn

接收请求的主机名

Connection

Keep-alive

连接状态

User-Agent

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0

客户端代理信息

Accept

image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8

描述接收响应数据的数据类型,q表示相对质量因子,指示接收数据类型的优先级

Referer

http://csee.hnu.edu.cn/

提供访问来源信息

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

可接受的语言

                       

                                  表1.2 HTTP 应答报文格式                                 

版 本

HTTP/1.1

状态码

200

短 语

OK

首部字段名

字段值

字段所表达的信息

Date

Wed, 23 Oct 2024 09:46:18 GMT

响应时间

Server

*********

服务器应用程序

X-Frame-Options

SAMEORIGIN

表示该页面可以在相同域名页面的frame中展示

Cache-Control

no-store

指定不响应缓存

Pragma

no-cache

在 HTTP/1.1 协议中,它的含义和 Cache-Control:no-cache 相同表示无缓存

Expires

ExpiresWed, 31 Dec 1969 16:00:00 PST

过期时间

Content-Type

image/gif;charset=UTF-8

实体类型

Content-Length

0

实体长度

Set-Cookie

JSESSIONID=3B1005A6B677FECCDB0FF6648BB109F3; Path=/; HttpOnly

客户端的Cookie信息

Keep-Alive

timeout=5, max=100

持续连接的参数

Connection

Keep-Alive

连接状态

Content-Language

zh-CN

实体语言

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

客户端与服务器成功建立2个连接,服务器使用端口443,客户机使用到了端口60740、60752

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

三次握手(TCP 三路握手)过程详解:

第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端;

如图:第一行:TCP标志[SYN] 序列号Seq=0

客户端向服务器发送了一个SYN包,请求建立连接。这是三次握手的第一次握手

第二行:这是SYN包的重传,说明客户端可能没有收到服务器的应答或者网络中存在一定的延迟。仍然属于第一次握手

第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了;

TCP标志[SYN, ACK] 序列号Seq=1 确认号Ack=1

服务器收到客户端的SYN请求后,发送一个带有SYN和ACK标志的包,确认收到客户端的SYN请求并请求建立连接。这是三次握手的第二次握手

第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。

其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。

四次挥手(TCP 四路挥手)过程详解:

第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;

如图:客户端向服务器发送了 FIN 报文,表示客户端想要关闭连接

Seq=8430: 客户端发送的序列号是 8430

Ack=175: 客户端期望服务器下一次的序列号是 175,表示客户端已经接收完服务器之前的数据

第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号(ACK)为收到序号(Seq)+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;

如图:服务器对客户端的 FIN 报文进行了确认,发送 ACK 报文

Seq=175: 服务器的序列号为 175

Ack=8431: 服务器确认客户端的 FIN 报文,期望客户端的下一个序列号为 8431

Win=16387: 窗口大小为 16387

第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;

如图:服务器向客户端发送了 FIN 报文,表示服务器也想要关闭连接

Seq=175: 服务器的序列号仍然为 175

Ack=8431: 服务器期望客户端的下一个序列号为 8431,确认之前的数据已全部接收

第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。

如图:客户端对服务器的 FIN 报文进行了确认,发送 ACK 报文

Seq=8431: 客户端的序列号为 8431

Ack=176: 客户端确认服务器的 FIN 报文,期望服务器的下一个序列号为 176

Win=16387: 窗口大小为 16387

其中:FIN标志位数置1,表示断开TCP连接

                                 表1.3 HTTP 协议工作过程

HTTP 客户机端口号

HTTP 服务器端口号

报文类型

功能说明

60740

443

ACK

确认数据包

60740

443

Application Data

传输应用层数据(加密的TLS数据)

60740

443

FIN

请求关闭连接

60740

443

FIN, ACK

关闭 TCP 连接,请求关闭

60740

443

RST

重置连接

60740

443

RST,ACK

重置连接,确认重置请求

60828

443

SYN

发起连接请求,建立TCP连接

60828

443

SYN, ACK

确认收到SYN请求并回复,准备建立连接

60867

80

PSH, ACK

确认收到数据并立即将数据传递给应用层

三、数据包路径分析

traceroute (Windows下类似的命令为tracert)是一个网络诊断工具,用于跟踪数据包从源到目标的路径。它通过发送具有不同 TTL(生存时间,Time to Live)的ICMP(互联网控制消息协议)数据包,逐步递增TTL值,来记录数据包通过的每一个中间路由器的IP地址。

图1.4 traceroute的工作机制 

默认情况下,traceroute 每一跳发送3个探测数据包,常用方法如下:

traceroute www.baidu.com

结果下图:

图1.5 traceroute单次结果 

3.1 观察traceroute的工作过程

用Wireshark抓包,观察traceroute的发包过程:如何开始发包、如何停止发包。

由于windows默认icmp协议,通过过滤器选择icmpv6

第一跳:


第二跳:

第三跳:

......

traceroute实现原理

TTL(生存时间):

当网络中的路由器收到一个数据包时,会减少数据包的 TTL 值。如果 TTL 减到 0,路由器会丢弃该数据包并向源主机发送一个 ICMP “超时” 消息(ICMP Time Exceeded)。

traceroute 利用了这一点,通过逐步增加数据包的 TTL 值,从 1 开始,每次增加 TTL,使得数据包每次能传递到网络中的下一跳路由器,从而依次获取路径中每一跳的IP地址。

探测过程:

初始TTL = 1: traceroute 发送一个TTL值为 1 的数据包,数据包到达第一跳路由器时,TTL 减为 0,该路由器丢弃数据包并返回一个 ICMP 超时报文。

TTL = 2: traceroute 发送一个TTL为2的数据包,这次数据包可以通过第一跳路由器,到达第二跳路由器,第二跳路由器将TTL减为 0,并返回 ICMP 超时报文。

这个过程持续进行,直到数据包到达目标主机,目标主机会返回一个应答,表明已经到达终点。

为了能够区分不同的数据包和相应的返回结果,序列号(seq)会在每个数据包中递增

当 traceroute 显示每一跳的结果时,它会显示三个延迟时间,对应每个序列号的包。如果某个数据包没有得到响应(例如,网络拥塞或丢包),traceroute 可以通过缺失的序列号来显示该跳超时。这有助于更准确地分析网络的情况

3.2 数据包路径分析

尝试在不同的网络中运行比如校园网、运营商网络(可开手机热点接入),运行traceroute 到同一个网站。

观察每一跳的IP地址,分析你的寝室或校园网的网关、运营商的网关分别是哪个。

3.3 观察网站服务器IP地址的变化

多次运行 traceroute 命令,如图1.5,观察返回结果中域名后面的IP地址是否有变化,为什么会变化,差异大不大? 在不同的网络中,域名后面的IP地址的差异大不大,为什么?

图1.6 traceroute多次结果 

当多次运行 traceroute 命令时,返回结果中显示的域名后面的IP地址有时会发生变化。这是因为:

  • DNS负载均衡:网站可能使用了DNS负载均衡,这意味着每次查询时,DNS服务器会返回不同的IP地址,将请求分配到不同的服务器以均衡负载。
  • CDN(内容分发网络):某些网站可能使用了CDN,内容会被分发到全球各地的多个服务器。当从不同的网络或区域访问时,DNS可能返回不同区域的CDN服务器IP。
  • 变化的差异程度:IP地址的差异取决于网络的设计。如果网站使用负载均衡,差异可能在同一组服务器之间,变化不大。如果使用CDN,差异可能较大,因为可能连接到不同地理位置的服务器。

在不同的网络中,域名后面的IP地址差异可能会变大。例如,从不同国家访问同一网站时,可能会连接到不同地区的CDN服务器,以优化访问速度。

3.4 观察负载均衡器的存在

通过分析多次运行 traceroute 命令的响应时间,可以发现路径中负载均衡器的存在。例如,第3跳的响应时间在不同运行中有显著变化,这可能是负载均衡器根据流量情况调整了路径。想一想,负载均衡器会采用什么样的策略来调整路径?

  1. 轮询调度:按顺序将请求分配到不同的服务器上。
  2. 最少连接调度:优先将新请求发送给当前处理连接最少的服务器。
  3. 响应时间调度:根据服务器的响应时间来选择路径,响应时间越短的服务器优先分配流量。
  4. 动态流量调度:根据当前的网络流量和服务器负载,实时调整流量的分配和路径。

3.5 分析网络故障

假设某天,你的同学要在雅思官网上进行考试报名,突然发现在家(电信网络)无法登录雅思官网,后来发现通过VPN进入校园网后,可登录雅思官网。你猜测出现这样的情况的原因是什么,如何验证你的猜测?


  1. 运营商的网络屏蔽:电信运营商可能对特定的网站或服务器有屏蔽或访问限制,而校园网没有这类限制。
  2. DNS解析问题:电信网络的DNS服务器可能无法正确解析雅思官网的域名,导致无法访问。
  3. IP地址屏蔽:雅思官网可能针对某些IP地址段进行屏蔽,而电信网络的IP在屏蔽范围内,校园网的IP不在屏蔽范围内。

验证猜测的方法

  1. 切换DNS服务器:尝试在电信网络中切换到公共DNS(如Google DNS或Cloudflare DNS)以排除DNS解析问题。
  2. 使用traceroute命令分析路径:分别在电信网络和校园网运行 traceroute,对比路径差异,分析数据包是否在某一跳中被阻止或丢失。
  3. 检查IP封锁:通过检查电信网络和校园网分配的IP地址段,确认是否有IP屏蔽的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值