明天,不是你想要就能有的。 收藏本站
登陆 / 注册 搜索

阅读: 15.8K   回复: 13

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

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

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

管理员
        这是一道经典面试题,以前我以为只有我喜欢出这道题,后来发现其他技术大牛也出这道题。这道题其实测试的不是具体特定的技术,而是对整个上网这个概念以及背后流程的理解。
2 H& ~1 w3 |0 O! k- v' E3 ^$ _( k; L" L
, I# @7 V1 X6 `% d( ]/ k
  \, R) x; z, ~( w3 ?9 G5 M3 k
从输入网址到网页彻底打开,中间都发生了什么? server&browser.png

- d  s  r2 S2 ~  _2 w0 x7 L        我先说一下我所理解或者说我所期待的大概的答题要点,后面再解释这道题的目的和意义,实际上所谓上网这个过程分为三个大的区块,一块是客户端,一块是网络传输层,一块是服务端。9 L; l( c2 b4 U' S

2 ?9 z5 Y6 f5 I. y9 n  d- A% z+ V9 q        从输入网址开始,这个网址在客户端就会有一个解析,首先浏览器如果有钩子,可能会直接对这个网址做出判断和反馈,比如国内大部分第三方浏览器(IE浏览器基础上加壳的那种),都会直接把地址输入关键词后应该跳转到微软搜索页的那个url劫持掉,所以第一步是浏览器对url的判断和劫持,第二步是本地host文件的判断,在360崛起之前,host文件也是各种木马和流氓软件最爱处理修改的文件,不声不响就把你的hao123给劫持了,而且你几乎看不出来哪里改了。7 c+ ^7 \5 C- \  S% Y. u
; _6 X: R. x9 e+ E! P
        那么逃脱本地客户端的判断后,这个域名查询请求会发到服务商的dns服务器,服务商的dns服务器会检查缓存,如果不存在你要访问的这个域名或者缓存状态已经过期,会访问根域名服务器,根域名服务器也会先检查缓存,如果无法直接返回结果,会检查这个域名是哪个dns服务器负责解析的,然后将请求转发过去,获得这个域名所对应的ip,然后返回给本地服务商的dns,本地服务商的dns就更新缓存,然后把ip返回给客户端。- C2 j  \( y( v& A: U- I( _

6 o: j6 ?% H7 o        当然这里本地dns服务商也可能基于某种目的劫持域名,至于GFW,在这里只能说呵呵吧,但另一个众所周知的案例是,如果你的IE地址栏输入错关键词,应该默认是跳转到微软的搜索页,假设你用的是原版ie,并且本地没有装各种会给ie加插件的工具,那么你的请求应该是微软搜索页的,但是在地方电信这块依然会被劫持掉,改为当地电信的搜索结果页。所以有时候,有些用户会把自己电脑上网配置的dns修改为更可信赖的公共dns,而不是地方电信的dns。(地方电信的劫持能力当然不止是dns,还包括内容替换,强插。不过这是后面的内容。9 [" m, m" K+ S+ {( b! I4 v; j" i7 o
" d7 ?2 T! R" ~, b2 G& _
        关于解析到ip,复杂点的还可以说说cdn的原理和机制,以及针对不同地区用户智能解析的机制。不过这里就不展开了,当然展开了我也未必说的清楚。
7 X0 {* J5 h$ T
1 a) {2 o9 ^( U4 {: R        到了ip这里,浏览器发出请求,去指定ip获取指定的文件,这里涉及路由寻址和报文传输,当然如果细说我也说不清了,但是至少知道用tracert可以跟踪路由就好。然后到了指定ip,服务器会在80端口有一个守护进程接受这个请求,细说的话这里还有三次握手的协议,那么下面就是webserver是怎么工作的,静态页面的处理比较简单,动态脚本还需要一个解释器系统工作,执行一段代码后将返回结果输出。这里可能又涉及有服务端缓存的,数据库,负载均衡和轮询等等,也就是可能后面不是一台主机,而是一个集群。再往下变成架构师专题了,就更不能展开了。#j347:
2 r: q" p9 O3 H+ e. f( J* p& g, L& V$ \1 }8 Z
        但是到这里没完,为什么呢,返回的这个内容页往往又包含了大量的嵌入页面请求,比如css,比如各种小图标,小图片,这又涉及浏览器发出请求,这里也存在一些需要注意的逻辑,比如浏览器在发出请求时,对数量和排队的限制。此外,这个内容页可能还涉及了一些可执行代码,是在浏览器上执行的,这也对你看到什么有重要的影响。, Z/ i7 Y3 {$ ~8 R

+ ~! ^- u! d6 \9 j  s" M; i8 w' h5 W        但是到这里依然还没完,在到了目标机房,以及数据返回你的电脑时,都存在一个在子网被劫持被篡改的风险,ARP欺骗,ARP协议是什么,为什么你要访问的内容会被劫持会被篡改。此外,在传输中会不会被侦听,会不会被篡改,上文提过,除了GFW,还有强大的地方电信。- A+ W# ?, B# @0 }7 i
% ?; O( Q4 f+ }0 K2 R; u
        啰嗦这么一堆,可能有人会觉得,我就应聘一个服务端程序员/前端技术/运维工程师,我需要知道这些么?那么问题来了,通常我问这个题目的时候,还会包含一到两个引申题目。/ e" k9 \' t  `$ Z, R9 Q
/ Z! O3 ^% G: T4 Y+ K
        题目1:如果有个用户跟你说,你的网站/游戏很卡很慢,你该怎么分析,怎么响应?/ E& R$ Z. H- F& ^4 h$ ]5 a- D# }
; J$ C  m8 T5 u% p
        题目2:如果有个用户跟你说,打开你的网站会弹出淫荡小广告或杀毒软件报有木马,你该怎么分析,怎么响应?
+ p& n# \- E+ C
7 s% ?5 a* o: M  f0 M        看到这些,相信很多人都会发现,哎呀,这还真是个常见问题啊。而这种常见问题的排查,其实就涉及了如上的每个步骤。卡和慢究竟是客户端,网络层还是传输层的问题?如何快速排查和定位出问题,以及影响范围?这个思考题今天不展开,但是如果没有上面那个流程的认识,这个题目你肯定不可能给出好的结果。
2 @. h( k- K6 v8 k1 \' ?+ ]
8 X0 ~# p4 W  _6 ~: |& h, `/ F        说一个观点,全栈工程师为什么现在这么被看重,是因为大部分问题出现的时候,问题并不会告诉你,它是属于哪个领域的,而需要你来摸索,排查,如果你不具备综合的视野和开阔的思路,你很可能无法找到问题的关键所在。你的能力又怎么体现呢?2 T+ i8 A5 P6 [& ^) C' ]0 D# k3 \

1 G/ _" z( @( X( u- t6 F* P        其实是不是我们同时需要精通前端,精通网络协议,精通服务端,这个的确太难,但是有一个整体框架的思路,再去精通其中一个领域,你的能力和视野就会上一个台阶,至少在排查问题,技术协同等各个方面会显得更专业,更有自信。#j335:
: X; m" i6 h' _$ a4 y  ~
5 P, s7 \( M' e6 H  b8 S3 Q5 K5 p/ z        我刚开始接触互联网的时候,刚开始写web程序的时候,那真是一窍不通,我写一个cgi程序,我想让他运行起来,我都糊里糊涂,不知道这个东西是怎么运行的,我跑一个webserver,设置目录权限,糊里糊涂,以及最早看着coolfire的一个黑客手册照猫画虎去拿别人服务器权限的时候,还是糊里糊涂,很长时间都不知道这玩意到底原理是什么。
  b$ |5 g4 x4 X: ]; v: k7 ]# G
. K$ Z/ e% H. e! ?- d, g       我总在想,那些年就没有人跟我讲这些,帮我梳理一下,所以当时很多东西做出来,但是不明白其发生作用的机制,更不明白如何更好的调优和细化。
# N- A" J+ B! G7 {
5 d& |* A  q) i# W: [$ C1 @4 S( |        梳理一下这些,其实花不了太多时间和精力,而梳理后对认识问题的提升,是巨大的,对技术协同意识的提升,也是巨大的。0 j* `  A, V, ?: G3 \. I7 ~7 y8 K6 U
( h1 N' y. P0 @8 I% J8 k9 k


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

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

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

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

有的贴真心总结的很牛逼!!但我觉的需要一定的基础才能受益的。
9 [* s6 q4 E, Q# Y1 X7 w/ B9 t就像刚接触语言基础的人,学习面向对象!!!
6 J+ k0 W2 B. ]* [例如:类是对象的抽象,对象是类的具体。刚开始学习的人对这有点哲学的解释搞懵了!!: n. W* i0 f3 @) L: r1 d& U3 x! M5 y; U
但相对于有基础的人对这话不以为然!!觉的这话很经典!!% }7 @- w$ f! w' c# ^4 v, s
希望我不被喷!!!#j321:
空谷幽兰 仗剑天涯 2016-4-22 07:55 来自手机 |显示全部楼层

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

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

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

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

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

很有感悟,谢谢!
sirius 「初入古黑」 2016-6-14 22:06 |显示全部楼层

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

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

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

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

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

不错不错,我也跟着水水。
清风霁月 「出类拔萃」 2018-5-1 08:20 来自手机 |显示全部楼层

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

1 .先请大家注意我的头像。看到什么诡异的吗。
, W9 S( M6 ]8 q; q5 {+ Y2 然后请大家仔细看我的ID,有什么内涵?
, G" {5 j* A, r( `6 N1 P# g3 没看出来就默念我的ID 十遍,然后结合我的头像一起看!! ' o8 L* U0 Y  M% L# m
4 好了,你继续往楼下看吧,我就是来混脸熟的。#y416:
放我一个人生活 「出类拔萃」 2018-5-4 07:19 来自手机 |显示全部楼层

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

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

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

真心有点水。
; H+ P, b: u  D9 Y6 B1 x* _' J
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

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

GMT+8, 2021-1-26 12:47 , Processed in 0.034031 second(s), 23 queries , Redis On.

© 2015-2020 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表