通过本实验,熟练掌握Wireshark的操作和使用,学习对HTTP协议进行分析。在PC 机上访问Web 页面,截获报文,分析HTTP 协议的报文格式和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有两类报文:从客户到服务器的请求报文和从服务器到客户的响应报文。下图显示了两种报文的结构。
步骤1:在PC 机上运行Wireshark,开始截获报文;
步骤2:从浏览器上访问Web 界面,如http://www.163.com。打开网页,待浏览器的状态栏出现 “完毕”信息后关闭网页;
步骤3:停止截获报文,将截获的报文命名为http-学号保存。
首先启动Wireshark后点击“捕获”–>“选项”通过设置进入界面:
选择“WLAN”点击开始,在“显示过滤器”一栏输入过滤表达式”http”,只查看HTTP协议的记录:
第二种是http请求报文:
封包详细信息也与http响应报文的大致一致,查看应用层可以看到HTTP 请求报文格式:
补充:关于状态码共有41 种,常用的有:200(一切正常),301(网站已转移),400(服务器无法理解请求报文),404(服务器没有锁请求的对象)等。
在封包列表内选择一行点击右键,选择“追踪流”–>“TCP流”,就可以通过这个了解HTTP 协议的工作过程:
在cmd窗口中输入指令:“ ipconfig/all ”就可以查看本机IP配置信息。这是有线连接下的本机IP:
这是无线连接下的本机IP:
HTTP 应答报文的内容如下所示:
为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。
第一次握手:建立连接时,客户端50235发送SYN包到服务器80,并进入SYN_SEND状态,等待服务器80确认SYN表示同步序号,用来建立连接:
SYN标志位和ACK标志位搭配使用(当连接请求的时候,SYN=1,ACK=0;连接被响应的时候,SYN=1,ACK=1)时是第二次握手。服务器80收到SYN包,必须确认客户50235的SYN,同时自己也发送一个SYN包(即SYN+ACK包),此时服务器80进入SYN_RECV状态:
第三次握手:客户端50235收到服务器80的SYN+ACK包,向服务器80发送确认包ACK发送完毕后客户端50235和服务器80进入ESTABLISHED状态,完成三次握手:
(注:确认号ACK的数值等于发送方发送序号 +1(即接收方期望的下一个序列号,SYN+1)。
接着服务器端收到HTTP请求GET后,构造响应消息:
在服务器的HTTP层发送消息200 OK–>服务器的TCP层:
然后就是服务器端的TCP层对消息的分片传输(其一):
客户端的TCP层对接收到的各个消息包分片回送响应(其一):
服务器端的TCP层继续对消息的分片传输(其二):
客户端的TCP层每次收到一部分都会用ACK确认,之后服务器继续传输,client继续确认,直到完成响应消息的所有分片之后,Server发送组合HTTP响应包 200 OK,此时在client端的消息跟踪中才可以显示HTTP 200 OK的消息包。
PSH标志位表示Push操作。就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队。这是一个客户机端的TCP层对消息包进行分片传输、服务器端的TCP层对接收到的各个消息包分片回送响应的过程,客户机端的TCP层每次收到一部分都会用ACK确认,之后服务器继续传输,客户机继续确认,直到完成响应消息的所有分片。
这就表示完成响应消息的所有分片,Server发送组合HTTP响应包200 OK。
FIN表示发送端已经达到数据末尾,即双方的数据传送完成。发送FIN标志位的TCP数据包后,连接将被断开。至此,从开始连接到结束连接,完成了一次完整的连接。
分析截获的报文,回答以下几个问题:
1)综合分析截获的报文,查看有几种HTTP 报文?
解答:有两种。分别是从客户机到服务器的请求报文和从服务器到客户机的响应报文。
2)在截获的HTTP 报文中,任选一个HTTP 请求报文和对应的 HTTP 应答报文,仔细
分析它们的格式,填写表1.1 和表1.2。
解答:(表1.1 HTTP 请求报文格式)
(表1.2 HTTP 应答报文格式)
3)分析在截获的报文中,客户机与服务器建立了几个连接?服务器和客户机分别使用了哪几个端口号?
解答:
建立了两个连接,服务器使用了50235和50242端口,客户机使用了80端口。
分析:HTTP协议(超文本传送协议Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。 由于使用的版本是HTTP1.1,可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求(区别于HTTP 1.0,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接)。由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。所以即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
4)综合分析截获的报文,理解HTTP 协议的工作过程,将结果填入表1.3 中。
解答:
通过本次实验“应用协议与数据包分析”,我掌握了Wireshark的使用方法,能熟练运用Wireshark捕获报文并对捕获到的数据分组进行分析,对照课本知识分析HTTP 协议的报文格式,并了解了HTTP 协议的工作过程。整个实验难度系数不算高,但我还是遇到了一些困难。比如一开始捕获报文时,由于对Wireshark操作不熟练,没有对所有捕获的报文进行条件筛选,这时很难查看HTTP协议的报文以及分析HTTP的报文格式。通过独立完成本次实验,我学会了将课本上的知识学以致用,掌握了许多新知识。