dns域名查询的两种方式(dns异常处理方法)

一、IP协议

1.1 背景

网络层一般有两种服务:

一种是面向连接的虚电路服务,能够保证可靠通信,建立虚电路连接,然后通过这个连接发送分组,完了后释放虚电路。另一种是无连接的数据包服务,走什么路经都随便,但是为了到达目的地必须携带目的主机的地址,虽然如此,发送的分组还是可能误码、丢失、重复或者乱序。

因为第二种做法不用提供可靠传输服务,网络中的路由器就比较价格低,而且易于维护,因特网采用的就是这种服务,它采用的就是IP协议。

这种服务的好处是节省成本,那么复杂的网络处理功能都交给了更上一层的运输层,他们的位置在各个主机,是处于整个互联网的边缘,那么中间的因特网核心就只用完成简单的分组交换功能。IP协议之上,要保证传输可靠,就有了TCP协议。

1.2 IP协议

IP协议(Internet Protocol)直译网际协议。对上是传输层,对下是数据链路层。IP协议就是给因特网上的每一个主机/路由器的接口分配全世界范围内唯一的标识符,就是地址。

这里需要区别MAC地址和IP地地址。关于MAC地址,也就是媒体介入控制地址,他也是唯一的,但是他是针对于设备-设备,而异构网络很复杂,IP协议是解决网络和网络之间的通信,加上小的网络内部划分可能就没必要更多的协议来通信,就更加方便。

目前IP协议的地址有IPv4和IPv6两个版本,在2011年,IPv4地址已经分配完毕了。IPv4的地址编址方法经历了三个阶段,分类编址、划分子网、无分类编址。

1.2.1 分类编址

分了ABCDE,只有ABC给网络中的各设备接口用,D和E是保留不往外分配的。基本是都是前几位网络号、后面分配,然后就有很多的不同IP地址的组合可以用。

A:8位网络号+24主机号,网络号首位固定为0B:16位网络号+16位主机号,网络号前两位固定10C:24位网络号+8位主机号,网络号前两位笃定110

A类指派范围:1.0.0.0到126.0.0.0
B类指派范围:128.0.0.0到191.255.0.0
C类指派范围:192.0.0.0到223.255.255.0

1.2.2 划分子网

引入子网掩码,可以表明分类的IP地址有哪几个作为了子网号,这样本来后面全都是IP的号,就可以继续利用子网掩码再进行细分。子网掩码用连续的1来对应网络号和子网号,0对应主机号,然后子网掩码和IP地址相与操作就可以得到这个IPv4的地址所在的子网的网络地址。

1.2.3 无分类编址

C类空间太小,没有得到充分利用,后来又提出了无分类编址(当然也提出了IPv6)来解决问题。无分类编址采用:

网络地址 + ” / ” + 网络前缀数量

的格式,比如”128.14.35.7 / 20“
就代表,这个IP地址,前面20位都是网络号,剩下12位是主机号,这样的话就能把整个IP地址分的更多,而不是分各种类别,各个块里限制的比较死。

二、IP数据报首部格式

2.1 IP数据报首部字段

dns域名查询的两种方式(dns异常处理方法)

和其他协议的报文首部格式一样,IP协议的功能也在这里体现。

版本:表示Ip协议的版本,通信双方必须一致;首部长度:表示这个数据报首部的长度,显然范围就是5-15(以8字节为单位,化成比特*8)区分服务:一半不用;总长度:IP数据报整体长度(最大2^16-1);标识、标志、片偏移这三个就是用来将IP数据报分片用的,因为向下层的时候可能太长,下层的传输帧受到MTU最大传输单元限制,就是会把IP数据报分片,那么就会查看这三个字段,表示分片的情况;标识:同一个IP数据报各分片的标识一样;标志:标志允不允许分片、后面还有没有分片;片偏移:分片数据报的数据载荷部分偏移了在原数据报位置有多少单位(8字节为单位,必须整数)生存时间:TTL,以前表示多少秒、现在表示多少”跳“;协议:常用值对应一个数字,比如ICMP对应1;首部检验和:检验差错的;源IP地址目的IP地址;可选字段:很少使用;填充:因为要是8的整数倍,不够就填。

2.2 ICMP协议

网际控制报文协议(Internet Control Message Protocol)

这个协议是为了更有效地转发IP数据报,提高交付成功的机会。主机或者路由器使用ICMP协议发送差错报文和询问报文,ICMP报文被封装在IP数据报里发送。

差错报文分为五种:1.终点不可达;2.源点抑制;3.时间超过;4.参数问题;5.改变路由。(都是目的主机或路由器反馈给源主机或路由器的)

询问报文有两种:1.回送请求和回答;2.时间戳请求和回答。(都是源主机或者路由器向目的主机或路由器的)

2.3 ICMP协议应用

分组网间探测(Packet InterNet Groper)也就是,常说的PING命令。这个命令没有经过运输层的TCP或者UDP,直接使用了网际层的ICMP,来发送请求和回答报文。用来测试主机或者路由器的连通性。

跟踪路由TraceRoute命令,比如windows的tracert命令。这个命令也是应用层直接使用了网际层的ICMP协议(Unix系统并是使用了UDP协议),发送请求和回答报文以及差错报告报文,用来测试IP数据报从源主机到目的主机要经过哪些路由器。

2.4 其他

关于IP数据报的转发,主要是设计到路由器的一些路由选择协议、ARP(Address Resolution Protocol)地址解析协议,根据IP获取MAC地址的过程。其中直接交付、间接交付的区别就是有没有经过路由器转发,路由器可以隔离冲突域、广播域等等。

三、NAT网络地址转换

NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。NAT 可以让那些使用私有地址的内部网络连接到Internet或其它IP网络上。NAT路由器在将内部网络的数据包发送到公用网络时,在IP包的报头把私有地址转换成合法的IP地址。

ipv4本来都要用光了,但是有了NAT,让ipv4又挺了20年。

3.1 原理

RFC1918规定了三个保留地址段落:10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255。这三个范围分别处于A,B,C类的地址段,不向特定的用户分配。

这些地址可以在任何组织或企业内部使用,和其他Internet地址的区别就是,仅能在内部使用,不能作为全球路由地址。对于一个封闭的组织,如果其网络不连接到Internet,就可以使用这些地址,而不用申请

对于有Internet访问需求、内部又使用私有地址的网络,就要在组织的出口位置部署NAT网关,在报文离开私网进入Internet时,将源IP替换为公网地址,通常是出口设备的接口地址。依据这种模型,NAT网关夹在中间做一个转换,数量庞大的内网主机就不再需要公有IP地址了。

一般使用私网ip作为局域网内部的主机标识,使用公网ip作为互联网上通信的标识,在整个NAT的转换中,最关键的流程有以下几点:

网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关网络访问只能先由私网侧发起,公网无法主动访问私网主机;NAT网关在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换;NAT网关的存在对通信双方是保持透明的;NAT网关为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来。

3.2 静态NAT

如果一个内部主机唯一占用一个公网IP,这种方式被称为一对一模型。此种方式下,转换上层协议就是不必要的,因为一个公网IP就能唯一对应一个内部主机。

显然,这种方式对节约公网IP没有太大意义,主要是为了实现一些特殊的组网需求。比如用户希望隐藏内部主机的真实IP,或者实现两个IP地址重叠网络的通信。

3.3 动态NAT

它能够将未注册的IP地址映射到注册IP地址池中的一个地址。

不像使用静态NAT那样,你无需静态地配置路由器,使其将每个内部地址映射到一个外部地址,但必须有足够的公有因特网IP地址,让连接到因特网的主机都能够同时发送和接收分组

3.4 NAT重载

这是最常用的NAT类型。NAT重载也是动态NAT,它利用源端口将多个私网ip地址映射到一个公网ip地址,它也被称为网络地址端口转换NAPT(Network Address Port Translation)(Port-Level NAT)(多对一)。

通过使用PAT(NAT重载),只需使用一个公网ip地址,就可将数千名用户连接到因特网。其核心之处就在于利用端口号实现公网和私网的转换。
面对私网内部数量庞大的主机,如果NAT只进行IP地址的简单替换,就会产生一个问题:当有多个内部主机去访问同一个服务器时,从返回的信息不足以区分响应应该转发到哪个内部主机。
此时,需要NAT设备根据传输层信息或其他上层协议去区分不同的会话,并且可能要对上层协议的标识进行转换,比如TCP或UDP端口号。

这样NAT网关就可以将不同的内部连接访问映射到同一公网IP的不同传输层端口,通过这种方式实现公网IP的复用和解复用。

这种方式也被称为端口转换PAT、NAPT或IP伪装,但更多时候直接被称为NAT,因为它是最典型的一种应用模式。

也就是说,我们利用端口号的唯一性实现了公网ip转换为私网ip的这一步。PAT(NAT重载)能够使用传输层端口号来标识主机,因此,从理论上说,最多可让大约65000台主机共用一个公有IP地址。

3.5 NAT优缺点

优点

最大优点就是节省大量的IP资源

缺点

NAT最大的弊端,破坏了IP端到端通信的能力,因此无法进行端到端的ip跟踪。

同时,NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但有些应用层的协议比如FTP载荷中带有地址或者端口信息,这些内容不能被NAT进行有效的转换,就可能导致问题。

四、DNS

4.1 介绍

DNS(Domain Name System)域名系统

我们知道计算机之间的通信,其实都是基于IP地址的,可是我们访问的时候往往使用的网址髌骨是ip地址,这是因为IP地址太难记了啊!

那么输入网址如何访问IP,其实就是DNS服务器在帮助我们做地址解析。

因特网采用的是层次结构命名树作为域名,各层分量用点隔开,总共组成一个域名。格式如下:

xxx . 三级域名 . 二级域名 . 顶级域名

各级的域名是由上一级管理机构管理,顶级域名则由一个机构:因特网名称与数字地址分配机构ICANN管理。

国家顶级域名例如 cn 中国,us 美国,通用顶级域名例如com公司企业、net网络服务机构、org非营利性组织;二级域名例如edu教育机构,行政区划分域名;再往下都是自由发挥,因特网没有做规定。

4.2 域名服务器解析域名的过程

用来解析域名的域名服务器也可以划分为四种类型:

根域名服务器;顶级域名服务器;权限域名服务器;本地域名服务器。

本来每次访问一个域名,都需要依次查询,但是为了效率,利用了缓存来解决这个问题, 浏览器、操作系统、本地DNS、根域名服务器,它们都会对DNS结果做一定程度的缓存。所以实际上的过程并不是直接那些服务器工作的。

比如:如果我现在要访问 www.baidu.com ,那么过程是这样的:

浏览器从浏览器的DNS缓存中检查是否有这个网址的映射关系,如果有,就返回IP,完成域名解析,没有则转向2;操作系统会先检查自己本地的hosts文件是否有这个网址的映射关系,如果有,就返回IP,完成域名解析,没有则转向3;电脑就要向本地DNS服务器发起请求查询www.baidu.com这个域名,如果缓存中有的话直接返回,没有则转向4;本地DNS服务器,拿出一个根DNS服务器的地址,然后向其中一台发起请求;根DNS服务器拿到请求,查出一个IP,也就是com对应的服务器的IP,返回给本地DNS服务器;本地DNS服务器根据返回的IP向其发起请求;com的服务器拿到请求,查出一个IP,也就是baidu.com对应的服务器的IP,返回给本地DNS服务器;本地DNS服务器根据返回的IP向其发起请求;baidu.com的服务器拿到请求,查出www.baidu.com的IP地址,返回给本地DNS服务器;本地DNS服务器给客户端,并进行缓存,客户端就可以直接访问了。

其中,显然1、2、3,都是缓存直接优先查找,交给下一级操作,找到了就直接返回,主机到本地域名服务器的查询过程,采用的是递归查询
4 5,6 7,8 9是三个来回过程,本地向不同级别的其他服务器查找的过程,都是本地服务器发出的请求,是迭代查询

Windows的命令:
ipconfig/displaydns -查看被缓存的域名解析
ipconfig/flushdns -清空DNS缓存

问题:根服务器在哪里?

按照百度百科的说法是原有的13台加上为ipv6新建的25台,在世界各地选址的。

4.3 DNS 劫持

显然,域名和IP的对应过程是一个DNS解析过程,那么解析的服务器本人是可能被绑架的。

攻击者劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致用户对该域名地址进行访问的时候,由原来的IP地址转入到修改后的IP地址。结果就是让正确的网址不能解析或者是被解析到另一个网址的IP,实现获取用户资料或者破坏原有网址正常服务的目的。

4.4 DNS 污染

又称域名服务器缓存投毒,是指一些刻意制造或无意中制造出来的域名服务器数据包,把域名指往不正确的IP地址。它和DNS劫持的不同之处,在于污染针对的是DNS缓存,是在查询信息到达目标DNS服务器前,经过的节点上做手脚,也就是说,这个假的数据包并不是在网络数据包经过的路由器上,而是在其旁路产生的,因为是UDP协议,最快返回的会被认为是答案,那么最后会先返回一个错误答案。

需要说明的是,传统来理解,这个查询过程需要快速,并且可能要访问很多个服务器去查询,所以是采用UDP协议进行传输的,比TCP快。
但也不一定,比如报文长度和DNS污染各种各样的攻击出现,UDP的不可靠因素太大,所以加上了TLS版本(像https一样),所以其实是基于TCP协议了。

原创文章,作者:admin,如若转载,请注明出处:https://www.qq65hfghe5.com/tg/4750.html