目录
DNS概述:
DNS报文格式:
1、首部(Header)
2、正文:
(1)Queries(查询问题区域)
(2)Answers(回答区域)
(3)Authoritative nameservers(授权区域)
(4)Additional records(附加区域)
DNS报文抓取过程:
1、打开wireshark,然后输入网站地址,我这里输入的是:
2、成功访问网站之后,打开运行中的wireshark,关闭wiresahrk。
3、我们可以看到已经有很多的DNS报文了,在这里只分析一份对应请求和应答的报文。
请求报文(query):
响应报文(response):
HTTP概述:
HTTP的工作过程:
HTTP1.1协议的特点:
HTTP的无状态特性:
非持久连接和持久连接:
HTTP报文格式:
HTTP 请求报文格式:
HTTP 响应报文格式:
HTTP报文抓取过程:
1、打开wireshark,然后输入网站地址,我这里输入的是:
2、成功访问网站之后,打开运行中的wireshark,关闭wiresahrk。
HTTP请求报文分析:
HTTP响应报文分析:
DNS概述:
DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
通过DNS,用户可以方便地通过域名找到对应的IP地址,从而访问目标网站或服务。DNS的工作原理基于一个分布式的数据库系统,其中包含大量的域名和IP地址的映射记录。当用户输入一个域名时,DNS系统会在其数据库中查找对应的IP地址,并将结果返回给用户。这样,用户就可以通过域名来访问互联网资源,而无需知道具体的IP地址。
DNS系统由多个DNS服务器组成,它们之间通过层次化的结构进行协作。这些服务器负责解析域名,并将其转换为相应的IP地址。当用户发起域名解析请求时,本地DNS服务器会首先尝试解析域名。如果本地DNS服务器无法解析该域名,则会向根DNS服务器或其他上级DNS服务器发起递归查询,以获取正确的IP地址。
DNS不仅提供了域名到IP地址的解析功能,还支持反向解析,即将IP地址解析为域名。此外,DNS还支持各种记录类型,如A记录(将域名解析为IPv4地址)、AAAA记录(将域名解析为IPv6地址)、CNAME记录(将域名解析为另一个域名)等,以满足不同的网络需求。
DNS报文格式:
1、首部(Header)
(1)会话标识(2字节):是DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的响应。
(2)标志(2字节):
QR:查询/响应标志,0表示查询报文;1表示响应报文。
Opcode:0表示标准查询,1表示反向查询;2表示服务器状态请求。
AA:表示授权回答(autboritstive answer)。
TC:表示可截断的(trupcsted)。
RD:表示期望递归。
RA:表示可用递归,随后3bit必须为0。
Rcode:返回码,表示返回码,0表示没有差错,3表示名字差错,2表示服务器错误(Server Failure)。
(3)Questions(问题数)字段占2个字节,表示在DNS请求中待解析的城名数目,一般是1,也即 0x0001。
(4)Answer RRs(国答资源记录数)字段占2个字节,在DNS应答报文中,表示 DNS 回答的资源记录数目。在DNS请求报文中,Answer RRs的值为0。
(5)Authority RRS(授权资源记录数)字段占2个字节,在DNS的应答报文中,表示投权服务器的记录个数。在DNS请求报文中,Authority RRs的值为0。
(6)Additional RRs(附加资源记录数)字段占2个字节,在DNS应答报文中,表示附件信息记录的个数。在DNS请求报文中,Additional RRs的值为0。
2、正文:
正文包括 Queries(查询问题区域)、Answers(回答区域)、Authoritative nameservers(授权区域)和 Additional records(附加区域)。
(1)Queries(查询问题区域)
Queries 区域存放DNS客户端询问的问题,报文格式如图:
- Name(查询名):字段占用4个字节,表示的就是需要查询的域名(如果是反向查询,则为IP),字段长度不固定,且不使用填充字节。
- Type(查询类型):字段占用2个字节,表示要查询什么样类型的记录。常见记录类型如表:
- Class(查询类):占用2字节,表示查询信息所属的类别,通常为1,表为Internet。
(2)Answers(回答区域)
包含所查询的DNS域名的资源记录,资源记录格式如图:
- Name(域名):2字节或不定长,它的格式和 Qweries 区域的查询名字字段是一样的。
- Type(查询类型):表明资源纪录的类型,同 Queries 中的 Type。
- Class(查询类):通常为1,即 Internet,同 Queries 中的 Class。
- Time to Live(生存时间):以秒为单位,表示的是资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间,它同时也可以表明该资源记录的稳定程度,极为稳定的信息会被分配一个很大的值(比如 86400,这是一天的秒数)。
- Data Length(资源数据长度):表明后面 Data 部分的长度。
- Data(资源数据):该字段是一个可变长字段,表示按照查询段的要求返回的相关资源记录的数据,可以是 Address(表明查询报文想要的回应是一个IP地址)或者CNAME(表明查询报文想要的回应是一个规范主机名)等。
(3)Authoritative nameservers(授权区域)
包含权威服务器的记录,如提供该域名解析服务的服务器的主机名。
(4)Additional records(附加区域)
包含其他信息记录,如 Authoritative nameservers(授权区域)中服务器的 IP 地址。
DNS报文抓取过程:
1、打开wireshark,然后输入网站地址,我这里输入的是:
2、成功访问网站之后,打开运行中的wireshark,关闭wiresahrk。
3、我们可以看到已经有很多的DNS报文了,在这里只分析一份对应请求和应答的报文。
请求报文(query):
随便查看一个请求报文
进去之后,我们可以看到DNS的端口:53,表示我们提出请求,要做出回应的是DNS服务器。下面是,我对于DNS请求报文的一些分析。(有什么分析的不对,欢迎大家指出)
在上图,我们可以看出Transaction ID:0x4d95。所以下面的分析的响应报文就是这个请求报文相对应的响应报文。
响应报文(response):
根据Transaction ID:0x4d95,找到对应的响应报文
这次的源端口变成了53,这是因为这是响应报文,由DNS服务器发出的响应。而目的端口就是我们自己。
注:有些字段我并没有分析,如果你需要分析某些字段,可以往前翻一翻,详细的字段内容、介绍都在前面有所介绍。
HTTP概述:
HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种应用层协议,用于分布式、协作式和超媒体信息系统。它是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
HTTP的工作过程:
作为应用层的协议,HTTP协议遵循客户一服务器模式,使用HTTP协议通信过程如下图:
- Web服务器进行监听。Web服务器在服务器主机的80端口等待请求,称为在80端口侦听。80端口是Web服务器的默认服务端口。
- 建立连接。Web浏览器在向Web服务器发送请求前,需要下层的TCP协议为它们建立一个连接。所谓连接,可以理解为一条传输数据的通道,通道的一端是Web浏览器,另一端是Web服务器,数据从连接的一端流入,从另一端流出,并且数据的流动是双向的。两端建立连接后,就可以开始传输数据了。这个过程也被称为“三次握手”,用于确保连接的可靠性和安全性。
- Web浏览器发出请求。连接建立后,Web浏览器向Web服务器发出请求,要求服务器传送网页或其他文件(如图片、音频等)。这个请求被封装在HTTP请求报文中,包含了请求的方法(如GET、POST等)、请求的URL、请求头等信息。
- Web服务器应答请求。收到请求后,Web服务器会解析HTTP请求报文,并根据请求的内容进行相应的处理。然后,Web服务器将应答和对应的文件放入HTTP应答报文中,并发回给Web浏览器。应答报文包含了状态码(如200表示成功)、响应头以及实际的文件内容。
- Web浏览器再次发送请求,Web服务器再次发送应答。在实际应用中,Web浏览器和Web服务器之间的交互可能不止一次。例如,当用户点击一个链接或提交一个表单时,浏览器会再次发送请求给服务器,服务器也会再次发送应答。
- 通信完毕,关闭连接。当Web浏览器和Web服务器之间的数据交互完成后,连接会被关闭。HTTP/1.0版本中,每个请求/应答对都会打开一个单独的连接,并在交互完成后关闭。而在HTTP/1.1版本中,引入了持久连接的概念,允许在一个连接中发送多个请求和应答,从而提高了效率。但在每个HTTP事务完成后,仍然可以通过显式地关闭连接来结束通信。
HTTP1.1协议的特点:
- 应用层协议与TCP使用:HTTP是工作在OSI(开放系统互连)模型的应用层的一种协议。在传输层,它通常使用TCP(传输控制协议)作为其传输机制,以确保数据的可靠传输。HTTP的默认端口号是80,这也是大多数Web服务器监听的端口。
- 客户-服务器模式:HTTP基于客户-服务器模式工作。在这种模式下,客户端(通常是Web浏览器)向服务器发送请求,服务器则响应这些请求并返回相应的数据(如网页内容)。
- 双向传输:HTTP是一个双向协议,意味着客户端可以向服务器发送请求,而服务器可以向客户端发送响应。此外,客户端还可以向服务器发送数据,如表单提交。
- 支持多个主机名:在HTTP/1.1版本中,一个Web服务器可以配置为处理多个虚拟主机的请求。这允许多个不同的网站或服务在同一个物理服务器上运行,每个网站或服务都有自己的主机名和域名。
- 持久连接:HTTP/1.1引入了持久连接(也称为长连接或keep-alive连接)的概念。这意味着客户端和服务器可以在一个TCP连接中发送多个请求和响应,而不需要为每个请求建立新的连接。这提高了性能,减少了建立和关闭连接的开销。
- 部分资源选择:HTTP协议允许客户端请求文档的特定部分,而不是整个文档。这称为范围请求(range requests),它对于大文件(如视频)的分段下载非常有用,可以减少不必要的数据传输和节省资源。
- 支持高速缓存和代理:HTTP协议支持缓存机制,允许浏览器和其他客户端缓存之前访问过的网页内容。当再次访问相同页面时,可以从缓存中快速获取内容,而不是重新从服务器下载。此外,HTTP还支持代理服务器,这些服务器可以缓存内容并代表客户端与Web服务器通信,进一步减少网络流量和提高性能。
- 内容协商:HTTP的内容协商功能允许服务器和客户端就返回的最佳资源版本达成一致。这基于客户端的请求头中的信息(如Accept-Language、Accept-Encoding等),服务器可以根据这些信息返回最适合客户端的资源版本。
- 安全性:HTTP本身不提供加密或身份验证功能,因此传输的数据可能会被拦截或篡改。然而,通过结合其他技术(如SSL/TLS),可以创建安全的HTTPS连接,提供数据加密和身份验证功能,从而提高安全性。
HTTP的无状态特性:
利用 HTTP 协议交互的过程是非常简单的,Web浏览器发送请求,Web服务器给出应答,Web浏览器再发出请求,Web服务器再给出应答……Web服务器不去记忆哪一个客户曾经访问过它,也不去记忆某个客户曾经访问过哪一个文件。当同一个客户连续向Web服务器发出两个相同的请求时,Web服务器会认为这是两个单独的请求。所以,HTTP 协议是一个无状态的协议。
非持久连接和持久连接:
HTTP协议支持非持久连接和持久连接。HTTP1.1默认使用持久连接。
(1)非持久连接
在非持久连接下,访问过程如下图:
HTTP报文格式:
Web浏览器和Web服务器通过交换HTTP报文来实现HTTP协议。
有两种HTTP报文:请求报文和应答报文。请求报文是浏览器发给服务器的,指明所需文档的名字和位置。应答报文是服务器发给浏览器的,里面包含服务器的应答和浏览器所需的文档。这两种报文的控制信息都是以文本的形式发送的,非常易于阅读和理解。
HTTP 请求报文格式:
第一行是请求行,方法字段指明要进行的操作,URL字段给出要操作文档的URL地址,版本号字段用来告诉服务器浏览器所支持的HTTP协议版本。方法字段的值有五种。分别是:
- GET:当浏览器请求获取某个文档时,方法字段的值就使用GET,文档的地址由URL字段指定。当使用GET方法时,请求报文的实体主体部分为空。
- POST:在多数情况下,浏览器是从服务器上获取数据。但在某些情况下,浏览器也会向服务器提交网页上表单内的一些数据,这是方法字段的值设为POST,实体主体也要放入提交的内容。
- HEAD:与GET字段很类似。如果请求报文中方法字段的值为HEAD,那么服务器也会给浏览器发送应答报文,这点同GET一样。不同的是,对GET的应答报文中会包含浏览器所请求的文档;而对HEAD的应答报文中不包含文档的内容。HEAD字段常用来进行测试和故障跟踪,用来判断某一个连接是否有效,能否被访问。
- PUT:用来将一个文档上传到Web服务器上,文档名字和位置由URL字段指明。文档的内容存储在实体字段里。如果文档已经存在于服务器上,则服务器会覆盖旧的文档;如果文档不存在,则服务器会根据URL建立一个新文档,将实体字段的内容存入新文档。如果执行成功,则服务器会放回对应的应答报文;如果执行过程中出错,则服务器会给浏览器报错。
- DELETE:用来删除Web服务器上的文档,文档名字和位置由URL字段指定。
请求行后面就是首部行,每个首部行都有其特定的意思,告诉服务器一些特殊的信息。
HTTP 响应报文格式:
HTTP应答报文(Response Message)是服务器在接收到客户端的HTTP请求后,返回给客户端的响应数据。HTTP应答报文主要由状态行(Status Line)、响应头部(Headers)和响应体(Body)三个部分组成。
第一行就是状态行,状态行包含了HTTP协议版本、状态码以及状态描述,格式如下:
- :HTTP协议的版本,如HTTP/1.1。
- :一个三位数的状态码,表示请求的处理结果。
- :状态码对应的文本描述。
常见的状态码包括:
- :请求成功。
- :请求的资源未找到。
- :服务器内部错误。
状态行后面是若干个首部行,用来存放告诉浏览器的其它一些信息。
常见的响应头部包括:
- :指定返回数据的类型,如、等。
- :返回数据的长度(以字节为单位)。
- :响应创建的日期和时间。
- :服务器的名称或类型。
- :缓存控制指令,如、等。
响应体是可选的,它包含了服务器返回给客户端的数据。响应体的格式和内容取决于头部字段的值。例如,如果是,那么响应体就是HTML文档;如果是,那么响应体就是JSON格式的数据。
一个完整的HTTP响应报文,可能如下:
HTTP报文抓取过程:
1、打开wireshark,然后输入网站地址,我这里输入的是:
2、成功访问网站之后,打开运行中的wireshark,关闭wiresahrk。
这里的操作与DNS报文的过程大致相同,就不过多描述了。
HTTP请求报文分析:
HTTP响应报文分析:
注:我这里只是一个简单的访问百度网站的一个HTTP报文,并没有涉及过多的内容。