Http协议
HTTP/0.9
HTTP/1.0
HTTP/1.1(主流)
HTTP/2.0
HTTP协议是在TCP/IP协议族的基础上运作起来的,用于客户端和服务端之间的通信
其属于TCP/IP协议族内的一个子集;标准的HTTP协议是无状态(cookies, session,application)的协议。
TCP/IP协议族是按层次去划分的
应用层,决定了向用户提供应用服务时通信的活动。
FTP协议(文件传输协议)
DNS(域名协议)
HTTP(超文本传输协议)
传输层,提供处于网络连接中两台计算机之间的数据传输
TCP(传输控制协议)
UDP(用户数据报协议)
网络层,用来处理在网络上流动的数据包
IP协议
数据链路层,用来处理连接网络的硬件设备
DNS域名解析服务
DNS服务是和HTTP协议一样位于应用层的协议,它提供域名到IP地址之间的解析服务。
计算机既可以被赋予IP地址,也可以被赋予主机名和域名。比如www.baidu.com
用户通常使用主机名或域名来访问对方的计算机,而不是通过IP地址访问,因为与IP地址
的一组纯数字相比,用域名来指定计算机名更符合人类的记忆习惯。
但是要让计算机去理解域名,相对而言就变得困难了,因为计算机更擅长处理一长串数字。
为了解决上述问题,DNS服务应运而生。DNS协议提供通过域名查找IP,或逆向从IP地址反查域名的服务
一次完整的请求到底发生了些什么?
DNS是否可以通过缓存来减少查询IP地址的时间?
网络的请求过程是否走的是最近的网络?
DNS是否可以通过缓存来减少查询IP地址的时间?
DNS的查找是有开销的,通常浏览器查找一个给定的主机名的IP地址需要花费20到120毫秒。
在DNS查找完成之前,浏览器不能从主机那下载任何东西。
DNS是可以被缓存起来提高性能的,这种缓存可以发生在网络运营商的服务器上,
也可以发在本机所处的局域网中,甚至可以发生在本地的操作系统或浏览器中!!
但是我们也知道服务器的IP地址是可变的,缓存会消耗内存,因此不管是哪个级别的
缓存都应该周期性的清除一下。
DNS域名解析过程
第1步,查找浏览器缓存。
浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。
第2步,查找系统缓存
如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果
第3步,查找路由器缓存。
如果系统缓存中也找不到,那么查询请求就会发向路由器,它一般会有自己的DNS缓存。
第4步,查找ISP DNS 缓存。(网络运营商)
运气实在不好,就只能查询ISP DNS 缓存服务器了。在我们的网络配置中都会有"DNS服务器地址"这一项,
操作系统会把这个域名发送给这里设置的DNS,也就是本地区的域名服务器,这个专门的域名解析服务器性能都会很好,
它们一般都会缓存域名解析结果,当然缓存时间是受域名的失效时间控制的。大约80%的域名解析都到这里就已经完成了,
所以ISP DNS主要承担了域名的解析工作。
第5步,递归搜索
最无奈的情况发生了, 在前面都没有办法命中的DNS缓存的情况下
(1) 本地 DNS服务器即将该请求转发到互联网上的根域
(2) 根域将所要查询域名中的顶级域(即blog.baidu.com中的com)的服务器IP地址返回到本地DNS。
(3) 本地DNS根据返回的IP地址,再向顶级域(就是com域)发送请求。
(4) com域服务器再将域名中的二级域(即blog.baidu.com中的baidu)的IP地址返回给本地DNS。
(5) 本地DNS再向二级域发送请求进行查询。
(6) 之后不断重复这样的过程
直到本地DNS服务器得到最终的查询结果,并返回到主机。这时候主机才能通过域名访问该网站。
减少DNS查询
1.一个多资源的站点最好使用2到4个不一样的主机来存放服务端资源。
这是在减少DNS查询和允许高度并行下载之间作出的最好权衡
2.使用Keep-alive进行持久连接
两个命令
chrome://dns/ :查看浏览器上的DNS缓存
ipconfig /displaydns :查看操作系统中的DNS缓存
网络的请求过程是否走的是最近的网络?
网站通常将其所有的服务器都放在同一个地方,当用户群增加时,公司就必须在多个地理位置不同的服务器上部署内容
为了缩短http请求的时间,我们应该把大量的静态资源放置的离用户近一点。
内容发布网络CDN(Content Delivery Networks)
CDN是一组分布在多个不同地理位置的web服务器,用于更加有效的向用户发布内容
基本思路:
尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,
CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息
将用户的请求重新导向离用户最近的服务节点上。
基础架构:最简单的CDN网络由一个DNS服务器和几台缓存服务器组成
1.当用户点击网站页面上的内容URL,经过本地DNS系统解析,
DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。
2.CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户。
3.用户向CDN的全局负载均衡设备发起内容URL访问请求。
4.CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,
选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
5.区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,
选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;
根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;
查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。
基于以上这些条件的综合分析之后,
区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。
6.全局负载均衡设备把服务器的IP地址返回给用户。
7.用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。
如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,
那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。