一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
网络协议系列 第1篇--网络分层,TCP/IP五层模型【掘金日新计划】
网络协议系列 第2篇--传输层工作原理【掘金日新计划】
网络协议系列 第3篇--TCP有哪些机制【掘金日新计划】
网络协议系列 第4篇--应用层HTTP发展史【掘金日新计划】
网络协议系列 第5篇--HTTPS原理【掘金日新计划】
网络协议系列 第6篇--网络协议串讲【掘金日新计划】
网络协议系列 第7篇--补充一些底层网络知识【掘金日新计划】
前言:每日革新自我、追求进步。积土而为山,积水而为海。我们来到系列的第六篇,这篇文章将以一次浏览网页为例子,纵观整个网络协议的运作。
周尛先森
网络协议虽然是大家都应了解的基本知识,但网上很多相关文章总会忽略一些内容,没有阐明完整的逻辑脉络,我当年学习它的时候也废了挺大功夫。
网络分层、TCP协议、HTTPS中对称与非对称加密,除了了解“它是什么”,你是否有想过“为什么是它”?我认为理解了后者才真正理解了网络协议。
从输入URL到看到页面发生了什么?
这个问题非常大,当中的知识点非常多且很细,网上有一些资源是从浏览器的角度去分析,也是分析的非常棒。
本篇文章围绕网络协议,看看URL到看到页面中间发生了什么。简单总结了以下几个步骤:
-
拿到url,发起请求
-
检查缓存,有缓存则直接返回
-
没有缓存,首先进行DNS,获取IP地址,HTTPS的话还要建立S连接
-
利用TCP建立传输层连接,然后再处理应用层
-
传输数据,然后断开连接
接下来一个一个去分析吧
第一步 :
当用户在地址栏中输入一个查询关键字时,地址栏会判断输入的关键字是搜索内容,还是请求的 URL。
如果是搜索内容,地址栏会使用浏览器默认的搜索引擎,来合成新的带搜索关键字的 URL。
如果判断输入内容符合 URL 规则,比如输入的是 time.geekbang.org,那么地址栏会根据规则,把这段内容加上协议,合成为完整的 URL。
第二步 :
检查缓存,缓存分为强制缓存和协商缓存。
当缓存数据库中有客户端需要的数据,客户端直接将数据从其中拿出来使用(如果数据未失效),当缓存服务器没有需要的数据时,客户端才会向服务端请求。
又称对比缓存。客户端会先从缓存数据库拿到一个缓存的标识,然后向服务端验证标识是否失效,如果没有失效服务端会返回304,这样客户端可以直接去缓存数据库拿出数据,如果失效,服务端会返回新的数据。
强制缓存的优先级高于协商缓存,若两种缓存皆存在,且强制缓存命中目标,则协商缓存不再验证标识。
第三步 :
没有缓存,需要发送请求,则需要DNS解析。
DNS解析过程大致是:先发一个DNS请求,首先是本地域名服务器开始工作,它会查找有没有缓存这个URL的IP地址,如果有就直接返回,没有的话就会从跟域名服务器开始找。
从顶级域名开始向下找,再找到一级域名,二级域名...最后将IP地址返回,客户端与服务端开始建立连接。
第四步 :
开始建立TCP连接,这里简述一下,就是TCP的三次握手,建立了TCP连接后开始应用层的处理,HTTP、HTTPS的连接。
第五步 :
服务器与客户端开始传输数据,所有数据都传输完了,如果没开启长连接,则要断开连接了。这里TCP断开连接使用的是四次挥手。
这里再放一张图,表示一个完整数据包携带的信息:
图(图片来源于网络)
小结
URL到页面展示,真的是一个非常大的课题,中间的每个点都可以深入研究。这里本意只是将大的框架码出来,具体细节还需自己深入研究。
最后,让我们一起加油吧!
都看到这了,不如顺手点个赞再走 ( *ˇωˇ* )