倘若只是为了驱赶心中的寂寞,找谁都可以的。 收藏本站
登陆 / 注册 搜索

阅读: 17K   回复: 13

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

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

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

管理员
        这是一道经典面试题,以前我以为只有我喜欢出这道题,后来发现其他技术大牛也出这道题。这道题其实测试的不是具体特定的技术,而是对整个上网这个概念以及背后流程的理解。. ^8 |% j5 _: K" |7 e3 n) y; [3 a  V; e
4 N; [3 Z' [! J9 n6 E7 O

' Y. ~0 v! c5 [
从输入网址到网页彻底打开,中间都发生了什么? server&browser.png

4 g/ h4 c1 R0 O8 H$ M/ t4 x        我先说一下我所理解或者说我所期待的大概的答题要点,后面再解释这道题的目的和意义,实际上所谓上网这个过程分为三个大的区块,一块是客户端,一块是网络传输层,一块是服务端。% o% {3 u8 F$ d% d8 V$ m
. n) n/ p( t1 v& D! {
        从输入网址开始,这个网址在客户端就会有一个解析,首先浏览器如果有钩子,可能会直接对这个网址做出判断和反馈,比如国内大部分第三方浏览器(IE浏览器基础上加壳的那种),都会直接把地址输入关键词后应该跳转到微软搜索页的那个url劫持掉,所以第一步是浏览器对url的判断和劫持,第二步是本地host文件的判断,在360崛起之前,host文件也是各种木马和流氓软件最爱处理修改的文件,不声不响就把你的hao123给劫持了,而且你几乎看不出来哪里改了。* g2 y- J5 f* e4 T% v
+ B7 g3 [: U' c" b
        那么逃脱本地客户端的判断后,这个域名查询请求会发到服务商的dns服务器,服务商的dns服务器会检查缓存,如果不存在你要访问的这个域名或者缓存状态已经过期,会访问根域名服务器,根域名服务器也会先检查缓存,如果无法直接返回结果,会检查这个域名是哪个dns服务器负责解析的,然后将请求转发过去,获得这个域名所对应的ip,然后返回给本地服务商的dns,本地服务商的dns就更新缓存,然后把ip返回给客户端。( k6 d: m" M$ D. w. i4 N! d
5 v2 z0 ~+ j' i* u, P  U
        当然这里本地dns服务商也可能基于某种目的劫持域名,至于GFW,在这里只能说呵呵吧,但另一个众所周知的案例是,如果你的IE地址栏输入错关键词,应该默认是跳转到微软的搜索页,假设你用的是原版ie,并且本地没有装各种会给ie加插件的工具,那么你的请求应该是微软搜索页的,但是在地方电信这块依然会被劫持掉,改为当地电信的搜索结果页。所以有时候,有些用户会把自己电脑上网配置的dns修改为更可信赖的公共dns,而不是地方电信的dns。(地方电信的劫持能力当然不止是dns,还包括内容替换,强插。不过这是后面的内容。
6 l% d  M$ R) ~$ P1 v
. e- w" d; m8 y1 g# o. N4 {        关于解析到ip,复杂点的还可以说说cdn的原理和机制,以及针对不同地区用户智能解析的机制。不过这里就不展开了,当然展开了我也未必说的清楚。
# Y* R6 F7 V/ c$ ?, _
$ }9 c2 W. Q, j8 r        到了ip这里,浏览器发出请求,去指定ip获取指定的文件,这里涉及路由寻址和报文传输,当然如果细说我也说不清了,但是至少知道用tracert可以跟踪路由就好。然后到了指定ip,服务器会在80端口有一个守护进程接受这个请求,细说的话这里还有三次握手的协议,那么下面就是webserver是怎么工作的,静态页面的处理比较简单,动态脚本还需要一个解释器系统工作,执行一段代码后将返回结果输出。这里可能又涉及有服务端缓存的,数据库,负载均衡和轮询等等,也就是可能后面不是一台主机,而是一个集群。再往下变成架构师专题了,就更不能展开了。#j347:* S) r) _, u- m) k' z9 N9 O# O0 m

$ Y4 b6 O' O( m, f2 F        但是到这里没完,为什么呢,返回的这个内容页往往又包含了大量的嵌入页面请求,比如css,比如各种小图标,小图片,这又涉及浏览器发出请求,这里也存在一些需要注意的逻辑,比如浏览器在发出请求时,对数量和排队的限制。此外,这个内容页可能还涉及了一些可执行代码,是在浏览器上执行的,这也对你看到什么有重要的影响。' A  z' ^  r: O6 s) J( k/ ~/ r9 e' w
. [. _/ m2 R( I# b
        但是到这里依然还没完,在到了目标机房,以及数据返回你的电脑时,都存在一个在子网被劫持被篡改的风险,ARP欺骗,ARP协议是什么,为什么你要访问的内容会被劫持会被篡改。此外,在传输中会不会被侦听,会不会被篡改,上文提过,除了GFW,还有强大的地方电信。
( ^: I0 j: u$ z, l, m' i$ k% G  c. v" l) Y
        啰嗦这么一堆,可能有人会觉得,我就应聘一个服务端程序员/前端技术/运维工程师,我需要知道这些么?那么问题来了,通常我问这个题目的时候,还会包含一到两个引申题目。4 U+ f% g! t6 Y- B3 w5 l/ k

$ B3 i  ^( u' z4 }# I1 Q        题目1:如果有个用户跟你说,你的网站/游戏很卡很慢,你该怎么分析,怎么响应?; P2 s( |5 d& P* i! K6 q  G, \
# D3 a( }3 q6 k( T* M$ l7 O) O5 N
        题目2:如果有个用户跟你说,打开你的网站会弹出淫荡小广告或杀毒软件报有木马,你该怎么分析,怎么响应?
4 S/ u/ t/ M) j2 b( L/ L" S( t+ h0 s8 l+ b1 a4 M
        看到这些,相信很多人都会发现,哎呀,这还真是个常见问题啊。而这种常见问题的排查,其实就涉及了如上的每个步骤。卡和慢究竟是客户端,网络层还是传输层的问题?如何快速排查和定位出问题,以及影响范围?这个思考题今天不展开,但是如果没有上面那个流程的认识,这个题目你肯定不可能给出好的结果。5 ]8 F) x) l& c3 }1 h! n

2 D8 ^7 V& p1 N        说一个观点,全栈工程师为什么现在这么被看重,是因为大部分问题出现的时候,问题并不会告诉你,它是属于哪个领域的,而需要你来摸索,排查,如果你不具备综合的视野和开阔的思路,你很可能无法找到问题的关键所在。你的能力又怎么体现呢?& @) H/ z, U$ ]0 ]" j1 U
! U) w" `; A* q/ d7 z, F
        其实是不是我们同时需要精通前端,精通网络协议,精通服务端,这个的确太难,但是有一个整体框架的思路,再去精通其中一个领域,你的能力和视野就会上一个台阶,至少在排查问题,技术协同等各个方面会显得更专业,更有自信。#j335:
  _3 Y( P$ [( [8 D- [( J5 S
" d6 R; C. P( z& T; [        我刚开始接触互联网的时候,刚开始写web程序的时候,那真是一窍不通,我写一个cgi程序,我想让他运行起来,我都糊里糊涂,不知道这个东西是怎么运行的,我跑一个webserver,设置目录权限,糊里糊涂,以及最早看着coolfire的一个黑客手册照猫画虎去拿别人服务器权限的时候,还是糊里糊涂,很长时间都不知道这玩意到底原理是什么。
& d; @. G/ ?5 N  h6 Q% @1 r! t/ C
       我总在想,那些年就没有人跟我讲这些,帮我梳理一下,所以当时很多东西做出来,但是不明白其发生作用的机制,更不明白如何更好的调优和细化。
5 @0 |; x) {' ~6 b
0 [* E4 H9 {. e  B1 u4 r  U/ q9 V        梳理一下这些,其实花不了太多时间和精力,而梳理后对认识问题的提升,是巨大的,对技术协同意识的提升,也是巨大的。
! C+ w( Q, b  V& @. a
  c) A# C! t8 l+ {9 D3 Z* u$ c
上一篇
下一篇


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

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

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

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

有的贴真心总结的很牛逼!!但我觉的需要一定的基础才能受益的。* G3 F. z/ X- ], ?9 D7 k
就像刚接触语言基础的人,学习面向对象!!!! C5 Y% [; R4 J7 L: r
例如:类是对象的抽象,对象是类的具体。刚开始学习的人对这有点哲学的解释搞懵了!!
/ E) G, k2 q! W) E但相对于有基础的人对这话不以为然!!觉的这话很经典!!
. C' q3 \+ [: _! S5 _希望我不被喷!!!#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 .先请大家注意我的头像。看到什么诡异的吗。
) g1 s, ]& d9 O' Y$ m2 然后请大家仔细看我的ID,有什么内涵?
# J3 Q0 p6 R" V/ |' \& A3 没看出来就默念我的ID 十遍,然后结合我的头像一起看!!
( l8 O. K8 E- N7 m; a  e4 好了,你继续往楼下看吧,我就是来混脸熟的。#y416:
放我一个人生活 「出类拔萃」 2018-5-4 07:19 来自手机 |显示全部楼层

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

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

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

真心有点水。  b9 k; S9 ^& _* ]& U4 L
Mnosyne0013认真回帖,奖励 2 个 金币.
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

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

GMT+8, 2021-9-18 21:02 , Processed in 0.028997 second(s), 24 queries , Redis On.

© 2015-2021 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表