《网络是怎样连接的》第一章第二节:向DNS服务器查询Web服务器的IP地址

《网络是怎样连接的》第一章:浏览器生成消息

概述:这本书以 “从在浏览器输入网址,到屏幕显示出网页,当中到底发生了什么?”为疑问,探究其中的过程。本章讲的是浏览器怎么把请求消息委托给网络控制软件发送出去。

在这里插入图片描述

引言:在“第一章第一节:浏览器生成消息”中,我们知道:若想要从目标Web服务器获取网页数据,就得委托操作系统往该服务器发送请求消息,告诉这个服务器“我想要从你这里获取到某个文件的数据”,Web服务器如果接收到这个请求,就会返回响应消息给客户端的浏览器。但是生成HTTP请求消息后,我们却面临着一个问题:操作系统并不知道那个目标Web服务器是哪个IP地址。不知道服务器是哪个IP地址,就不知道向哪里发送请求消息。这就好比我们签收快递,不知道收货地址,快递员怎么可能送货上门呢?所以浏览器必须先查出Web服务器的IP地址,才能委托操作系统发送请求消息。

以百度网址为例,百度首页的网址为https://www.baidu.com/,如果我们在浏览器输入这串网址并回车,就会跳转到百度的首页。但是通过引言我们知道:只有知道百度的Web服务器的IP地址,浏览器才能委托操作系统向百度的服务器发送请求消息。可是我们输入的网址中,只有百度的服务器域名www.baidu.com,并没有IP地址啊,那么浏览器是怎么找到百度的服务器的?那是因为浏览器在生成HTTP请求消息后,在委托操作系统发送消息时,必须提供的不是通信对象的域名,而是它的IP地址,所以我们需要根据百度的域名查询百度的IP地址。

1.IP地址的基础知识

1.1.子网是什么?网络是什么?

“子网”可以理解成用集线器连接起来的几台计算机,可以把这些设备的集合视为一个整体单位。再把若干个子网通过路由器连接起来,就形成了一个网络。而TCP/IP的结构如下图所示,就是由一些小的子网,通过路由器连接起来组成的一个大的网络。

tips:路由器和集线器都是对网络数据包进行转发的物理设备。可以理解为计算机之间进行连接的物理媒介。

在这里插入图片描述

1.2.什么是IP地址?

在这个大的网络中,为了方便辨认,所有的设备都会被分配一个数字虚拟地址。这个地址就相当于某条路上的xx号xx室,“号”是分配给整个子网的,“室”是分配给子网里的计算机的,这就是网络中的地址。“号”对应的好吗称“网络号”,“室”对应的号码称“主机号”,地址的整体称为IP地址,知道呢确定的IP地址,浏览器才能准确寻找到想访问的服务器。(如同人只有知道准确的地址才能到达目的地)

tips:

  • IP地址是不能被一台以上的设备共用的,只能一个地址配一个设备
  • IP地址的表示:是一串32bit的数字(IPV4)(百度的IP地址是201.108.22.5)

2.域名和IP地址共用的理由

2.1.域名和IP地址,用哪个访问服务器更好?

之前我们学过,输入www.baidu.com就能进入百度的首页,输入百度的IP地址也能进入百度的首页。那么两者相比,明显是域名www.baidu.com更容易让人记住(www和com都是固定好的,baidu是百度的拼音),因为IP地址是一长串冗长的数字,且光从这串数字中看不出它和我们想访问的服务器有什么明显关联,比较难记,就算记住了也很容易忘记。并且我们日常生活中要访问的网站很多,难道我们每一个网站的IP地址都要记住?这明显行不通。

例如:给你一串数字202.108.22.103,你可能看不出这是什么,但是给你看www.baidu.com,你很快会反应过来这是百度的网址。

2.2.什么是DNS服务器,什么是DNS机制?

当我们输入www.baidu.com时,系统会查找本机中是否有记录与www.baidu.com相关联的IP地址,如果找到,电脑会去访问这个IP地址,而不是www.baidu.com这个域名。

域名IP地址
百度(www.baidu.com)202.108.22.5
哔哩哔哩(www.bilibili.com)120.131.2.207
知乎(www.zhihu.com)106.117.249.48
腾讯(www.tencent.com)123.151.137.18

假设本机只存储了上表这些域名和IP地址。如果我们想访问淘宝的网站,一般情况下只需在浏览器输入www.taobao.com并回车就好了,电脑会搜索本机是否记录有和www.taobao.com相关联的IP地址。但是上表没有记录淘宝的服务器域名,那岂不是无法访问到淘宝的服务器?这时,我们可以寻求DNS服务器的帮助。

DNS服务器:DNS全称为Domain Name System ,中文名叫“域名服务系统”,而DNS服务器是一种专门用于记录这个世界绝大多数域名和IP地址之间关联的服务器。

当你需要访问某个网站的时候,先让你的电脑去这个DNS服务器上查一下目标网站的域名所对应的IP地址是什么,查到之后再由DNS服务器把这个IP地址传给电脑,于是你的电脑就可以通过这个IP地址去访问你要访问的网站了。

而浏览器向DNS服务器查询IP地址的过程叫“域名解析”。有了DNS服务器,我们大部分情况下想访问某个网站,就只需要记住网站服务器的域名,而不是冗长的IP地址。(至于电脑怎么知道具体要访问哪一台DNS服务器,这里先不讲)。

3.Socket库提供查询IP地址的功能

上文讲到,我们再浏览器输入网站的服务器域名,浏览器在本身找不到与该域名相关联的IP地址下,需要向DNS服务器询问与该域名相关联的IP地址。本小节我们探索一下浏览器是怎么向DNS服务器发出查询的。

我们知道,如果客户端要访问Web服务器,则需要给服务器发送请求消息,服务器收到后返回响应消息。那么我们要向DNS服务器查询IP地址(向DNS服务器发送请求消息),那本机就一定需要有相应的DNS客户端。而相当于DNS客户端的部分称为DNS解析器解析器,专门负责执行域名解析。

解析器并非是物理设备,而是一段程序,包含在操作系统的Socket库中。

3.1.什么是库?什么是Socket库?

  • 库就是一些程序的集合,其他的应用程序都需要调用库中的某个程序去参与工作。
  • Socket库也是一种库,其中的程序都是用C语言编写的。其他的应用程序可以调用Socket库中的程序去使用操作系统的网络功能。而解析器就是Socket库中的其中一个程序。

4.通过解析器向DNS服务器发出查询

下图是解析器的工作流程(只是个大概的流程,具体的流程和图中有所出入)
在这里插入图片描述

5.解析器的内部原理(解析器是怎么工作的?)

浏览器调用Socket库中的解析器——解析器开始运行,生成要发送给DNS服务器的查询消息(生成查询消息的过程和生成HTTP请求消息的过程类似)——把查询消息交给操作系统的协议栈发送出去——DNS服务器收到查询消息,根据消息对内部进行查询——如果找到IP地址,DNS服务器会把它写入响应消息返回给查询消息的发送方——发送查询消息的客户端收到响应,响应消息经过操作系统的协议栈传给解析器——解析器从响应消息中读出IP地址,并写入浏览器指定的内存地址——然后浏览器从内存中读出IP地址

课后思考:用学到的知识(第一小节和第二小节)尽量把“从输入网址到显示网页”的流程给过一遍。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值