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

DNS协议

 
阅读更多

DNS 的来由
  如果您为您的机器设定过 internet 连线﹐那么您一定接触过 DNS 了﹐但 DNS 又是什么东东呢﹖说穿了﹐DNS 是用来帮助记忆网路位址的﹐完全是为了迁就人类的记忆思维而设的。
  DNS 的全称是 Domain Name System(或 Service) ﹐当您连上一个网址﹐在URL打上﹕www.google.com 的时候﹐可以说就是使用了 DNS 的服务了。但如果您知道这个 www.google.com 的 IP 位址﹐直接输入 216.239.53.101 也同样可以到达这个网址。其实﹐电脑使用的只是 IP 位址而已(最终也是 0 和 1 啦)﹐这个 www.google.com 只是让人们容易记忆而设的。因为我们人类﹐对一些比较有意义的文字记忆(如﹕www.google.com)﹐比记忆那些毫无头绪的号码(如﹕216.239.53.101)﹐往往容易得多。DNS 的作用就是为我们在文字和 IP 之间担当了翻译﹐而免除了强记号码的痛苦。
  假如您的电话有名字记忆功能﹐您只需知道对方的名字﹐就可以拨号给友人了﹐我们可以说﹐这电话也具备如 DNS 的功能了呢﹗但是﹐我们在网路中使用的 DNS 系统﹐就是这么简单吗﹖非也﹐复杂得很呢﹗下面﹐就让我们一起去探索一下 DNS 的奥秘﹕
  在早期的 IP 网路世界里面﹐每台电脑都只用 IP 位址来表示﹐不久人们就发现这样很难记忆﹐于是﹐一些 UNIX 的管理者﹐就建立一个 HOSTS 对应表﹐将 IP 和主机名字对应起来﹐这样﹐用户只需输入电脑名字﹐就可以代替 IP 来进行沟通了。如果你安装了 Linux 系统﹐在 /etc 下面就可以找到这个 hosts 档案﹔在 NT 的系统里﹐你也可以在 \winnt\system32\drivers\etc 下面找到它。不过这个 HOSTS 档是要由管理者手工维护的﹐最大的问题是无法适用于大型网路﹐而且更新也是件非常头痛的事情。这就是 DNS 大派用场的时候了。
  DNS 的结构
  DNS 是一个分层级的分散式名称对应系统﹐有点像电脑的目录树结构﹕在最顶端的是一个“root”﹐然后其下分为好几个基本类别名称﹐如﹕com﹑org﹑edu 等﹔再下面是组织名称﹐如﹕ibm﹑microsoft﹑intel 等﹔继而是主机名称﹐如﹕www﹑mail﹑ftp 等。因为当初 internet 是从美国发展起的﹐所以当时并没有国域名称﹐但随着后来 internet 的蓬勃发展﹐DNS 也加进了诸如 tw﹑hk﹑cn 等国域名称。所以一个完整的 dns 名称就好象是这样的﹕www.xyz.com.tw﹐而整个名称对应的就是一个(或多个) IP 位址了。
  在早期的设计下﹐root 下面只有六个组织类别﹕
   TCP/IP基础:DNS协议(图一)
  不过﹐自从组织类别名称开放以后﹐各种各样五花八门的名称也相继涌现出来了﹐但无论如何﹐取名的规则最好尽量适合网站性质。除了原来的类别资料由美国本土的 NIC(Network Information Center) 管理之外﹐其它在国域以下的类别分别由该国的 NIC 管理(比方说台湾的 DNS 将授权给 twnic 来管理)。这样的结构看起来就像这样﹕
   TCP/IP基础:DNS协议(图二)
  在结构中﹐各组织的 DNS 经过申请后由该组织或其委托主机管理(通常当您申请注册一个 domain 域名称的时候﹐都要指定两台 DNS 主机负责该域名的 DNS 管理)。
  DNS 的运作
  在我们设定 IP 网路环境的时候﹐都要告诉每台主机关于 DNS 伺服器的位址(我们可以手动的在每一台主机上面设置﹐也可以使用 DHCP 来指定)。但这设定的义意何在呢?从前面的介绍我们或可知道:其目的就是请 DNS 帮忙解析主机名称与 IP 位址啦。在这个设定过程中,DNS 被称为 resolver (也就是负责解析的 DNS Server),而被设定主机,则只是单纯的 DNS Client 了,也就是提出解析请求的主机。
  下面让我们看看 DNS 是怎样运作的﹕
  1. 当被询问到有关本域名之内的主机名称的时候﹐DNS 伺服器会直接做出回答﹔
  2. 客户端向伺服器提出查询项目﹔
  3. 当被询问到有关本域名之内的主机名称的时候﹐DNS 伺服器会直接做出回答﹔
  4. 如果所查询的主机名称属于其它域名的话﹐会检查快取记忆体(Cache)﹐看看有没有相关资料﹔
  5. 如果没有发现﹐则会转向 root 伺服器查询﹔
  6. 然后 root 伺服器会将该域名之下一层授权(authoritative)伺服器的位址告知(可能会超过一台)﹔
  7. 本地伺服器然后会向其中的一台伺服器查询﹐并将这些伺服器名单存到记忆体中﹐以备将来之需(省却再向 root 查询的步骤)﹔
  8. 远方伺服器回应查询﹔
  9. 若该回应并非最后一层的答案,则继续往下一层查询,直到获的客户端所查询的结果为止﹔
  10. 将查询结果回应给客户端﹐并同时将结果储存一个备份在自己的快取记忆里面﹔
  11. 如果在存放时间尚未过时之前再接到相同的查询﹐则以存放于快取记忆里面的资料来做回应。
  从这个过程我们可以看出﹐没有任何一台 DNS 主机会包含所有域名的 DNS 资料﹐资料都是分散在全部的 DNS 伺服器中﹐而 NIC 只需知道各 DNS 伺服器位址就可以了。
  为了更好地理解一下 DNS 的运作﹐让我们用下图看看查询 www.home.netman.com.tw 这台主机位址的过程﹕
   TCP/IP基础:DNS协议(图三)
  在这个例子中﹐www.home.netman.com.tw 台主机的 DNS 对应资料﹐是由负责 home.netman.com.tw 这个域名的 DNS 伺服器管理的。(在 DNS 术语中﹐我们称一个域名为“zone”﹐这个 zone 可以是您从 NIC 申请回来的域名﹐也可以是从该域名之下延伸出来的“sub-zone”)。在这台 DNS 伺服器上面﹐必须有一个关于 home.netman.com.tw 这个 zone 的档案﹐而这档案里面必须有一笔关于 www 的记录(任何主机都是以“记录”来表示,称为 Resource Record)。这个记录可以为一个 IP 位址﹐也可以以别名形式来对应一台主机名称﹐但无论如何﹐所对应的主机名称最终是要被一个 IP 位址所对应着就是了。
  同时﹐DNS 还能提供“反查询”(reverse lookup) 功能﹐也就是以 IP 来查询主机名称。网路上面的许多服务﹐如﹕FTP, SMTP﹑等等﹐都需要到这个功能。其实﹐DNS 服务本身就必须要使用反查询功能﹐而且在设定上﹐也必须要为每个网路建立起 reverse zone。虽然有些人发觉即使没有 reverse zone 也可以使用到 DNS 服务﹐但其中弊端却不容易被察觉到﹐在这个(中文)网页﹕http://dnsrd.nctu.edu.tw/Basic/WhenToUse-Rev.html 上面﹐您可以看到忽略 revers zone 所致一些问题。
  DNS 的名称记录
  事实上﹐DNS 不仅仅是用来解释位址用的﹐而且还可以回答更多关于网路和主机的其它信息﹐其中很重要的一个功能就是可以供邮件系统进行路由。这些资料﹐通常会以不同的“记录”名称出现在DNS的资料档案中。下面让我们参考一个 Linux 的 DNS 档案﹐看看这些记录是如何表示的﹕
  ;
  ; Zone file for siyongc.domain
  ;
  ; Then full zone file
  ;
  $TTL 86400
  @ IN SOA redhat52.siyongc.domain. netman.siyongc.domain. (
   1999092801 ; serial
   8H ; refresh
   2H ; retry
   1W ; expire
   1D ) ; minimun
  ;
   IN TXT "A test domain, created by Netman"
   IN NS redhat52
   IN NS debian.home
   IN MX 10 redhat52.siyongc.domain.
   IN MX 20 debian.home
  ;
  localhost IN A 127.0.0.1
  ﹔
  gw IN A 192.168.0.17
   IN HINFO "Redhat" "MASQ"
   IN TXT "The masquerade gateway to internet"
  ﹔
  redhat52 IN A 192.168.0.17
   IN MX 10 redhat52
   IN MX 20 debian.home
   IN HINFO "Dell PII 266" "Linux RedHat"
  www IN CNAME redhat52
  mail IN CNAME redhat52
  ftp IN CNAME redhat52
  news IN CNAME redhat52
  smtp IN CNAME redhat52
  ﹔
  pii266 IN A 192.168.0.15
   IN MX 10 redhat52.siyongc.domain.
   IN MX 20 debian.home.
  ﹔
  slware36 IN A 192.168.0.18
   IN MX 10 redhat52.siyongc.domain.
   IN MX 20 debian.home.
  ﹔
  rhroute IN A 192.168.0.4
   IN MX 10 redhat52.siyongc.domain.
   IN MX 20 debian.home.
  ﹔
  home IN ns debian.home.siyongc.domain.
  debian.home IN A 10.0.2.101
  我们姑且不理会开头那几行的意思﹐那是给 DNS 系统本身使用的(我将会在“学习 Linux”文章里面再详细讨论)﹐这里我们只是看看几个记录名称而已﹕
   TCP/IP基础:DNS协议(图四)
  分擔 DNS 工作
  
  由於 DNS 的重要性日益顯著,為提高其容錯能力及查詢效能,我們在架設某一單一 zone 的時侯,常以多台伺服器來負責該 zone 的服務。其中,我們必需指定一台 Primary(master) DNS 伺服器,它是架設在某一個網域下被主要授權並控制所有名稱記錄的主控伺服器﹐管轄著該網域的所有記錄資料﹐這些記錄資料只有 primary(master) 可以修改。
  
  但如果在一個比較大型的網路中﹐DNS 伺服器就會變得很繁忙﹐所以您可以設定多個 DNS 來分擔 master 的工作﹐但您或許不願意到每一個 DNS 伺服器去更新資料吧﹖而且就算您願意這樣做﹐也容易出現錯誤或資料不同步的情形。這樣您可以設定其它的伺服器為 secondary (slave) DNS 來複製 master 上面的記錄資料﹐這樣﹐其它的電腦可以被分派到不同的 DNS 做查詢﹐既可以分擔 master 的工作﹐而且資料也可以自動進行同步工作。為確保資料的一致性,master 每次更新過資料後會以 notify 機制主動通知 slave 前來同步。此外,您可以設定 DNS 資料同步的時間間隔﹐在 dns 檔案中的 Refresh 設定就是了。在檔案中,您還會看到 Serial ﹐當 slave 的上面的 serial

分享到:
评论
4 楼 xl10230 2010-01-29  
不错,辛苦了。
3 楼 sevk 2010-01-28  
我认为看前段就够了吧。
写得很好,辛苦了。
2 楼 diferent 2010-01-27  
呵呵   后一段为啥用繁体.
1 楼 colorfish 2010-01-26  
文章真不错,顶一个

相关推荐

    DNS协议分析实验报告

    **DNS协议分析实验报告** **一、实验目的** 本次DNS协议分析实验的主要目的是熟悉`nslookup`命令的使用,以及深入了解DNS(域名系统)的工作原理。通过解析域名www.hunau.net并分析其对应的IP地址解析请求和应答...

    C#的DNS协议完整实现代码【有默认DNS服务器实现哦~】

    本篇文章将深入探讨如何在C#中实现DNS协议,并涵盖服务器、客户端、协议报文格式以及DNS代理服务器的相关知识。 首先,DNS服务器是DNS系统的核心,它存储了域名到IP地址的映射。在C#中实现一个简单的DNS服务器,...

    实验报告5 DNS协议分析

    实验报告5:DNS协议分析 本实验旨在深入理解DNS(Domain Name System)的工作原理,并通过使用nslookup命令来熟悉DNS查询的过程。实验中,我们分析了三个特定的nslookup命令产生的DNS数据报,以了解域名解析请求和...

    DNS协议分析和HTTP协议分析的实验报告.pdf

    ### DNS协议分析 #### 实验目的 本实验旨在让学生通过实践操作深入了解DNS(Domain Name System)的工作原理及其报文格式。通过使用`nslookup`工具和Wireshark协议分析软件,学习如何解析域名、捕获并分析DNS数据包...

    DNS协议解析源码程序

    在本项目中,“DNS协议解析源码程序”旨在实现DNS查询和响应的解析功能,这涉及到对DNS报文结构的理解以及C#编程语言的应用。 首先,我们来看DNS协议的基本概念。DNS协议基于UDP(User Datagram Protocol)或TCP...

    DNS协议抓包分析

    首先,DNS协议基于UDP(User Datagram Protocol)进行通信,但也有使用TCP的情况。在DNS查询过程中,客户端向DNS服务器发送请求,包含要解析的域名和查询类型(如A记录、AAAA记录、MX记录等)。服务器收到请求后,会...

    dns协议规范.zip

    DNS协议规范主要由两份RFC(Request for Comments)文档定义:RFC1034和RFC1035。这些文档详细描述了DNS的工作原理、数据结构、查询和响应过程以及资源记录的格式。 RFC1034,标题为“域名系统(DNS)的概念和机制...

    dns协议解析包 v1.0源码

    dns协议解析包 v1.0源码 介绍: 一个c#开发的dns协议解析包。可以生成查询请求,接收返回的数据,并解析出结果。 应用场景: 如果只是想根据域名获取ip地址,可以使用.net自带的类“System.Net.Dns.GetHostByName...

    DNS协议分析报告

    ### DNS协议分析报告 #### 实验目的与背景 本次实验旨在深入理解DNS(Domain Name System,域名系统)的工作原理,并通过Wireshark抓包工具捕捉并分析DNS数据包,掌握DNS解析过程中的关键技术和实现机制。 #### ...

    C# Socket 实现DNS协议完整代码

    本篇文章将详细讲解如何使用C#的Socket编程来实现DNS协议,通过源码分析,帮助你深入理解DNS的工作机制。 首先,DNS协议是一种基于UDP的应用层协议,其主要功能是将易于记忆的域名解析为IP地址,以便于网络通信。在...

    dns协议简介ppt

    在这个“dns协议简介ppt”中,我们深入理解DNS的工作原理、历史演变以及其在现代网络中的应用。 首先,DNS协议解决了网络通讯中的一个重要问题:人与机器之间的沟通鸿沟。当我们输入像"www.google.com"这样的域名时...

    dns协议包,协议分析,网络分析

    dns网络协议报文,用来分析dns协议 dns网络协议报文,用来分析dns协议dns网络协议报文,用来分析dns协议dns网络协议报文,用来分析dns协议dns网络协议报文,用来分析dns协议

    DNS 域名服务协议

    在实验环境中,为了加深对DNS协议工作原理和报文格式的理解,通常会进行DNS协议的实验操作。实验过程包括理解DNS实现的原理、了解DNS解析的过程、学习DNS报文格式、掌握nslookup命令和ipconfig命令的使用方法等。...

    dns协议简介

    这篇教程将深入解析DNS协议的基本原理、工作流程以及其在互联网中的重要作用。 首先,我们要理解DNS的主要功能:将人类友好的域名转换为网络可以识别的IP地址。例如,当你在浏览器中输入www.google.com时,DNS系统...

    JAVA编写的DNS协议源码

    当年在很多开源社区找到类似的JAR,都特别的肥大,效率低下,因此就自己根据DNS协议自行编写了一个,编写成JAR包只有38K,非常轻量,运行效率杀掉所有开源社区的产品,代码也附上了,大家有需要研究的可以研究,不想...

    DNS相关知识详解 DNS协议

    了解DNS协议对于网络管理和故障排查至关重要。 **一、DNS协议原理** DNS协议基于UDP(User Datagram Protocol)和TCP(Transmission Control Protocol)两种传输层协议。通常,DNS查询主要通过UDP进行,因为其速度...

    DNS协议格式文档 DNS-primer.pdf

    DNS 协议格式文档 DNS 协议是一种层次化的客户端-服务器协议,每个域名(如 neu.edu、microsoft.com 等)都有一个或多个 DNS 服务器,负责处理该域名下的子域名(如 www.neu.edu、research.microsoft.com 等)的...

    DNS协议浅谈

    ### DNS协议浅谈 #### 一、DNS的工作原理 **DNS**(Domain Name System,域名系统)是互联网中的一项核心服务,它通过将人类易于记忆的域名转化为机器可识别的IP地址,使得用户能够轻松访问互联网上的各种资源。...

    dns协议.rmvb

    总之,这个“DNS协议”视频教程应该涵盖了DNS的基本概念、工作流程、记录类型、安全问题和解决方案等内容。通过学习,你不仅可以了解DNS如何帮助我们访问互联网,还能提高对网络安全的认识。对于网络管理员和IT专业...

Global site tag (gtag.js) - Google Analytics