计算机网络实验一:应用协议与数据包分析实验

一、实验目的

 

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

 

二、实验内容

 

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有两类报文:从客户到服务器的请求报文和从服务器到客户的响应报文。

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

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

* 方法字段,最常用的方法为 “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:在PC 机上运行Wireshark,开始截获报文;

步骤2:从浏览器上访问Web 界面,如http://www.163.com。打开网页,待浏览器的状态栏出现 “完毕”信息后关闭网页。

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

 

四、实验过程和结果

 

1、下载Wireshark,使电脑连接上无线网络,并选择抓包方式为WLAN。

2、在cmd中输入命令“ipconfig”,得到本机IPv4 地址10.63.17.14,并在捕获过滤器中输入“ip src host 10.63.17.14”。(校园网IPv4是自动获取)

3、开始捕获数据包,打开网页,待网页加载完毕,停止抓包。

4、在“应用显示过滤器”填上“http”,即可筛选出符合要求的http报文。

基于上述操作步骤,可以获得相关网络数据包如图:

问题1:综合分析截获的报文,查看有几种HTTP 报文?

 

答:有两种。上图中编号为120和335为客户机到服务器的请求报文,编号为124和339为服务器到客户机的应答报文。

 

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

 

表1.1 HTTP 请求报文格式

方 法

GET

版 本

HTTP/1.1

URL

http://www.baidu.com/

首部字段名

字段值

字段所表达的信息

Host

www.baidu.com\r\n

客户端指定自己想访问的http服务器的域名/IP 地址和端口号。

User-Agent

Mozilla/5.0(Windows NT 10.0;Win64; x64) AppleWt/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134\r\n

用户代理,是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

Accept

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n

告诉WEB服务器自己接受什么介质类型,/ 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type。

Upgrade

1\r\n

请求服务端升级协议

Accept-Encoding

gzip, deflate\r\n

设置接受的编码格式

Connection

Keep-Alive\r\n

设置当前连接和hop-by-hop协议请求字段列表的控制选项

Accept-Language

zh-CN\r\n

设置接受的语言

对应数据包截图:

表1.2 HTTP 应答报文格式

版 本

HTTP/1.1

状态码

302

短 语

Moved Temporarily

首部字段名

字段值

字段所表达的信息

Date

Tue, 19 Mar 2019 05:21:13 GMT\r\n

设置消息发送的日期和时间

Content-Type

text/html\r\n

服务器通过这个头告诉浏览器回送数据的类型,这里是返回HTML的格式

Location

https://www.baidu.con/\r\n

在重定向中或者创建新资源时使用

实验中要求的是HTTP抓包,但是浏览器默认了HTTPS的URL,所以在这里使用了该字段,且状态码显示了302 FOUND跳转,大家如果按照实验指导书去做,很可能也会出现这种情况

Server

BWS/1.1\r\n

服务器名称

X-UA-Compatible

IE=Edge,chrome=1\r\n

推荐首选的渲染引擎来展示内容,通常向后兼容,也用于激活IE中内嵌chrome框架插件

参考资料:https://www.cnblogs.com/chunlei36/p/6927365.html

对应数据包截图:

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

 

建立了一个连接,客户机为54066端口,而服务器为80端口(特殊端口,通常用于HTTP超文本传输协议)。

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

 

参考资料:

https://blog.csdn.net/qq_29166327/article/details/78573629(HTTP工作流程)

https://blog.csdn.net/qq_33616529/article/details/78288883(HTTP请求响应步骤)

http://www.xjishu.com/zhuanli/62/201610831336.html(302跳转方法)

HTTP的工作流程大致为:

1、建立连接。先解析DNS,把localhost变成ip(127.0.0.1),然后根据127.0.0.1和端口号8080(没有端口号则使用默认的端口)建立socket。也可以理解为通过“三次握手”建立TCP连接,确定通讯正常。

2、发送请求命令。socket建立好之后,客户端开始向web服务器发送请求命令(GET/POST等)。

3、发送请求头(和请求正文如果有)。客户端先发送与自身相关的信息,再发送空行表示请求头发送完毕,如果是post则继续发送请求正文。

4、回传状态行。应答第一步,发送协议版本和状态码(200、503、404等)

5、回传应答头。应答第二步,先发送自身相关信息、Content-Type(必须)及被请求的文档,在发送空行宝石应答头发送完毕。

6、回传应答正文。应答第三步,根据应答头的Content-Type指定的格式发送应答正文。

7、关闭连接。一次‘会话’完成,如果设置了Connection:keep-alive则TCP连接不关闭,否则关闭连接。

结合实验图来看具体的情况如下:

 

【117-119】为HTTP连接之前的TCP三次握手过程。

 

第一次握手【117】:主机A发送位码为syn=1,随机产生seq number数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手【118】:主机B收到请求后确认联机信息,向A发送ack number(Aseq+1),syn=1,ack=1。

第三次握手【119】:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

 

这里,主机A是客户端口54066,B为服务器端口80。完成三次握手,主机A与主机B开始传送数据。

 

【120】为请求命令GET的发送。在TCP三次握手之后,连接已经建立,可以传输数据。

 

121-122为客户端向服务器请求(头)信息的 过程,如user-agent,host等。

 

123为客户端请求的Host字段,即请求的ip地址或域名被服务器返回。

 

返回的这个Host是请求的、实验要求的HTTP类型,但是目前百度采用的是HTTPS,因此出现了重定向302。302状态码应用的典型场景是服务器页面路径的重新规划,比如一个portal页面,换了新的域名,但是老的域名地址还有很多用户在使用,这样可以对老域名配置302跳转到新域名地址,保证服务的延续。另外对于一些客户端预埋的Url链接,免不了老版本地址失效与更改,将老地址配置302跳转到新地址,这样就能够全面兼容所有客户端版本。

【124】服务器向本地发送HTTP 302错误,要求本地进行重定向请求。

 

125本地54066端口通过TCP向服务器80端口请求信息,这次的请求已经重定向。

 

【126-127】服务器向本地发送请求的数据。

 

【128-129】数据请求完毕,这是一个TCP四次挥手,和强制断开连接的过程。

 

TCP终止连接的四次挥手过程如下:

 

1. 首先进行关闭的一方(即发送第一个FIN)将执行主动关闭,而另一方(收到这个FIN)执行被动关闭。【在128的时候,已经发送了一个FIN】

2. 当服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

3. 同时TCP服务器还向应用程序(即丢弃服务器)传送一个文件结束符。接着这个服务器程序就关闭它的连接,导致它的TCP端发送一个FIN。

4. 客户必须发回一个确认,并将确认序号设置为收到序号加1。

 

但是这里只显示了2步,不是一个完整的四次挥手的过程。其原因在于,第【129】的时间上,出现了RST包,而它用于强制关闭TCP链接。

TCP连接关闭的正常方法是四次握手。但四次握手不是关闭TCP连接的唯一方法. 有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST (Reset)包将被发送. 注意,由于RST包不是TCP连接中的必须部分, 可以只发送RST包(即不带ACK标记). 但在正常的TCP连接中RST包可以带ACK确认标记。

 

填表结果如下:

表1.3 HTTP 协议工作过程

HTTP 客户机端口号

HTTP 服务器端口号

步骤说明

54066

80

发送SYN包,开始一次握手,开始建立连接

54066

80

二次、三次握手,连接建立

54066

80

客户机发起HTTP GET请求

54066

80

客户机向服务器请求具体数据信息如服务器ip等

54066

80

服务器应答,发送状态码

54066

80

具体的请求数据发送

54066

80

客户机发送FIN包,开始四次挥手,准备断开连接

54066

80

进行四次挥手过程断开连接,或发送RST包强制断开

猜你喜欢

转载自blog.csdn.net/yyd19981117/article/details/89331558