您的位置:首页 > 其它

从输入 URL 到页面加载完成的过程中都发生了什么事情?

2017-07-19 17:08 381 查看
本文为阅读笔记,阅读内容见此:http://fex.baidu.com/blog/2014/05/what-happen/

今天拜读了大神的博文,本意就是想清晰一下浏览器的工作原理,但没想到大神讲解的如此详细精深,软硬件结合,对我之前所学习的软硬件知识都是一个很好的串联融合。不过内容较多,大致了解的话内容过于复杂,所以我做了以下整理。

浏览器的工作分为以下几步:

一、如何启动浏览器

当手指在这个传感器上触摸时,有些电子会传递到手上,从而导致该区域的电压变化,触摸屏控制器芯片根据这个变化就能计算出所触摸的位置,然后通过总线接口将信号传到 CPU 的引脚上。cpu经过逻辑电路,寄存器等处理信号,这都是数电模电的知识了。传到CPU之后,接着就会触发 CPU 的中断机制,传信息给系统内核。操作系统的监听程序就可以根据位置确定浏览器的连接请求。

二、浏览器如何向网卡发送数据

首先是发送http请求,从应用层看需要的步骤有两个,一是用DNS查出IP,二是通过Socket发送数据。得到IP之后,调用socket API发送数据,此时就用到了网络分层协议,应用层,传输层,网络层,链路层和物理层。层层封装数据包,物理层是MAC协议。当一台电脑加入网络时,需要通过 ARP 协议告诉其它网络设备它的 IP 及对应的 MAC 地址是什么,这样其它设备就能通过 IP 地址来查找对应的设备了。最后发送数据。

三、数据如何从本机网卡发送到服务器

前面说到调用 Socket API 后内核会对数据进行底层协议栈的封装,接下来启动 DMA 控制器,它将从内存中读取数据写入网卡。Wi-Fi 网卡需要通过 Wi-Fi 路由来与外部通信,原理是基于无线电,通过电流变化来产生无线电,这个过程也叫「调制」,而反过来无线电可以引起电磁场变化,从而产生电流变化,利用这个原理就能将无线电中的信息解读出来就叫「解调」,其中单位时间内变化的次数就称为频率,目前在 Wi-Fi 中所采用的频率分为 2.4 GHz 和 5 GHz 两种。

无线信号需要无线路由来调制,因为内网设备的 IP 都是类似 192.168.1.x 这样的内网地址,外网无法直接向这个地址发送数据,所以网络数据在经过路由时,路由会修改相关地址和端口,这个操作称为 NAT 映射。最后家庭路由一般会通过双绞线连接到运营商网络的。数据过双绞线发送到运营商网络后,还会经过很多个中间路由转发,可以通过 traceroute (tracert)命令追踪路径。运营商网络内传输完成之后需要进入主干网传输,一般采用光纤,又快又准。原文这样介绍:对于长线的数据传输,通常使用光纤作为介质,光纤是基于光的全反射来实现的,使用光纤需要专门的发射器通过电致发光(比如 LED)将电信号转成光,比起前面介绍的无线电和双绞线,光纤信号的抗干扰性要强得多,而且能耗也小很多。

数据通过光纤最终会进入到服务器所在的IDC机房,进入IDC内网。接下来光纤中的数据将进入集群(Cluster)交换机,然后再转发到机架(Rack)顶部的交换机,最后通过这个交换机的端口将数据发往机架中的服务器。最后,因为 CPU 处理的是电气信号,所以光纤中的光线需要先使用相关设备通过光电效应将光信号转成电信号,然后进入服务器网卡。数据已经到达服务器网卡了,接着网卡会将数据拷贝到内存中(DMA),然后通过中断来通知 CPU。

四、服务器接收到数据后进行哪些处理

先是进行负载均衡,反向代理,在使用web server中的处理,调用一个独立的进程来处理,很多是进行脚本处理,比如PHP。接着进行后端解析,处理http请求,很多都是在虚拟机上运行。最后读取数据,写入数据到数据中间层。

五、服务器返回数据后浏览器如何处理

HTTP 请求返回的 HTML 传递到浏览器后,如果有 gzip 会先解压,然后接下来最重要的问题是要知道它的编码是什么,这个一般浏览器会设置,或者有以下几种方法:

用户设置,在浏览器中可以指定页面编码

HTTP 协议中

中的 charset 属性值

对于 JS 和 CSS

对于 iframe

正确解析了编码,再JavaScript 的执行。在不同操作系统中都提供了自己的图形绘制 API。

六、浏览器如何将页面展示出来

前面提到浏览器已经将页面渲染成一张图片了,接下来的问题就是如何将这张图片展示在屏幕上。以 Linux 为例,在应用中控制屏幕最直接的方法是将图像的 bitmap 写入 /dev/fb0 文件中,这个文件实际上一个内存区域的映射,这段内存区域称为 Framebuffer。需要注意的是在硬件加速下,如 OpenGL 是不经过 Framebuffer 的。显示主要从内容要LCD控制器,目前 LCD 中通常使用 LED 作为光源,LED 接上电源后,在电压的作用下,内部的正负电子结合会释放光子,从而产生光,这种物理现象叫电致发光(Electroluminescence),这在前面介绍光纤时也介绍过。有了光源还得有色彩,在 LED 中通常做法是使用彩色滤光片(Color filter)来将 LED 光源转成不同颜色。LCD 屏幕上的每个物理像素点实际上是由红、绿、蓝 3 种色彩的点组成,每个颜色点能单独控制,每 3 种颜色的滤光片都全亮的时候就是白色,都灭就是黑色,如果你仔细看还能看到有些点并不是完全黑,这是字体上的反锯齿效果。

通过这 3 种颜色亮度的不同组合就能产生出各种色彩,如果每个颜色点能产生 256 种亮度,就能生成 256 * 256 * 256 = 16777216 种色彩。如何控制这些颜色点的亮度?这就要靠液晶体了,液晶体的特性是当有电流通过时会发生旋转,从而将部分光线挡住,所以只要通过电压控制液晶体的转动就能控制这个颜色点的亮度,目前手机屏幕中通常使用 TFT 控制器来对其进行控制,在 TFT 中最著名的要数 IPS 面板。

这些过滤后的光线大部分会直接进入眼睛,有些光还会在其它表面上经过漫(diffuse)反射或镜面(specular)反射后再进入眼睛,加上环境光的影响,要真正算出有多少光到眼睛是一个积分问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  url 浏览器 硬件
相关文章推荐