admin管理员组

文章数量:1535430

2024年2月16日发(作者:)

一、什么是DNS?

DNS的中文意思是:域名服务。域名服务是提供[主机名]到[IP地址]转换的一段计算机程序。

DNS 是域名系统 (Domain Name System) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。在Internet上域名与IP地址之间是一对一(或者一对多)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。 DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。因为,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。 在IPV4中IP是由32位二进制数组成的,将这32位二进制数分成4组每组8个二进制数,将这8个二进制数转化成十进制数,就是我们看到的IP地址,其范围是在0~255之间。因为,8个二进制数转化为十进制数的最大范围就是0~255。现在已开始试运行、将来必将代替IPv4的IPV6中,将以128位二进制数表示一个IP地址。

大家都知道,当我们在上网的时候,通常输入的是如: 这样子的网址,其实这就是一个域名,而我们计算机网络上的计算机彼此之间只能用IP地址才能相互识别。再如,我们去一WEB服务器中请求一WEB页面,我们可以在浏览器中输入网址或者是相应的IP地址,例如我们要上新浪网,我们可以在IE的地址栏中输入: 也可输入这样子 218.30.66.101 的IP地址,但是这样子的IP地址我们记不住或说是很难记住,所以有了域名的说法,这样的域名会让我们容易的记住。

DNS:Domain Name System 域名管理系统 域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,这一命名的方法或这样管理域名的系统叫做域名管理系统。

DNS:Domain Name Server 域名服务器 域名虽然便于人们记忆,但网络中的计算机之间只能互相认识IP地址,它们之间的转换工作称为域名解析(如上面的 与 218.30.66.101 之间的转换),域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。

二、为什么用DNS?

人的大脑记住一组资源的名字比较容易,而记住这组资源的地址很难,但实际上我们又必须使用地址来访问资源,所以必须有一个系统来提供名字到地址的翻译服务。

下面的例子,当您要访问昆明湖、玉兰堂等景观,您首先会想到两个景点都属于 颐和园,而不会想到 颐和园的经纬度,而事实上我们是通过经纬度来访问一组资源的。当您来到一个陌生的城市,向离您最进的片警A问路的时候,片警A就提供了DNS:

1、您问道:“您能告诉我颐和园怎么走么?”。

2、片警A说:“我不知道,但我知道颐和园隶属于四环,负责四环的是片警B,片警B的经纬度是117.2/30.2”。

3、您到了北四环,根据经纬度到片警B问:“您能告诉我颐和园怎么走么?”。

4、片警B说:“我不知道,但我知道颐和园属于海殿区,负责海淀的是片警C,片警C的经纬度是117.3/30.3”。

5、您到了海淀区,根据经纬度找到片警C问:“您能告诉我颐和园怎么走么?”

6、片警C说:“颐和园在经度117.03333、纬度30.51666”

7、知道了颐和园的坐标,您就可以到颐和园参观了。

注意:以上过程,在DNS查询中有个专业术语,叫做迭代查询。也许您还听说过递归查询。

1、就是当您向片警A问路的时候,您希望片警A给您一个确切的回答:“您可以告诉我颐和园怎么走么?我这是递归查询,也就是说,您不要再让我跑腿问别人了,您帮我问。”

2、交警A如果也发出的是递归查询问交警B:“您可以告诉我颐和园怎么走么?我这是递归查询,也就是说,您不要再让我跑腿问别人了,您帮我问。”

3、交警B如果也发出的是递归查询问交警C:“您可以告诉我颐和园怎么走么?我这是递归查询,也就是说,您不要再让我跑腿问别人了,您帮我问。”

4、交警C对交警B说:“颐和园就在经度117.03333、纬度30.51666”

5、交警B对交警A说:“颐和园就在经度117.03333、纬度30.51666”

6、交警A对您说:“颐和园就在经度117.03333、纬度30.51666”

我可以冒充片警C吗?除非您把片警C kill掉,否则即使您穿着片警C的衣服,打扮的和片警C一模一样,也不会有人找您问路。因为片警C始终都在经纬度是117.3/30.3的地方蹲点,问路的人只会根据片警B找经纬度117.3/30.3的片警C。冒充片警B呢?一个道理,问路的人只会根据片警A找到经纬度是117.2/30.2的片警 B。那冒充片警A呢?您要自问一下,片警A的经纬度是谁告诉您的,告诉您的人可信不可信。一般我们通过ADSL拨号上网的家庭用户,电信接入端给我们提供片警A既DNS服务器的经纬度既IP地址都是真实的。

也许您感觉很烦琐,为什么不成立一个问路系统,比如114查号,114问路系统存储了世界上所有名字到经纬度的对应关系。那么您考虑一下,如果114系统由于查询量过大而瘫痪呢?或者中毒而无法提供服务呢?等等这些问题会延误世界人民查询名字到地址的对应关系。您可能会说,那在世界上建立1000个问路系统,比如电话号从1000到1999都提供名字到经纬度翻译服务,这样当一个号码打不通,客户可以打另一个。但您应该想到,这样的系统维护起来太麻烦了,比如您自立门户了,买了处房子,房子的经纬度是122.2/122.3,名字叫‘上海、汤臣、56弄、crysta家’,那世界上所有1000个问路系统都要添加这样的对应关系。同样的问题,如果crystal把房子卖给了seebod,那房子名就叫‘上海、汤臣、56弄、seebod家’,世界上所有1000个问路系统同样要更新。为了解决这个问题,就采用了最初片警的例子,每个片警只负责他自己的一片区域。

具体看一个名字到地址的解析过程(上面的例子仅是为了引发您的思维,而不能与实际的DNS查询过程一一对应,不要生搬硬套)

当您在浏览器中输入(.),我们的电脑是如何得到IP地址的:

1、浏览器发现是一个名字,于是调用我们机器内部的DNS Client软件,这个软件会把我们的请求发送到网卡Tcp/IP设置中的默认DNS服务器IP地址(上海电信提供DNS的服务器有3台,其中一台IP是202.96.209.5):“您可以告诉我.的IP地址吗?我这是一个递归查询”

2、 202.96.209.5的DNS服务器会检查自己的DNS缓存,如果缓存里有,就直接返回给客户,如果没有,202.96.209.5就会向自己系统内部配置中负责.域的DNS服务器的IP地址(负责.域的

那台DNS服务器位于美国,共13台,系统会随机选一台,这里比如是61.1.1.1)发出请求: “您能告诉我.的IP地址吗?我这是一个跌代查询”

3、.域DNS服务器61.1.1.1中包含负责net.域解析的IP地址,把查询结果返回给202.96.209.5:“负责net.域的DNS服务器地址是54.4.4.4”

4、202.96.209.5收到上面的查询结果后,于是询问负责net.域的DNS服务器54.4.4.4 :“您能告诉我负责.的IP地址吗?我这是一个跌代查询。”

5、负责net.域的DNS服务器54.4.4.4把查询后的结果返回给202.96.209.5:“负责.域的dns服务器的ip地址是 211.152.17.58”

6、202.96.209.5收到上面的查询结果够,于是询问负责.域的DNS服务器211.152.17.58:“您能告诉我.所对应的IP地址吗?”

7、211.152.17.58把查询后的结果返回给202.96.209.5:“.对应的IP地址是211.100.26.123”

8、202.96.209.5把最终结果放到自己的DNS缓存里,这样以后就不用再进行上面的跌代查询了。

9、202.96.209.5把最终结果返回给最初发起请求的客户机。

10、客户机的dns client软件把最终结果返回给浏览器。

11、浏览器把目的IP地址连同http数据传递给网络层。

12、网络层根据目标地址判断路由,发现目标IP地址211.152.17.58与本机不在同一个网段(判断是否是同一个网段使用子网掩码与目的IP地址做与运算),于是决定把次包发给网关。

13、检查本地arp缓存表获得本地网关的MAC地址。

三、DNS在哪里?

提供DNS的是计算机,是安装了DNS服务器端软件的计算机。服务器端软件即可以是基于类Unix操作系统,也可以是基于Windows操作系统的。装好DNS服务器软件后,您就可以在您指定的位置创建区域文件了,所谓区域文件就是包含了此域中名字到IP地址解析记录的一个文件(如文件名可能是.这个文件的内容是这样的:

primary name server = (主服务器的主机名是 )

serial = 2007042913 (当前序列号是2007042913。这个序列号的作用是当辅域名服务器来copy时候这个文件时,如果号码增加了就copy)

refresh = 10800 (3 hours) (辅域名服务器每隔3小时查询一个主服务器)

retry = 3600 (1 hour) (当辅域名服务试图在主服务器上查询更时,而连接失败了,辅域名服务器每隔1小时访问主域名服务器)

expire = 604800 (7 days) (辅域名服务器在向主服务更新失败后,7天后删除.中的记录。)

default TTL = 3600 (1 hour) (缓存服务器保存记录的时间是1小时。也就是告诉202.96.209.5保存.域的解析记录为1小时)

Addresses: 211.100.26.124, 211.100.26.121, 211.100.26.122, 211.100.26.123 (对应的ip地址有4个。起到冗于的作用)

MX preference = 10, mail exchanger = (域中两台mail服务器实现冗于.不同的IP/web界面,相同的web数据库)

MX preference = 20, mail exchanger =

nameserver = (两台DNS服务器实现冗于)

nameserver =

)。

四、怎样实现DNS?

无论您是通过linux还是windows搭建dns服务器,原理都是一致的。

您可以把DNS服务器配置成以下3类之一:

1、主DNS服务器。

2、辅DNS服务器。

3、缓存DNS服务器。

1、在例子中,我们提到的211.152.17.58就是主DNS服务器,这台服务器负责.域的名字到IP解析。

2、在例子中,.域还有台辅dns服务器,名字是,ip地址是 211.157.101.174。辅DNS的存在的意思是:当主DNS瘫痪由辅dns提供服务。

3、在例子中,202.96.209.5就是缓存DNS服务器。这样的DNS服务器不负责任何域的最终解析,只缓存解析记录,这样用户下次请求相同的解析记录时直接从缓存中的名字到IP的对应关系返回给用户,而不需要再递归或者跌代查询了。

五、DNS查询

DNS查询可以有两种解释,一种是指客户端查询指定DNS服务器上的资源记录(如A记录),另一种是指查询FQDN名的解析过程。

一、查询DNS服务器上的资源记录

您可以在Windows平台下,使用命令行工具,输入nslookup ,返回的结果包括域名对应的IP地址(A记录)、别名(CNAME记录)等。除了以上方法外,还可以通过一些DNS查询站点如国外的 国内的 查询域名的DNS信息。

二、FQDN名的解析过程查询

若想跟踪一个FQDN名的解析过程,在Linux Shell下输入dig +trace,返回的结果包括从跟域开始的递归或迭代过程,一直到权威域名服务器。

什么是 DHCP

DHCP 是 Dynamic Host Configuration Protocol(动态主机分配协议)缩写,它的前身是 BOOTP。BOOTP

原本是用于无磁盘主机连接的网络上面的:网络主机使用 BOOT ROM 而不是磁盘起动并连接上网络,BOOTP

则可以自动地为那些主机设定 TCP/IP 环境。但 BOOTP 有一个缺点:您在设定前须事先获得客户端的硬件地址,而且,与 IP 的对应是静态的。换而言之,BOOTP 非常缺乏 "动态性" ,若在有限的 IP 资源环境中,BOOTP 的一对一对应会造成非常可观的浪费。

DHCP 可以说是 BOOTP 的增强版本,它分为两个部份:一个是服务器端,而另一个是客户端。所有的

IP 网络设定数据都由 DHCP 服务器集中管理,并负责处理客户端的 DHCP 要求;而客户端则会使用从服务器分配下来的IP环境数据。比较起 BOOTP ,DHCP 透过 "租约" 的概念,有效且动态的分配客户端的

TCP/IP 设定,而且,作为兼容考虑,DHCP 也完全照顾了 BOOTP Client 的需求。

DHCP 的分配形式

首先,必须至少有一台 DHCP 工作在网络上面,它会监听网络的 DHCP 请求,并与客户端搓商 TCP/IP

的设定环境。它提供两种 IP 定位方式:Automatic Allocation

自动分配,其情形是:一旦 DHCP 客户端第一次成功的从 DHCP 服务器端租用到 IP 地址之后,就永远使用这个地址。

Dynamic Allocation动态分配,当 DHCP 第一次从 HDCP 服务器端租用到 IP 地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个 IP 地址,以给其它工作站使用。当然,客户端可以比其它主机更优先的更新(renew)租约,或是租用其它的 IP 地址。

动态分配显然比自动分配更加灵活,尤其是当您的实际 IP 地址不足的时候,例如:您是一家 ISP ,只能提供 200 个IP地址用来给拨接客户,但并不意味着您的客户最多只能有 200 个。因为要知道,您的客户们不可能全部同一时间上网的,除了他们各自的行为习惯的不同,也有可能是电话线路的限制。这样,您就可以将这 200 个地址,轮流的租用给拨接上来的客户使用了。这也是为什么当您查看 IP 地址的时候,会因每次拨接而不同的原因了(除非您申请的是一个固定 IP ,通常的 ISP 都可以满足这样的要求,这或许要另外收费)。当然,ISP 不一定使用 DHCP 来分配地址,但这个概念和使用 IP Pool 的原理是一样的。

DHCP 除了能动态的设定 IP 地址之外,还可以将一些 IP 保留下来给一些特殊用途的机器使用,它可以按照硬件地址来固定的分配 IP 地址,这样可以给您更大的设计空间。同时,DHCP 还可以帮客户端指定 router、netmask、DNS Server、WINS Server、等等项目,您在客户端上面,除了将 DHCP 选项打勾之外,几乎无需做任何的 IP 环境设定。

DHCP 的工作原理

根据客户端是否第一次登录网络,DHCP 的工作形式会有所不同。

第一次登录的时候:

寻找 Server。当 DHCP 客户端第一次登录网络的时候,也就是客户发现本机上没有任何 IP 数据设定,它会向网络发出一个 DHCP DISCOVER 封包。因为客户端还不知道自己属于哪一个网络,所以封包的来源地址会为 0.0.0.0 ,而目的地址则为 255.255.255.255 ,然后再附上 DHCP discover 的信息,向网络进行广播。

在 Windows 的预设情形下,DHCP discover 的等待时间预设为 1 秒,也就是当客户端将第一个 DHCP

discover 封包送出去之后,在 1 秒之内没有得到响应的话,就会进行第二次 DHCP discover 广播。若一直得不到响应的情况下,客户端一共会有四次 DHCP discover 广播(包括第一次在内),除了第一次会等待

1 秒之外,其余三次的等待时间分别是 9、13、16 秒。如果都没有得到 DHCP 服务器的响应,客户端则会显示错误信息,宣告 DHCP discover 的失败。之后,基于使用者的选择,系统会继续在 5 分钟之后再重复一次 DHCP discover 的过程。

提供 IP 租用地址。当 DHCP 服务器监听到客户端发出的 DHCP discover 广播后,它会从那些还没有租出的地址范围内,选择最前面的空置 IP ,连同其它 TCP/IP 设定,响应给客户端一个 DHCP OFFER 封包。由于客户端在开始的时候还没有 IP 地址,所以在其 DHCP discover 封包内会带有其 MAC 地址信息,并且有一个 XID 编号来辨别该封包,DHCP 服务器响应的 DHCP offer 封包则会根据这些资料传递给要求租约的客户。根据服务器端的设定,DHCP offer 封包会包含一个租约期限的信息。接受 IP 租约。如果客户端收到网络上多台 DHCP 服务器的响应,只会挑选其中一个 DHCP offer 而已(通常是最先抵达的那个),并且会向网络发送一个DHCP request广播封包,告诉所有 DHCP 服务器它将指定接受哪一台服务器提供的

IP 地址。同时,客户端还会向网络发送一个 ARP 封包,查询网络上面有没有其它机器使用该 IP 地址;如果发现该 IP 已经被占用,客户端则会送出一个 DHCPDECLINE 封包给 DHCP 服务器,拒绝接受其 DHCP

offer ,并重新发送 DHCP discover 信息。

事实上,并不是所有 DHCP 客户端都会无条件接受 DHCP 服务器的 offer ,尤其这些主机安装有其它 TCP/IP 相关的客户软件。客户端也可以用 DHCP request 向服务器提出 DHCP 选择,而这些选择会以

不同的号码填写在 DHCP Option Field 里面:

换一句话说,在 DHCP 服务器上面的设定,未必是客户端全都接受,客户端可以保留自己的一些

TCP/IP 设定。而主动权永远在客户端这边。

租约确认。当 DHCP 服务器接收到客户端的 DHCP request 之后,会向客户端发出一个 DHCPACK 响应,以确认 IP 租约的正式生效,也就结束了一个完整的 DHCP 工作过程。

DHCP 发放流程

第一次登录之后:

一旦 DHCP 客户端成功地从服务器哪里取得 DHCP 租约之后,除非其租约已经失效并且 IP 地址也重新设定回 0.0.0.0 ,否则就无需再发送 DHCP discover 信息了,而会直接使用已经租用到的 IP 地址向之前之 DHCP 服务器发出 DHCP request 信息,DHCP 服务器会尽量让客户端使用原来的 IP 地址,如果没问题的话,直接响应 DHCPack 来确认则可。如果该地址已经失效或已经被其它机器使用了,服务器则会响应一个 DHCPNACK 封包给客户端,要求其从新执行 DHCP discover。

至于 IP 的租约期限却是非常考究的,并非如我们租房子那样简单, 以 NT 为例子:DHCP 工作站除了在开机的时候发出 DHCP request 请求之外,在租约期限一半的时候也会发出 DHCP request ,如果此时得不到 DHCP 服务器的确认的话,工作站还可以继续使用该 IP ;然后在剩下的租约期限的再一半的时候(即租约的75%),还得不到确认的话,那么工作站就不能拥有这个 IP 了。至于为什么不是到租约期限完全结束才放弃 IP 呢?,对不起,小弟也是不学无术之人,没有去深究了,只知道要回答 MCSE 题目的时候,您一定要记得 NT 是这么工作的就是了。

要是您想退租,可以随时送出 DHCPLEREASE 命令解约,就算您的租约在前一秒钟才获得的。

跨网络的 DHCP 运作

从前面描述的过程中,我们不难发现:DHCDISCOVER 是以广播方式进行的,其情形只能在同一网络之内进行,因为 router 是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢?由于

DHCP 客户端还没有 IP 环境设定,所以也不知道 Router 地址,而且有些 Router 也不会将 DHCP 广播封包传递出去,因此这情形下 DHCP DISCOVER 是永远没办法抵达 DHCP 服务器那端的,当然也不会发生

OFFER 及其它动作了。要解决这个问题,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP

请求,然后将此请求传递给真正的 DHCP 服务器,然后将服务器的回复传给客户。这里,Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。

若不使用 Proxy,您也可以在每一个网络之中安装 DHCP 服务器,但这样的话,一来设备成本会增加,而且,管理上面也比较分散。当然喽,如果在一个十分大型的网络中,这样的均衡式架构还是可取的。端视您的实际情况而定了。

本文标签: 服务器客户端IP地址地址