从浏览器地址栏输入网址,到网页彻底打开,中间都发生了什么?

这是一道经典面试题,以前我以为只有我喜欢出这道题,后来在微博上发现其他技术大牛也出这道题。

这道题其实测试的不是具体特定的技术,而是对整个上网这个概念以及背后流程的理解。

我先说一下我所理解或者说我所期待的大概的答题要点,后面再解释这道题的目的和意义,实际上所谓上网这个过程分为三个大的区块,一块是客户端,一块是网络传输层,一块是服务端。

从输入网址开始,这个网址在客户端就会有一个解析,首先浏览器如果有钩子,可能会直接对这个网址做出判断和反馈,比如国内大部分第三方浏览器(IE浏览器基础上加壳的那种),都会直接把地址输入关键词后应该跳转到微软搜索页的那个url劫持掉,所以第一步是浏览器对url的判断和劫持,第二步是本地host文件的判断,在360崛起之前,host文件也是各种木马和流氓软件最爱处理修改的文件,不声不响就把你的hao123给劫持了,而且你几乎看不出来哪里改了。

那么逃脱本地客户端的判断后,这个域名查询请求会发到服务商的dns服务器,服务商的dns服务器会检查缓存,如果不存在你要访问的这个域名或者缓存状态已经过期,会访问根域名服务器,根域名服务器也会先检查缓存,如果无法直接返回结果,会检查这个域名是哪个dns服务器负责解析的,然后将请求转发过去,获得这个域名所对应的ip,然后返回给本地服务商的dns,本地服务商的dns就更新缓存,然后把ip返回给客户端。

当然这里本地dns服务商也可能基于某种目的劫持域名,至于GFW,在这里只能说呵呵吧, 但另一个众所周知的案例是,如果你的IE地址栏输入错关键词,应该默认是跳转到微软的搜索页,假设你用的是原版ie,并且本地没有装各种会给ie加插件的工具,那么你的请求应该是微软搜索页的,但是在地方电信这块依然会被劫持掉,改为当地电信的搜索结果页。所以有时候,有些用户会把自己电脑上网配置的dns修改为更可信赖的公共dns,而不是地方电信的dns。(地方电信的劫持能力当然不止是dns,还包括内容替换,强插。不过这是后面的内容。)

关于解析到ip,复杂点的还可以说说cdn的原理和机制,以及针对不同地区用户智能解析的机制。不过这里就不展开了,当然展开了我也未必说的清楚。

到了ip这里,浏览器发出请求,去指定ip获取指定的文件,这里涉及路由寻址和报文传输,当然如果细说我也说不清了,但是至少知道用tracert可以跟踪路由就好。然后到了指定ip,服务器会在80端口有一个守护进程接受这个请求,细说的话这里还有三次握手的协议,那么下面就是webserver是怎么工作的,静态页面的处理比较简单,动态脚本还需要一个解释器系统工作,执行一段代码后将返回结果输出。这里可能又涉及有服务端缓存的,数据库,负载均衡和轮询等等,也就是可能后面不是一台主机,而是一个集群。再往下变成架构师专题了,就更不能展开了。

但是到这里没完,为什么呢,返回的这个内容页往往又包含了大量的嵌入页面请求,比如css,比如各种小图标,小图片,这又涉及浏览器发出请求,这里也存在一些需要注意的逻辑,比如浏览器在发出请求时,对数量和排队的限制。此外,这个内容页可能还涉及了一些可执行代码,是在浏览器上执行的,这也对你看到什么有重要的影响。

但是到这里依然还没完,在到了目标机房,以及数据返回你的电脑时,都存在一个在子网被劫持被篡改的风险,ARP欺骗,ARP协议是什么,为什么你要访问的内容会被劫持会被篡改。此外,在传输中会不会被侦听,会不会被篡改,上文提过,除了GFW,还有强大的地方电信。

啰嗦这么一堆,可能有人会觉得,我就应聘一个服务端程序员/前端技术/运维工程师,我需要知道这些么?那么问题来了,通常我问这个题目的时候,还会包含一到两个引申题目。

题目1:如果有个用户跟你说,你的网站/游戏很卡很慢,你该怎么分析,怎么响应?

题目2:如果有个用户跟你说,打开你的网站会弹出淫荡小广告或杀毒软件报有木马,你该怎么分析,怎么响应?

看到这些,相信很多人都会发现,哎呀,这还真是个常见问题啊。而这种常见问题的排查,其实就涉及了如上的每个步骤。卡和慢究竟是客户端,网络层还是传输层的问题?如何快速排查和定位出问题,以及影响范围? 这个思考题今天不展开,但是如果没有上面那个流程的认识,这个题目你肯定不可能给出好的结果。

说一个观点,全栈工程师为什么现在这么被看重,是因为大部分问题出现的时候,问题并不会告诉你,它是属于哪个领域的,而需要你来摸索,排查,如果你不具备综合的视野和开阔的思路,你很可能无法找到问题的关键所在。你的能力又怎么体现呢?

其实是不是我们同时需要精通前端,精通网络协议,精通服务端,这个的确太难,但是有一个整体框架的思路,再去精通其中一个领域,你的能力和视野就会上一个台阶,至少在排查问题,技术协同等各个方面会显得更专业,更有自信。

我刚开始接触互联网的时候,刚开始写web程序的时候,那真是一窍不通,我写一个cgi程序,我想让他运行起来,我都糊里糊涂,不知道这个东西是怎么运行的,我跑一个webserver,设置目录权限,糊里糊涂,以及最早看着coolfire的一个黑客手册照猫画虎去拿别人服务器权限的时候,还是糊里糊涂,很长时间都不知道这玩意到底原理是虾米。 我总在想,那些年就没有人跟我讲这些,帮我梳理一下,所以当时很多东西做出来,但是不明白其发生作用的机制,更不明白如何更好的调优和细化。

梳理一下这些,其实花不了太多时间和精力,而梳理后对认识问题的提升,是巨大的,对技术协同意识的提升,也是巨大的。


一则经典技术面试题目的解读相关推荐

  1. 网络工程师经典技术面试题系列华为数通 STP关键理论与实战

    实验总结 STP作用:破环,冗余 BPDU = Bridge Protocol Data Unit 桥协议数据单元,包含STP详细信息,交换机每两秒发送一次 BID = Bridge ID,桥ID,交 ...

  2. 谷歌公司经典面试题扔鸡蛋的详细解读(一)

    文章目录 题目:扔鸡蛋问题 方法一: 方法二: 方法三: 方法三进阶:假设法 总结: 首先说一下大概的题目 题目:扔鸡蛋问题 有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度.比如鸡蛋在第9层没 ...

  3. 谷歌公司经典面试题扔鸡蛋的详细解读—动态规划(二)

    首先要说的是到底啥是动态规划? 那么,怎样找到状态转移方程式呢? 状态转移方程式有了,如何计算出这个方程式的结果呢? 代码如何实现? 如何优化呢? --------------– 上一篇博客中咦非常通 ...

  4. 解读一道微软经典面试题:海盗分宝石

    这是微软的一道经典的试题,大约是2008年左右的时候出的.这个题目虽然已经过了十多年了,但是仍然是一道非常经典的试题,值时不时拿出来看一看. 问题描述 五个海盗抢到了100颗宝石.他们决定按以下的规则 ...

  5. Java经典面试题汇总200道

    超详细的Java学习资料汇总 Java经典面试题汇总 Java 基础 1. JDK 和 JRE 有什么区别? 2. == 和 equals 的区别是什么? 3. 两个对象的 hashCode()相同, ...

  6. 必读!53个Python经典面试题详解

    作者 | Chris 翻译 | 苏本如,编辑 | 夕颜 题图 | 视觉中国 出品 | AI科技大本营(ID:rgznai100) 本文列出53个Python面试问题,并且提供了答案,供数科学家和软件工 ...

  7. Web前端经典面试试题(二)

    上次由于时间有限只分享了一部分的前端面试题,所以本篇继续分享前端经典面试试题 一. 栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 队列先进先出,栈先进后出. 栈 ...

  8. 【Linux 经典面试题】

    [Linux  经典面试题] 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文 ...

  9. 用python画奥迪标志_不知道不 OK!53 个 Python 经典面试题详解

    作者 | Chris 翻译 | 苏本如,责编 | 夕颜 头图 | CSDN付费下载自视觉中国 出品 | CSDN(ID:CSDNnews) 以下为译文: 本文列出53个Python面试问题,并且提供了 ...

最新文章

  1. vues响应接口and实例
  2. 【Pytorch神经网络理论篇】 15 过拟合问题的优化技巧(二):Dropout()方法
  3. python 调用gpu算力_数据科学家需要算力,GPU 如何实现?-控制器/处理器-与非网...
  4. python爬取京东手机配置信息(正则)
  5. oracle如何删除物理表空间,oracle 如何删除被误删物理文件的表空间
  6. linux 环境下设置Kettle的转换,作业定时执行简单操作
  7. 学安全测试需要多少钱?安全测试培训费一般多少?
  8. dos命令move 移动文件
  9. 软件测试面试题(2020.6.29)
  10. extension(扩展)使用详情
  11. IE地址栏可输入的最大字符数
  12. 按键精灵脚本:采集鼠标当前所在坐标的颜色
  13. 用CSS美化你的HTML
  14. 于繁华中寻觅一份淡然(街灯上的藤蔓)
  15. 那些英年早逝的 IT 劳模们
  16. 请问你们学校有计算机教室吗英语翻译,我们家有电脑。英语翻译
  17. ERROR:cannot load flash device description
  18. Java遍历JSON
  19. 爬虫 scrapy框架 爬取360图片
  20. ctrl+c 不能使用,无法复制

热门文章

  1. 超轻量AI推理引擎MindSpore Lite新版本发布,支撑HMS Core AI领域全面升级
  2. 什么是 Byzer-lang ? 一门面向大数据和 AI 的开源云原生编程语言
  3. 基于SSM的人事管理系统
  4. 除了自己选择的几家定点医疗机构,还有哪些医院无须选择为定点也可以报销?...
  5. ROS传输图像带宽不够用的解决方法(realsenseD415压缩图像)
  6. 来自西弗吉利亚大学li xin整理的CV代码合集
  7. css插件载进去ps里面,css3ps插件
  8. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩
  9. excel一键清除按钮_一键清除Excel过滤器
  10. iOS 蓝牙固件升级