计算机网络---通过DNS服务器查询Web服务器的IP地址

通过前面的学习我们已经知道,URL会被解析然后生成HTTP消息。接下来就是要将HTTP消息发送给Web服务器。
由于实际通信中使用的是ip地址而不是域名,所以一定要有一个能够将域名转换为IP地址的角色,这个角色就是DNS服务器

加入DNS这个角色的好处

就像让你记电话号码一样,如果让你记忆一个主机的IP地址(很长很无规律那种)会很反人类,电话号码还好,没那么长,但是说实在的,现代人事情那么多如果不是重要的号码如父母配偶老板的号码,谁会记忆其他人的号码呢,那么难记。所以让人类记忆一个主机的域名就很人性化,比方说百度就是“www.baidu.com”。只要会简单的汉语拼音就可以了。

但是如果是单纯的用域名去通信呢?

域名最都是字符组成,短也要几十个字节,最长甚至可以达到255字节。而IP地址是一串32位比特的数据,也就是4字节,这对路由器的负担很小,也就是说使用IP地址去通信对机器是十分友好的。
又要减轻人类记忆的负担,又要减轻机器处理的负担,那就只能再引入一个第三方咯,让他记住IP地址和域名的映射关系。我们需要从其一去推断另一个时只需要像它询问就行。

IP地址工作的基本思路

TCP/IP的结构:一个范围内的一个个主机由集线器连接成子网,一个个子网又会由路由器联结在一起。边缘的路由器又会由中间的集线器联结。
子网就像一个房子,子网内的主机们就是房子里面的一个个房间。
所谓的IP地址就是要描述出:XX网络的XX主机,也即XX房子的XX房间,比如说如家酒店1033号。这样就标识了一个服务器在互联网中的位置。

关于通过IP地址去寻址到目标主机的过程已经在前面的视频里讲解过了,不再赘叙。
在这里插入图片描述

IP地址是一串32位的二进制数据,按8比特为一组分成4组,分别用十进制表示然后再用圆点隔开。
这一串数据怎么去同时表示网络号和主机号?
这就要引入子网掩码了:
子网掩码的作用就是去指示一串IP地址哪一部分是网络号,哪一部分是主机号。
例如

十进制表示:IP/掩码
10.1.2.3/255.255.255.0

二进制表示:
00001010.00000001.00000010.00000011/11111111.11111111.11111111.00000000

把子网掩码对应着IP地址写下来:
00001010.00000001.00000010.00000011
11111111.11111111.11111111.00000000

这种写法太长了,可以把子网掩码1重复的次数用十进制表示写在IP的后面,即:
10.1.2.3/24        #24代表1重复了24次,剩下的32-24=8位为0
---------网络号-----------.--主机--

其中子网掩码前面24位都为1,后8位都为0
为1的部分指示IP地址相应的那一部分为网络号,为0的部分指示IP地址相应的那一部分为主机号

顺带一提,主机号部分的比特全部为0或者全部为1时代表两种特殊的含义。
主机号部分全部为0代表整个子网而不是子网中的某台设备。
主机号部分全部为1代表向子网上所有设备发送包,即广播

向DNS服务器查询IP地址

向DNS服务器查询IP地址,需要调用Socket库,它是用于调用网络功能的程序的组件集合
你可以将这个库看作操作系统的网络通信部分的“代理人”
我们前面所说的将HTTP消息发送过去就是委托了操作系统去办这件“寄信”的事务。

有关DNS服务器地址

我们主机上会预装DNS客户端,DNS服务器则在远方,要和指定的服务器通信必须设定好它的地址
win11上支持查询DNS
在这里插入图片描述

使用DNS解析器获取IP

通过Socket库,可以很方便的去访问DNS服务器并获取目标域名对应的IP,使用DNS解析器

<内存地址> = gethostbyname("www.baidu.com");

这就调用了解析器完成了向DNS服务器查询IP地址的操作
这段代码应该是内嵌在浏览器程序中的,当浏览器要发送HTTP请求就必须先进行DNS查询IP。

解析器工作流程

下图是工作流程的概览(上面已经指定了访问哪个DNS服务器的前提下)
在这里插入图片描述
该过程之后DNS服务器返回了相应的IP地址到应用程序指定的内存地址上
此后应用程序就可以用该IP去访问真正要请求数据的服务器了

DNS服务器的基本工作

DNS客户端会向DNS服务器发送如下三种信息:

  • 域名
  • Class 不常用 默认为IN
  • 记录类型 表示域名对应的类型,A代表请求的是IP,MX代表请求的是邮件服务器

相应的服务器上会存储包含这三类信息,当DNS客户端请求消息到来时服务器就在自己维护的“表”中查询对应的记录

在这里插入图片描述

域名的层次结构

互联网中存在着不计其数的服务器,将这些服务器的信息全部保存在一台DNS服务器中是不可能的,因此一定会出现在DNS服务器中找不到要查询的信息的情况。
所以要将信息分布保存在多台DNS服务器中,这些DNS服务器相互接力配合,从而查找出要查询的信息
DNS服务器中的所有信息都是按照域名以分层次的结构来保存的。层次结构这个词听起来可能有点不容易懂,其实就类似于公司中的事业集团、部门、科室这样的结构。层次结构能够帮助我们更好地管理大量的信息。

互联网中有数万台DNS服务器,肯定不能一台一台挨个去找。我们可以采用下面的办法。首先,将负责管理下级域的DNS服务器的IP地址注册到它们的上级DNS服务器中,然后上级DNS服务器的IP地址再注册到更上一级的DNS服务器中,以此类推。也就是说,负责管理lab.glasscom.com这个域的DNS服务器的IP地址需要注册到glasscom.com域的DNS服务器中,而glasscom.com域的DNS服务器的IP地址又需要注册到com域的DNS服务器中。这样,我们就可以通过上级DNS服务器查询出下级DNS服务器的IP地址,也就可以向下级DNS服务器发送查询请求了。

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值