HTTP网页访问的协议分析
在协议模型中,应用层是用户与计算机进行实际通信的地方,只有当马上就要访问网络时,才会实际上用到这一层。例如,我们可以从系统中卸载掉任何联网组件,如TCP/IP、网卡(NIC)等,仍可以使用IE来浏览本地的HTML文档。可如果我们试图浏览必须使用HTTP 的文档,或者用FTP下载一个文件,事情就没那么容易了。此时,IE将尝试访问应用层来响应这一类请求。因此,应用层也可被看作是实际应用程序和下一层(OSI模型中为表示层,TCP/IP模型中为传输层)之间的接口,它通过某种方式把应用程序的有关信息送到协议栈的下面各层。
应用层协议则是实现用户和系统之间接口的工具,用户可通过这些协议方便地访问网络资源,实现信息共享,HTTP则是其中一种。
HTTP(超文本传输协议)是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。
HTTP是基于请求/响应方式的。它的运作方式很简单:一个客户机与服务器建立连接后,发送一个请求给服务器,服务器接到请求后,给予相应的响应报文。其中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。因此,当网络中的任一台拥有可被访问的页面的计算机被其它计算机访问时,它便是服务器,而当它访问其它浏览非本地的HTTP文档时,它便是客户端。因此,我们可以在局域网中搭建简单的环境来观察分析访问HTTP的工作流程。
最简单的情况可能是在用户和服务器之间通过一个单独的连接来完成,如图1-1:
图1-1
根据图连接好以及配好相应IP后,测试网络互通。而后,在server上建立HTTP服务器。首先在控制面板\添加删除程序\添加删除Windows组件中查看Internet信息服务(IIS)是否装上,若没有则安装,若安装好,则可以进入管理工具\Internet服务管理器,在默认WEB站点下建立自己的站点及目录。而后,在client浏览器地址栏中键入http://31.0.0.1便可浏览位于server端默认站点目录下网页。
在此过程中,我们通过Ethereal所抓的数据包如下:
1、数据链路层:
Frame 14 (334 bytes on wire, 334 bytes captured)表示第14个帧,传输334个字节,捕获334个字节,包中的
Frame Number: 14
Packet Length: 334 bytes
Capture Length: 334 bytes
也指明该帧是第14帧,传输334字节,捕获334字节。
[Protocols in frame: eth:ip:tcp:http]可看出所封装的层结构:应用层用的是HTTP协议,传输层用的是TCP协议,网络层用的是IP协议。
[Coloring Rule String Name: HTTP]
[Coloring Rule String: http || tcp.port = = 80 ] 从这里我们可以知道,HTTP 对应的TCP端口号为80。
在TCP和UDP中,都采用了16bit端口号来识别应用程序。其中,低于1024的端口号被称为众所周知的端口号,它们由RFC3232所定义,大于等于1024的端口号被上层用来建立与其他主机的会话,并且在TCP数据段中被TCP用来作为源方和目的方的地址,具体将在下面传输层中分析。
2、以太网帧:
从以太网帧中,我们可以看到,目的的MAC地址为:00: 16: d3: ee: 0e: 3f ,源MAC 地址为:00: 01: 02: 28: 1a: 34。
Multicast: This is a UNICAT frame 表示是单播帧。
Type:IP(0x0800)表示帧中封装了IP分组,若Type为0x0806表示帧中封装了ARP 分组,这两种帧的分组会被取出,并交付给相应的子程序。
3、IP包:
Internet Protocol, Src: 31.0.0.2 (31.0.0.2), Dst: 31.0.0.1(31.0.0.1) 可了解目地IP和源IP,此包是client端向server发送的http请求报文,所以,目地IP是31.0.0.1,源IP是31.0.0.2。
Version: 4 表示版本4。IPv6的版本号为6。
Header length: 20 bytes 首部长为20字节。它是以4B为单位进行计数的,该字段是可变的,当没有选项时,首部长为20B,对应该字段值为5;当有选项时,该字段最大值为15,对应60B的首部长度。
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00) 表示服务类型。不同的应用有不同的服务质量要求,该字段则是体现网络层的IP分组有不同的服务类型,但在大多数的TCP/IP实现中并不支持服务类型,因此这些位置都为0,路由器也会忽略该字段。
Total Length: 320 表示IP数据包的总长度为 320字节。
Identification: 0x0432(1074)标识位,在系统范围内,每发出一个IP包,其值自动增加1。
Flags: 0x04 (Don’t Fragment) 表示没有分段。
保留位:1位
不分段(DF,Don't Fragment):1位
更多段(MF,More Fragments):1位
Fragment offset: 0 表示分段偏移为0。
Time to live: 128 生命周期值,当每经过1个路由器,其值自动减1。
Protocol: TCP (0x06) 负载协议,表示IP数据包负载的协议。
Header checksum: 0xb783[ correct ]首部校验和,只对分组的首部进行校验,而不对分组的数据进行校验。
Source: 31.0.0.2 ( 31.0.0.2 ) 表示源IP地址。
Destination: 31.0.0.1 ( 31.0.0.1 ) 表示目的IP地址。
4、TCP报文:
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP 连接的端口号是80。
通过数据包,我们也可清楚地了解到TCP连接的建立:
(1)SYN报文:
该报文由client发起,Sequence number :0 表示客户端向服务器端发送数据时的第一个数据字节的序号就是0。Client建立的源端口号为1102,请求的是http服务(目的端口为80)。Flags:0x0002(SYN) 该标志位表示了这是一个SYN报文,可看到SYN位置1,而