用户访问网站原理及流程

 一:DNS解析原理

  • 首先查询浏览器的缓存
  • 本地的dns缓存
  • hosts文件
  • 网卡dns1,dns2
  • 根域名服务器,世界一共有13台根域名服务器

www.etiantian.org 解析为对应的ip1.1.1.1 这个从域名到IP的解析过程,称作A纪录

cname别名纪录,这个别名解析功能通常被CDN加速服务商应用

mx邮件纪录,这个mx纪录功能,在购买或则搭建邮件服务器的时候会被使用

ptr纪录,反向解析,即把IP地址单项解析为对应的域名,和A纪录相反,邮件服务等业务中会用到

二,tcp/ip三次握手原理

因为http是工作在第七层应用层,tcp是工作在第四层传输层,所以发生http请求之前,还会进行tcp的三次握手

  • 客户端首先向服务器发送一个带有SYN标识和一个seq的随机数
  • 服务端收到后,需要给客户端回应一个ack,ack的值就是刚才的seq随机数的值+1,在回应包里,还包含一个SYN的标识和一个seq随机数
  • 客户端收到服务端发过来的回应包之后,再给服务端发送一个ack,ack的值就是刚才服务端发过来的seq的值+1

三,http协议原理(www服务的请求过程)请求细节,报文细节

  • 请求行

请求行又包括,请求方法,url,协议版本,请求方法主要有GET、HEAD、POST、PUT、DELETE、MOVE,url就是统一资源定位符,通过这个能在服务器上找到唯一的网页资源,协议版本,目前主流的是http1.1,开始流行的协议版本是http1.0,相对应http1.0,http1.1主要从可扩展性、缓存处理、带宽优化、持久连接、host头、错误通知、消息传递、内容协商等多方面做了一些优化,以上是请求行的内容

  • 请求头部

请求头部,请求头部主要有媒体类型,语言类型、支持压缩、客户端类型、主机名等,媒体类型主要有文本文件,图片文件,视频文件等,语言类型就是告诉服务器客户端的接受的语言,支持压缩的话,可以节省带宽,客户端类型,会显示客户端浏览器的版本信息,操作系统信息等

  • 空行

空行,代表请求头部的结束,也代表着请求主体的开始

  • 请求主体

报文主体,只有使用POST提交表单的时候,才有
对应的,服务器收到请求报文之后,就会给出响应报文

四,大规模网站集群架构细节

  • 静态网页

静态网页就是没有后台数据库,不含php,jsp,asp等程序,不可交互的,开发者编写的是啥,显示的就是啥,不会有任何改变

  • 动态网页

动态网页,有后台数据库,支持更多的功能,如用户注册,登录,发帖,订单,博客等,动态网页并不独立存在于服务器上的网页文件,而是当用户请求服务器上的动态程序时,服务器解析这些程序,并调用数据库来返回一个完整的网页内容,它跟静态网页的url不同,它的url中包含?、&等特殊符号,搜索引擎收录的时候存在一定的问题

  • 伪静态网页

动态网页为了方便收录,常常会利用rewrite技术,把动态网页的URL伪装成静态网页URL,这就是伪静态。

  • 我们访问的是一个静态网站时候

客户端会通过http协议,下载服务器上的html文件,然后去读这个html文件,根据html页面中的链接,自上而下的请求,每一个请求是一个链接,如果是图片的话,会下载边渲染,遇到js,就会加载js,当js比较内容较复杂时,浏览器就会等待,鼠标在转圈,我们称这个为js阻塞,当js下载完毕并执行完成之后,才会显示我们看到的网页

  • 我们访问的是一个动态网页时

首先用户发出一个请求,服务器收到这个请求之后,这里假设服务器使用的是nginx,nginx会把这个请求转给php,php就会去查询数据库,根据数据库返回的值,生成一个完整的网页内容,发送给用户,用户收到之后,也是边下载边渲染,加载js,执行完毕之后,才会显示我们看到的网页

  • 当服务器的访问量达到亿级PV时

这个访问的过程就更复杂了,用户的请求会先访问全国的CDN节点,通过CDN挡住全国80%的请求,当CDN上没有时,在访问服务器集群,这个集群一般都有一个4层的代理,这个4层的代理,使用软件来完成的话,就是LVS,使用硬件就是F5,4层的代理,后面才是7层的负载均衡,常用的是haproxy,nginx,然后才是多台web服务器,web服务器比较多的时候,就有两个问题,一个是用户数据的一致性,不能因为不同的web服务器提供服务,而导致数据不同步,这时候,我们就需要使用NFS共享存储,第二个问题是session,不能因为不同的web服务器提供服务,session找不到了,这时候,我们就需要使用memcached来存放并共享session。由于用户访问量太大,这时候的瓶颈就是数据库的压力,我们一般都是使用分布式缓存memcache,redis等,另外数据库还需要做读写分离等优化,后面的过程与访问动态网页类似

五,http协议原理(www服务的请求过程)响应报文细节

  • 起始行

http版本号,数字状态码,状态情况

  • 响应头部

主要包括,服务器的web软件版本,服务器时间,长连接还是短连接,设置字符集等等

  • 空行

这里的空行和请求报文空行一样

  • 响应报文主体

在报文主体中包装载了要返回给客户端的数据

六,tcp/ip四次挥手原理

  • 首先客户端会发送一个带有FIN标识和一个seq随机数,
  • 服务端收到之后,会回应一个ack,ack的值等于刚才的seq的值+1,
  • 发送之后,服务器会再发一个包,这个包里面也带有FIN标识和一个seq随机数,
  • 客户端收到之后,回应一个ack,ack的值等于刚才的seq值+1,
原文地址:https://www.cnblogs.com/qiulovelinux/p/10414642.html