Wireshark
网页相应过程
实验四班 况建炜
2801309008
1、 基础知识介绍:
一次完整的网页相应包括一个DNS请求报文,一个DNS回答报文,一个HTTP请求报文和一个HTTP响应报文。
1、 DNS报文格式:
标识符会被复制到对查询的回答报文中,以便让客户机用它来匹配发送的请求和接收到的回答。
标志字段格式为:
QR(1比特):查询/响应的标志位,1为响应,0为查询。这里QR为0表示是一个查询报文。
opcode(4比特):定义查询或响应的类型(若为0则表示是
的,若为1则是反向的,若为2则是服务器状态请求)。
AA(1比特):授权回答的标志位。该位在响应报文中有效,1表示名字服务器是权限服务器。
TC(1比特):截断标志位。1表示响应已超过512字节并已被截断。
RD(1比特):该位为1表示客户端希望得到递归回答。
RA(1比特):只能在响应报文中置为1,表示可以得到递归响应。
zero(3比特):保留字段,为0。
rcode(4比特):返回码,表示响应的差错状态。
问题区域包含着正在进行的查询信息。该区域包括:名字字段,用于指出正在被查询主机名字;类型字段,用于指出正被询问的问题类型。
回答区域只在来自DNS服务器的回答报文中,包含了对最初请求的名字的资源记录。每个资源记录中有Type字段,Value字段和TTL字图案。在一个回答报文中的回答区域中可以包含多条RR,因为一个主机名可以对应多个IP段。
权威区域包含了其他权威DNS服务器的记录。
附加区域包含了其他一些有帮助的记录。
2、 HTTP请求报文格式:
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。
请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
GET:当客户端要从服务器中读取文档时,使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
3、 HTTP响应报文:
响应报文分为三个部分:一个初始状态行、6个首部行,然后是实体主题。
状态行有3个字段:协议版本、状态码和相应状态信息。
首部行包括Connection、Date、Server、User-agent、Last-Modified、Content-Length、Content-Type,下文中会详细介绍。
实体主体部分是报文的主题,包含了所请求的对象本身。
2、 DNS报文分析:
打开Wireshark抓包软件:
选择网卡:
打开IE浏览器并点击Start按钮,开始抓包。在浏览器地址栏输入www.baidu.com,等到网页完全加载后停止抓包,获得以下结果:
首先分析DNS报文,DNS有两条报文,一条query报文,一条response报文:
请求报文的内容为:
其中,标识符为0xbd58,这个标识符将和DNS回答报文中的标识符对应。
标志字段为0x0100。
0... .... .... .... = Response: Message is a query 表示报文是请求报文
.000 0... .... .... = Opcode: Standard query (0) 表示为标准
.... ..0. .... .... = Truncated: Message is not truncated 表示未截断
.... ...1 .... .... = Recursion desired: Do query recursively 表示希望递归查询
.... .... .0.. .... = Z: reserved (0) 保留位为0
.... .... ...0 .... = Non-authenticated data: Unacceptable
Questions: 1 问题数为1
Answer RRs: 0 回答为0
Authority RRs: 0 权威域名服务器回答为0
Additional RRs: 0
这里的查询名为www.baidu.com,查询类型为A,表示是IPv4地址。查询类为0x0001表示Internet数据。
回答报文内容:
上面提到的标识符这里同样也为0xbd58,表示是对刚才那条查询报文的回答。
标志位为0x8180,QR为1,表示是回答报文。opcode是0000,表示是标准的。AA位为0,表示不是权威服务器。TC位为0,表示未截断。RD位为1,且RA为1,表示递归可用。
问题字段跟上面的查询报文是相同的,这里不再赘述,我们来看回答字段:
回答字段第一行我们看到请求的是一个类型为CNAME的记录:www.baidu.com,结果得到
主机名www.a.shifen.com。第二行和第三行请求类型为A(规范主机名)的记录www.a.shifen.com,得到结果为IP地址119.75.213.51和119.75.213.50。
接下来Authoritative nameservers中的四行表示请求知道如何获取域a.shifen.com中主机IP地址的权威DNS服务器的主机名,得到结果为ns2.a.shifen.com、ns4.a.shifen.com、ns5.a.shifen.com和ns6.a.shifen.com。在下面Additional records中的四行是请求主机名为ns2.a.shifen.com、ns4.a.shifen.com、ns5.a.shifen.com和ns6.a.shifen.com的IP地址,得到结果分别是123.125.113.66、123.125.113.67、220.181.3.178和220.181.4.178。
3、 HTTP报文分析:
HTTP请求报文:
内容为:
这条请求报文用的是GET方法,协议是HTTP/1.1版本。
Accept指示可被接受的请求回应的介质类型范围列表。这里包括application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml。
Accept-Language限制请求回应中首选的语言为简体中文。
Accept-Encoding限制了回应中可接受的内容编码值,指示附加内容解码方式为gzip, deflate。
User-Agent定义用户代理,即向服务器发送请求的浏览器类型为Mozilla/4.0.
Host定义目标所在的主机,这里为www.baidu.com。
Connection:Keep-Alive告诉服务器使用持久连接。
HTTP响应报文:
内容为:
版本号为HTTP/1.1。状态为200(OK)请求成功。
Date指示服务器产生并发送该相应报文的日期和时间,这里表示时间是2010年10月26日10:47:0。
Server表明该报文是由一个BWS/1.0服务器产生的。BWS服务器应该是百度自己开发的服务器。
Content-Length表示被发送对象的字节数,为3113。
Content-Type表示实体主题中的对象是HTML文本。
Cache-Control是控制网页的缓存,这里的值为private是默认取值。
Expires表示存在时间,允许客户端在这个时间之前不去检查(发请求)。
Connection:keep-alive表示持续连接。
下面的Line-based text data就是发送过来的HTML文本数据。这里就不再详细列出。