1.1 探索之旅从输入网址开始
- 浏览器做的第一步是解析URL,从而生成发送给Web服务器的请求消息。
- 请求消息=URI+方法(对什么+进行怎样的操作),方法主要为GET和POST
- 请求消息格式:
- 请求行:<方法><空格><空格><HTTP版本>
- 消息头:用于表示请求的附加信息,日期、压缩格式、版本等
- 消息体:包含客户端向服务器发送的数据,如POST向服务器发送的表单信息,GET方法不需填写消息体
- 相应消息格式
- 状态行:<HTTP版本><空格><状态码><空格><响应短语>
- 消息头:同上
- 消息体:包含服务器向客户端发送的数据
- 状态码:
- 1XX: 告知请求的处理进度和情况
- 2XX: 成功
- 3XX: 表示需要进一步操作
- 4XX: 客户端错误
- 5XX: 服务器错误
- 1条请求消息中只能写1个URI。若需获取多个文件,必须对每个文件单独发送一条请求
1.2 向DNS服务器查询Web服务器的IP地址
- 在生成HTTP消息后,下一个步骤就是根据域名查询IP地址。浏览器能解析网址并生成HTTP消息,但将消息发送到网络中的功能需要委托操作系统来实现
- IP地址32比特:网络号+主机号,二者分配位数可自行决定,需要附加信息(子网掩码)来表示IP地址内部结构。(网络号相当于快递点,主机号相当于货架号)
- 主机号部分全为0,表示的不是单独一台计算机,而是整个子网;主机号部分全部为1则表示对整个子网进行广播
- DNS客户端部分称为DNS解析器,包含在操作系统的Socket库中。Socket库是调用网络功能的程序组件的集合
- 取得IP地址后,将其与HTTP请求消息一同交给操作系统
1.3 DNS查询过程
- 在域名中,越靠右的位置表示其层级越高
- 一个域的信息作为一个整体存放在DNS服务器中,不能将一个域拆开存放在多台DNS服务器中
- com、cn等顶级域上面还有一级域,称为根域,根域的DNS服务器信息保存在互联网中所有的DNS服务器中
- DNS查询过程:客户端找到任意一台DNS服务器,通过它找到根域DNS服务器,再依次查询下层的某台目标DNS服务器直到找到最终目标
- 可以通过DNS缓存加快DNS服务器的响应
1.4 委托协议栈发送消息
- 知道IP地址后,就可以委托操作系统内部的协议栈向这个目标IP发送消息了。这需要按照指定顺序调用Socket库中的程序组件
- 应用程序通过描述符来标识套接字;描述符是用来在一台计算机内部标识套接字的机制,端口号是用来让通信的另一方能够识别出套接字的机制。