1.1 生成HTTP请求
URL的各种格式
1.1.2浏览器先要解析URL
1.1.3 省略文件名的情况
http://www.lab.glasscom.com (当没有路径名时,就代表访问根目录下事先设置的默认文件)
1.1.4 HTTP的基本思路
HTTP的主要方法
1.1.5生成HTTP请求消息
1.1.6发送请求后会收到响应
HTTP状态码概要
1.2向DNS服务器查询web服务器的IP地址
生成HTTP消息之后,接下来我们需要委托操作系统将消息发送给Web服务器
简单了解一下消息传送的具体过程,发送者发出的消息首先经过子网中的集线器,转发到发送者最近的路由器上。接下来,路由器会根据消息的目的地判断下一个路由器的位置,然后将消息发送到下一个路由器,即消息再次经过子网内的集线器被转发到下一个路由器。前面的过程不断重复,最终消息就被传送到了目的地。
IP地址 32比特 按照8比特(一字节)为一组分成4组
在IP地址的规则中,网络号和主机号连起来总共是32比特,但这两部分的具体结构是不固定的。在组建网络时,用户可以自行决定它们之间的分配关系,因此我们还需要附加消息(子网掩码)来表示IP地址的内部结构。
IP地址的表示方法
顺带一提,主机号部分全部为0或者全部为1时代表两种特殊的含义
全0:表示整个子网
全1:表示向子网上所有设备发送包,即“广播”
1.2.3 Socket 库提供查询IP地址的功能
查询IP地址的方法非常简单,只要询问最近的DNS服务器“www.lab.glasscom.com”的IP地址是什么 DNS服务器就会回到该服务器的IP地址为xxx.xxxx.xxx.xxx
对于DNS服务器,我们的计算机上有相应的DNS客户端(DNS解析器,或简称解析器,解析器实际上是一段程序,它包含在操作系统的Socket库中)、
Socket库是用于调用网络功能的程序组件集合
1.2.4通过解析器向DNS服务器发出查询
调用解析器后,解析器会向DNS服务器发送查询消息,然后DNS服务器会响应消息,响应消息中包含查询到的IP地址,解析器会取出IP 地址,并将其写入浏览器指定的内存中。
1.2.5解析器的内部原理
解析器本身也不具备使用网络接发数据的功能。发送消息这个操作并不由解析器自身执行,而是委托给操作系统内部的协议栈来执行,然后通过网卡发送给DNS服务器
顺带一提,向DNS服务器发送消息时,我们当然也需要知道DNS服务器的IP地址。只不过这个IP地址是作为TCP/IP的一个设置项目事先设置好的。不需要去查询。
Windows中的设置如下图
1.3全世界DNS服务器的大接力
1.3.1DNS服务器的基本工作
来自客户端的查询信息包含以下3种信息
(a)域名
服务器、邮件服务器(邮件地址中@后面的部分)的名称
(b)Class
Class的值永远是代表互联网的IN
(c)记录类型
表示域名对应何种类型的记录。当类型为A时,表示域名对应的时IP地址,当类型为MX时,表示域名对应的是邮件服务器
DNS服务器会从与IP地址的对照表中查找相应的记录,并返回IP地址
1.3.2域名的层次结构
1.3.4通过缓存加快DNS服务器的响应
DNS服务器有一个缓存功能,可以记住之前查询过的域名。如果要查询的域名和相关信息已经在缓存中,那么就直接返回响应
并且,当要查询的域名不存在时,“不存在”这一响应结果也会被缓存,这样,当下次查询的这个不存在的域名时,也可以快速响应。
缓存机制有一点需要注意,那就是当信息被缓存后,原本的注册信息可能会被修改,这时缓存的信息就有可能是不正确的,因此,DNS服务器中保存的信息都会设置一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。
1.4委托协议栈发送消息
1.4.1数据收发操作概览
(1)创建套接字(创建套接字阶段)
(2)将套接字连接到服务器的套接字上(连接阶段)
(3)收发数据(通信阶段)
(4)断开管道并删除套接字(断开阶段)
1.4.2创建套接字阶段
计算机会同时进行多个数据的通信操作,比如打开两个浏览器窗口,同时访问两个web浏览器。这时有两个数据收发在同时进行,也就需要创建两个不同的套接字。
同一台计算机上可能同时存在多个套接字,在这种情况下,我们就需要一种方法来识别某个特定的套接字。这种方法就是描述符
只要我们出示描述符,协议栈就能够判断出我们希望用哪一个套接字来连接或者收发数据
1.4.3连接阶段
应用程序调用Socket库中名为connect的程序来完成这一操作,需要指定描述符、服务器IP地址和端口号这3个参数
端口号,就是用来让通信的另一方能够识别的出套接字的机制。
服务器上所使用的端口号时根据应用的种类事先规定好的 web是80号端口,电子邮件是25号端口