浏览器发送URL完整流程
一、解析URL
首先浏览器做的第一步工作就是要对 URL 进行解析,从而生成发送给 Web 服务器的请求信息。
一条长长的 URL 里的各个元素的代表什么,见下图:
所以图中的长长的 URL 实际上是请求服务器里的文件资源。当没有蓝色部分路径名时,就代表访问根目录下事先设置的默认文件,也就是 /index.html 或者 /default.html这些文件,这样就不会发生混乱了。
二、生成HTTP请求信息
对 URL 进行解析之后,浏览器确定了 Web 服务器和文件名,接下来就会根据这些信息来生成 HTTP请求消息。
三、真实地址查询-DNS
通过浏览器解析 URL 并生成 HTTP 消息后,需要委托操作系统将消息发送给 Web 服务器。但在发送之前,还需要查询服务器域名对应的 IP 地址,因为委托操作系统发送消息时,必须提供通信对象的 IP 地址。
DNS 服务器专门保存了 Web 服务器域名与 IP 的对应关系,就像一个电话本记录电话号和姓名。
DNS 的解析过程:
四、协议栈
通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈。
协议栈的内部分为几个部分,分别承担不同的工作。上面的部分会向下面的部分委托工作,下面的部分收到委托的工作并执行:
1.应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,它们两会接受应用层的委托执行收发数据的操作。
2.协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方。
五、网卡
IP 生成的网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,需要通过网卡将数字信息转换为电信号,才能在网线上传输。网卡驱动从 IP 模块获取到包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。
最后网卡会将包转为电信号,通过网线发送出去。
六、交换机
电信号到达网线接口,交换机里的模块进行接收,并将电信号转换为数字信号。
七、路由器
网络包经过交换机之后,到达路由器,并在此被转发到下一个路由器或目标设备。
八、服务器接收数据包
1.数据包抵达服务器后,服务器依次查看MAC头部、IP头部、TCP头部,TCP头中有序列号,将其放入缓存中,返回一个ACK。TCP头部里面还有端口号, HTTP 的服务器正在监听这个端口号。于是,服务器自然就知道是 HTTP 进程想要这个包,于是就将包发给 HTTP 进程。服务器的 HTTP 进程看到,原来这个请求是要访问一个页面,于是就把这个网页封装在 HTTP 响应报文里。
2.HTTP 响应报文也需要穿上 TCP、IP、MAC 头部,不过这次是源地址是服务器 IP 地址,目的地址是客户端 IP 地址。穿好头部衣服后,从网卡出去,交由交换机转发到出城的路由器,路由器就把响应数据包发到了下一个路由器。最后跳到了客户端的路由器,路由器又把包发给了交换机,再由交换机转发到客户端。
3.客户端收到了服务器的响应数据包后,去掉头部,剩HTTP响应报文,交给浏览器进行渲染。
4.最后,客户端要离开了,向服务器发起了 TCP 四次挥手,双方的连接断开。
中国的哲学里,其实一直不缺少这样的理性和智慧,但人们总是“身后多余忘缩手,眼前无路想回头”。贫富与欲望,依然是当今世界的主要矛盾,是人类痛苦或者欢乐的根源。