当前网络通讯大部分采用的是TCP/IP协议,而TCP/IP协议的基础是IP地址,所以计算机在网络中进行通讯时只能识别由纯数字构成的IP地址。但在实际的工作生活中,我们只需在浏览器地址栏中输入一串简单易记的域名,就能访问到所对应的网站,在这个过程中发挥重要作用的就是DNS。接下来我们就针对DNS的原理和解析过程做下简单介绍。
一、什么是DNS
DNS是Domain Name
System的缩写,翻译成中文就是“域名系统”。DNS是互联网中的一项核心服务,是用于实现域名和IP地址相互映射的一个分布式数据库,它将简单明了的域名翻译成可由计算机识别的IP地址,使用户可以更快速便捷地访问互联。
互联网连通的是全球资源,单一的域名服务器不足以支撑全部的地址转换操作,因此全球有多套域名服务器相互配合使用。早在1983年互联网就开始采用层次树状结构的命名方法,并使用分布式的域名系统进行解析操作。这样既提升了域名解析的效率,同时也保障了域名解析的稳定性,如果系统中单个域名服务器出现故障,不会对整个DNS系统的正常运行造成太大影响。
二、域名结构
互联网采用了层次树状结构的命名方法。任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。
域名的结构由标号序列组成,各标号之间用点隔开。类似于这样:“….三级域名.二级域名.顶级域名”
。各级域名由其上一级的域名管理机构管理,而最高级的顶级域名则由ICANN进行管理。
三、域名服务器
互联网上的DNS域名服务器也是按照层次划分的,每一个域名服务器都只对域名体系中的一部分进行管辖。根据域名服务器所起的作用,可以把域名服务器划分为四种不同的类型:
根域名服务器: 根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。根域名服务器知道所有顶级域名服务器的域名和
IP地址。如果本地域名服务器无法对域名进行解析,就首先求助于根域名服务器。
顶级域名服务器: 顶级域名服务器负责管理在该服务器注册的所有二级域名。当收到 DNS
查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步需要查询的域名服务器的 IP 地址)。
权威域名服务器:
这就是前面已经讲过的负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告知发出查询请求的DNS客户,下一步应当找哪一个权威域名服务器。
本地域名服务器:
本地域名服务器并不属于下图中的树状结构的DNS域名服务器,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。每一个互联网服务提供者ISP都可以拥有一个本地域名服务器。
各个域的分层上都设有各自的域名服务器,各层域名服务器都了解该层以下分层中所有域名服务器的IP地址。因此它们从根域名服务器开始呈树状结构相互连接。由于所有域名服务器都了解根域名服务器的IP地址,所以若从根开始按照顺序追踪,可以访问世界上所有域名服务器的地址。
四、DNS查询步骤
域名解析一般采用递归查询的方式进行。其完整的DNS解析过程有以下几个步骤:
(1)查看浏览器缓存
当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的 IP 地址(若曾经访问过该域名且没有清空缓存便存在)。
(2)查看系统缓存
当浏览器缓存中无域名对应 IP 则会自动检查用户计算机系统 Hosts 文件 DNS 缓存是否有该域名对应 IP。
(3)查看路由器缓存
当浏览器及系统缓存中均无域名对应 IP 则进入路由器缓存中检查,以上三步均为客服端的 DNS 缓存。
(4)查看ISP DNS 缓存
当在用户客服端查找不到域名对应 IP 地址,则将进入 ISP DNS 缓存中进行查询。比如你用的是电信的网络,则会进入电信的 DNS 缓存服务器中进行查找。
(5)询问根域名服务器
当以上均未完成,则进入根服务器进行查询。全球仅有 13 台根域名服务器,1 个主根域名服务器,其余 12
为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com、.cn等)服务器 IP 告诉本地 DNS 服务器。
(6)询问顶级域名服务器
顶级域名服务器收到请求后查看区域文件记录,若无记录则将其管辖范围内权威域名服务器的 IP 地址告诉本地 DNS 服务器。
(7)询问权威域名(主域名)服务器
权威域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确记录。
(8)保存结果至缓存
本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个 IP
地址即可访问目标Web服务器。至此,DNS递归查询的整个过程结束。
DNS系统承担着将域名解析成IP地址的重要作用,是计算机之间实现访问互联的关键和基础。因此,DNS解析的安全对于维持网络稳定运行至关重要。企业相关管理者和运营者一定要做好域名及域名解析的安全防护工作,定期进行数据扫描分析,启用全方位DNS风险监测,实时关注DNS运行状态,同时做好妥善的应急备份准备,一旦发现问题,出现故障,第一时间响应解决,才能将DNS故障风险及其带来的损失降至最低点。
五、常见记录类型
通过设置不同的解析记录,可以实现对主机名不同的解析效果,从而满足不同场景下的域名解析需求。常见的域名解析记录,主要有以下几种类型。
A记录
A(Address)记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web
server上,同时也可以设置域名的子域名。简单来讲,A记录就是指定域名对应的IP地址。如我们添加一条A记录将www的主机指向IP192.168.1.1,那么当你访问www主机时就会解析到192.168.1.1这个IP上。
CNAME记录
通常称别名解析,是主机名到主机名的映射。当需要将域名指向另一个域名,再由另一个域名提供 IP 地址,就需要添加 CNAME 记录,最常用到
CNAME的场景包括做CDN、企业邮箱、全局流量管理等。与A记录不同的是,CNAME别名记录设置的值不是一个固定的IP,而是主机的别名地址。
别名解析可以提供更大的灵活性,便于统一管理。比如,当主机因某种因素的影响需要更换IP时,如果域名做了CNAME记录,就可以同时更新别名的解析指向,不需要进行新的解析操作。
NS记录
如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录(Name
Server)。NS记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。NS记录中的IP即为该DNS服务器的IP地址。大多数域名注册商默认用自己的NS服务器来解析用户的DNS记录。DNS服务器NS记录地址一般以以下的形式出现:ns1.domain.com、ns2.domain.com等。
SOA记录
SOA,是起始授权机构记录,说明了在众多 NS 记录里哪一台才是主要的服务器。在任何DNS记录文件中,都是以SOA ( Startof Authority
)记录开始。SOA资源记录表明此DNS名称服务器是该DNS域中数据信息的最佳来源。
SOA记录与NS记录的区别:NS记录表示域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析;SOA记录设置一些数据版本和更新以及过期时间等信息。
AAAA记录
AAAA记录(AAAA
record)是用来将域名解析到IPv6地址的DNS记录。用户可以将一个域名解析到IPv6地址上,也可以将子域名解析到IPv6地址上。国内大多数IDC不支持AAAA记录的解析,因此如果想进行AAAA记录解析,则需对域名NS记录设置一些专业的域名解析服务商,由他们提供AAAA记录的设置。中科三方云解析支持IPv6环境下的AAAA记录解析。
TXT记录
TXT记录,一般指某个主机名或域名的标识和说明。如:admin IN TXT “管理员, 电话:XXXXXXXXXXX”,mail IN TXT
“邮件主机,存放在xxx , 管理人:AAA”,Jim IN TXT “contact:
abc@mailserver.com”,也就是说,通过设置TXT记录内容可以使别人更方便地联系到你。TXT 记录常用的方式还有做 SPF
记录(反垃圾邮件)和SSL证书的DNS验证等。
MX记录
MX(Mail
Exchanger)记录是邮件交换记录,主要用于邮箱解析,在邮件系统发送邮件时根据收信人的地址后缀进行邮件服务器的定位。MX记录允许设置一个优先级,当多个邮件服务器可用时,会根据该值决定投递邮件的服务器。
MX记录的权重对 Mail 服务非常重要,当发送邮件时,Mail 服务器先对域名进行解析,查找 MX记录。先找权重数最小的服务器(比如说是
10),如果能连通,那么就将服务器发送过去;如果无法连通 MX 记录为 10 的服务器,才将邮件发送到权重更高的 mail 服务器上。
PTR记录
PTR是pointer 的简写,即“反向DNS”,domain name
pointer,可以粗略的理解为DNS反向,是一个指针记录,用于将一个IP地址映射到对应的主机名,也可以看成是A记录的反向,即通过IP访问域名。
SRV记录
即服务定位(SRV)资源记录,用于定义提供特定服务的服务器的位置,如主机(hostname),端口(port number)等。
URL转发
URL转发,是指通过服务器的特殊设置,将当前访问的域名指向另一个指定的网络地址。根据目标地址的隐藏与否,URL转发可以分为显性URL和隐性URL两种。
显性URL:将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址,地址栏显示为目标网站地址。
隐性URL:与显性URL类似,但隐性转发会隐藏真实的目标地址,地址栏中显示为仍为此前输入的地址。
接下来我将给各位同学划分一张学习计划表!
学习计划
那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:
阶段一:初级网络安全工程师
接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。
综合薪资区间6k~15k
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?
阶段二:中级or高级网络安全工程师(看自己能力)
综合薪资区间15k~30k
7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。
零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;
Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完
用Python编写漏洞的exp,然后写一个简单的网络爬虫
PHP基本语法学习并书写一个简单的博客系统
熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)
了解Bootstrap的布局或者CSS。
阶段三:顶级网络安全工程师
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
学习资料分享
当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。
![](https://i-blog.csdnimg.cn/blog_migrate/18709c7b6cf3a19076f55516e0601d7e.jpeg)