应用层网络协议分析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: 14Packet Length: 334 bytesCapture 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,而ACK位置0,这表明这是一个tcp连接请求。
(2)SYN+ACK报文:此报文为服server同意接受连接时,向client发回的报文,用于回应client的建立连接的请求。
Sequenen number: 0 表示server向client发送数据时第一个数据字节的序号为0。
Tcp的通信的全双工的,在每个方向上的编号是独立的。
Acknowledgement number:1为确认号字段,表明server下一个要接受的报文段中第一个数据字节的编号。
该报文段的标志位变成了Flags:0x00012(SYN,ACK),表示这是一个SYN+ACK报文,可看到SYN位置1, ACK位置1,这表明服务器端接受连接,则使用SYN位和ACK 位作为应答来回应客户端的连接请求。
(3)ACK报文:这是由client发送的确认报文,Sequence number :1 表示客户端向服务器端发送数据时的数据字节的序号为1(其值为客户端向服务器端发送数据时的第一个数据字节的序号+1),Acknowledgement number:1为确认号字段,表明client下一个要接受的报文段中第一个数据字节的编号。
此报文段的标志位为Flags:0x00010(ACK),表示这是一个ACK报文,可看到SYN位置0,而ACK位置1,客户端使用ACK标志和确认号字段来确认收到了服务器端的SYN+ACK报文。
通过这3个报文的交换,完成了TCP连接的建立。
(4)client请求http的报文:Source port: 1102 ( 1102 ) 表示源主机所建立的源端口号为1102。
Destination port: http ( 80 ) 表示目的端口号为80,即接收方主机本次连接建立HTTP 连接。
源主机是从1024——65535中指定的源端口号,80是被定义为http服务的端口号,TCP 不像在数据链路层和网络层中的协议那样,它和它的上层协议不使用硬件的和逻辑的地址来区别发送方的主机地址,它们使用端口号来实现。
Sequenen number: 1 序列号为1。
上一报文中,客户端的Acknowledgement number也表明将接收第一个数据字节编号为1。
[Next sequenen number: 281]要发送的下一序列号为:281。
Header length: 20 bytes 首部长20B,它与IP首部长度一样是可变的,都取决于可选项。
Flags: 0x0018 ( PSH, ACK )Acknowledgment: set 确认位,用来指示确认号有效,当它置0时,说明该报文不包含确认信息,确认号字段值则被忽略。
Push:set 表示请求推送,要立即将报文交给接收应用进程,而不再等到整个缓存满后才向上交付。
Window size:65535 指明窗口大小,其范围为0~65535,当其大小为0时,表示收到了包括确认号减1在内的所有数据,但当前接收方缓存已满,不能再接收,希望发送方不再发送数据了。
而发送方也必需要等到收到窗口大小非0的确认报文后,才能继续发送。
5、HTTP报文:(1)请求报文:GET/HTTP/1.1\r\n 表示是请求http服务的报文,http的版本为HTTP1.1。
至今,HTTP 有三个版本:0.9、1.0、1.1,0.9只接受GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头。