目录
第1章 浏览器生成消息——探索浏览器内部
1.1 生成 HTTP 请求消息
从输入网址开始
下面我们以访问 Web 服务器的情况为例来进行讲解
第一步工作就是对 URL 进行解析
接下来,浏览器会使用 HTTP 协议来访问 Web 服务器(HTTP 协议定义了客户端和服务器之间交互的消息内容和步骤)HTTP 的主要方法post get
生成 HTTP 请求消息
首先,请求消息的第一行称为请求行。这里的重点是最开头的方法 URI HTTP版本号
消息头
空行
消息体
我们的场景是在地址栏中输入网址并显示网页,因此这里应该使用 GET方法。点击超级链接的场景中也是使用 GET 方法。如果是表单,在 HTML源代码中会在表单的属性中指定使用哪种方法来发送请求,可能是 GET 也可能是 POST
1.2 向DNS服务器查询Web服务器的IP地址
生成 HTTP 消息之后,接下来我们需要委托操作系统将消息发送给Web 服务器。尽管浏览器能够解析网址并生成 HTTP 消息,但它本身并不具备将消息发送到网络中的功能,因此这一功能需要委托操作系统来实现
路由器:一种对包进行转发的设备
集线器:一种对包进行转发的设备,分为中继式集线器和交换式集线器两种
凡是通过集线器连接起来的所有设备都属于同一个子网
路由器中已经内置了集线器功能:这种路由器内部同时包含路由器和集线器两种设备,它们在里面已经连接起来了
相当于 DNS 客户端的部分称为 DNS 解析器,或者简称解析器。解析器实际上是一段程序,它包含在操作系统的 Socket 库
DNS:Domain Name System,域名服务系统
1.3 全世界DNS服务器的大接力
来自客户端的查询消息包含以下 3 种信息
域名 Class 记录类型(A=IP MX=邮件服务器)
还有根据 IP 地址反查域名的 PTR 类型,查询域名相关别名的 CNAME类型,查询 DNS 服务器 IP 地址的 NS 类型,以及查询域名属性信息的SOA 类型等
首先,DNS 服务器中的所有信息都是按照域名以分层次的结构来保存的
www.lab.glasscom.com.
根域存在但被省略、com域、glasscom域、lab域、www服务器
客户端计算机–>最近的 DNS 服务器(保存有根域的 DNS 服务器信息)——顺藤摸瓜找到目标 DNS 服务器
相比每次都从根域找起来说,缓存可以减少查询所需的时间+有效期并告知果是来自缓存中还是来自负责管理该域名的 DNS 服务器
1.4 委托协议栈发送消息
收发数据的操作分为若干个阶段,可以大致总结为以下 4 个(委托协议栈执行)
(1)创建套接字(创建套接字阶段)
(2)将管道连接到服务器端的套接字上(连接阶段)
(3)收发数据(通信阶段)
(4)断开管道并删除套接字(断开阶段)