《网络是怎样连接的》读书笔记1-探索浏览器内部
目录
第一章 浏览器生成消息(探索浏览器内部)
一、生成HTTP请求消息
1. 浏览器要做的第一步工作就是对URL进行解析。
URL:Uniform Resource Locator,统一资源定位符。
URI:Uniform Resource Identifier,统一资源标识符。
CGI 程序:对 Web 服务器程序调用其他程序的规则所做的定义就是 CGI,而按照 CGI 规范来工作的程序就称为 CGI 程序。
2. HTTP的主要方法
注:PUT、DELETE 等方法现在常用于 RESTful API 的设计中,在手机 App 和后端服务器交互时就会经常用到。
3. 请求消息和响应消息格式
4. HTTP主要头字段
5. HTTP 响应状态码概要
状态码的第一位数字表示状态类型,第二、三位数字表示具体的情况。
1xx 告知请求的处理进度和情况
2xx 成功
3xx 表示需要进一步操作
4xx 客户端错误
5xx 服务器错误
6. 1条请求消息中只能写1个URI。如果需要获取多个文件,必须对每个文件单独发送1条请求。
二、向DNS服务器查询Web服务器的IP地址
1. DNS:Domain Name System,域名服务系统。将服务器名称和 IP 地址进行关联是 DNS 最常见的用法,但 DNS 的功能并不仅限于此,还可以将邮件地址和邮件服务器进行关联,以及为各种信息关联相应的名称。
2. 浏览器能够解析网址并生成 HTTP 消息,但它本身并不具备将消息发送到网络中的功能,因此这一功能需要委托操作系统来实现。
3. IP地址是一串32 比特的数字,按照 8 比特(1 字节)为一组分成 4 组,分别用十进制表示,然后再用圆点隔开。
子网掩码表示网络号与主机号之间的边界。
4. 如果 Web 服务器使用了虚拟主机功能,有可能无法通过 IP 地址来访问。
5. 不用 IP 地址而是改用名称坏处:域名最短也要几十个字节,处理效率差,而且其长度是不固定的。处理长度不固定的数据比处理长度固定的数据要复杂,这也是造成效率低下的重要原因之一。
6. 对于 DNS 服务器,我们的计算机上一定有相应的 DNS 客户端,或称为 DNS 解析器,简称解析器。通过 DNS 查询 IP 地址的操作称为域名解析,因此负责执行解析(resolution)这一操作的就叫解析器(resolver)了。解析器实际上是一段程序,它包含在操作系统的Socket 库中。Socket 库是用于调用网络功能的程序组件集合。调用解析器后,解析器会向 DNS 服务器发送查询消息,然后 DNS 服务器会返回响应消息。响应消息中包含查询到的 IP 地址,解析器会取出 IP地址,并将其写入浏览器指定的内存地址中。
7. HTTP 消息是用文本编写的,但 DNS 消息是使用二进制数据编写的。
三、全世界 DNS 服务器的大接力
1. DNS服务器的基本工作
DNS服务器会从域名与IP地址的对照表中查找相应的记录,并返回IP地址。
2. 在域名中,越靠右的位置表示其层级越高,比如 www.lab.glasscom.com 这个域名如果按照公司里的组织结构来说,大概就是“com 事业集团 glasscom 部 lab 科的 www”.这种具有层次结构的域名信息会注册到 DNS 服务器中,而每个域都是作为一个整体来处理的。换句话说就是,一个域的信息是作为一个整体存放在 DNS 服务器中的,不能将一个域拆开来存放在多台 DNS 服务器中。
3. 一般会把根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。因此,客户端只要能够找到任意一台DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器,并进行域名解析。
4. 此外,有时候并不需要从最上级的根域开始查找,因为DNS服务器有一个缓存功能,可以记住之前查询过的域名。如果要查询的域名和相关信息已经在缓存中,那么就可以直接返回响应。缓存有一定的有效期。
四、委托协议栈发送消息
1.收发数据的操作分为若干个阶段,可以大致总结为以下4个。
(1)创建套接字(创建套接字阶段)
(2)将管道连接到服务器端的套接字上(连接阶段),需要指定描述符、服务器IP地址和端口号这3个参数
(3)收发数据(通信阶段)
(4)断开管道并删除套接字(断开阶段)
这就是HTTP的工作过程。HTTP协议将HTML文档和图片都作为单独的对象来处理,每获取一次数据,就要执行一次连接、发送请求消息、接收响应消息、断开的过程。因此,如果一个网页中包含很多张图片,就必须重复进行很多次连接、收发数据、断开的操作。对于同一台服务器来说,重复连接和断开显然是效率很低的,因此后来人们又设计出了能够在一次连接中收发多个请求和响应的方法。在HTTP版本1.1中就可以使用这种方法,在这种情况下,当所有数据都请求完成后,浏览器会主动触发断开连接的操作。
2. 同一台计算机上可能同时存在多个套接字。应用程序是通过“描述符”这一类似号码牌的东西来识别套接字的。
3. 描述符:应用程序用来识别套接字的机制
IP地址和端口号:客户端和服务器之间用来识别对方套接字的机制