初学者,总结一下读书笔记,望海涵。
1.1 B/S网络架构概述
相比于C/S架构,B/S网络架构(Browser/Server)从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,采用无状态的短连接来交互数据。
当一个用户在浏览器里输入网址时,会发生很多操作:
1.请求DNS把域名解析成对应的Ip地址
2.根据ip地址在互联网上找到对应的服务器
3.向服务器发起get请求,服务器返回数据资源给访问的用户。
4.数据返回浏览器时,若解析资源发现还有一些静态资源(css,js或图片),会再次发起HTTP请求。
5.发起的HTTP请求很可能会在CDN上,CDN服务器又会开始处理请求。
网络架构遵循的原则:
1.URL,统一资源定位符。互联网上所有资源都要用一个URL表示。
2.必须基于HTTP与服务端交互。
3.数据展示必须在浏览器中进行。
1.2 如何发起一个请求
发起一个HTTP请求的过程就是建立一个Socket通信的过程。(可以通过HttpClient来模拟)。
1.3 HTTP解析
B/S网络架构的核心就是HTTP。
HTTP Header控制着用户浏览器的渲染行为和服务器的执行逻辑。
可以通过F12查看HTTP请求的请求头和响应头。
查看HTTP信息的工具:Firebug HttpFox
当我们刷新一个页面时,在HTTP请求头中会增加一些请求头,它告诉服务端我们要获取最新数据而不是缓存。
在请求头增加了两个请求项:Pragma:no-cache 和 Cache-Control:no-cache
Expires 后面跟着一个日期和时间,超过这个时间值后,缓存的内容将失效。
Last-Modefied/Etag 表示一个服务器上资源的最后修改时间。Etag 给每个页面分配唯一的编号,通过编号区分当前页面是否是最新的。
1.4 DNS域名解析
1.浏览器检查缓存中有无这个域名对应的解析过的ip地址。有则结束,无则进行下一步。
2.浏览器查找操作系统缓存中是否有这个域名对应的DNS解析结果。有则结束,无则进行下一步。
3.操作系统会把这个域名发送给这里设置的local DNS Server(本地域名服务器),例:学校,电信,联通。有则结束,无则进行下一步。
4.直接到Root Server域名服务器(根域名服务器)请求解析。
5.根域名服务器会返回给本地域名服务器一个所查询域的主域名服务器(gTLD Server,国际*服务器,全球13台)。
6.本地域名服务器向gTLD server发起请求
7.gTLD server查找并返回此域名对应的Name Server域名服务器地址(通常为所注册的域名服务器)
8.Name Server查询存储的域名和ip的映射关系表
9.Name Server将ip和TTL一起返回给本地域名服务器。
10.本地域名服务器将解析的结果返回给用户。用户根据TTL值缓存在本地系统缓存中。
可以用nslookup查询域名的解析结果。
ipconfig /flushdns 刷新缓存。
JVM也会缓存DNS的解析结果,在InetAddress类中完成。若要用InetAddress类解析域名,必须采用单例模式。
域名解析记录主要分为:A记录,MX记录,CNAME记录,NS记录,TXT记录
1.5 CDN工作机制
CDN,内容分布网络,构筑在现有internet上的一种先进的流量分配网络,其目的是通过现有的Internet中增加一层新的网络架构。使用户可以就近取得所需内容,提高用户访问网站的速度。
目前CDN以缓存网站中的静态数据为主。用户在从主站服务器请求到动态内容后,再从CDN上下载这些静态数据。从而加速网页数据内容的下载速度。
CDN:可扩展;安全性;可靠性、相应和执行。
CDN架构:
用户访问某静态css文件
1.2在用户本机上完成。
3.向本地域名服务器发起请求。
......迭代解析
7.在Name Server中,重新cname了另一个域名,查询到对应的Ip后,返回给本地域名服务器。
8.本地域名服务器向CDN中的DNS解析发起请求
9.CDN的DNS解析向GTM发起请求。
10.GTM来最终分配是哪个地方的访问用户。
11.GTM返回给本地域名服务器离这个 访问用户最近的CDN结点。
12.本地域名服务器将ip返回给用户。
13.拿到了返回的ip,用户就可以直接去CDN节点访问静态文件了。(访问CDN会经过许多CDN节点,去源站拿到数据后会返回)
负载均衡架构:链路负载均衡,集群负载均衡,操作系统负载均衡。
CDN动态加速:在CDN的DNS解析中,通过动态的链路探测来寻找回源最好的一条路径,然后通过DNS的调度将所有请求调度到选定的这条路径上回源,从而加速用户的访问效率。
由于CDN节点是遍布全国的,所以用户接入一条CDN节点后,可以选择一条离用户最近的CDN节点到源站链路最好的路径让用户走。