转自:http://softbbs.pconline.com.cn/9431424.html
前言:对一个网络从无到有的组建或者出现问题后的处理,大家或多或少都会,即使你能很轻松的用思科的设备进行一个网络上的组建,现在看来那也没什么了不起,仅仅说明你是一名合格的使用者而已。
特别是对于网路中出现的故障,即使你能很迅速的排除问题,回复网络的正常使用,那也并一定就说明,你是一个网络高手了。
假如你看完下面这篇文章,你就会觉得,其实自己学会的知识还是很肤浅,自己的水平还处在一个初级水平。
总之一句话,假如你还没有弄懂一个数据包在网路游动时,所涉及到的方方面面的协议,那么网络对于你来讲,还是很遥远的。
看看下文,一个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访问网页http://www.csna.cn,抓取数据包,如图2,
(图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所示,
(图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协议发送请求信息的一些特征。打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请求动作。
图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\r\n //定义了目标所在的主机
Connection: Keep-Alive\r\n //告诉服务器使用持久连接
3. 发送响应信息
第6个数据包是服务器的响应包信息,从图4可以看出,
(图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协议是非常复杂的,一个好的学习方法,使的咱们在学习其他协议的时候就能举一反三:)希望大家能谈谈自己的学习方法。大家互相交流撒。