
作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。
座右铭:低头赶路,敬事如仪
个人主页:网络豆的主页
目录
在Internet中使用IP地址来确定计算机的地址,这种以数字表示的IP地址不容易记忆,为了便于对网络地址的管理和分配,人们采用了域名系统,引入了域名的概念。本章主要介绍DNS的基本概念,DNS域名解析的原理,在理解的基础上安装配置DNS服务器。
在早期的TCP/IP网络中,名称解析通常由一台计算机负责,它维护了一份主机名称与IP地址对应的清单(Hosts文件),当网络中主机间通信时,源主机会通过查询Hosts文件,将目的主机的主机名解析成P地址,以便进行通信,这种方法虽然简单,但是随着主机数目的增多,会产生以下问题。

为了解决以上问题,早期的网络应用人员计划将巨大的信息量按层次结构规划成许多较小的部分,将每部分存储在不同的计算机上,形成层次性,分布式的特点。
这样,一方面实现了信息的统一:另一方面信息数据的分布面变广,不会形成瓶颈,有利于提高访问效率,于是DNS(Domain Name System.域名系统)应运而生。

DNS最初的设计目标是“用具有层次名称空间.分布式管理、扩展的数据类型,无限制的数据库容量和具有可以接收性能的,轻型、快捷,分布的数据库取代笨重的集中管理的Hosts文件系统”。
DNS是一组协议和服务,它允许用户在查找网络资源时使用层次化的对用户友好的名称取代IP地址,简单地讲,DNS协议的基本功能是在主机名与对应的P地址之间建立映射管理。例如,新浪网站的IP地址是202.106.184.200.几乎所有的浏览该网站的用户都使用www.sina.com.cn.而并非使用IP地址来访问。

与直接使用IP地址相比,使用主机名(域名)访问具有以下优点
当需要给某人打电话时,你可能知道这个人的名字,而不知道他的电话号码。这时可以通过查看电话号码簿查他的电话号码,从而与他进行通话。由此可以看出,电话号码簿的功能便是建立姓名与电话号码之间的映射关系.而DNS的功能与电话号码簿很类似。

组成DNS系统的核心是DNS服务器,它是提供域名查询服务的计算机.用来维护DNS名称数据并处理DNS客户端主机名的查询。DNS服务器保存了包含主机名和相应P地址的数据库。

DNS是一种看起来与磁盘文件系统的目录结构类似的命名方案,域名通过使用句点"."分隔每个分支来标识一个域在逻辑DNS层次中相对于其父域的位置。
但是当定位一个文件位置时是从根目录到子目录再到文件名.如C:\WiNDOWS\explorer.exe;
而当定位一个主机名时.是从主机名到父域再到根域,如news.sine.com.cn

在DNS中,域名包括根域,顶级域.二级域和主机名。

三级域名下面还可以有四级城名、五级域名等。但是域名层级用得越多,域名越复杂,所以实际使用中一般不会超过五级。
根(Root)域就是“.”(点号),它由hternet名称注册授权机构管理,该机构把域名空间各部分的管理责任分配给了连接到lnternet的各个组织。
DNS根域的下一级是顶级域,由lnternet名称授权机构管理,有两种常见类型。
组织域采用三个字符的代号,标识DNS域中所包含的组织主要功能或活动,如表2-1所示。

国家或地区顶级域采用两个字符的国家或地区代号,如表2-2所示。

二级域是注册到个人.组织或公司的名称。

主机名处于城名空间结构中的最底层,主机名和前面讲的城名(DNS扩展名)
用户在访问网络上面的Web.FTP.Mail等服务时.通常使用FODN进行访问.如www.google.com.
但是FODN并不能真正定位目标服务器的物理地址,而是需要DNS服务器将FODN解析成P地址。FODN是指一个系统的完整名称而非其主机名称。
DNS的区域(Zone),是指域名空间树型结构的一部分,它能够将域名空间根据用户需要划分为较小的区域,而非域(Domain),以便于管理,一个区域内的主机数据(包括主机名和对应的IP地址)必须存放在DNS服务器内。而用来存放这些数据的文件称为区域文件,一台DNS服务器内可以存放多个区域文件,同一个区域文件也可以存放到多合DNS服务器中。
为了将网络管理的工作分散开来,可以将一个DNS域划分为多个区域。

一个区域所包含的范围在一个域名称空间中是连续的,否则无法构成一个区域,如图2.2所示的区域中,不能创建包含prodoct,abc.com和address.abc.com两个子城的区域,因为这两个子域位
于不连续的名称空间。
DNS 服务器是整个DNS的核心,DNS服务器严格地讲应该是DNS名称服务器它保存着域名称空间中部分区域的数据。当一个DNS服务器中存放域名称空间内的一个或多个区域的数据时,就将这合DNS服务器称为授权名称服务器(Authoritative Name Server),授权名称服务器负责维护和管理所辖区域中的数据,为DNS客户端提供数据查询,根据工作方式的不同,授权名称服务器可分为主要名称服务器,辅助名称服务器,主控名称服务器和Cache-Only名称服务器。

主要名称服务器是用于存放该区域中相关设置的DNS服务器,当在一合DNS服务器上建立一个
区域文件时,有关该新建区域内的主机数据都直接存放到该DNS服务器中。主要名称服务器存放的是区域文件的正本数据。
当主域名服务器出现故障、关闭或负载过重时,辅助域名服务器作为主域名服务器的备份提供域名解析服务。辅助域名服务器中的区域文件中的数据是从另外的一台主域名服务器中复制过来的,是不可以修改的。
在一个区域中设置辅助名称服务器具有以下优点
主控名称服务器(Master Narme Server)是指提供区域数据复制的DNS.服务器,它既可以是该区
城内的主要名称服务器,也可以是该区域内的辅助名称服务器。
例如:当一合辅助名称服务器从一台主要名称服务器中复制数据时,将提供数据复制服务器的这台主要名称服务器称为辅助名称服务器的主控名称服务器。
Cache-Only名称服务器只负责查询数据,并将曾经查询到的数据保存在高速缓存中,当下一次
DNS客户端查询数据时,如果高速缓存内存在该数据。则它可以快速地将数据提供给客户端。
Cache-Only名称服务器不负责管辖域名称空间内的任何DNS服务器,不创建任何区域、它只帮
助DNS客户端向其他的DNS服务器进行查询,再将查询到的数据存储一份到高速缓存中,响应DNS客户端的查询请求。
Cache-Only名称服务器不但可以分担网络的工作量,而且可以让DNS客户端直接快速地进行查询。
下面通过查询www.banet.com的例子来学习DNS的查询过程。具体步骤如图2.3所示.

如果DNS客户机的首选DNS服务器没有返回给客户机wwww.benet.com的IP地址,那么客户机将尝试访问自己的备用DNS服务器。
为了提高解析效率,减少查询开销,每个DNS服务器都有一个高速缓存,存放最近解析过的域名和对应的P地址.这样,当有用户查找相同的域名记录时,便可以跳过某些查找过程,由DNS服务器直接从缓存中查找到该记录的地址,从而大大缩短了查找时间,加快了查询速度。

当DNS客户端向DNS服务器查询IP地址,或DNS服务器向另一台DNS服务器查询IP地址时,DNS的查询过程分为两种类型:递归查询和迭代查询。
当DNS客户端按照它的DNS服务器列表向DNS 服务器发出查询请求时,接收查询请求的DNS服务器和客户端之间的查询关系一般都是递归查询,该DNS服务器会查询自己的区城文件、缓存。如果没有找到结果,就向别的DNS服务器查询,递归查询时客户端得到的结果只能是成功或失效。接收查询的DNS服务器必须告诉客户端请求查询的P地址或告诉客户端找不到请求的地址和找不到的原因(查询超时或通到错误)DNS客户端和它的首选DNS服务器之间就是递归查询。

不是所有的查询都是递归查询,在使用转发器时出现的是递归查询,否则将进行选代查询。
迭代查询又称为简单查询,是指DNS服务器根据自己的高速缓存或区域的数据,以最佳结果作
答,如果DNS服务器无法解析,它可能返回一个指针,指针指向可能有目标域名记录的DNS服务器。继续该过程,直到找到拥有记录的DNS服务器,或直到查询出错或超时为止,在图2.3中,步骤 2一步骤 5 就属于迭代查询。

因为递归查询比较占用系统资源,有安全方面的隐患,所以可以设置DNS服务器不接收递归查询。这时该服务器将向转发器中的DNS服务器发送递归查询请求。如果没有设置转发器,该服务器将向根提示中的根服务器发送选代查询的请求。(转发器和根提示将在2.3节中讲解)
DNS服务器的域名查询根据查询内容可以分为两种形式:正向查询和反向查询。
反向查询要求对每个域名进行详细搜索,这需要花费很长时间,为了解决该问题,DNS标准定义了一个名为“in-addr.arpa”的特殊域(反向域),“in-addr.arpa”域遵循域名空间的层次命名方案它是基于IP地址的,而不是基于域名的,其中P地址8位组的顺序是反向的。例如,客户机要查找172.168.10.1的FQDN.就查询反向域10,168.172.in-addr.arpa中的PTR指针记录。
创作不易,求关注,点赞,收藏,谢谢~
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除
我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/
前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal