新站提交
热搜: 目录平台


内容简介

1、**第四部分第六课:DNS和域名,一探究竟(上)**

2、第四部分测试题****


DNS和域名,一探究竟

这一课非常重要,内容丰富。学好了这一课你肯定会提高很多,搞清楚不少概念。

你应该听说过域名这个词吧,但是你真的知道域名是什么意思吗?域名的原理是什么?如何配置域名?

在这一课中,我们会学习域名的机制(比较复杂),再学习如何获取自己的域名:购买域名,安装域名服务器(bind9),配置DNS的各个区域(A记录,CNAME,MX,等等)。

好好加油吧,这一课非常有趣!

对于这一课中的一些关于网络方面的概念不是很清楚的,可以参看小编的另一个已完结的系列教程《Web探索之旅》: http://blog.csdn.net/column/details/webexplore.html


IP地址和域名

Internet(互联网或英特网)是一个由很多电脑组成的网状结构(当然也不止电脑这一种设备,我们此处只关心电脑)。互联网中的电脑要达到互相交流的目的,那就必须要能识别彼此。

假如一台电脑没有标识(就像人没有名字),那么就没法区分互联网中谁是谁了。就会如下图般尴尬(傻傻分不清楚):

为了解决这个问题,信息技术领域的前辈们决定为每一台连上互联网的电脑分配一个标识符,也就是大名鼎鼎的:IP地址!

IP地址

IPv4

首先要说一说什么是IP,IP是英语Internet Protocol的首字母缩写,表示"网际协议"或"英特网协议",是为计算机网络相互连接进行通信而设计的协议。

两台机器在互联网上通信的时候,需要遵循相同的协议。这不难理解,生活中,两家公司要合作,要协商,也需要拟定一份协议,双方都同意,并且签署,遵守。一旦违反协议,交流合作即会结束。比如之前习大大访问英国,和英国签署了一系列商业协议,只有双方都遵循此协议,合作交流才能继续。

同样地,对于我们的互联网(Internet),要在其上相互通信,需要一定的协议。互联网毕竟是人创立的嘛,那肯定引入了人的惯有思维。

或者我们也可以把IP协议比作语言,只有都说英语或都说中文才能相互交流。

至于IP地址,也许你早就见过了。它们一般长这样:

134.198.205.17

如你所见,这种IP地址是由小数点分隔开的4个数字组成。每个数字其实是0~255之间的正整数。有了这种IP地址,每台电脑就可以拥有独一无二的标识符了。

这种由4组0~255的整数组成的IP地址是目前使用比较广泛的,被称为IPv4。v是英语version的首字母,表示"版本",因此IPv4表示:网际协议第四版

数学很好如你应该知道这样一共能有多少个不同的IPv4地址了吧?

0~255一共有256个数,因此:

256 x 256 x 256 x 256 = 4294967296 (差不多43亿)

也可以这么算:256是2的8次方,因此4个256相乘就是2的32次方。

看上去这个数目很大是吧?但是随着连接互联网的电脑和服务器的数目不断增加。IPv4地址的分配最终于2011年2月3日用尽。

因此,IPv4就要被新的系统所取代,那就是:IPv6

IPv6

新的IP地址形式,被称为IPv6,也就是"网际协议第六版"。之后我们的IP地址会越来越多由IPv6表示。IPv6的IP地址形式如下:

1504:02c9:41a4:85d3:0000:0000:a217:bca6

可以看到,IPv6形式的IP地址是由8组16进制数构成的(IPv4是4组十进制的数。当然了,你也可以把十六进制转换成十进制),每组之间由冒号分隔。

十六进制的数是0~F,一共16个数(0~9对应0~9, 10~15对应A~F)。

16是2的4次方,因此,每组有4个十六进制数,是2的16次方。

16 x 8 = 128

因此,8组这样的十六次方数一共可以有 2的128次方 = 3.4 x 10 ^38

3.4 乘以 10 的38次方。

这么多个不同的IP地址供使用,反正根本用不完,甚至地球上每一粒沙子都可以拥有好几个IP地址。

主机名

上面说了,IP地址在标识互联网上的电脑时起着基础的作用。有了IP地址,每台互联网上的电脑就可以找到彼此,并相互通信了(只是因为在人群中多看了你一眼,再也没能忘掉你容颜...)。

但是,对于人类来说,要记住全是数字或字母的IP地址谈何容易(臣妾真真是做不到啊)。

为了解决这个问题,计算机科学家们又想到了一个好主意(真是棒棒哒):

可以为每台电脑分配一个主机名,这个主机名就相当于除IP地址这个基础标识以外的另一个标识。

这个主机名可以是任何形式的文本(当然长度是有限制的),例如:myComputer。

但是,一般来说主机名的形式如下:

www.coderunity.com

每台电脑可以用主机名或IP地址来标识。如下图所示:

当然了,电脑之间实际上还是以IP地址来识别彼此的(毕竟电脑底层只认识数字),主机名就好比一个IP地址的别名。

但是一台电脑如何将主机名"翻译"成IP地址呢?

好问题。

从主机名得到IP地址的过程称为"主机名解析"。

而相反的操作:从IP地址得到主机名的过程称为"IP地址解析"。

但是这个解析的过程可不是像变魔法一样说来就来的。为了将一个主机名(例如 www.coderunity.com)解析为对应的IP地址(例如 58.96.181.197),电脑需要一个包含所有对应关系的"表"。

绑定IP地址和主机名

最初在Internet的前身ARPANET中,其成员SRI International手动维护并分享了一个名为hosts.txt的文件,其中就包括很多主机名和IP地址的对。

那个时候,因为IP地址还比较少,一个hosts文件就差不多够储存一般要使用的主机名和IP地址对了。

不过后来随着IP地址越来越多,下面我们要讲到的DNS系统被开发出来,hosts文件就一般用不上了。但是在现代操作系统中,hosts文件仍然是一个可以作为备用手段的解析机制。

如果你在Windows下,你的hosts文件通常位于

C:Windowssystem32driversetchosts

你可以用记事本打开。

如果你是在Linux或者Mac OS X操作系统下,你的hosts文件通常位于

/etc/hosts

以root身份打开/etc/hosts 文件,可以看到hosts文件的形式如下:

sudo nano /etc/hosts

每一行(除了#开头的注释行及空白行)都有一个IP地址和主机名的对应关系。

因此,我们知道127.0.0.1和localhost是对应的关系。这个127.0.0.1是IPv4格式的。

我们也看到有不少IPv6格式的IP地址,例如fe00::0,其对应了ip6-localnet

fe00::0是简写形式(两个冒号::用于合并连续的几组0),完整的形式是:

fe00:0000:0000:0000:0000:0000:0000:0000

聪明如你应该想到了:hosts文件的不足之处。

是的,其缺陷就是如果要让每台互联网上的电脑都知道所有的主机名和IP地址的对应关系,那么这个hosts文件需要被拷贝到每一台电脑上,并且一旦一台电脑修改了这个hosts文件,那么还需要同步修改其他所有电脑的hosts文件。在今天那么多电脑的时代,绝对是不可能的。

为了解决这个问题,聪明的计算机先辈们又发明了一个有些复杂的智能系统:DNS


DNS服务器

面对互联网上日益增多的电脑(每台电脑还要有一个主机名来标识),光是hosts文件当然不够储存了,因此保罗·莫卡派乔斯(Paul Mockapetris)于1983年发明了域名(解析)系统,也就是著名的DNS(Domain Name System)。

DNS是一个分层的系统,它将网络"分割"成一个一个的域(domain),而每个域可以有子域(subdomain),以此类推。

域名的不同层级

我们就用一个域名(有时主机名也用域名来代称,但其实还是有区别)来做例子吧:

www.coderunity.com

这个域名由3个层级的域组成,我们从右到左来解读:

  1. com : 这是第一层级的域,我们称之为顶级域名,"Top Level Domain",缩写为TLD。
  2. coderunity : 在com这个第一层级域名下面,有很多第二层级的域名,例如:coderunity.com, microsoft.com, apple.com, dell.com 等等
  3. www : 第三层级的域名也很多样,不过一般Web领域多使用www。例如:www.coderunity.com, www.microsoft.com 等等。但也不是必须要用www,例如在Dell的网站上,我们可以找到例如 www1.euro.dell.com 这样的域名。

当然了,域名可以不止三层,也可以有少于三层或多于三层,原理图如下:

就如我们在上图中所见,第一层级的那些域(org,com,fr,等等)都是从最顶部的根域延伸出来的,根域(root domain)用一个点表示。

域名分层系统一共可以有127层域(aa.bb.cc.dd.ee.ff.[...].com)。每一层又称为标签(label),每一个标签最多可以包含63个字符。

完整的域名,被称为"Fully Qualified Domain Name" (FQDN)是由每一层级的域所构成的。在最后还有一个点。例如 www.coderunity.com. 就是一个FQDN,不过现在的DNS系统都会自动为域名加上最后的点,因此我们写域名时就不用加上最后那个点了。FQDN最多可以包含253个字符。

DNS服务器

为了管理这么众多的域名和它们的子域名,人们就发明了一个服务器系统,此系统中的每一个服务器都可以管理一个或多个层级的域。这就是DNS服务器。

为什么要这么多DNS服务器呢?一个中央的DNS服务器不就够了吗?

很抱歉,行不通,因为这样的话中央服务器将被过度频繁地访问。试想一下,世界上所有的计算机光依赖这一台服务器来获知所有的IP地址和域名的对应关系。如果这一台中央DNS服务器发生故障,那么互联网就没法工作了(而且一台服务器都没有如此强大的能力来处理这么多的请求)。

-- 待续在(下)


第五部分第一课预告

今天的课就到这里,一起加油吧!

下一课我们学习:Vim岂是池中物,宝剑锋从磨砺出

微信公众号:ProgrammerLeague

程序员联盟官网和论坛

coderunity.com

bbs.coderunity.com

微信:frogoscar

邮箱:enmingx@gmail.com

QQ:379641629

程序员联盟QQ群:413981577 (加群须写明理由,否则一律不通过

程序员联盟微信群:先加我微信

回复"lt", "论坛", "bbs"都可以获取程序员联盟论坛网址

回复"gw", "网站", "官网"都可以获取程序员联盟网址

一、探索之旅系列:

回复"1", 查看C语言探索之旅(连载中,接近尾声)

回复"2", 查看Linux探索之旅(连载中,接近尾声)

回复"3", 查看Web探索之旅(已完结,测试题待加)

回复"4", 查看C++探索之旅(连载中)

回复"5", 查看TCP/IP探索之旅(连载中)

二、技术专题:

回复"android", 查看相关文章

回复"ios", 查看相关文章

回复"wrj", 查看相关文章

三、程序员小助手:

回复"xzs", 查看相关文章

四、程序员:

回复"cxy", 查看

五、书籍和博客

回复"sj", "图书", 都可以查看

回复"bk", "博客",查看

六、更多关键字:

回复"c", "c语言", "C", "C语言" 都可以查看C语言探索之旅(连载中)

回复"linux", 查看Linux探索之旅(连载中)

回复"web", "网络", "www"都可以查看Web探索之旅(已完结)

回复"c++", "C++", "CPP", "cpp" 都可以查看C++探索之旅(连载中)

回复"tcp", "TCP", "tcp", "ip" 都可以查看C语言探索之旅(连载中)

回复"cat","ls"等Linux命令, 查看对应命令的中文手册(陆续添加中)

回复"英语", 查看如何学好英语

更多关键字等待你去发现,陆续添加中~

点击下方“阅读原文”进入 程序员联盟官网 coderunity.com

标签: dns 域名