• 九五至尊2娱乐城/九五至尊2娱乐城官方网站》》》》》》

  • 发布时间:2016-01-20 18:11 | 作者:yc | 来源:互联网 | 浏览:1200 次
  • 九五至尊2娱乐城/九五至尊2娱乐城官方网站》》》》》》

    以Nexus 5 为例,它所运用的触屏操控器是Synaptics S3350B,总线接口为I2C,以下是Synaptics 打仗屏和处置惩罚器毗连的示例:

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q135KL-0.jpg" title="1.jpg" alt="wKioL1YSQNiSyz5iAAD3W4qhazw756.jpg" />

    左面是处置惩罚器,右边是打仗屏操控器,中间的 SDA 和 SCL 连线等于 I2C 总线接口

    说在最初

    “从输入 URL 到页面加载完结的进程中都发生发火了啥功课?”是我在伯乐在线上发明的一篇不错的博客;很深化的叙述了URL到页面加载的整个进程;我仅仅大年夜略的看了一下彻底懂得还需求很厚的知识沉积

    布景

    这篇文章来自于之前我发的一篇微博:

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q135AU-1.jpg" title="001.png" alt="wKiom1YSQGvAAKyMAADU260auIg248.jpg" />

    不过写这篇文章并不是为了帮咱们预备口试,而是想借这道题来先容核算机和互联网的根基知识,让读者懂得它们之间是若何有关起来的

    为了便于懂得,我将整个进程分为了六个疑问来翻开

    榜首个疑问:从输入 URL 到浏览器回收的进程中发生发火了啥功课?

    从触屏到 CPU

    重如果「输入 URL」,大年夜多半人的榜首应声会是键盘,不过为了与时俱进,这儿将先容打仗屏设备的交互

    打仗屏一种传感器,如本大年夜多是依据电容(Capacitive)来完结的,曾经都是直接掩饰笼罩在显现屏上的,不过迩来呈现了 3 种嵌入到显现屏中的技能,榜首种是 iPhone 5 的 In-cell,它能减小了 0.5 毫米的厚度,第二种是三星运用的 On-cell 技能,第三种是海内厂商喜好用的 OGS 全贴合技能,具体细节能够阅览这篇文章

    当手指在这个传感器上打仗时,有些电子会通报得手上,然后致使该区域的电压改变,打仗屏操控器芯片依据这个改变就能核算出所打仗的方位,然后经由过程总线接口将旌旗灯号传到 CPU 的引脚上

    CPU 内部的处置惩罚

    “移动设备中的 CPU 并不是一个独自的芯片,而是和 GPU 等芯片集成在一路,被称为 SoC(片上体系)”

    前面说到了触屏和 CPU 的毗连,这个毗连和大年夜多半核算机内部的毗连一样,都是经由过程电气旌旗灯号来进行通讯的,也等于电压凹凸的改变,如下面的时序图:”

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q1352055-2.jpg" title="2.jpg" alt="wKioL1YSQWvgrRVWAACUvFO0j1U044.jpg" />

    在时钟的操控下,这些电流会经由过程 MOSFET 晶体管,晶体管中包括 N 型半导体和 P 型半导体,经由过程电压就能操控线路开闭,然后这些 MOSFET 构成了 CMOS,接着再由 CMOS 完结「与」「或」「非」等逻辑电路门,毕竟由逻辑电路门上就能完结加法、位移等核算,全体如下图所示(来自《核算机体系布局》):

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q1354123-3.jpg" title="3.jpg" alt="wKiom1YSQWyyEahrAADMu-eaVWE117.jpg" />

    除了核算,在 CPU 中还需求存储单元来加载和存储数据,这个存储单元平日经由过程触发器(Flip-flop)来完结,称为寄存器

    以上这些观点都比较笼统,引荐阅览「How to Build an 8-Bit Computer」这篇文章,作者依据晶体管、二极管、电容等原件制作了一个 8 位的核算机,支撑大略汇编指令和成果输出,只管今世 CPU 的完结要比这个紊乱得多,但基滥觞基本理仍是一样的

    其余原先我也是刚起头进修 CPU 芯片的完结,以是就不在这误人后辈了,感兴趣的读者请阅览本节后边引荐的书籍

    从CPU到操作体系内核

    前面说到触屏操控器将电气旌旗灯号发送到 CPU 对应的引脚上,接着就会触发 CPU 的中止机制,以 Linux 为例,每个外部设备都有一标识符,称为中止请求(IRQ)号,能够经由过程 /proc/interrupts 文件来查看体系中统统设备的中止请求号,以下是 Nexus 7 (2013) 的有些成果:

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q135G62-4.jpg" title="tu001.png" alt="wKioL1YSQkWhypUTAACfgXVbilU912.jpg" />

    因为Nexus7运用了ELAN的触屏操控器,以是成果中的elan-ktf3k等于触屏的中止请求信息,其间294是中止号,是触发的次数(手指单击时会发生发火两次中止,但滑动时会发生发火上百次中止)

    为了简化这儿不思虑优先级疑问,以ARMv7架构的处置惩罚器为例,傍边止发生发火时,CPU 会停下当前运转的法度榜样,保留当前实行状况(如PC值),进入IRQ状况),然后跳转到对应的中止处置惩罚法度榜样实行,这个法度榜样平日由第三方内核驱动来完结,比方前面说到的 Nexus7的驱动源码在这儿 touchscreen/ektf3k.c

    这个驱动法度榜样将读取I2C总线中传来的方位数据,然后经由过程内核的input_report_abs 等法子纪录触屏按下坐标等信息,毕竟由内核中的input子模块将这些信息都写进 /dev/input/event0 这个设备文件中,比方下面展示了一次打仗功课所发生发火的信息:

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q13554Z-5.jpg" title="tu002.png" alt="wKiom1YSQqnwRsvpAAGXVumu8f4161.jpg" />

    用操作体系GUI到浏览器

    前面说到 Linux 内核现已完结了对硬件的笼统,其它法度榜样只需求经由过程监听 /dev/input/event0 文件的改变就能知道用户进行了哪些打仗操作,不过要是每个法度榜样都这么做真实太麻烦了,以是在丹青操作体系中都邑包括 GUI 布局来便利运用法度榜样开拓,比方 Linux 下驰誉的 X

    但 Android 并没有运用 X,而是自个完结了一套 GUI 布局,其间有个 EventHub 的效劳会经由过程 epoll 法子监听 /dev/input/ 目录下的文件,然后将这些信息通报到 Android 的窗口解决效劳(WindowManagerService)中,它会依据方位信息来查找响应的 app,然后调用其间的监听函数(如 onTouch 等)

    就这么,咱们回复了榜首个疑问,不过因为时候有限,这儿省掉落了许多细节,想进一步进修的读者引荐阅览以下书籍

    拓展进修

    · 《核算机体系布局》

    · 《核算机体系布局:量化研讨法子》

    · 《核算机构成与筹划:硬件/软件接口》

    · 《编码》

    · 《CPU低廉甜头入门》

    · 《操作体系观点》

    · 《ARMv7-AR 体系布局参阅手册》

    · 《Linux内核筹划与完结》

    · 《通达Linux设备驱动法度榜样开拓》、

    第二个疑问:浏览器若何向网卡发送数据?

    从浏览器到浏览器内核

    前面说到操作体系 GUI将输入功课通报到了浏览器中,在这进程中,浏览器大概会做一些预处置惩罚,比方Chrome会依据前史谋略来预估所输入字符对应的网站,比方输入了「ba」,依据之前的前史发明 90% 的概率会拜访「www.baidu.com 」,因而就会在输入回车前就立即起头树立TCP链接以致陪衬了,这儿面还有许多其它计谋,感兴趣的读者引荐阅览 High Performance Networking in Chrome

    接着是输入URL后的「回车」,这时浏览器会对URL进行查看,重要判别协议,要是是http就依照Web来处置惩罚,其余还会对这个URL进行安然查看,然后直接调用浏览器内核中的对应法子,比方 WebView 中的 loadUrl 法子

    在浏览器内核中会先查看缓存,然后设置UA等HTTP信息,接着调用不一样渠道下收集请求的法子

    “需求把稳浏览器和浏览器内核是不一样的观点,浏览器指的是 Chrome、Firefox,而浏览器内核则是 Blink、Gecko,浏览器内核只担负陪衬,GUI 及收集毗连等跨渠道功课则是浏览器完结的”

    HTTP请求的发送

    因为收集的底层完结是和内核有关的,以是这一有些需求关于不一样渠道进行处置惩罚,从运用层视点注重要做两件功课:经由过程DNS查询 IP、经由过程Socket发送数据,接下来就分袂先容这两方面的内容

    DNS查询

    运用法度榜样能够直接调用Libc提供的 getaddrinfo() 法子来完结DNS查询

    DNS查询原先是依据UDP来完结的,这儿咱们经由过程一个具体比方来懂得它的查找进程,以下是运用dig +trace fex.baidu.com 指令获得的成果(省掉落了一些):

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q1354Y0-6.jpg" title="tu00.png" alt="wKiom1YSQ76A6n1ZAAQKekkWeSc742.jpg" />

    能够看到这是一个徐徐减小规模的查找进程,重要由本机所设置的DNS效劳器(8.8.8.8)向 DNS 根节点查询担负.com区域的域务器,然后经由过程其间一个担负.com的效劳器查询担负baidu.com的效劳器,毕竟由其间一个 baidu.com 的域名效劳器查询 fex.baidu.com 域名的地址

    大概你在查询某些域名的时会发明和上面不一样,最底将看到有个古怪的效劳器抢先回来成果

    “这儿为了便利描画,纰漏了许多不一样的状况,比方127.0.0.1 原先走的是loopback,和网卡设备没紧要;比方Chrome会在浏览器发动的时预先查询10个你有大概拜访的域名;还有Hosts文件、缓存时候 TTL(Time to live)的影响等”

    经由过程 Socket 发送数据

    有了 IP 地址,就能够经由过程 Socket API 来发送数据了,这时能够遴选 TCP 或 UDP 协议,具体运用法子这儿就不先容了,引荐阅览 Beej's Guide to Network Programming

    HTTP常用的是 TCP 协议,因为 TCP 协议的具体细节处处都能看到,以是这篇文章就不先容了,这儿谈一下 TCP 的 Head-of-line blocking 疑问:假定客户真个发送了 3 个 TCP 片段(segments),编号分袂是 1、2、3,要是编号为 1 的包传输时丢了,纵然编号 2 和 3 现已抵达也只能期待,因为 TCP 协议需求确保序次,这个疑问在 HTTP pipelining 下更严酷,因为 HTTP pipelining 能够让多个 HTTP 请求经由过程一个 TCP 发送,比方发送两张丹青,大概第二张丹青的数据现已全收到了,但还得等榜首张丹青的数据传到

    为了处置惩罚 TCP 协议的功能疑问,Chrome 团队上一年提出了 QUIC 协议,它是依据 UDP 完结的坚固传输,比起 TCP,它能减少许多往返(round trip)时候,还有前向纠错码(Forward Error Correction)等功能如今 Google Plus、 Gmail、Google Search、blogspot、Youtube 等的确大年夜多半 Google 商品都在运用 QUIC,能够经由过程 chrome://net-internals/#spdy 页面来发明

    只管如今除了 Google 还没人用 QUIC,但我感觉挺有远景的,因为优化 TCP 需求晋级体系内核(比方 Fast Open)

    “浏览器对同一个域名有毗连数约束,大年夜多半是 6,我曾经以为将这个毗连数改大年夜后会前进功能,但实践上并不是这么的,Chrome 团队有做过试验,发明从 6 改成 10 后功能反而下降了,形成这个天气的要素有许多,如树立毗连的开支、拥塞操控等疑问,而像 SPDY、HTTP 2.0 协议只管只运用一个 TCP 毗连来传输数据,但功能反而十分好,并且还能完结请求优先级”

    其余,因为 HTTP 请求是纯文本格局的,以是在 TCP 的数据段中能够直接剖析 HTTP 的文本,要是发明

    Socket 在内核中的完结

    前面说到浏览器的跨渠道库经由过程调用 Socket API 来发送数据,那么 Socket API 是若何完结的呢?

    以 Linux 为例,它的完结在这儿 socket.c,如今我还不太懂得,引荐读者看看 Linux kernel map,它标示出了症结道路的函数,便利进修从协议栈到网卡驱动的完结

    底层收集协议的具体比方

    接下来要是持续先容 IP 协讲和 MAC 协议大概许多读者会晕,以是本节将运用 Wireshark 来经由过程具体比方讲解,以下是我请求baidu主页时抓取到的收集数据:

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q1355I8-7.jpg" title="4.jpg" alt="wKioL1YSRLGiXxSdAAGXGkju3CM478.jpg" />

    最底下是实践的二进制数据,中间是解析出来的各个字段值,能够看到其间最底部为 HTTP 协议(Hypertext Transfer Protocol),在HTTP之前有 54 字节(0x36),这等于底层收集协议所带来的开支,咱们接下来对这些协议进行剖析

    在HTTP之上是TCP协议(Transmission Control Protocol),它的具体内容如下图所示:

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q1356257-8.jpg" title="5.jpg" alt="wKioL1YSRMihQY6lAAKZ8xmGTDk228.jpg" />

    经由过程底部的二进制数据,能够看到 TCP 协议是加在 HTTP 文本前面的,它有 20 个网上真人赌场网址字节,其间界说了本地端口(Source port)和方针端口(Destination port)、序次序号(Sequence Number)、窗口长度等信息,以下是 TCP 协议各个有些数据的齐全先容:

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q13550F-9.jpg" title="tu003.png" alt="wKiom1YSRQXgG-AbAAJt-dAhDRo643.jpg" />

    具体各个字段的感化这儿就不先容了,感兴趣的读者能够阅览 RFC 793,并联系抓包剖析来懂得

    需求把稳的是,在 TCP 协议中并没有 IP 地址信息,因为这是在上一层的 IP 协议中界说的,如下图所示:

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q135HM-10.jpg" title="6.jpg" alt="wKioL1YSRS-CGDVrAAKzsxHFvJA177.jpg" />

    IP协议相同是在TCP前面的,它也有20字节,在这儿指了了版本号(Version)为4,源(Source)IP为192.168.1.106,方针(Destination)IP为119.75.217.56,因而IP协议最重要的感化等于断定IP地址

    因为IP协议中能够查看到方针IP地址,以是要是发明某些特定的IP地址,某些路由器就会

    可是,光靠IP地址是无法进行通讯的,因为 IP 地址并不好某台设备绑定,比方你的条记本的 IP 在家中是 192.168.1.1,但到公司就变成172.22.22.22 了,以是在底层通讯时需求运用一个固定的地址,这等于 MAC(media access control) 地址,每个网卡出厂时的 MAC 地址都是固定且仅有的

    因而再往上等于MAC协议,它有14字节,如下所示:

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q135B47-11.jpg" title="7.jpg" alt="wKiom1YSReqCtWBJAAJWDNNDFT0405.jpg" />

    当一台电脑参加收集时,需求经由过程 ARP 协议奉告其它收集设备它的 IP 及对应的 MAC 地址是啥,这么其它设备就能经由过程 IP 地址来查找对应的设备了

    最顶上的 Frame 是代表 Wireshark 的抓包序号,并不是收集协议

    就这么,咱们回复了第二个疑问,不过原先这儿面还有许多许多细节没先容,主张咱们经由过程下面的书籍进一步进修

    拓展进修

    · 《核算机收集:自顶向下法子与Internet特性》

    · 《核算机收集》

    · 《Web功能权威攻略》

    第三个疑问:数据若何从本机网卡发送到效劳器?

    从内核到收集适配器(Network Interface Card)

    前面说到调用 Socket API 后内核会对数据进行底层协议栈的封装,接下来发动 DMA 操控器,它将从内存中读取数据写入网卡

    以Nexus5为例,它运用的是博通 BCM4339 芯片通讯,接口选用了 SD 卡一样的 SDIO,但这个芯片的细节并没有揭破材料,以是这儿就不讨论了

    毗连Wi-Fi路由

    Wi-Fi网卡需求经由过程 Wi-Fi 路由来与外部通讯,道理是依据无线电,经由过程电流改变来发生发火无线电,这个进程也叫「调制」,而反过来无线电能够致使电磁场改变,然后发生发火电流改变,运用这个道理就能将无线电中的信息解读出来就叫「解调」,其间单位时候内改变的次数就称为频率,如今在 Wi-Fi 中所选用的频率分为 2.4 GHz 和 5 GHz 两种

    在同一个 Wi-Fi 路由下,因为选用的频率一样,一路运用时会发生发火冲突,为了处置惩罚这个疑问,Wi-Fi 选用了被称为 CSMA/CA 的法子,大略来说等于在传输前先承认托道是不是已被运用,没有才发送数据

    “而相同依据无线电道理的 2G/3G/LTE 也会碰到相似的疑问,但它并没有选用 Wi-Fi 那样的独有计划,而是经由过程频分(FDMA)、时分(TDMA)和码分(CDMA)来进行复用,具体细节这儿就不翻开了”

    以小米路由为例,它运用的芯片是 BCM 4709,这个芯片由 ARM Cortex-A9 处置惩罚器及流量(Flow)硬件加速构成,运用硬件芯片能够防止经由过程操作体系中止、高低文切换等操作,然后前进了功能

    路由器中的操作体系能够依据 OpenWrt 或 DD-WRT 来开拓的,具体细节我不太懂得,以是就不翻开了

    因为内网设备的 IP 都是相似 192.168.1.x 这么的内网地址,外网无法直接向这个地址发送数据,以是收集数据在经由过程路由时,路由会修正有关地址和端口,这个操作称为 NAT 映射

    毕竟家庭路由平日会经由过程双绞线毗连到运营商收集的

    运营商收集内的路由

    数据过双绞线发送到运营商收集后,还会经由过程许多其中间路由转发,读者能够经由过程 traceroute 指令或许在线可视化器械来查看这些路由的 ip 和方位

    当数据通报到这些路由器后,路由器会掏出包中意图地址的前缀,经由过程内部的转发布查找对应的输出链路,而这个转发布是若何获得的呢?这等于路由器中最重要的选路算法了,可选的有许多,我对这方面并不太懂得,看起来维基百科上的词条列得很全

    骨干网间的传输

    关于长线的数据传输,平日运用光纤作为介质,光纤是依据光的全反射来完结的,运用光纤需求专门的发射器经由过程电致发光(比方 LED)将电旌旗灯号转成光,比起前面先容的无线电和双绞线,光纤旌旗灯号的抗滋扰性要强得多,并且能耗也小许多

    既然是依据光来传输数据,数据传输速率也就取决于光的速率,在真空中的光速靠近于 30 万千米/秒,因为光纤包层(cladding)中的折射率(refractive index)为 1.52,以是实践光速是 20 万千米/秒阁下,从国都机场飞往广州白云机场的距离是 1967 千米,依照这个距离来算需求花费 10 毫秒才气抵达这意味着要是你在北京,效劳器在广州,等你发布数据到效劳器回来数据至少得等 20 毫秒,实践状况估量是 2- 3 倍,因为这其间还有各个节点路由处置惩罚的耗时,比方我测验了一个广州的 IP 发明平均推迟为 60 毫秒

    这个推迟是现有科技无法处置惩罚的(除非找到逾越光速的法子),只能经由过程 CDN 来让传输距离变短,或只管即便减少串行的往返请求(比方 TCP 树立毗连所需的 3 次握手)

    IDC 内网

    数据经由过程光纤毕竟会来到效劳器地点的 IDC 机房,进入 IDC 内网,这时能够先经由过程分光器将流量镜像一份出来便利进行安然查看平剖析,还能用来进行

    “这儿的带宽成本很高,是依照峰值来结算的,以每月每 Gbps(把稳这儿指的是 bit,而不是 Byte)为单位,北京这边报价在十万人夷易近币以上,平日网站运用 1G 到 10G 不等”

    接下来光纤中的数据将进入集群(Cluster)交流机,然后再转发到机架(Rack)顶部的交流机,毕竟经由过程这个交流机的端口将数据发往机架中的效劳器,能够参阅下图(来自 Open Compute):650) this.width=650;" src="/html/uploads/allimg/160120/1Q1354058-12.jpg" title="8.jpg" alt="wKiom1YSRvHQ2MDnAAK7CjRInho595.jpg" />

    上图左面是正面,右边是左右面,能够看到顶部为交流机所留的方位

    曾经这些交流机的内部完结是关闭的,有关厂商(如思科、Juniper 等)会运用特定的处置惩罚器和操作体系,外界难以进行灵敏操控,以致无意偶尔分需求手艺设置设备摆设,但这几年随着 OpenFlow 技能的流行,也呈现了洞开交流机硬件(Open Switch Hardware),比方 Intel 的收集渠道,引荐感兴趣的读者主张看看它的视频,比翰墨描画了了多了

    “需求把稳的是,平日收集书中说到的交流机都只具有二层(MAC 协议)的功能,但在 IDC 中的交流器基础上都具有三层(IP 协议)的功能,以是不需求有专门的路由了”

    九五至尊2娱乐城/九五至尊2娱乐城官方网站》》》》》》

    毕竟,因为CPU处置惩罚的是电气旌旗灯号,以是光纤中的毫光需求先运用有关设备经由过程光电效应将光旌旗灯号转成电旌旗灯号,然落后入效劳器网卡

    效劳器 CPU

    前面说到数据现已抵达效劳器网卡了,接着网卡会将数据拷贝到内存中(DMA),然后经由过程中止来奉告 CPU,如今效劳器真个 CPU 基础上都是 Intel Xeon,不过这几年呈现了一些新的架构,比方在存储范畴,baidu运用 ARM 架构来前进存储密度,因为 ARM 的功耗比 Xeon 低得多而在高功能范畴,Google 迩来在测验依据 POWER 架构的 CPU 来开拓的效劳器,最新的 POWER8 处置惩罚器能够并行实行 96 个线程,以是对高并发的运用该当很有帮忙

    拓展进修

    · The Datacenter as a Computer

    · Open Computer

    · 《软件界说收集》

    · 《鬼话无线通讯》

    第四个疑问:效劳器回收到数据后会进行哪些处置惩罚?

    为了防止重复,这儿将不再先容操作体系,而是直接进入后端效劳进程,因为这方面有太多技能选型,以是我只挑几个多见的公共有些来先容

    负载均衡

    请求在进入到真实的运用效劳器前,大概还会先经由过程担负负载均衡的机械,它的感化是将请求合理地分配到多个效劳器上,一路具有具有防鞭挞打击等功能

    负载均衡具体完结有许多种,有直接依据硬件的 F5,有操作体系传输层(TCP)上的 LVS,也有在运用层(HTTP)完结的反向署理(也叫七层署理),接下来将先容 LVS 及反向署理

    负载均衡的计谋也有许多,要是后边的多个效劳器功能均衡,最大略的法子等于挨个轮回一遍(Round-Robin),其它计谋就不逐个先容了,能够参阅 LVS 中的算法

    LVS

    LVS的感化是从对外看来只需一个 IP,而实践上这个 IP 后边对应是多台机械,因而也被变成 Virtual IP前面说到的 NAT 也是一种 LVS 中的功课法子,除此之外还有 DR 和 TUNNEL,具体细节这儿就不翻开了,它们的缺陷是无法跨网段,以是baidu自个开拓了 BVS 体系

    反向署理

    偏向署理是功课在 HTTP 上的,具体完结能够依据 HAProxy 或 Nginx,因为反向署理能懂得 HTTP 协议,以是能做十分多的功课,比方:

    · 进行许多同等处置惩罚,比方防鞭挞打击计谋、放抓取、SSL、gzip、主动功能优化等

    · 运用层的分流计谋都能在这儿做,比方对 /xx 道路的请求分到 a 效劳器,对 /yy 道路的请求分到 b 效劳器,或许依照 cookie 进行小流量测验等

    · 缓存,并在后端效劳挂掉落的时分显现友爱的 404 页面

    · 监控后端效劳是不是反常

    · ……

    Nginx 的代码写得十分优良,从中能学到许多,对高功能效劳端开拓感兴趣的读者必然要看看

    Web Server 中的处置惩罚

    请求经由过程前面的负载均衡后,将进入到对应效劳器上的 Web Server,比方 Apache、Tomcat、Node.JS 等

    以Apache为例,在回收到请求后会交给一个自力的进程来处置惩罚,咱们能够经由过程编写 Apache 拓展来处置惩罚,但这么开提议来太麻烦了,以是平日会调用 PHP 等脚本言语来进行处置惩罚,比方在 CGI 下等于将 HTTP 中的参数放到情况变量中,然后发动 PHP 进程来实行,或许运用 FastCGI 来预先发动进程

    (等后续有空再独自先容 Node.JS 中的处置惩罚)

    进入后端言语

    前面说到 Web Server 会调用后端言语进程来处置惩罚 HTTP 请求(这个说法不彻底准确,有许多其它大概),那么接下来等于后端言语的处置惩罚了,如本大年夜多半后端言语都是依据虚拟机的,如 PHP、Java、JavaScript、Python 等,但这个范畴的论题十分大年夜,难以讲清楚,对 PHP 感兴趣的读者能够阅览我之前写的 HHVM 先容文章,其间说到了许多虚拟机的根基知识

    Web 布局(Framework)

    要是你的 PHP 仅仅用来做大略的小我主页「Personal Home Page」,倒没需要运用 Web 布局,但要是随着代码的添加会变得越来越难以解决,以是平日网站都邑会依据某个 Web 布局来开拓,因而在后端言语实行时重要进入Web布局的代码,然后由布局再去调用运用的完结代码

    可选的Web布局十分多,这儿就不逐个先容了

    读取数据

    这有些不翻开了,从大略的读写文件到数据中间层,这儿面可选的计划真实太多

    拓展进修

    · 《深化懂得Nginx》

    · 《Python源码剖析》

    · 《深化懂得Java虚拟机》

    · 《数据库体系完结》

    第五个疑问:效劳器回来数据后浏览器若何处置惩罚?

    前面说到效劳端处置惩罚完请求后,成果将经由过程收集发还客户真个浏览器,从本节起头将先容浏览器回收到数据后的处置惩罚,值得一提的是这方面之前有一篇不错的文章 How Browsers Work,以是许多内容我不想再重复先容,因而将要点放在那篇文章所纰漏的有些

    从01到字符

    HTTP 请求回来的 HTML 通报到浏览器后,要是有 gzip 会先解压,然后接下来最重要的疑问是要知道它的编码是啥,比方相同一个「中」字,在 UTF-8 编码下它的内容原先是「 」也等于「E4 B8 AD」,而在 GBK 下则是「 」,也等于「D6 D0」,若何才气知道文件的编码?能够有许多判别法子:

    · 用户设置,在浏览器中能够指定页面编码

    · HTTP 协议中

    ·中的 charset 特征值

    · 关于 JS 和 CSS

    · 关于 iframe

    要是在这些当地都没指明,浏览器就很难处置惩罚,在它看来等于成堆「0」和「1」,比方「中文」,它在 UTF-8 下有6个字节,要是依照 GBK 能够当成「涓枃」这3个汉字来讲解,浏览器若何知道到底是「中文」仍是「涓枃」呢?

    不过正凡人一眼就能认出「涓枃」是错的,因为这 3 个字太不多见了,以是有人就想到经由过程判别多见字的法子来反省编码,范例的比方 Mozilla 的 UniversalCharsetDetection,不过这东东误判率也很高,以是仍是指明编码的好

    这么后续对文本的操作等于依据「字符」(Character)的了,一个汉字等于一个字符,不必再关切它究竟是 2 个字节仍是 3 个字节

    外链本钱的加载

    (待增补,这儿有调整计谋)

    JavaScript 的实行

    (后续再独自先容,引荐咱们看 R 大年夜上一年料理的这个帖子,里边有十分多有关材料,其余我两年前曾讲过 JavaScript 引擎中tlc171.com的功能优化,只管有些内容不太准确了,但也能够看看)

    从字符到丹青

    二维陪衬中最紊乱的要数翰墨显现了,只管想想似乎很大略,不等于将某个翰墨对应的字形(glyph)找出来么?在中文和英文中这么做是没疑问的,因为一个字符就对应一个字形(glyph),在字体文件中找到字形,然后画上去就能够了,但在阿拉伯语中是弗成的,因为它有有连体法子

    (往后续再独自先容,这儿十分紊乱)

    跨渠道 2D 制作库

    在不一样操作体系中都提供了自个的图形制作 API,比方 Mac OS X 下的 Quartz,Windows 下的 GDI 以及 Linux 下的 Xlib,但它们互相不兼容,所以为了便利支撑跨渠道绘图,在 Chrome 中运用了 Skia 库

    (往后再独自先容,Skia 内部完结调用层级太多,直接讲代码大概不得当初学者)

    GPU 构成

    (往后续再独自先容,只管大略来说等于靠贴图,但还得先容 OpenGL 以及 GPU 芯片,内容太长)

    拓展进修

    这节内容是我最懂得,成果反而因为这么才想花更多时候写好,以是比及往后再发布来好了,咱们先能够先看看以下几个站点:

    · Chromium

    · Mozilla Hacks

    · Surfin' Safari

    第六个疑问:浏览器若何将页面展示出来?

    前面说到浏览器现已将页面陪衬成一张丹青了,接下来的疑问等于若何将这张丹青展如今屏幕上

    Framebuffer

    以 Linux 为例,在运用中操控屏幕最直接的法子是将丹青的 bitmap 写入 /dev/fb0 文件中,这个文件实践上一个内存区域的映射,这段内存区域称为 Framebuffer

    需求把稳的是在硬件加速下,如 OpenGL 是不经由过程 Framebuffer 的

    从内存到 LCD

    在手机的SoC中平日都邑有一个LCD操控器,当 Framebuffer 预备好后,CPU 会经由过程 AMBA 内部总线奉告 LCD 操控器,然后这个操控器读取 Framebuffer 中的数据,进行格局变换、伽马校正等操作,毕竟经由过程 DSI、HDMI 等接口发往 LCD 显现器

    以 OMAP5432 为例,下图是它所支撑的一种并行数据传输:650) this.width=650;" src="/html/uploads/allimg/160120/1Q1355J1-14.jpg" title="9.jpg" alt="wKiom1YSSCbx57G5AAIoWte8G8A851.jpg" />

    LCD 显现

    毕竟大略先容一下 LCD 的显现道理

    重要,要想让人眼能望见,就有需要有毫光进入,要么经由过程反射、要么有光源,比方Kindle所运用的E-ink 屏幕自身是不发光的,以是有需要在有毫光确当地才气阅览,它的长处是省电,但约束太大年夜,以是的确统统LCD都邑自带光源

    如今LCD中平日运用 LED 作为光源,LED 接上电源后,在电压的感化下,内部的正负电子联系会释放光子,然后发生发火光,这种物理天气叫电致发光(Electroluminescence),这在前面先容光纤时也先容过

    以下是iPodTouch 2 拆开后的姿态:(来自 Wikipedia):

    650) this.width=650;" src="/html/uploads/allimg/160120/1Q135Ma-15.jpg" title="10.jpg" alt="wKioL1YSSHXhXp8CAAE10pkpoNs822.jpg" />

    在上图中能够看到 6 盏 LED,这等于整个屏幕的光源,这些光源将经由过程反射的反射输出到屏幕中

    有了光源还得有色彩,在 LED 中平日做法是运用五颜六色滤光片(Color filter)来将 LED 光源转成不一样色彩

    其余直接运用三种色彩的 LED 也是可行的,它能防止了滤光致使的光子摧残挥霍蹂躏,下降耗电,很适用于智妙腕表这么的小屏幕,Apple 笼络的 LuxVue 公司就选用的是这种法子,感兴趣的话能够去研讨它的专利

    LCD屏幕上的每个物理像素点实践上是由红、绿、蓝 3 种色彩的点构成,每个色彩点能独自操控,下面是用显微镜扩大年夜后的状况(来自Wikipedia):650) this.width=650;" src="/html/uploads/allimg/160120/1Q1354001-16.jpg" title="11.jpg" alt="wKiom1YSSH3CUJPRAAK6NGvbWog224.jpg" />

    从上图能够看到每 3 种色彩的滤光片都全亮的时分等于白色,都灭等于玄色,要是你仔细看还能看到有些点并不是彻底黑,这是字体上的反锯齿感化

    经由过程这 3 种色彩亮度的不一样组合就能发生发火出各类色彩,要是每个色彩点能发生发火 256 种亮度,就能天生 256 * 256 * 256 = 种色彩

    并不是统统显现器的亮度都能到达 256,在遴选显现器时有个参数是 8-Bit 或 6-Bit 面板,其间 8-Bit 的面板能在物理上到达 256 种亮度,而 6-Bit 的则只需 64 种,它需求靠刷新率操控(Frame rate control)技能来到达 256 的感化

    若何操控这些色彩点的亮度?这就要靠液晶体了,液晶体的特点是当有电流畅逾期会发生发火扭转,然后将有些毫光盖住,以是只需经由过程电压操控液晶体的滚动就能操控这个色彩点的亮度,如今手机屏幕中平日运用 TFT 操控器来对其进行操控,在 TFT 中最驰誉的要数 IPS 面板

    这些过滤后的毫光大年夜多半会直接进入双眼,有些光还会在其它外面上经由过程漫(diffuse)反射或镜面(specular)反射后再进入双眼,加上情况光的影响,要真实算出有若干光到双眼是一个积分疑问,感兴趣的读者能够研讨依据物理的陪衬

    当毫光进入双眼后,接下来等于生物学的范畴了,以是咱们到此停止

    拓展进修

    · 《Computer Graphics, 3rd Edition : Principles and Practices》

    九五至尊2娱乐城/九五至尊2娱乐城官方网站》》》》》》

    · 《交互式核算机图形学》

    这篇文章所纰漏的内容

    为了编写便利,前面的先容中将许多底层细节完结纰漏了,比方:

    内存有关

    堆,这儿的分配计谋有许多,比方 malloc 的完结

    栈,函数调用,现已有许多优良的文章或书籍先容了

    内存映射,动态库加载等

    行列的确无处不在,但这些细节和道理没太大年夜联系

    各类缓存

    CPU 的缓存、操作体系的缓存、HTTP 缓存、后端缓存等等

    各类监控

    许多日志会保留下来以便后续剖析

    FAQ

    从微博应声来看,有些疑问被经常问到,我就在这儿同等回复吧,要是有其它疑问请在讨论中问

    Q:学那么多有啥用?根基?底细用不着

    A:核算机是人类最强壮的器械,你不想懂得它是若何运作的么?

    Q:啥都懂得一点,还不如通达一项吧?

    A:十分认同,前期必定需求先在某个范畴通达,然后再去懂得周边范畴的知识,这么还能让你对之前那个范畴有更深化的懂得

    Q:晒出来培植成堆面霸跟自个过不去?

    A:这篇文章原先写得很浅,每个有些都能再深化翻开

    Q:这题要把人累逝世啊,说几天都说不完的

    A:哈哈哈,大年夜神你裸露了,标题仅仅伎俩,意图是将你这么的大年夜牛发掘出来

    咱们的讨论

    十分谢谢各位大年夜牛的参加讨论,这儿汇集了其间的一些回复

    @WOODHEAD笨笨:请求被送往本地路由,接入商路由,旁路剖析是不是违法地址,毗连被中止,浏览器无辜得显现页面不存在严酷的有人来查水表

    caoz: 这不是我的口试题么! 还有一道题,用户应声咱们网站卡,讨教都有哪些大概性,以及排法子

    @caoz:写的仍是不错的,可是仍是有一些罅漏,比方arp欺骗? 驰誉的GFW的阻断计谋,以及,一个URL可不是只需一个请求,多个请求的排队和寻址?此外,cdn, 智能dns解析机制等//@ZRJ-: http://t.cn/8smHpMF 从点击到呈现 — 详解一次HTTP请求 我大年夜三的时分写的 啊

    @唐福林:与时俱进,如今该当问从翻开app到刷新出内容,整个进程中都发生发火了啥,要是感想熏染慢,若何定位疑问,若何处置惩罚

    @严冬winter: 回覆@Ivony:这题胜在区分度高,知识点掩饰笼罩平均,再不理解的人,也能答出几句,而高手能够依据自个拿手的范畴自由发挥,从URL标准、HTTP协议、DNS、CDN、到浏览器流式解析、CSS规矩构建、layout、paint、onload/domready、JS实行、JS API绑定……

    @J小组:[哈哈] 小编想起来了,形似刚从业那会儿,前端界最漂亮的姐@sherrie_wong 口试问过小编这道题.然后我其时把知道的全说了,从浏览器解析,发请求,7层收集模型实践用的模型,TCP三次握手.经路由,交流机,DNS,到效劳器.在是不是需求与文件体系仍是数据库打交道,再者散播式运算hadoop啥的...聊了太多.

    @莴怖熵崴箔:这种等于地痞疑问,我还想问从你按了键盘到屏幕上呈现字符,中间都发生发火了啥事,提示一下:想象你是一个电子哦,纰谬,电子又是啥

    @严冬winter:http://t.cn/zH20bR1 http://t.cn/zH20bR1 之前写了最初两篇,后边旷费中……

    @ils传言:不提电厂发电机转了几圈的也干掉落!//@Philonis高:不提交流机和路由器功课道理的全干掉落!//@南非蜘蛛:从7层协议的视点说会比较整个这种疑问只需全栈工程师才气回复

    @耸肩的阿特拉斯尊下:DNS解析URL出IP/Port,浏览器毗连并向此地址发布GET请求,web效劳端(nginx、apache)回收到请求后,经由过程CGI等接口协议调用动态言语(php等),动态言语再毗连数据库查询响应数据并处置惩罚,然后应声给浏览器,浏览器解析应声页面,经由过程html、javascript、css处置惩罚后呈现到屏幕……每个细节的话估量要800页的书

    @一棹凌烟:这种口试题在体系范畴的招聘里原先大略好使还有一个相似的:从在键盘上敲下一个字符键起头,到在虚拟机里的terminal里显现出来,中间的进程是啥?

    @ICT_朱亚东:记着6年前上胡伟武的芯片筹划课,老胡榜首节课就说,上完这门课,我期望你们能搞清楚,我翻了一页PPT,核算机内部都做了那些流水操作,当然啦,我是一点都不记着了

    @julyclyde:咱们运维平日问一个TCP segment in a IP packet in an ethernet frame经由过程一个路由器今后发生发火啥改变

    @西西福厮:从浏览器提及,操作体系响应键盘中止,功课行列处置惩罚,到互联网路由,到效劳器网卡中止,到毕竟输出缓冲细说能说两小时

    @Xscape:从键盘中止提及?回车前的预解析都很靠后了..//@纯白色点火: 从键盘到绷簧入万有引力然后直达量子力学

    @Bosn:然后从硬件再到电子……量子…薛定谔之猫…平行天下……以致全能的哲学!!

    @imPony:可深化到PN结中的电子活动层面

    @巩小东-TX: 猜一下,浏览器组http报文sock发布,proxy过滤,收处处置惩罚头,未过时cache回来,http svr处置惩罚校验包,转为cgi协议给后端,后端map url,load code,与逻辑交互后天生html给svr,svr过滤cache给proxy,proxy给浏览器,拉去js完结html,浏览器陪衬

    @yuange1975:我算对整个进程比较清楚,包括效劳器的处置惩罚,web效劳器和浏览器的处置惩罚以及安然疑问,估量罕有对两者的安然都研讨过的但口试时要了了的比较齐全的把大年夜块流程列出来说理解,也有难度估量也很难无意偶尔机时候去料理文章了

    @ShopEx王磊:我也问这个疑疑问很多多少年, 或许变通一下:从输入URL到展示, 都涉及到哪些缓存环节, 缓存的更新机制是若何的

    @一棹凌烟:这种口试题在体系范畴的招聘里原先大略好使还有一个相似的:从在键盘上敲下一个字符键起头,到在虚拟机里的terminal里显现出来,中间的进程是啥?

    @才智白痴: 切实着实能够维度不一样的说,重要仍是看颗粒度,光收集这段从wifi 解密,到NAT,到局间交流,ip包在以太网包映射等等就能够写一本书了

    /@乔3少:摊开了说统统互联网有关的知识都能体现的,比方dns、浏览器缓存,tcp毗连、http呼应,web效劳的功课道理,浏览器的呼应和陪衬等等,刚刚在本子上列了下想到的安然威胁,很故意思!

    毕竟

    仔细的读者该当会发明这篇文章有躲藏内容,请找

  • 相关内容

友情链接: