资源描述
使用网络分析软件学习 HTTP 协议一、 目的学习网络分析也有段时间了, 到现在也算是逐渐入门了吧, 想想自己以前刚接触时, 不知道 从何入手。学习网络分析,肯定要从协议入手,如果只看相关资料,这样印象不深刻,而且 也没什么实战的经验, 速度和效率都慢了很多。 后来有高人指点了我, 用网络分析软件来学 习协议比较好, 从此我开始了另外一种方法的学习。 呵呵, 自己作为一个初学者, 想把自己 学习的方法写出来,和大家交流交流,个人认为方法是最重要的。TCP/IP协议族里的协议太多了,这个还的靠时间的积累:说了这么多废话,嘿嘿!其实应用层协议是我们经常用到的协议,比如 HTTP , FTP 等等,下面我们就来谈谈 HTTP 协议(不看网页不可能吧 -.-# ,学习其他协议时可以用类似的方法,灵活变通 。 o二、 试验环境我们这里试验的网络环境很简单,简单描述一下:1. 网络环境 :本人电脑通过代理服务器 ADSL 拨号上网,本机 IP=192.168.0.92;2. 操作系统 :本人电脑使用 Windows XP+SP2;3. 工具 (关键哟 :我接触过 Sniffer , OmniPeek , ethereal ,科来网络分析系统,个人相对 这几种软件用的稍微熟悉的还是 OmniPeek ,这里我就以 OmniPeek 为学习工具。三、 具体操作我试验过程也很简单, 访问网页大家都很清楚吧?我这里只是用更加深入的方式来了解访问 网页的种种过程及原理,具体操作如下:1. 打开 OminPeek 的设置, 在 Filers 里面设置 Address filer:192.168.0.92和 protocl filter选 择 HTTP 协议,如图 1,(图 1 过滤器设置说明:通过设置图 1的过滤器, 我们就可以只捕获 192.168.0.92使用 HTTP 协议的通讯了: 2. 开始捕获,使用主机 192.168.0.92访问网页 ,抓取数据包,如图 2, (图 2 抓取的数据包说明:呵呵,准备就绪,开始捕获,我们访问 http:www.csna.cn论坛,捕获到的数据包。 四、 原理知识使用网络分析软件进行对协议学习, 并不是叫我们都抛开那些资料, 那些理论原理, 我这里 所说的就是“结合” ,了解协议的结构,工作原理,相关特征是很重要的,这时我们在通过 网络分析软件来操作, 就会更加明确。 我们还是先介绍一下 HTTP 协议的工作原理吧 (不要 怪我罗嗦哟 。1. TCP/IP分层结构TCP/IP的层次结构和工作原理,我们就不详细介绍了,这里就针对 HTTP 进行一下说明:简单的说 HTTP 协议是应用层协议, 通过下层传输层的 TCP 进行可靠连接, 网络层 IP 选路, 链路层 Ethernet II,最后在物理上以位(Bit 进行传输。应用层 -HTTP传输层 -TCP网络层 -IP 链路层 -Ethernet II2. HTTP协议工作方式由于 HTTP 协议是基于请求/响应模式的(相当于客户机/服务器。一个客户机与服务器建立 连接后, 发送一个请求给服务器, 请求方式的格式为:统一资源标识符(URL、 协议版本号, 后边是 MIME 信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相 应的响应信息, 其格式为一个状态行, 包括信息的协议版本号、 一个成功或错误的代码, 后 边是 MIME 信息包括服务器信息、实体信息和可能的内容。这个过程就好像我们打电话订货一样, 我们可以打电话给商家, 告诉他我们需要什么规格的 商品, 然后商家再告诉我们什么商品有货, 什么商品缺货。 这些, 我们是通过电话线用电话 联系(HTTP 是通过 TCP/IP。HTTP 协议的内部操作过程:基于 HTTP 协议的客户/服务器模式的信息交换过程,它分四个 过程:建立连接、发送请求信息、发送响应信息、关闭连接。这就好像上面的例子,我们电 话订货的全过程。其实简单说就是任何服务器除了包括 HTML 文件以外, 还有一个 HTTP 驻留程序, 用于响应用 户请求。你的浏览器是 HTTP 客户,向服务器发送请求,当浏览器中输入了一个开始文件或 点击了一个超级链接时, 浏览器就向服务器发送了 HTTP 请求, 此请求被送往由 IP 地址指定 的 URL。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。在这一过程中,在 网络上发送和接收的数据已经被分成一个或多个数据包(packet, 每个数据包包括:要传送 的数据;控制信息,即告诉网络怎样处理数据包。TCP/IP 决定了每个数据包的格式。五、 数据包分析我们现在来分析刚刚抓取的数据包, 看看 HTTP 协议怎样进行建立连接, 发送请求信息, 发 送响应信息,关闭连接的过程。1. 建立连接第 1.2.3个数据包是 HTTP 协议使用下层 TCP 协议通过三次握手原则建立连接的过程, 如图 2所示, (图 3 建立连接说明:图 3中选中三个数据包描述的是 TCP 三次握手的过程。这样我们可以知道, HTTP 通讯是发生在 TCP 协议之上,缺省端口是 TCP 的 80端口,所以 HTTP 是一个可靠的协议。至于三次握手原理,看解码: 上面三个图分别为前三个数据包中的 TCP 标记信息,反映了 TCP 的三次握手过程:客户端 向 Web 服务器发送一个 SYN 同步连接请求, Web 服务器收到请求后向客户端发送一个SYN/ACK 数据包,同意客户端的连接请并向客端发起同步,客户端收到该数据包后再次确 认,从而成功建立 TCP 连接。 2. 发送请求信息 接下来我们再来观察第四个数据包, 这个是主机 192.168.0.92 发起的 HTTP 请求包, 如图 4, (图 4 发送请求信息) 图 4 中,我们从数据包解码中看到 HTTP 协议发送请求信息的一些特征。打开一个连接后, 客户机把请求消息送到服务器的停留端口上,完成提出请求动作。 图 中的 请求报文 l l l l l l l l l HTTP Command: /方法字段,说明其使用的是 GET 方法 URI: / /URL 字段,发送请求至保存该网站的服务器。 HTTP Version: /http 协议版本字段,用是的 http/1.1 版本 Accept: /指示可被接受的请求回应的介质类型范围列表。 Accept-Language: /限制了请求回应中首选的语言为简体中文,否则使用默认 值。 Accept-Encoding: /限制了回应中可接受的内容编码值,指示附加内容解码方式 为 gzip,deflate. User-Agent: /定义用户代理,即发送请求的浏览器类型为 Mozilla/4.0 Host: www.csna.cnrn Connection: Keep-Alivern /定义了目标所在的主机 /告诉服务器使用持久连接 3. 发送响应信息 第 6 个数据包是服务器的响应包信息,从图 4 可以看出, (图 5 分析解码,我们可以知道这些内容: 响应报文 服务器在处理完客户的请求之后,要向客户机发送响应消息。 图 中的 回应报文 l l l l l l l l l l l HTTP Version: HTTP/1.1 /服务器用的是 HTTP/1.1 版本 HTTP Status : 200 /请求成功,信息可以读取,包含在响应的报文中 Date: /指服务器从文件系统中检索到该对象,插入到响应报文,并发送该响应 报文的时间 Server: /表明刻报文是由一个 Apache/2.0.52 的服务器产生的 X-Powered-By: /表明是使用 PHP(版本)的动态网页 Set- cookie: / Vary: / Content-Length: /表明实体的长度 Connection: /告诉客户机在报文发送完毕后仍然保持连接 Content-Type: /表明实体中的对象是 html 文档 Binary Data: /二进制数据 说明:在服务器给的回应请求中,我们可以从状态码中看到访问的相关信息。 状态码表示响应类型,常用的有: l l l l l 保留 表示请求成功地接收 为完成请求客户需进一步细化请求 客户错误 服务器错误 在我们抓到的数据包中,状态码是 ,表明请求是成功接受请求。 关闭连接 最后 个数据包()就是通讯的关闭过程,建立一个连接需要进行三次握手, 而终止一个连接则需要经过 次握手。 这是由于 连接是全双工的, 每个方向上都必须单 独地进行关闭。 次握手实际上就是两个方向上单独关闭的过程。这里就不详细说明了, 六、 小结 从上面的讲解, 我想咱们对 HTTP 协议也了解了很多了吧, 对照分析软件来学习是不是觉得 有点不一样哇,我们在数据包解码中看到只是资料所说的有点出入。呵呵,资料上说的是不 是要复杂的多, 这也说明, 在具体实际情况下是不同的。 在这里, 我们只是说说学习的思路, TCP/IP 协议是非常复杂的,一个好的学习方法,使的咱们在学习其他协议的时候就能举一 反三: )希望大家能谈谈自己的学习方法。大家互相交流撒。 菜青虫 2006 年 6 月
展开阅读全文