1.上期问题答案
"www"只是Web服务器上的一种命名,并不是一种协议。在互联网发展初期,"www" 成为网站地址的标准前缀,但实际上并不是所有网站都需要使用 "www" 这个子域名。
2.本章主题
上一篇我们讲了如何生成HTTP请求,那么我们要怎么发送给Web服务器呢?相信看完这一章,你便会有答案了。
3.IP地址的基础知识
在网络中,所有的设备都会生成一个IP地址,IP地址就像我们现实生活中的家一样,xx城市xx小区xx号xx室。而想要把请求发送给Web服务器,那么我们要做的就是找到与服务器域名对应的IP地址。找到了IP地址那么操作系统便可以把请求发送给Web服务器了。
现在让我们看看IP地址到底长什么样
IP地址是一串32比特的数字,每8比特为一组,一共分成四组。用十进制按 " . " 来分隔。IP地址由网络号和主机号组成。例如下面的就是一个IP地址主体
11.12.13.14
但是我们要怎么分清楚哪段是网络号,哪段是主机号呢。所以我们需要附加信息,子网掩码就可以胜任这一工作。它是以32比特数字组成组成,左边全为1,右边全为0。跟IP地址一样由8比特为一组。而为1的部分就是IP地址的网络号,而相反的,为0的部分就是IP地址的主机号。例如下面这个例子
有时我们还会看到一种写法如下
10.11.12.13/24
这个的意思是有24比特的1,子网掩码总共32比特。所以这就相当于子网掩码是255.255.255.0,所以10.11.12是网络号,13是主机号。
在主机号完全是0或者完全是1的时候代表着两种特殊的含义。主机号全部为0代表整个子网,而不是子网中的某个设备。主机号全部为1代表向子网上所有设备发送包,也就是广播。
4域名与IP
4.1为什么域名和IP都要存在
在TCP/IP网络中是通过IP来确定通信的,那么我们自然而然就有一个问题,为什么还需要域名呢,直接在网址上写IP地址不就可以了吗,然而IP地址是一串数字组成的,想记住很多的数字非常的困难。而域名往往都可以和它网站本身的名字对应起来,大家只要想到某个代表性的东西,就可以自然而然地拼写出来。
那么就有一个问题,为什么不可以让TCP/IP网络通过域名来通信,而把IP地址舍弃掉呢?在实现的可能性上,这种做法是可以实现的,但是这又有了一个新的问题,那就是运行效率很低。IP地址的长度是4个字节,而如果改用域名的话最大需要255字节,这会使得网络负担加重,传送数据也会花费更多得时间。
那么我们要怎么把输入得域名转为IP地址呢,有这么一个机制,它可以帮助我们把域名转为IP地址,那就是DNS。
4.2DNS服务器获得IP地址
DNS查询IP地址的操作称为域名解析,想要获得IP地址,我们电脑上有这么一个解析器,在我们输入一个域名"www.zcccsss.com",解析器会发送给DNS服务器,如果DNS服务器中有这个域名和它对应的IP地址,那么它会返回给解析器它所对应的IP地址"10.11.12.13"。
5.DNS大家族
5.1DNS服务器的基本工作
这一章我们就来详细地了解一下DNS服务器的工作。DNS服务器所受到的消息包含域名,Class,和记录类型。Class早期是为了如果还有别的网络类型,那么我们可以用Class来识别网络信息,但是现在除了互联网没有别的网络了,因此Class就一直是代表互联网的IN。那么都这么久了为什么Class字段还保留着呢,早期有着另外两种Class类型,"CH"和"HS",为了兼容这些内容,Class一直保留着。记录类型表示域名对应何种记录类型的记录。当类型为A,表示域名对应IP地址,而MX则代表是邮件服务器。
域名 | Class | 记录类型 | 响应数据 |
www.zcccsss.com | IN | A | 10.11.12.13 |
zcccsss.com | IN | MX | 10 mail.zcccssscom.com |
mail.zcccssscom.com | IN | A | 11.12.13.14 |
当我们查询www.zcccsss.com这个域名时,客户端会发送以下信息
域名=www.zcccsss.com
Class=IN
记录类型=A
然后DNS服务器会通过这些消息去匹配已有的记录,DNS服务器会返回"10.11.12.13"给客户端。如果是查询邮件服务器的话,域名是@后面的部分[email protected]
域名=zcccsss.com
Class=MX
记录类型=A
在本例中域名会返回10和"mail.zcccssscom.com"。10表示的是服务器的优先级,数值越小表示服务器越优先。然后会把返回得到的"mail.zcccssscom.com"再去DNS服务器中查找,最终得到IP地址"11.12.13.14".
5.2为什么是大家族
我们上面讲解中,假设所有要查询的信息都已经在DNS服务器中,但是世界上任何一个连上网络的设备都会有一个IP地址,上哪去中一个这么大的服务器呢,全世界也不会只有一个DNS服务器,不然的话我们想访问一个网站,访问速度就会很慢,DNS服务器的负载也会很大。
所以信息会被分布保存在多台DNS服务器中,DNS中的域名会以句号分割来保存,"www.zcccsss.com",在域名中越右边的位置层级越高,因此com是最高层,zcccsss紧随其后,www是最下面一层。但是我们需要注意一点,其实在com层上面还有一个根域,以" . "来代表,因此一个网站应该是"www.zcccsss.com."但是最后这个点一般不写,但是也不可以忽略它的存在。除此之外,根域的IP地址还被保存在了所有DNS服务器中,这样一来客户端就可以通过任意一台DNS服务器找到根DNS服务器然后顺藤摸瓜找到域名所对应的IP地址
以www.study.zcccsss.com为例,注意一个DNS服务器可能不止有一个域的信息,可能com和zcccsss.com的IP地址在同一个服务器中,但是为了方便理解,我们假设一个DNS服务器对应一个域
5.3DNS接力
首先客户端会把域名发送给最近的DNS服务器,如果DNS服务器中有对应的IP地址则返回,否则就会去访问根名称的服务器,如果根服务器也没有的话,根服务器就会返回“我这里也没有你这个域名,但是我看你有com域,我有com域的IP地址,你去它那里找找”。
最近的那个DNS服务器得到了com域的IP地址就会去它那里找,如果也没有包含,那么就会返回“我这里也没有这个域名,但是我有zcccsss的IP地址,你去它那里找吧”,以此类推,最后找到www层。终于在众机器的努力下,这个域名所对应的IP地址终于被找到了。
6.思考题
在DNS服务器中有一个缓存功能,可以记住之前查找过的域名,因此在查找域名的时候,可以不必去根域开始查找,例如zcccsss的域名已经存储在这个DNS服务器中,那我们就可以直接通过这个域名去找zcccsss的域名了。那么如果我们输入了错误的域名的话,DNS又会怎么工作了,大家可以想一下这个问题,把答案留在评论区。
往期内容