`
changhongbao
  • 浏览: 123908 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

DNS域名解析过程

 
阅读更多

前言

本文来自《深入分析Java Web技术内幕》一书,因为本人对DNS不是特别熟悉,这本书关于DNS的部分也已经讲得比较详细了,所以就直接把书里面的内容拿来用了。老规矩,不复制、不黏贴,全部内容手打,边打边学习、理解。

 

DNS域名解析

我们知道互联网都是通过URL来发布和请求资源的,而URL中的域名需要解析成IP地址才能与远程主机建立连接,如何将域名解析成IP地址就属于DNS解析的工作范畴。

可以毫不夸张地说,虽然我们平时上网感受不到DNS解析的存在,但是一旦DNS解析出错,可能会导致非常严重的互联网灾难。目前世界上的整个互联网有几个DNS根域名服务器,任何一台根服务器坏掉,后果都非常严重。

 

DNS域名解析过程

当我们在浏览器中输入www.abc.com时,DNS解析将会有将近10个步骤,这个过程大体大体由一张图可以表示:

整个过程大体描述如下,其中前两个步骤是在本机完成的,后8个步骤涉及到真正的域名解析服务器:

1、浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过TTL属性来设置。这个缓存时间太长和太短都不太好,如果时间太长,一旦域名被解析到的IP有变化,会导致被客户端缓存的域名无法解析到变化后的IP地址,以致该域名不能正常解析,这段时间内有一部分用户无法访问网站。如果设置时间太短,会导致用户每次访问网站都要重新解析一次域名。

2、如果用户浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。其实操作系统也有一个域名解析的过程,在Windows中可以通过C:\Windows\System32\drivers\etc\hosts文件来设置,在Linux中可以通过/etc/hosts文件来设置,用户可以将任何域名解析到任何能够访问的IP地址。例如,我们在测试时可以将一个域名解析到一台测试服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是因为有这种本地DNS解析的规程,所以有黑客就可能通过修改用户的域名来把特定的域名解析到他指定的IP地址上,导致这些域名被劫持。

3、前两个过程无法解析时,就要用到我们网络配置中的"DNS服务器地址"了。操作系统会把这个域名发送给这个LDNS,也就是本地区的域名服务器。这个DNS通常都提供给用户本地互联网接入的一个DNS解析服务,例如用户是在学校接入互联网,那么用户的DNS服务器肯定在学校;如果用户是在小区接入互联网,那么用户的DNS就是再提供接入互联网的应用提供商,即电信或联通,也就是通常说的SPA,那么这个DNS通常也会在用户所在城市的某个角落,不会很远。Windows环境下通过命令行输入ipconfig,Linux环境下通过cat /etc/resolv.conf就可以查询配置的DNS服务器了。这个专门的域名解析服务器性能都会很好,它们一般都会缓存域名解析结果,当然缓存时间是受到域名的失效时间控制的。大约80%的域名解析到这里就结束了,所以LDNS主要承担了域名的解析工作。

4、如果LDNS仍然没有命中,就直接到Root Server域名服务器请求解析

5、根域名服务器返回给本地域名服务器一个所查询的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右

6、本地域名服务器LDNS再向上一步返回的gTLD服务器发送请求

7、接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是用户注册的域名服务器,例如用户在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成

8、Name Server域名服务器会查询存储的域名和IP的映射关系表,在正常情况下都根据域名得到目标IP地址,连同一个TTL值返回给DNS Server域名服务器

9、返回该域名对应的IP和TTL值,LDNS会缓存这个域名和IP的对应关系,缓存时间由TTL值控制

10、把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束

在实际的DNS解析过程中,可能还不止这10步,如Name Server可能有很多级,或者有一个GTM来负载均衡控制,这都有可能会影响域名解析过程。

 

清除缓存的域名

我们知道DNS域名解析后会缓存解析结果,其中主要在两个地方缓存:

1、Local DNS Server

2、用户的本地机器

这两个缓存都是TTL值和本机缓存大小控制的,但是最大缓存时间是TTL值,基本上Local DNS Server的缓存时间就是TTL控制的,很难人工介入,但是我们的本机缓存可以通过如下方式清除:

1、Windows环境下可以再命令行执行ipconfig /flushdns命令来刷新缓存,如图

2、Linux环境下可以通过/etc/init.d/nscd restart来清除缓存,因为我家里电脑装的虚拟机比较卡,就不截图了

重启依然是解决很多问题的第一选择。

在Java应用中JVM也会缓存DNS的解析结果,这个缓存是在InetAddress类中完成的,而且这个缓存时间还比较特殊,它有两种缓存策略:

1、正确解析结果缓存

2、失败解析结果缓存

这两个缓存时间有两个配置项控制,配置项在%JAVA_HOME%\lib\security\java.security文件中配置的,这两个配置项分别是networkaddress.cache.ttl和networkaddress.cache.negative.ttl,它们的默认值分别是-1(永不失效)和10(缓存10秒),直接修改这两个值就可以了,也可以通过在Java启动参数中增加-Dsun.net.inetaddr.ttl=xxx来修改默认值,也可以通过InetAddress类动态修改。

 

几种域名解析方式

域名解析记录主要分为A记录、MX记录、CNAME记录、NS记录和TXT记录:

1、A记录

A代表Address,用来指定域名对应的IP地址,如将item.taobao.com指定到115.238.23.xxx,将switch.taobao.com指定到121.14.24.xxx。A记录可以将多个域名解析到一个IP地址,但是不能将一个域名解析到多个IP地址

2、MX记录

Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的Mail Server,如taobao.com域名的A记录IP地址是115.238.25.xxx,如果将MX记录设置为115.238.25.xxx,即xxx@taobao.com的邮件路由,DNS会将邮件发送到115.238.25.xxx所在的服务器,而正常通过Web请求的话仍然解析到A记录的IP地址

3、CNAME记录

Canonical Name,即别名解析。所谓别名解析就是可以为一个域名设置一个或者多个别名,如将aaa.com解析到bbb.net、将ccc.com也解析到bbb.net,其中bbb.net分别是aaa.com和ccc.com的别名

4、NS记录

为某个域名指定DNS解析服务器,也就是这个域名由指定的IP地址的DNS服务器取解析

5、TXT记录

为某个主机名或域名设置说明,如可以为ddd.net设置TXT记录为"这是XXX的博客"这样的说明

 

================================================================================== 

我不能保证写的每个地方都是对的,但是至少能保证不复制、不黏贴,保证每一句话、每一行代码都经过了认真的推敲、仔细的斟酌。每一篇文章的背后,希望都能看到自己对于技术、对于生活的态度。

我相信乔布斯说的,只有那些疯狂到认为自己可以改变世界的人才能真正地改变世界。面对压力,我可以挑灯夜战、不眠不休;面对困难,我愿意迎难而上、永不退缩。

其实我想说的是,我只是一个程序员,这就是我现在纯粹人生的全部。

==================================================================================
分享到:
评论

相关推荐

    Linux图解DNS域名解析全过程

    本篇文章将深入探讨Linux环境下DNS解析的详细步骤,通过图文并茂的方式,以“美河学习在线eimhe.com_DNS域名解析过程.gif”作为辅助,帮助读者轻松理解这一复杂但基础的网络概念。 DNS是互联网上的一个关键服务,它...

    使用Java实现DNS域名解析的简单示例

    以下是一个使用Java进行DNS域名解析的简单示例: ```java import java.net.*; public class DNSResolutionExample { public static void main(String[] args) throws Exception { // 基本的域名解析 ...

    分布式-多活数据中心如何实现DNS域名解析和负载均衡.docx

    如前所述,当用户尝试访问某个网站时,其设备会通过一系列步骤完成DNS域名解析过程,具体包括: 1. **客户端发出DNS请求**:用户通过浏览器等客户端软件访问网站时,会首先向本地DNS服务器发送域名解析请求。 2. **...

    DNS域名解析操作说明

    ### DNS域名解析操作说明 #### 一、DNS域名解析简介 DNS(Domain Name System)即域名系统,是一种将域名转换为IP地址的服务机制。在互联网上,数据传输是以IP地址进行定位的,但由于数字组成的IP地址难以记忆,...

    简易DNS域名解析

    1、简易DNS域名解析程序,当其他电脑的DNS服务器IP设定为执行了该程序的机器的IP时,能够正常访问intnet 2、简单域名限制,对某个域名范围内的查询拒绝解析 生成一个out.txt文件,包含了所有访问了禁用域名的ip地址...

    关于ESP8266 DNS域名解析异常问题及其解决办法.pdf

    在本文中,我们讨论的是ESP8266在DNS域名解析过程中遇到的问题及其解决方案,这个问题可能导致设备无法正常连接到云端服务器。 首先,我们要理解DNS(Domain Name System)的作用,它是互联网上的一个分布式数据库...

    DNS正反向域名解析实例

    DNS正向域名解析是将域名转换为IP地址的过程。例如,用户输入www.ops.org时,DNS系统将其解析为IP地址10.0.0.40,以便用户访问对应的网站。这个过程涉及到多个步骤: 1. 安装DNS工具:使用yum安装bind和bind-utils...

    DNS 域名服务协议

    通过实验操作,学习者可以更直观地了解DNS域名解析的过程,以及DNS在互联网中的重要作用。 在DNS的工作流程中,当客户端需要解析域名时,首先会向本地DNS服务器发送查询请求。本地DNS服务器首先查询本地缓存,如果...

    Dns域名解析程序

    DNS域名解析程序是互联网通信中的关键组件,它负责将用户友好的主机名(例如www.example.com)转换为网络可以理解的IP地址(如192.168.1.1)。这一过程被称为DNS解析,它是互联网服务访问的基础。在这个过程中,DNS...

    C++如何实现DNS域名解析

    1. **DNS域名解析过程**: - 域名解析通常由本地DNS缓存或操作系统中的DNS客户端服务处理。当一个程序需要将域名转换为IP地址时,会向DNS服务器发送查询请求。 - 查询通常通过UDP协议进行,因为它是轻量级且快速的...

    DNS域名解析代碼

    这段代码展示了如何实现一个简单的DNS域名解析器。代码基于Windows环境编写,并使用了Winsock库来处理网络通信。 ### 2. 文件结构与包含头文件 - **头文件**: - `#include<iostream>`:用于标准输入输出。 - `#...

    DNS域名解析服务器+过滤功能

    在这个特定的项目中,"DNS域名解析服务器+过滤功能"表明该服务器不仅仅提供基础的解析服务,还额外增加了对请求的过滤,能够拦截不允许访问的网站。这种功能对于网络管理员而言非常有用,可以用于防止员工访问不合适...

    05Linux网络服务DNS域名解析服务v10.pptx

    DNS域名解析服务是指将域名转换为IP地址的过程。DNS系统的作用包括正向解析和反向解析。正向解析是根据主机名称(域名)查找对应的IP地址,而反向解析是根据IP地址查找对应的主机域名。 BIND是伯克利Internet域名...

    跟踪域名解析过程

    ### 跟踪域名解析过程 #### 概述 随着互联网技术的发展,域名解析成为连接用户与互联网资源的重要环节。为了更好地理解域名是如何被解析的,掌握一定的域名解析跟踪技能显得尤为重要。通常,Linux下的`dig`命令因...

    DNS域名解析,delphi xe8,windows、android、ios亲测可用

    首先,理解DNS域名解析的基本流程是必要的。当我们在浏览器中输入一个URL时,操作系统会启动DNS客户端(通常为DNS解析器),向本地配置的DNS服务器发送查询请求。这个请求包含要解析的域名。DNS服务器接收到请求后,...

    c# DNS域名解析

    C#是一种广泛使用的面向对象的编程语言,它提供了丰富的库和功能,使得开发者能够实现DNS域名解析。在本篇中,我们将深入探讨如何使用C#进行DNS查询,以及解析过程中的关键步骤。 首先,让我们了解DNS的基本工作...

    DNS_DNS.rar_dns _dns 解析_dns服务器_dns解析_域名解析

    在我们的压缩包文件中,"DNS_DNS.rar_dns _dns 解析_dns服务器_dns解析_域名解析" 提供了一些关于DNS解析的资源,包括"www.pudn.com.txt" 和 "DNS域名解析"。 1. **DNS解析流程**: - **查询发起**:当用户输入一...

    C# DNS域名解析小工具

    总的来说,这个"C# DNS域名解析小工具"是利用C#强大的网络功能,结合DNS协议,实现了一个实用的小程序。对于网络管理员、开发者或是对网络基础有兴趣的用户来说,这样的工具都有其实际价值。它不仅简化了手动查询的...

    c# 域名解析 dns

    本文将深入探讨C#进行域名解析的原理、方法以及如何实现自定义的DNS解析器。 首先,我们需要理解DNS的工作机制。DNS是一种分布式数据库系统,它将人类可读的域名转换为网络设备可以识别的IP地址。这个过程通常由DNS...

Global site tag (gtag.js) - Google Analytics