还记得以前我提过的常见面试题么:从浏览器地址栏输入网址,到网页彻底打开,中间都发生了什么?从浏览器输入网址,到网页打开,发生了什么,这题有多经典,很多业内技术大牛说用过这题面试过新人,你说经典不经典。
百度FEX前端团队的负责人,T8前端大佬吴多益写了一篇文章:《从输入URL到页面加载完成的过程中都发生了什么事情》。有兴趣的可以翻翻八年前的这位顶尖架构师的旧文,他把整个过程拆成了六个问题:
从输入URL到浏览器接收的过程中发生了什么事情?
浏览器如何向网卡发送数据?
数据如何从本机网卡发送到服务器?
服务器接收到数据后会进行哪些处理?
服务器返回数据后浏览器如何处理?
浏览器如何将页面展现出来?
每一个问题,多益都做了深入的讲解,并给出了延伸学习的资料,让人看后受益匪浅,大呼过瘾。有人说他是在炫技,但是没有如此强的技术功底,是没法炫的如此漂亮的。
大部分技术人,可能多多少少都会遇到下面的困惑,比如:
AJAX跨域访问时总被浏览器的同源策略阻止,其背后的原理及符合其设计思想的解决方案是什么?
缓存可以提升性能,但什么样的HTTP消息才会被浏览器或者代理服务器缓存呢?
抓包时收到4xx或者5xxHTTP响应码,这意味着服务器端发生了什么?
当我们维护HTTPS连接时,如果要优化TLS/SSL的卸载性能,应该从哪里入手?
定位问题时,发现本地的TCP连接状态中出现了FIN_WAIT、CLOSE_WAIT或者TIME_WAIT,都是什么原因引起的?应该如何解决?
想要提升TCP连接的传输速度,可服务器上相关的系统参数多达数十个,究竟该怎么调整?
时下逐渐普及的IPv6,在报文上到底与IPv4协议有何差别?
你会发现,这些问题其实都和Web协议密切相关。我常常听到身边人抱怨“学不动了”,之所以会这样,大多是因为没有掌握好互联网体系中的底层知识。这些知识点相对稳定,而其他时刻变化的知识点是构建在这些知识点之上的。一旦掌握好,就可以长久使用,并且保持快速学习的能力。
Web协议有多重要,前面关于经典面试题的旧文已经提过,如果不能完整掌握协议的特征和目的,很多优化,故障排查,无从谈起,所幸协议层的进化并不如语言和工具那样频繁和激进,只要我们抓住它设计时背后的指导原则,系统地将Web协议转化为我们头脑中的结构体知识,就可以对我们学习前后端开发框架、面向连接的编程语言、各种分布式组件、架构设计、微服务编程等都起到事半功倍的效果。
可以说,无论你是前后端工程师,还是运维测试,如果想面试更高的职位,或者要站在更高的角度去理解技术业务架构,并能在问题出现时快速、高效地解决问题,Web协议一定是你绕不过去的一道坎。甚至会频繁出现在各个重要岗位的面试中,熟练掌握各种常用Web协议,可以帮你在工作中轻松应对各种网络难题。
如果你是前端工程师,可以快速定位问题的根源在后端还是前端,对网页性能的提升会有更多的思路。
如果你是后端工程师,可以更清晰地理解Web容器的工作原理,在网络层面快速缩小问题范围。
如果你是运维工程师,可以更明确地规划硬件及网络资源,对于故障节点的恢复也会有更系统的解决方案。
如果你是测试工程师,可以对压测工具的原理有更深入的理解,对RPC测试用例的构造也会更全面。
如果你是架构师,将会对分布式系统下的高可用架构设计和性能优化等问题有更加体系化的认识。
可是,想要真正掌握Web协议,并没有想象中那么容易。我发现大部分人在学习时,都卡在下面这些问题上:
Web协议的体系庞大,大多概念过于抽象,如果缺乏场景观,很多初学者会很容易从入门到放弃。
很难快速上手,就算勉强弄懂了复杂的概念,工作中一遇到复杂问题,还是一头雾水,不知道如何下手。
网上有很多文章可以参考,但要不就是知识点零散,要不就是解释得蜻蜓点水,无法深入到底层。即便是我前文推荐的顶尖架构师的博客,也需要有一定经验和知识基础,才能掌握其技巧核心。
市面上相关的课程很少,要不就是仅仅讲述某一个协议,要不就是只从理论出发来讲解,实战性不强。
除此之外,很少有人会在文章或课程里通过抓包去把Web协议的各个细节呈现出来,然后掰开揉碎了讲给大家。基于此,我推荐你陶辉老师在极客时间开的《Web协议详解与抓包实战》视频课,完全从实战出发,在关键场景中结合抓包工具进行实战分析,为你深入浅出地讲解常见Web协议涉及到的核心知识,并彻底掌握这些协议。
输入口令「webboy」立省90元,到手仅¥,仅限「前50人」有效作者陶辉,现在是智链达CTO。他曾担任阿里云高级专家,也在华为、腾讯、思科等公司从事过服务器端的研发工作。相信陶辉来讲Web协议详解与抓包实战,一定会带给你不一样的收获。为什么这么说?
在华为他负责iMAP网管系统的研发,在通过SNMP等协议管理众多网络设备的过程中,对路由器交换机如何处理协议栈、选择路由、转发报文等流程有了深入的理解;
在腾讯QQ空间,通过使用自定义的、基于TCP的Qzone协议传递巨量的数据,他对如何设计出高性能、可扩展的应用协议有了丰富的实践经验;
在思科他从事Nginx服务的研发,对Web服务器如何高效地处理HTTP协议有了全面的认识;
在阿里云作为VPC软件自定义网络项目中的管理系统架构师,他通过基于IntelDPDK自建网关、自定义网络层协议等工作,对IDC内部网络系统有了深刻了解。
在《Web协议详解与抓包实战》视频课中,陶辉老师会把自己十几年积累的第一手经验毫无保留地分享给大家。
你能获得什么?
陶辉老师会跟你一起从应用层到底层,通过具体问题和场景来学习Web协议。具体来说,你可以有下面4点收获。
1.深入理解常用Web协议
课程将基于应用场景深入介绍Web协议栈中最常用的HTTP/1.1、Websocket、HTTP/2.0、TLS/SSL、TCP、IP协议,这些协议处在OSI网络栈中的不同层级,每一层对上层协议封装、隐藏其下层协议的实现细节,而上层协议必须理解其相邻下层协议解决了什么问题,有哪些约束条件。陶辉老师会带你自上而下的学习这些协议的语法、应用场景,以建立起结构体的知识体系。
2.快速定位和解决网络疑难杂症
网络问题最为复杂,它涉及到多样化的客户端、技术相对封闭的网络设备、层层可能修改消息的代理服务器、快速迭代中的源服务器等,当客户端与服务器由于编程、配置错误造成系统故障时,相比在某一端使用经验式的排除法查错,从网络层面定位问题更为科学、快速而有效。
3.掌握常见抓包工具及报文分析方法
陶辉老师会配合抓包实践来带你深入了解协议细节。关于抓包工具的学习,则会遵循“即用即学”的原则,用到什么学什么,让你快速上手。
对于HTTP报文的抓包实践,主要使用Chrome浏览器提供的开发者工具Network面板,同时也将使用到curl、telnet命令行来模拟HTTP请求的发送。Wireshark是这门课程的主要抓包工具,包括过滤器、各面板的使用、如何基于统计分析报文等。对于服务器端的抓包我们会使用tcpdump工具,并配合Wireshark分析报文。
4.熟悉Web协议的架构和设计原则
HTTP最初用于解决人与机器的通讯,了解指导其设计原则的REST架构,就能理解在空间上它如何应对全球性的巨型分布式网络,在时间上如何应对数十年的技术变迁。
在分层架构下各层都有其待解决的核心问题,TLS/SSL协议面对的是如何使用非对称加密协商密钥及验证身份,TCP协议面对的则是可控流量下的可靠传输,IP协议则