目录
DNS
简介
我们平常在访问某个网站时不使用IP地址,而是用一串由罗马字和点号组成 的字符串。而一般用户在使用TCP/IP进行通信时也不使用IP地址。能够这样做 是因为有了DNS (Domain Name System)功能的支持。DNS可以将那串字符串自 动转换为具体的IP地址。
这种DNS不仅适用于IPv4, 还适用于IPv6。
IP地址不便记忆
TCP/IP网络中要求每一个互连的计算机都具有其唯一的IP地址,并基于这 个IP地址进行通信。然而,直接使用IP地址有很多不便之处。例如,在进行应 用操作时,用户必须指定对端的接收地址,此时如果使用IP地址的话应用就会有 很多不便之处。因为IP地址是由一串数据序列组成,并不好记。
为此,TCP/IP世界中从一开始就已经有了一个叫做主机识别码的东西。这种 识别方式是指为每台计算机赋以唯一的主机名,在进行网络通信时可以直接使用 主机名称而无需输入一大长串的IP地址。并且此时,系统必须自动将主机名转换 为具体的IP地址。为了实现这样的功能,主机往往会利用一个叫做hosts的数据 库文件。
在互联网的起源ARPANET中,起初由互联网信息中心(SRI-NIC)整体管 理一份hosts文件。如果新增一台计算机接入到ARPANET网或者已有的某台计算 机要进行IP地址变更,中心的这个hosts文件就得更新,而其他计算机则不得不 定期下载最新的hosts文件才能正常使用网络。
然而,随着网络规模的不断扩大、接人计算机的个数不断增加,使得这种集 中管理主机名和IP地址的登录、变更处理的可行性逐渐降低。
DNS的产生
在上述背景之下,产生了一个可以有效管理主机名和IP地址之间对应关系的 系统,那就是DNS系统。在这个系统中主机的管理机构可以对数据进行变更和设 定。也就是说,它可以维护一个用来表示组织内部主机名和IP地址之间对应关系 的数据库。
在应用中,当用户输人主机名(域名)时,DNS会自动检索那个注册了主机 名和IP地址的数据库,并迅速定位对应的IP地址。而且,如果主机名和IP地 址需要进行变更时,也只需要在组织机构内部进行处理即可,而没必要再向其他 机构进行申请或报告。
有了DNS, 不论网络规模变得多么庞大,都能在一个较小的范围内通过DNS 进行管理。可以说DNS充分地解决了ARPANET初期遇到的问题。就算到现在, 当人们访问任何一个Web站点时,都能够直接输入主机名进行访问,这也要归功于DNS。
域名的构成
在理解DNS规范时,首先需要了解什么是域名。域名是指为了识别主机名称 和组织机构名称的一种具有分层的名称。例如,仓敷艺术科学大学的域名如下:
kusa.ac. jp
域名由几个英文字母(或英文字符序列)用点号连接构成。在上述域名中最 左边的"kusa"表示仓敷艺术科学大学(Kurashiki University of Science and the Arts)固有的域名。而"ac"表示大学(academy)或高等专科以及技术专门学校 等高等教育相关机构。最后边的"jp"则代表日本(japan)。
在使用域名时,可以在每个主机名后面追加上组织机构的域名。例如,有 pepper、piyo、kinoko等主机时,它们完整的带域名的主机名将呈如下形式:
pepper.kusa.ac. jp
piyo.kusa.ac. jp
kinoko.kusa.ac. jp
在启用域名功能之前,单凭主机名还无法完全管理IP地址,因为在不同的组 织机构中不允许有同名的主机。然而,当出现了带有层次结构的域名之后,每一 个组织机构就可以自由地为主机命名了。
DNS的分层如图所示。由于看起来像一颗倒挂的树,人们也把这种分层 结构叫做树形结构。如果说顶点是树的根(Root), 那么底下是这棵树的各层枝 叶。顶点的下一层叫做第1层域名,它包括"jp (日本)”、"uk (英国)”等 代表国家的域名,还包括代表"edu (美国教育机构)”或"com (美国企 业)”等特定领域的域名。这种表示方法也非常类似于一个企业内部的组织结 构图。
在jp的域名下,还可以有众多种类的域名。jp往下第2层 域名中不仅包括"ac"、"co"等表示不同组织机构的属性(组织类型)域名,还 包括"tokyo"等表示地域的通用域名。甚至在使用属性(组织类型)域名或地域 域名的情况下还可以有第3层域名。
很长时间以来域名都以ASCII字符编码,'表示,然而现在也逐渐开始使用日语 等众多国家的文字表示。
域名服务器
域名服务器是指管理域名的主机和相应的软件,它可以管理所在分层的域的 相关信息。其所管理的分层叫做ZONE。
每层都设有一个域名服务器。
根部所设置的DNS叫做根域名服务器。它对DNS的检索数据功能起着至关重 要的作用。
根域名服务器中注册着根以下第1层域名服务器的IP地址。根域名服务器中,注册了那些管理的域名服务器的IP地址。反之,如 果想要新增一个类似jp或org的域名或修改某个已有域名,就得在根域名服务器 中进行追加或变更。
类似地,在根域名服务器的下一层域名服务器中注册了再往下一层域名服务 器的IP地址。根据每个域名服务器所管理的域名,如果下面再没有其他分层,就 可以自由地指定主机名称或子网名称。
不过,如果想修改该分层的域名或重新设 置域名服务器的IP地址,还必须得在其上层的域名服务器中进行追加或修改。
因此,域名和域名服务器需要按照分层进行设置。如果域名服务器者机,那 么针对该域的DNS查询也就无法正常工作。因此,为了提高容灾能力,一般会设 置至少两个以上的域名服务器。一旦第一个域名服务器无法提供查询时,就会自 动转到第二个甚至第三个域名服务器上进行,以此可以按照顺序进行灾备处理。
所有的域名服务器都必须注册根域名服务器的IP地址。因为DNS根据IP地 址进行检索时,需要从根域名服务器开始按顺序进行。
解析器
进行DNS查询的主机和软件叫做DNS解析器。用户所使用的工作站或个人电 脑都属于解析器。
一个解析器至少要注册一个以上域名服务器的IP地址。通常, 它至少包括组织内部的域名服务器的IP地址。
DNS查询
kusa. co. jp域中的计算机想要访问网站www. ietf. org, 此时的DNS查询流程如图 所示。
解析器为了调查IP地址,向域名服务器进行查询处理。
接收这个查询请求的域名服务器首先会在自己的数据库进行查找。如果有该域名所对应的IP地址就返回。如果没有,则域名服务器再向上一层根域名服务器进行查询处理。
因此,从根开始对这棵树按照顺序进行遍历,直到找到指定的域名服务器,并由这个域名服务器返回想要的数据。
解析器和域名服务器将最新了解到的信息暂时保存在缓存里。这样,可以减少每次查询时的性能消耗。
DNS如同互联网中的分布式数据库
前面提到DNS是一种通过主机名检索IP地址的系统。然而,它所管理的信 息不仅仅是这些主机名跟IP地址之间的映射关系。它还要管理众多其他信息。
例如,主机名与IP地址的对应信息叫做A记录。反之,从IP地址检索主机 名称的信息叫做PTR。此外,上层或下层域名服务器IP地址的映射叫做NS记录。
在此特别需要指出的是MX记录。这类记录中注册了邮件地址与邮件接收服 务器的主机名。
ARP
ARP概要
只要确定了IP地址,就可以向这个目标地址发送IP数据报。然而,在底层 数据链路层,进行实际通信时却有必要了解每个IP地址所对应的MAC地址。
ARP是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。
如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。不过ARP只适用于IPV4,不能用于IPv6,IPv6中可以用ICMPv6替代ARP发送邻居探索消息
ARP的工作机制
那么ARP又是如何知道MAC地址的呢?简单地说,ARP是借助ARP请求与 ARP响应两种类型的包确定MAC地址的。
假定主机A向同一链路上的主机B发送IP包,主机A的IP 地址为172. 20. 1. 1, 主机B的IP地址为172. 20.1. 2, 它们互不知道对方的MAC 地址。
主机A为了获得主机B的MAC地址,起初要通过广播发送一个ARP请求包。
这个包中包含了想要了解其MAC地址的主机IP地址。也就是说,ARP请求包中 已经包含了主机B的IP地址172. 20. 1. 2。由于广播的包可以被同一个链路上所有 的主机或路由器接收,因此ARP的请求包也就会被这同一个链路上所有的主机和 路由器进行解析。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么 这个节点就将自己的MAC地址塞人ARP响应包返回给主机A。
总之,从一个IP地址发送ARP请求包以了解其MAC地址,目标地址将自 己的MAC地址填人其中的ARP响应包返回到IP地址。由此,可以通过ARP从 IP地址获得MAC地址,实现链路内的IP通信。
根据ARP可以动态地进行地址解析,因此,在TCP/IP的网络构造和网络通 信中无需事先知道MAC地址究竟是什么,只要有IP地址即可。
如果每发送一个IP数据报都要进行一次ARP请求以此确定MAC地址,那将会造成不必要的网络流量,因此,通常的做法是把获取到的MAC地址缓存一段 时间。即把第一次通过ARP获取到的MAC地址作为IP对MAC的映射关系记忆 到一个ARP缓存表中,下一次再向这个IP地址发送数据报时不需再重新发送 ARP请求,而是直接使用这个缓存表当中的MAC地址进行数据报的发送。每执 行一次ARP, 其对应的缓存内容都会被清除。不过在清除之前都可以不需要执行 ARP就可以获取想要的MAC地址。这样,在一定程度上也防止了ARP包在网络 上被大量广播的可能性。
一般来说,发送过一次IP数据报的主机,继续发送多次IP数据报的可能性 会比较高。因此,这种缓存能够有效地减少ARP包的发送。反之,接收ARP请 求的那个主机又可以从这个ARP请求包获取发送端主机的IP地址及其MAC地 址。这时它也可以将这些MAC地址的信息缓存起来,从而根据MAC地址发送 ARP响应包给发送端主机。类似地,接收到IP数据报的主机又往往会继续返回 IP数据报给发送端主机,以作为响应。因此,在接收主机端缓存MAC地址也是 一种提高效率的方法。
不过,MAC地址的缓存是有一定期限的。超过这个期限,缓存的内容将被清 除。这使得MAC地址与IP地址对应关系即使发生了变化,也依然能够将数据包 正确地发送给目标地址。
IP地址和MAC地址为什么缺一不可
可能会提出这样的疑问:“数据链路上只要知道接收端的MAC地址 不就知道数据是准备发送给主机B的吗,那还需要知道它的IP地址吗?”
乍听起来确实让人觉得好像是在做多余的事。此外,可能会质疑: “只要知道了IP地址,即使不做ARP, 只要在数据链路上做一个广播不就能发给 主机B了吗?“那么,为什么既需要IP地址又需要MAC地址呢?
如果考虑一下发送给其他数据链路中某一个主机时的情况,这件事就不 难理解了。主机A想要发送IP数据报给主机B时必须得经过路由 器C。即使知道了主机B的MAC地址,由于路由器C会隔断两个网络,还是无法 实现直接从主机A发送数据报给主机B。此时,主机A必须得先将数据报发送给 路由器C的MAC地址Cl。
此外,假定MAC地址就用广播地址,那么路由器D也将会收到该广播消息。
于是路由器D又将该消息转发给路由器C, 导致数据包被重复发送两次。
在以太网上发送IP包时,“下次要经由哪个路由器发送数据报”这一信息非 常重要。而这里的“下一个路由器”就是相应的MAC地址。
如此看来,IP地址和MAC地址两者缺一不可。于是就有将这两个地址相关 联的ARP协议。
最后,我们再试想一下,不使用IP地址,而是通过MAC地址连接世界上所 有网络中所有的主机和节点的情况。仅仅凭一个MAC地址,人们是无法知道这台 机器所处的位置的。而且如果全世界的设备都使用MAC地址相连,那么网桥在 习得之前就得向全世界发送包。可想而知那将会造成多大的网络流量。而且由于 没有任何集约机制,网桥就不得不维护一张巨大的表格来维护所学到的所有MAC 地址。一旦这些信息超过网桥所能承受的极限,那将会导致网桥无法正常工作, 也就无法实现通信了。
RARP
RARP (Reverse Address Resolution Protocol)是将ARP反过来,从MAC地址 定位IP地址的一种协议。例如将打印机服务器等小型嵌入式设备接人到网络时就 经常会用得到。
平常我们可以通过个人电脑设置IP地址,也可以通过DHCP自动分配获取 IP地址。然而,对于使用嵌入式设备时,会遇到没有任何输入接口或无法通过 DHCP动态获取IP地址的情况。
在类似情况下,就可以使用RARP。为此,需要架设一台RARP服务器,从 而在这个服务器上注册设备的MAC地址及其IP地址。然后再将这个设备接人到 网络,插电启动设备时,该设备会发送一条“我的MAC地址是***,请告诉我, 我的IP地址应该是什么"的请求信息。RARP服务器接到这个消息后返回类似于"MAC地址为***的设备,IP地址为***"的信息给这个设备。而设备就根据从 RARP服务器所收到的应答信息设置自己的IP地址。
代理ARP
通常ARP包会被路由器隔离,但是采用代理ARP (Proxy ARP)的路由器可 以将ARP请求转发给邻近的网段。由此,两个以上网段的节点之间可以像在同一 个网段中一样进行通信。
在目前的TCP/IP网络当中,一般情况下用路由器连接多个网络时,会在每 个网段上定义各自的子网,从而进行路由控制。然而,对于那些不支持设定子网 掩码的老设备来说,不使用代理ARP, 有时就无法更好地使用网络。