阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

手机号码,快捷登录

老司机
查看: 1238|回复: 0

[转帖] 使用网络分析软件学习HTTP协议

[复制链接]
  • TA的每日心情
    开心
    2012-3-7 10:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2012-2-4 10:02:50 | 显示全部楼层 |阅读模式
    前言:对一个网络从无到有的组建或者出现问题后的处理,大家或多或少都会,即使你能很轻松的用思科的设备进行一个网络上的组建,现在看来那也没什么了不起,仅仅说明你是一名合格的使用者而已。

    特别是对于网路中出现的故障,即使你能很迅速的排除问题,回复网络的正常使用,那也并一定就说明,你是一个网络高手了。

    假如你看完下面这篇文章,你就会觉得,其实自己学会的知识还是很肤浅,自己的水平还处在一个初级水平。

    总之一句话,假如你还没有弄懂一个数据包在网路游动时,所涉及到的方方面面的协议,那么网络对于你来讲,还是很遥远的。

    看看下文,一个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,

    1225431940102.gif

    (图1 过滤器设置)
    说明:通过设置图1的过滤器,我们就可以只捕获192.168.0.92使用HTTP协议的通讯了:)

    2. 开始捕获,使用主机192.168.0.92访问网页http://www.csna.cn,抓取数据包,如图2,

    1225431978852.gif

    (图2 抓取的数据包)
    说明:呵呵,准备就绪,开始捕获,我们访问http:\www.csna.cn论坛,捕获到的数据包。

    四、 原理知识

    使用网络分析软件进行对协议学习,并不是叫我们都抛开那些资料,那些理论原理,我这里所说的就是“结合”,了解协议的结构,工作原理,相关特征是很重要的,这时我们在通过网络分析软件来操作,就会更加明确。我们还是先介绍一下HTTP协议的工作原理吧(不要怪我罗嗦哟)。

    1. TCP/IP分层结构

    TCP/IP的层次结构和工作原理,我们就不详细介绍了,这里就针对HTTP进行一下说明:简单的说HTTP协议是应用层协议,通过下层传输层的TCP进行可靠连接,网络层IP选路,链路层Ethernet II,最后在物理上以位(Bit)进行传输。
    应用层 -------------HTTP
    传输层 -------------TCP
    网络层 -------------IP
    链路层 -------------Ethernet II

    2. 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协议通过三次握手原则建立连接的过程,如图3所示,

    1225432031359.gif
    (图3 建立连接)
    说明:图3中选中三个数据包描述的是TCP三次握手的过程。这样我们可以知道,HTTP通讯是发生在TCP协议之上,缺省端口是TCP的80端口,所以HTTP是一个可靠的协议。
    至于三次握手原理,看解码:


    1225432115390.gif
    1225432123419.gif
    1225432132382.gif

    上面三个图分别为前三个数据包中的TCP标记信息,反映了TCP的三次握手过程:客户端向Web服务器发送一个SYN同步连接请求,Web服务器收到请求后向客户端发送一个SYN/ACK数据包,同意客户端的连接请并向客端发起同步,客户端收到该数据包后再次确认,从而成功建立TCP连接。


    2. 发送请求信息

    接下来我们再来观察第四个数据包,这个是主机192.168.0.92发起的HTTP请求包,如图4,


    1225432163020.gif
    (图4 发送请求信息)
    图4中,我们从数据包解码中看到HTTP协议发送请求信息的一些特征。打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请求动作。

    图4中的HTTP请求报文
     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.cn //定义了目标所在的主机
     Connection: Keep-Alive //告诉服务器使用持久连接

    3. 发送响应信息

    第6个数据包是服务器的响应包信息,从图4可以看出,


    1225432192422.gif
    (图5 响应报文)
    分析解码,我们可以知道这些内容:
    服务器在处理完客户的请求之后,要向客户机发送响应消息。

    图5中的HTTP回应报文
     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: //二进制数据
    说明:在服务器给的回应请求中,我们可以从状态码中看到访问的相关信息。

    状态码表示响应类型,常用的有:
    1××  保留
    2××  表示请求成功地接收
    3××  为完成请求客户需进一步细化请求
    4××  客户错误
    5××  服务器错误
    在我们抓到的数据包中,状态码是200,表明请求是成功接受请求。

    4. 关闭连接

    最后4个数据包(52.53.54.55)就是通讯的关闭过程,建立一个连接需要进行三次握手,而终止一个连接则需要经过4次握手。这是由于TCP连接是全双工的,每个方向上都必须单独地进行关闭。4次握手实际上就是两个方向上单独关闭的过程。这里就不详细说明了,

    六、 小结

    从上面的讲解,我想咱们对HTTP协议也了解了很多了吧,对照分析软件来学习是不是觉得有点不一样哇,我们在数据包解码中看到只是资料所说的有点出入。呵呵,资料上说的是不是要复杂的多,这也说明,在具体实际情况下是不同的。在这里,我们只是说说学习的思路,TCP/IP协议是非常复杂的,一个好的学习方法,使的咱们在学习其他协议的时候就能举一反三:)希望大家能谈谈自己的学习方法。大家互相交流撒。
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表