我们的夏天仍未结束。 收藏本站
登陆 / 注册 搜索

阅读: 15.4K   回复: 13

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

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

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

管理员
        这是一道经典面试题,以前我以为只有我喜欢出这道题,后来发现其他技术大牛也出这道题。这道题其实测试的不是具体特定的技术,而是对整个上网这个概念以及背后流程的理解。0 S5 T* g* C1 W" Y$ Q$ c" N% k
/ f$ G1 N0 P: y. p7 o
4 M6 n0 @3 T* _1 U. W  _( Z1 ^
从输入网址到网页彻底打开,中间都发生了什么? server&browser.png

# ^( z0 ?6 V( }* R6 E' y5 o5 B, H        我先说一下我所理解或者说我所期待的大概的答题要点,后面再解释这道题的目的和意义,实际上所谓上网这个过程分为三个大的区块,一块是客户端,一块是网络传输层,一块是服务端。+ X# Q! C2 G" I# K2 f. |
/ Y8 Z  g1 v/ a; z: c8 d
        从输入网址开始,这个网址在客户端就会有一个解析,首先浏览器如果有钩子,可能会直接对这个网址做出判断和反馈,比如国内大部分第三方浏览器(IE浏览器基础上加壳的那种),都会直接把地址输入关键词后应该跳转到微软搜索页的那个url劫持掉,所以第一步是浏览器对url的判断和劫持,第二步是本地host文件的判断,在360崛起之前,host文件也是各种木马和流氓软件最爱处理修改的文件,不声不响就把你的hao123给劫持了,而且你几乎看不出来哪里改了。3 j) f- C0 a% s3 L, k

9 d$ ~0 c2 E1 W        那么逃脱本地客户端的判断后,这个域名查询请求会发到服务商的dns服务器,服务商的dns服务器会检查缓存,如果不存在你要访问的这个域名或者缓存状态已经过期,会访问根域名服务器,根域名服务器也会先检查缓存,如果无法直接返回结果,会检查这个域名是哪个dns服务器负责解析的,然后将请求转发过去,获得这个域名所对应的ip,然后返回给本地服务商的dns,本地服务商的dns就更新缓存,然后把ip返回给客户端。
, W' _, e7 J+ q1 X, n8 q6 y! d" n  ~3 v9 Y0 v
        当然这里本地dns服务商也可能基于某种目的劫持域名,至于GFW,在这里只能说呵呵吧,但另一个众所周知的案例是,如果你的IE地址栏输入错关键词,应该默认是跳转到微软的搜索页,假设你用的是原版ie,并且本地没有装各种会给ie加插件的工具,那么你的请求应该是微软搜索页的,但是在地方电信这块依然会被劫持掉,改为当地电信的搜索结果页。所以有时候,有些用户会把自己电脑上网配置的dns修改为更可信赖的公共dns,而不是地方电信的dns。(地方电信的劫持能力当然不止是dns,还包括内容替换,强插。不过这是后面的内容。$ y# s4 ?/ B/ I4 k) F! u
, o0 v' x$ m/ n  g' H  t
        关于解析到ip,复杂点的还可以说说cdn的原理和机制,以及针对不同地区用户智能解析的机制。不过这里就不展开了,当然展开了我也未必说的清楚。6 e; T* q* c4 I. G7 r

& L  v+ U7 y8 e, u1 d1 ~/ x8 _        到了ip这里,浏览器发出请求,去指定ip获取指定的文件,这里涉及路由寻址和报文传输,当然如果细说我也说不清了,但是至少知道用tracert可以跟踪路由就好。然后到了指定ip,服务器会在80端口有一个守护进程接受这个请求,细说的话这里还有三次握手的协议,那么下面就是webserver是怎么工作的,静态页面的处理比较简单,动态脚本还需要一个解释器系统工作,执行一段代码后将返回结果输出。这里可能又涉及有服务端缓存的,数据库,负载均衡和轮询等等,也就是可能后面不是一台主机,而是一个集群。再往下变成架构师专题了,就更不能展开了。#j347:
. ^& @1 R/ l! O  r8 d
7 }) p& W& F9 N8 q6 n" H        但是到这里没完,为什么呢,返回的这个内容页往往又包含了大量的嵌入页面请求,比如css,比如各种小图标,小图片,这又涉及浏览器发出请求,这里也存在一些需要注意的逻辑,比如浏览器在发出请求时,对数量和排队的限制。此外,这个内容页可能还涉及了一些可执行代码,是在浏览器上执行的,这也对你看到什么有重要的影响。
6 f& P, ^& R* {, ?! y# T- P5 Q9 ]0 v! @* Z) {6 u- ]
        但是到这里依然还没完,在到了目标机房,以及数据返回你的电脑时,都存在一个在子网被劫持被篡改的风险,ARP欺骗,ARP协议是什么,为什么你要访问的内容会被劫持会被篡改。此外,在传输中会不会被侦听,会不会被篡改,上文提过,除了GFW,还有强大的地方电信。
$ J6 P& a: U- s( P1 K3 c7 @  ]' h
        啰嗦这么一堆,可能有人会觉得,我就应聘一个服务端程序员/前端技术/运维工程师,我需要知道这些么?那么问题来了,通常我问这个题目的时候,还会包含一到两个引申题目。
  U- Z# `8 w6 Z3 H5 }0 f$ D7 ]8 ]: w
        题目1:如果有个用户跟你说,你的网站/游戏很卡很慢,你该怎么分析,怎么响应?: M7 X1 J9 N: b; d% |  j8 H# U
! ]# J% d& K3 P( l7 U' n, r
        题目2:如果有个用户跟你说,打开你的网站会弹出淫荡小广告或杀毒软件报有木马,你该怎么分析,怎么响应?) O2 E4 J* e( Z1 k/ [6 b- E) Y. ^
& Q( l. h- f& G
        看到这些,相信很多人都会发现,哎呀,这还真是个常见问题啊。而这种常见问题的排查,其实就涉及了如上的每个步骤。卡和慢究竟是客户端,网络层还是传输层的问题?如何快速排查和定位出问题,以及影响范围?这个思考题今天不展开,但是如果没有上面那个流程的认识,这个题目你肯定不可能给出好的结果。5 _4 u, c* N* E# O

0 g3 h; ~5 S" b4 ]        说一个观点,全栈工程师为什么现在这么被看重,是因为大部分问题出现的时候,问题并不会告诉你,它是属于哪个领域的,而需要你来摸索,排查,如果你不具备综合的视野和开阔的思路,你很可能无法找到问题的关键所在。你的能力又怎么体现呢?& }2 t- E: ^/ V7 D: w& E2 i9 r# x

1 j3 Z* Z& s! m4 P9 l: h        其实是不是我们同时需要精通前端,精通网络协议,精通服务端,这个的确太难,但是有一个整体框架的思路,再去精通其中一个领域,你的能力和视野就会上一个台阶,至少在排查问题,技术协同等各个方面会显得更专业,更有自信。#j335:; ?0 O* |3 m+ w) d. o$ c* C

1 U4 r  H, p! w3 l: ~4 e        我刚开始接触互联网的时候,刚开始写web程序的时候,那真是一窍不通,我写一个cgi程序,我想让他运行起来,我都糊里糊涂,不知道这个东西是怎么运行的,我跑一个webserver,设置目录权限,糊里糊涂,以及最早看着coolfire的一个黑客手册照猫画虎去拿别人服务器权限的时候,还是糊里糊涂,很长时间都不知道这玩意到底原理是什么。+ T0 J5 D% |9 b8 K3 ?
) o  ?+ o' m  b  Y: v
       我总在想,那些年就没有人跟我讲这些,帮我梳理一下,所以当时很多东西做出来,但是不明白其发生作用的机制,更不明白如何更好的调优和细化。+ Z4 |" @! J* g; w& h% l
' J2 o; ^# ~2 G+ c* e0 B6 i( Y, Y
        梳理一下这些,其实花不了太多时间和精力,而梳理后对认识问题的提升,是巨大的,对技术协同意识的提升,也是巨大的。
/ J8 V& E1 z( y6 t0 x0 F: E3 ]; E' _/ I! Z0 K7 C


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

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

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

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

有的贴真心总结的很牛逼!!但我觉的需要一定的基础才能受益的。4 p3 X5 X# s4 t  `0 z
就像刚接触语言基础的人,学习面向对象!!!
. \+ Z4 j# c3 i  |例如:类是对象的抽象,对象是类的具体。刚开始学习的人对这有点哲学的解释搞懵了!!
! v3 `' s' n! A5 l. C8 [1 x但相对于有基础的人对这话不以为然!!觉的这话很经典!!6 O4 K% M; d' h# q
希望我不被喷!!!#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 .先请大家注意我的头像。看到什么诡异的吗。9 V! R( i8 F2 G- P9 l  u' H% D
2 然后请大家仔细看我的ID,有什么内涵?
' e% x7 ?+ F$ m9 m" y3 没看出来就默念我的ID 十遍,然后结合我的头像一起看!!
% A9 Q0 h" D# V/ P, U4 好了,你继续往楼下看吧,我就是来混脸熟的。#y416:
放我一个人生活 「出类拔萃」 2018-5-4 07:19 来自手机 |显示全部楼层

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

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

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

真心有点水。
9 I. H! |+ u. T6 r+ C# o  g
您需要登录后才可以回帖 登录 | 注册账号  

本版积分规则

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

GMT+8, 2020-9-28 03:08 , Processed in 0.045541 second(s), 23 queries , Redis On.

© 2015-2020 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表