你不在的世界里,我无法找到任何意义。 收藏本站
登陆 / 注册 搜索

阅读: 16.4K   回复: 13

[# 网络基础] 从输入网址到网页彻底打开,中间都发生了什么?

荐Ⅱ  
小执念 古黑浩劫论坛大牛 2016-4-16 12:56 |显示全部楼层

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

管理员
        这是一道经典面试题,以前我以为只有我喜欢出这道题,后来发现其他技术大牛也出这道题。这道题其实测试的不是具体特定的技术,而是对整个上网这个概念以及背后流程的理解。$ K0 w8 [$ I' p

; M* W# ^3 H  ]7 z# a8 @* p( U# Z$ S4 O
从输入网址到网页彻底打开,中间都发生了什么? server&browser.png

) q5 B+ {6 q7 }- t& `6 F        我先说一下我所理解或者说我所期待的大概的答题要点,后面再解释这道题的目的和意义,实际上所谓上网这个过程分为三个大的区块,一块是客户端,一块是网络传输层,一块是服务端。$ V. d9 |. q0 p( g6 ^* j! c
) T+ r; P/ X/ p# n- D5 r: v
        从输入网址开始,这个网址在客户端就会有一个解析,首先浏览器如果有钩子,可能会直接对这个网址做出判断和反馈,比如国内大部分第三方浏览器(IE浏览器基础上加壳的那种),都会直接把地址输入关键词后应该跳转到微软搜索页的那个url劫持掉,所以第一步是浏览器对url的判断和劫持,第二步是本地host文件的判断,在360崛起之前,host文件也是各种木马和流氓软件最爱处理修改的文件,不声不响就把你的hao123给劫持了,而且你几乎看不出来哪里改了。
- _9 F: L5 Z4 |$ d" }; S+ V6 v% h$ h8 Z1 h; c, X& @% e# p1 P  U
        那么逃脱本地客户端的判断后,这个域名查询请求会发到服务商的dns服务器,服务商的dns服务器会检查缓存,如果不存在你要访问的这个域名或者缓存状态已经过期,会访问根域名服务器,根域名服务器也会先检查缓存,如果无法直接返回结果,会检查这个域名是哪个dns服务器负责解析的,然后将请求转发过去,获得这个域名所对应的ip,然后返回给本地服务商的dns,本地服务商的dns就更新缓存,然后把ip返回给客户端。
. Z' E) j( J5 X: d% H$ y4 n( M0 Z. j& @# m8 Q2 j! G6 B" c( B  ^
        当然这里本地dns服务商也可能基于某种目的劫持域名,至于GFW,在这里只能说呵呵吧,但另一个众所周知的案例是,如果你的IE地址栏输入错关键词,应该默认是跳转到微软的搜索页,假设你用的是原版ie,并且本地没有装各种会给ie加插件的工具,那么你的请求应该是微软搜索页的,但是在地方电信这块依然会被劫持掉,改为当地电信的搜索结果页。所以有时候,有些用户会把自己电脑上网配置的dns修改为更可信赖的公共dns,而不是地方电信的dns。(地方电信的劫持能力当然不止是dns,还包括内容替换,强插。不过这是后面的内容。6 G2 }- b+ @! q( ~
% b) I0 E) {  e- ^$ c
        关于解析到ip,复杂点的还可以说说cdn的原理和机制,以及针对不同地区用户智能解析的机制。不过这里就不展开了,当然展开了我也未必说的清楚。3 R( ^, z- }! l# n! D
2 O' Q0 r7 K: C$ ~' f. {  k5 p" o
        到了ip这里,浏览器发出请求,去指定ip获取指定的文件,这里涉及路由寻址和报文传输,当然如果细说我也说不清了,但是至少知道用tracert可以跟踪路由就好。然后到了指定ip,服务器会在80端口有一个守护进程接受这个请求,细说的话这里还有三次握手的协议,那么下面就是webserver是怎么工作的,静态页面的处理比较简单,动态脚本还需要一个解释器系统工作,执行一段代码后将返回结果输出。这里可能又涉及有服务端缓存的,数据库,负载均衡和轮询等等,也就是可能后面不是一台主机,而是一个集群。再往下变成架构师专题了,就更不能展开了。#j347:
, Z. `" n; U; O4 i8 o# p( C1 a( g5 y/ q# W5 s
        但是到这里没完,为什么呢,返回的这个内容页往往又包含了大量的嵌入页面请求,比如css,比如各种小图标,小图片,这又涉及浏览器发出请求,这里也存在一些需要注意的逻辑,比如浏览器在发出请求时,对数量和排队的限制。此外,这个内容页可能还涉及了一些可执行代码,是在浏览器上执行的,这也对你看到什么有重要的影响。
2 g  f9 b* G9 }' U! X0 m/ D& B6 ?" S9 D. o0 E$ ]
        但是到这里依然还没完,在到了目标机房,以及数据返回你的电脑时,都存在一个在子网被劫持被篡改的风险,ARP欺骗,ARP协议是什么,为什么你要访问的内容会被劫持会被篡改。此外,在传输中会不会被侦听,会不会被篡改,上文提过,除了GFW,还有强大的地方电信。9 E+ C8 i4 }* f1 e* |+ j' W

2 e" C7 ]& l- ~; r! l  X1 b0 @        啰嗦这么一堆,可能有人会觉得,我就应聘一个服务端程序员/前端技术/运维工程师,我需要知道这些么?那么问题来了,通常我问这个题目的时候,还会包含一到两个引申题目。
1 Z1 a& T# Y3 v2 Z% z0 u% d. _; r
" {/ I2 {$ q" _        题目1:如果有个用户跟你说,你的网站/游戏很卡很慢,你该怎么分析,怎么响应?! c) ~) }( g) a8 @* m
9 ~! ~/ e3 m* k: j& N2 @
        题目2:如果有个用户跟你说,打开你的网站会弹出淫荡小广告或杀毒软件报有木马,你该怎么分析,怎么响应?7 U% H" O. Z+ g9 @4 r
. v" z2 `- W4 j; C2 `5 k- @
        看到这些,相信很多人都会发现,哎呀,这还真是个常见问题啊。而这种常见问题的排查,其实就涉及了如上的每个步骤。卡和慢究竟是客户端,网络层还是传输层的问题?如何快速排查和定位出问题,以及影响范围?这个思考题今天不展开,但是如果没有上面那个流程的认识,这个题目你肯定不可能给出好的结果。
. C# F; c/ E0 u+ v) p+ o
" s" N3 _4 l- C& h        说一个观点,全栈工程师为什么现在这么被看重,是因为大部分问题出现的时候,问题并不会告诉你,它是属于哪个领域的,而需要你来摸索,排查,如果你不具备综合的视野和开阔的思路,你很可能无法找到问题的关键所在。你的能力又怎么体现呢?
5 n6 f0 T% C8 G) Z' J4 S
" ^. ^. f' |8 R$ t) B0 U' A        其实是不是我们同时需要精通前端,精通网络协议,精通服务端,这个的确太难,但是有一个整体框架的思路,再去精通其中一个领域,你的能力和视野就会上一个台阶,至少在排查问题,技术协同等各个方面会显得更专业,更有自信。#j335:! Q! ~1 M, I" W" ^$ x

$ ^; Y4 N; S# e        我刚开始接触互联网的时候,刚开始写web程序的时候,那真是一窍不通,我写一个cgi程序,我想让他运行起来,我都糊里糊涂,不知道这个东西是怎么运行的,我跑一个webserver,设置目录权限,糊里糊涂,以及最早看着coolfire的一个黑客手册照猫画虎去拿别人服务器权限的时候,还是糊里糊涂,很长时间都不知道这玩意到底原理是什么。
  o) E; _, f2 S5 ^# P) i% Z1 k5 e
% i9 W- x1 z1 c       我总在想,那些年就没有人跟我讲这些,帮我梳理一下,所以当时很多东西做出来,但是不明白其发生作用的机制,更不明白如何更好的调优和细化。5 H$ N1 G1 I! u) W4 s) J' J5 ^( a7 g

" o4 t: M3 _4 m/ h1 d- W        梳理一下这些,其实花不了太多时间和精力,而梳理后对认识问题的提升,是巨大的,对技术协同意识的提升,也是巨大的。
$ D- M3 \$ U+ u* K; k( ]4 B% |2 L6 m1 E  E+ j
上一篇
下一篇


LonelyGorge 「初入古黑」 2019-3-10 17:04 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

加油!
噬影无痕 「锋芒初露」 2016-4-17 01:50 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

有的贴真心总结的很牛逼!!但我觉的需要一定的基础才能受益的。
, @" _# I# q' N' O' m. I' X  R6 w就像刚接触语言基础的人,学习面向对象!!!
- _- k" `. J: Y/ H, `. X# L例如:类是对象的抽象,对象是类的具体。刚开始学习的人对这有点哲学的解释搞懵了!!
1 Y2 N% F. K5 j" s" L' {但相对于有基础的人对这话不以为然!!觉的这话很经典!!4 r: {6 i: T$ Y  M
希望我不被喷!!!#j321:
空谷幽兰 踏破虚空 2016-4-22 07:55 来自手机 |显示全部楼层

从前车马很慢,书信很远,一生只够爱一个人,但是可以纳很多妾啊!

精华达人 主题破百 以坛为家 论坛元老
强插。。呵呵呵来自: Android客户端
lzb11064 「初入古黑」 2016-5-15 12:59 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

写的这么水 尼玛知道吗?
晒晒太阳 「初入古黑」 2016-5-21 15:26 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

很有感悟,谢谢!
晒晒太阳认真回帖,奖励 1 个 金币.
sirius 「初入古黑」 2016-6-14 22:06 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

不仅是知识,还有初学者的思维指导
一只小白兔 「初入古黑」 2016-6-15 20:51 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

刚开始我也看的云里雾里的,但最后楼主提到了些具体问题就知道之前说的那些代表什么了。那些都是基础,只有精通了这些有了问题判断起来才又快又准
ysy950803 「初入古黑」 2016-9-11 20:32 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

不错不错,我也跟着水水。
ysy950803发帖时在路边捡到 1 个 金币,偷偷放进了口袋.
清风霁月 「出类拔萃」 2018-5-1 08:20 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

1 .先请大家注意我的头像。看到什么诡异的吗。
( }" v* I6 y5 I2 然后请大家仔细看我的ID,有什么内涵? ' N$ s% T3 J0 S
3 没看出来就默念我的ID 十遍,然后结合我的头像一起看!! 0 h8 K4 O$ A4 j* _; S+ P$ j5 S7 k
4 好了,你继续往楼下看吧,我就是来混脸熟的。#y416:
放我一个人生活 「出类拔萃」 2018-5-4 07:19 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

寡人与众爱卿皆瞠目结舌。
Mnosyne0013 「初入古黑」 2018-10-2 09:29 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

真心有点水。# E, r! s1 ?7 b5 V0 h( T) J
Mnosyne0013认真回帖,奖励 2 个 金币.
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2021-6-15 23:33 , Processed in 0.043047 second(s), 24 queries , Redis On.

© 2015-2021 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表