计算机网络实验一——应用协议与数据包分析
一、实验题目
通过本实验,熟练掌握Wireshark 的操作和使用,学习对HTTP 协议进行分析。
二、实验内容
学习HTTP协议,了解HTTP的工作原理和HTTP报文格式。运行Wireshark,截获
在浏览器访问web界面的报文,并根据截获的报文分析其格式与内容,进一步学习HTTP 协议工作过程。
三、实验原理
HTTP 是超文本传输协议 (Hyper Text Transfer Protocol)的缩写,用于WWW 服务。
1.HTTP 的工作原理
HTTP 是一个面向事务的客户服务器协议是无状态的。也就是说,每个事务都是独立地进行处理。当一个事务开始时,就在web 客户和服务器之间建立一个TCP 连接,而当事务结束时就释放这个连接。此外,客户可以使用多个端口和和服务器 (80 端口)之间建立多个连接。其工作过程包括以下几个阶段:
① 服务器监听TCP 端口 80,以便发现是否有浏览器 (客户进程)向它发出连接请求;
② 一旦监听到连接请求,立即建立连接。
③ 浏览器向服务器发出浏览某个页面的请求,服务器接着返回所请求的页面作为响应。
④ 释放TCP 连接。
当用户在浏览器的地址栏输入要访问的HTTP 服务器地址时,浏览器和被访问HTTP 服
务器的工作过程如下:
① 浏览器分析待访问页面的URL 并向本地DNS 服务器请求IP 地解析;
② DNS 服务器解析出该HTTP 服务器的IP 地址并将IP 地址返回给浏览器;
③ 浏览器与HTTP 服务器建立TCP 连接,若连接成功,则进入下一步;
④ 浏览器向HTTP 服务器发出请求报文 (含GET 信息),请求访问服务器的指定页面;
⑤ 服务器作出响应,将浏览器要访问的页面发送给浏览器,在页面传输过程中,浏览
器会打开多个端口,与服务器建立多个连接;
⑥ 释放TCP 连接;
⑦ 浏览器收到页面并显示给用户。
2.HTTP 报文格式
HTTP 有两类报文:从客户到服务器的请求报文和从服务器到客户的响应报文。下图
显示了两种报文的结构。
**开始行,用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行,响应报文中的开始行叫做状态行。**在开始行的三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”。
**首部行,用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。**在每一个首部行中都有首部字段名和它的值,每一行结束的地方都要有“回车”和“换行”。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
实体主体,在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。
请求报文的第一行请求行只有三个内容,即方法,请求资源的URL,以及HTTP的版本。所谓“方法”就是对所请求的对象进行的操作,这些方法实际上也是一些命令。
响应报文的第一行就是状态行。状态行包括三项:HTTP版本,状态码,以及解释状态码的简单短语。
四、实验步骤
1.截获报文步骤
步骤 1:在 PC 机上运行 Wireshark,开始截获报文;
步骤 2:从浏览器上访问 Web 界面,如 http://www. http://csee.hnu.edu.cn。打开网页,待浏览器的状态栏出现“完毕”信息后关闭网页。
步骤 3:停止截获报文,将截获的报文命名为 http-学号保存。
2.TCP连接分析
主要是三次握手过程:
第一次握手:建立连接时,客户端54020发送SYN包到服务器80,并进入SYN_SEND状态,等待服务器80确认SYN表示同步序号,用来建立连接;
第二次握手:SYN标志位和ACK标志位搭配使用(当连接请求的时候,Seq=0;连接被响应的时候,Seq=0,ACK=1)时是第二次握手。服务器80收到SYN包,必须确认客户54020的SYN,同时自己也发送一个SYN包(即SYN+ACK包),此时服务器80进入SYN_RECV状态;
(注:确认号ACK的数值等于发送方发送序号 +1(即接收方期望的下一个序列号)。
第三次握手:客户端54230收到服务器80的SYN+ACK包,向服务器80发送确认包ACK发送完毕后客户端54230和服务器80进入ESTABLISHED状态,完成三次握手;
还可以看到其中还有一个54231的连接请求,这里判断是为了进行并行连接加快速度。
3.HTTP简单分析
下面抓取湖南大学个人门户的HTTP数据包分析:
其中一条详细信息:
可以看到HTTP的报文含有OSI五层模型的所有信息。
-
请求报文结构:
-
响应报文结构:
补充:关于状态码共有41 种,常用的有:200(一切正常),301(网站已转移),400(服务器无法理解请求报文),404(服务器没有锁请求的对象)等。
4.思考题
下面以http://www.163.com/ 为例,分析截获的报文,回答以下几个问题:
1)综合分析截获的报文,查看有几种 HTTP 报文?
抓包内容如上图所示,共有两种HTTP报文,分别是请求报文与响应报文;
上图中的请求报文的方法为GET、版本号为HTTP/1.1;
响应报文状态为200,版本号为HTTP/1.1且描述为OK
这里我在最开始抓包的时候使用的是http://www.163.com的网址,访问时返回的响应报文为301,已经永久移动,而响应报文中还会有一个新的首部行Location,表示资源现在所处的位置;
可以发现新的位置URL为https://www.163.com/,不再是HTTP而是HTTPS,主要是为了安全性;其实不仅仅是www.163.com,主流的一些网页包括百度首页www.baidu.com都是这样。
2)在截获的 HTTP 报文中,任选一个 HTTP 请求报文和对应的 HTTP 应答报文,仔细 分析它们的格式
HTTP 请求报文格式:
HTTP响应报文格式:
3)分析在截获的报文中,客户机与服务器建立了几个连接?服务器和客户机分别使用了哪几个端口号?
很显然,建立了两个连接,客户机的两个端口号分别是51370、51371,其中两个端口口的TCP分别发出了一个GET请求,接受响应报文之后进行连接断开。
而服务器的访问端口为默认80。
4)综合分析截获的报文,理解 HTTP 协议的工作过程
下面以51370端口建立的TCP连接为例:
5.实验遇到的问题
1.Wireshark找不到接口
原因:
未安装WinPcap,这个在安装Wireshark时会提示进行安装,但我没有注意;
解决方法:
在www.winpcap.org进行下载安装即可;
然后在命令提示符中输入net start npf打开驱动。
2.Wireshark会截获非常多无用报文
原因:
我们的主机一直在静默运行很多应用程序,这些程序有些会进行网络数据的访问等,所以会有很多报文,难以观察
解决方法:
使用Wireshark的过滤器,我直接使用了tcp port http来进行过滤,效果很好。
五、 实验心得与不足
本次实验从实践中体会到了TCP连接的三次握手与四次挥手过程以及HTTP报文的两种格式,对书上的理论知识进行了巩固强化。
尤其在实验的过程中学习到了HTTP与HTTPS协议的不同,在http://www.163.com网站访问的报文中发现学习了一些网站从HTTP到HTTPS的过渡,通过在HTTP响应报文中添加首部行Location记录新的HTTPS网址可以实现跳转。本次实验受益匪浅。