《网络是怎样连接的》读书笔记,第一章,浏览器生成消息

1. 生成HTTP请求消息

1. 探索之旅从输入网址开始

下面是一些url的各种格式,包含了 http,ftp,file,mailto,news

url的各种格式.png

2. 浏览器先要解析 URL

Web浏览器解析URL的过程.png

3. 省略文件名的情况

咱们在开发过程中,经常会遇到各式各样的url,但是url后的文件名也是各式各样的,让我们来看看不同url后的文件名是怎么解释的?

  1. www.lab.glasscom.com/dir/

我们可以这样理解,以“/”结尾代表 /dir/ 后面本来应该有的文件名被 省略了 , 没有文件名,服务器怎么知道要访问哪个文件呢?其实,我们 会在服务器上事先设置好文件名省略时要访问的默认文件名, 大多数情况下是 index.html 或者 default.htm 之类的 文件名 ,因此 像前面这样省略文件名时,服务器就会访问 /dir/index.html 或者 /dir/default.htm

  1. www.lab.glasscom.com/

“/”目录表示目录层级中最顶层的“根目录” ,一般都会在根目录下设置index.htm, 或者 default.htm,所以它访问的就是/index.htm,或者/default.htm

  1. www.lab.glasscom.com

这次不写 “/” 就有点过分了哈,但是这类写法也是被允许的,当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是/index.htm, 或 /default.htm

  1. www.lab.glasscom.com/whatisthis

这次的例子就更诡异了,让人摸不着头,很多人会理解 这是把末尾的 “/” 也去掉了,但这只是其中的一类情况,正确的是这样理解的。如果服务器上存在 whatisthis 的文件,则将whatisthis作为文件名来处理,如果存在名为 whatisthis 的目录,则将 whatisthis 作为目录来执行。

分解url的路径.png

2. 向DNS 服务器查询 Web 服务器的 IP 地址

1. IP 地址的基本知识

TCP/IP 的结构如图 下图 所示,就是由一些 小的子网,通过路由器 A 连接起来组成一个大的网络。这里的子网可以理解 为用集线器 B 连接起来的几台计算机 C,我们将它看作一个单位,称为子网。 将子网通过路由器连接起来,就形成了一个网络。

  1. 路由器:一种对包进行转发的设备。
  2. 集线器:一种对包进行转发的设备,分为中继式集线器和交换式集线器两种。

IP的基本思路.png

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

首先 TCP/IP 网络是通过 IP 地址来确定通信对象的,因此不知道 IP 地址就 无法将消息发送给对方,这和我们打电话的时候必须要知道对方的电话号 码是一个道理。说到这里会有些疑问,为什么不直接使用IP?为什么不直接使用域名?现在来解释下两个问题。

  1. 为什么不是使用IP?使用IP也能够正常工作,但是要记住一串数字组成的IP地址其实挺困难的,不如域名方便
  2. 为什么不直接使用域名?不过从运行效率上来看,这并不能算是一个好主意。互联网中存在无数的路由器,它们之间相互配合,根据 IP 地址来判断应该把数据传送到什么地方。那么如果我们不用 IP 地址而是改用名称会怎么样呢? IP 地址的长度为 32 比特,也就是 4 字节,相对地,域名最短也要几十个字节,最长甚至可以达到 255 字节。换句话说,使用 IP 地址只需要处理 4 字节的数字,而域名则需要处理几十个到 255 个字节的字符,这增加了路由器的负担,传送数据也会花费更长的时间

于是,现在我们使用的方案是让人来使用名称,让路由器来使用 IP 地址

为了填补两者之间的障碍,需要有一个机制能够通过名称来查询 IP 地 址,或者通过 IP 地址来查询名称 。 这个机制就是 DNS。

  1. 如果 Web 服务器使用了虚拟主机功能,有可能无法通过 IP 地址来访问 。
  2. 域名并不仅是长,而且其长度是不固定的。处理长度不固定的数据比处理长度固定的数据要复杂,这也是造成效率低下的重要原因之一
  3. DNS:Domain Name System,域名服务系统。将服务器名称和 IP 地址进行 关联是 DNS 最常见的用法,但DNS 的功能并不仅限于此,它还可以将邮 件地址和邮件服务器进行关联,以及为各种信息关联相应的名称

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

查询IP地址通常调用操作系统内的Socket库。

Socket 库是用于调用网络功能的程序组件集合

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

通过 DNS 查询 IP 地址的操作称为域名解析,因此 负责执行解析(resolution)这一操作的就叫解析器(resolver)了。 解析器的用法非常简单。Socket 库中的程序都是标准组件,只要从应用 程序中进行调用就可以了。具体看下图

解析器的调用方法.png

根据域名查询 IP 地址时,浏览器会使用 Socket 库中的解析器

5. 解析器的内部原理

让我们来看看解析器的内部原理吧。我们在使用浏览器访问的时候无感知,但是它的程序内部是很复杂的,执行了很多步骤才拿到DNS服务器返回的IP地址,让我们得以浏览对应的服务器。

解析器的内部原理.png

顺带一提,向 DNS 服务器发送消息时,我们当然也需要知道 DNS 服 务器的 IP 地址。只不过这个 IP 地址是作为 TCP/IP 的一个设置项目事先设 置好的,不需要再去查询了。不同的操作系统中 TCP/IP 的设置方法也有差 异,Windows 中的设置如下图所示,解析器会根据这里设置的 DNS 服 务器 IP 地址来发送消息

DNS服务器地址的设置.png

3. 全世界 DNS 服务器的大接力

这一节主要讲的是如何通过DNS找到对应的IP地址。
互联网中有数万台DNS服务器,肯定不能一台一台挨个去找,有一定的规则,首先将负责管理下级域的DNS服务器的IP地址注册到它们的上级DNS服务器中,然后上级DNS服务器的IP地址再注册到更上一级的DNS服务器中,以此类推。这样我们在找IP地址时,就可以通过上级DNS查询出下级DNS服务器的IP地址,以此类推就可以找到对应的IP地址了。详情可见下图:

DNS服务器之间的查询操作.png

4. 委托协议栈发送消息

数据发送也需要使用到操作系统内Socket库中的程序组件。收发过程如下图所示。
简单来说,收发数据的两台计算机之间连接了一条数据通道,数据沿着这条通道流动,最终到达目的地。
建立管道的关键在于管道两端的数据出入口,这些出入口成为套接字。
实际的过程是下面这样的。首先,服务器一方先创建套接字,然后等待客户端向套接字连接管道。当服务器进入等待状态时,客户端就可以连接管道了。接下来,只要将数据送入套接字就可以收发数据了。
综上所述,收发数据的操作分为若干个阶段,可以大致总结为以下4个。

  1. 创建套接字(创建套接字阶段)
  2. 将管道拦截到服务器端的套接字上(连接阶段)
  3. 收发数据(通信阶段)
  4. 断开管道并删除套接字(断开阶段)

数据通过类似管道的结构来流动.png

  1. 知道了 IP 地址之后,就可以委托操作系统内部的协议栈向这个目标 IP 地址,也就是我们要访问的 Web 服务器发送消息了
  2. 收发数据的步骤都是由浏览器委托操作系统中的协议栈来执行的

5. 问题

  1. www.nikkeibp.co.jp/ 中的 http 代表什么意思?
  2. 下面两个网址有什么不同?
  1. 用来识别连接在互联网上的计算机和服务器的地址叫什么?
  2. 根据 Web 服务器的域名来查询 IP 地址时所使用的服务器叫什么?
  3. 向 DNS 服务器发送请求消息的程序叫什么?
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享