老男孩教育每日一题-2017年3月22日:请说明用户访问网站流程

author author     2022-08-27     714

关键词:

本题目也可以说为:

描述从浏览器打开http://www.oldboyedu.com地址回车发送请求到看到页面的过程?

打开浏览器输入网址回车,到看到页面的过程

大纲:

1、用户访问网站流程框架

2DNS解析原理 *****

3tcp/ip三次握手原理 *****

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

5、大规模网站集群架构细节。

6http协议原理(www服务的响应过程)响应报文细节!

7tcp/ip四次挥手过程原理 *****

当我们打开浏览器输入网址回车,到看到网页页面,主要有两大步骤:第一,将域名解析成ip的过程,第二,通过ip找到网站服务器,请求打开具体的网页,服务器响应请求,客户端浏览器收到响应报文后,渲染html文档,最终得到我们看到的网页页面。

首先:说一下dns解析的流程,大家都知道,计算机之间只能通过ip相互通信,因为ip不好记,于是才使用dns服务器把域名解析为相应的ip,这里以解析www.oldboyedu.com为例,当我们输入这个网址回车的时候,浏览器会首先查询浏览器的缓存,这个缓存存活时间可能只有1分钟,如果没找到,则去查询本地的dns缓存和hosts文件,如果有www.oldboyedu.com这个域名对应的ip,则直接通过这个ip访问网站服务器。如果本地的dns缓存和hosts文件没找到,这时候就会把请求发送给,网卡配置信息里的dns服务器,默认有两个,只有当dns1不能访问时,才会使用dns2。我们也称网卡配置信息里的dnslocal dns,这时候local dns会先查询它的缓存,有没有www.oldboyedu.com相应的记录,如果有,则返回给用户,如果没有,就会访问根域名服务器,世界一共有13台根域名服务器,根域名服务器一看,是找.com的,于是会把.com的顶级域名服务器的ip发送给local dns,这时local dns再次访问.com的顶级域名服务器,.com的顶级域名服务器一看,是找一级域名oldboyedu.com的,于是再将oldboyedu.comip发送给local dns,然后继续往下找,直到找到www.oldboyedu.com的权威dnsA记录或者cname,这时候local dns会把找到的www.oldboyedu.comip发送给客户端,并记录在缓存中,这样的话,下次如果有其他的用户访问www.oldboyedu.com这个域名时,local dns的缓存中就有记录了。客户端收到local dns发送过来的ip就会通过ip去访问服务器,并将这个ip记录在dns缓存中。

以上就是dns解析的原理。

通过dns解析之后,拿到了ip,就可以通过ip向服务器发送http请求了,因为http是工作在第七层应用层,tcp是工作在第四层传输层,所以发生http请求之前,还会进行tcp的三次握手。

tcp的三次握手是:客户端首先向服务器发送一个带有SYN标识和一个seq的随机数,服务端收到后,需要给客户端回应一个ackack的值就是刚才的seq随机数的值+1,在回应包里,还包含一个SYN的标识和一个seq随机数。客户端收到服务端发过来的回应包之后,再给服务端发送一个ack,ack的值就是刚才服务端发过来的seq的值+1。上面三步完成之后,三次握手就完成了,下面就可以开始传数据了

这里就是开始发送http请求报文了

 

http的请求报文,主要包括,请求行,请求头部,空行,请求主体

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

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

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

请求报文主体,只有使用POST提交表单的时候,才有

对应的,服务器收到请求报文之后,就会给出响应报文

 

响应报文主要包含起始行、响应头部、空行、响应报文主体

起始行一般包含http版本号,数字状态码,状态情况

而数字状态码,常见有以下几种

200 代表ok

301 永久跳转

403 没权限

404 没有这个文件

500 未知的错误

502 网关错误

503 服务器超载,停机维护

504 网关超时

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

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

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

 

常见的网页资源有三种,分别是静态网页,动态网页,伪静态

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

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

 

不同的网页资源,打开的流程不一样,下面假设我们访问的是一个静态网站:

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

 

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

 

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

 

当浏览器加载一个完整的页面时,还需要与服务器断开连接,这个过程就是tcp的四次挥手

首先客户端会发送一个带有FIN标识和一个seq随机数,服务端收到之后,会回应一个ackack的值等于刚才的seq的值+1,发送之后,服务器会再发一个包,这个包里面也带有FIN标识和一个seq随机数,客户端收到之后,回应一个ackack的值等于刚才的seq+1,以上完成之后,服务器和客户端的4次挥手就完成了!

 

 

 

 

  • 小伙伴的解答:

 

过程蛮复杂,回答好不容易。如果是第一次访问,首先经过DNS解析,由近到远,有低到高找到oldboyeduIP地址。如果一切正常,服务器会返回要求登录的页面或者index.jsp或者php之类的页面,当然经过服务器处理后都是HTML页面,或者直接返回HTML的静态页面,这就看服务器的配置和架构,时间会长一些。以后再访问,因为有缓存么,类似dns缓存和cookie之类,速度会很快。


本文出自 “李导的博客” 博客,请务必保留此出处http://lidao.blog.51cto.com/3388056/1914578

老男孩教育每日一题-2017年3月31日-awk数组统计

处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)http://www.etiantian.org/index.htmlhttp://www.etiantian.org/1.htmlhttp://post.etiantian.org/index.htmlhttp://mp3.etiantian.org/index.htmlhttp://www.etiantian.or 查看详情

老男孩教育每日一题-2017年5月22日-命令风暴:变量a=’a/b/c’如何截取得到c

1.题目老男孩教育每日一题-2017年5月22日-命令风暴:变量a=’a/b/c’如何截取得到c2.参考答案系统环境[[email protected] ~]# uname -r2.6.32-504.el6.x86_64[[email protected] ~]# cat /etc/redhat-releaseCent 查看详情

老男孩教育每日一题-2017年3月28日-awk累计相加

假如现在有个文本,格式如下:a  1b  3c  2d  7b  5a  3 g  2f  6d  9即左边是随机字母,右边是随机数字,要求写个脚本使其输出格式为:a  4b &n 查看详情

老男孩教育每日一题-2017年5月17日-使用三剑客进行变化格式

1.题目老男孩教育每日一题-2017年5月17日-使用三剑客进行变化格式 原始数据:17/Apr/2015:09:29:24 +080017/Apr/2015:09:30:26 +080017/Apr/2015:09:31:56 +080018/Apr/2015:09:34:12 +080018/Apr/2015:09:35:23 +08 查看详情

老男孩教育每日一题-2017年4月10日-find命令题目

查找出/tmp目录下面修改时间是7天以前,大小在50k到2M之间,并以.log结尾的文件本文出自“李导的博客”博客,请务必保留此出处http://lidao.blog.51cto.com/3388056/1914457 查看详情

老男孩教育每日一题-2017年3月21日:查找占用内存的前3名进程

查找占用内存的前3名进程(命令大风暴,看谁的命令最精简)参考答案:方法一top按内存列排序,使用>可以移动到以内存排序x高亮z加颜色方法二top-a 以内存排序方法三htop可以使用鼠标点击按内存列排序 注:需要yum... 查看详情

老男孩教育每日一题:2017年3月15日-setacl授权相关的两个小题

如果有两个用户tom和jerrry,tom用户将相应管理的目录设置为共享权限,jerry是否可以进行访问如果jerry如何进行访问?提示:不能用root用户权限,因为root用户在企业中不一定谁都可以有权限使用FACL:FilesystemAccessControlList(文件系... 查看详情

老男孩教育每日一题-2017年5月16日-说说{}与[]这两个符号有什么区别?

1.题目老男孩教育每日一题-2017年5月16日-说说{}与[]这两个符号有什么区别?2.参考答案这两个看似简单的符号,其实内容还不少。我们一起来看看。2.1通配符中通配符在linux中通常用来匹配/找文件名或目录名。最常用的就是ls-l*.txt... 查看详情

老男孩教育每日一题-2017年3月25日-将一个文本的奇数行和偶数行合并

[[email protected] ~]# cat oldboy.txt48 Oct 3bc1997 lpas 68.00 lvx2a 138484 Jan 380sdf1 usp 78.00 deiv 344483 nov&n 查看详情

老男孩教育每日一题-2017年5月18日-说说|(管道)与|xargs(管道xargs)的区别

1.题目老男孩教育每日一题-2017年5月18日-说说|(管道)与|xargs(管道xargs)的区别2.参考答案find |xargsls-ld##把前一个命令的结果,通过管道传递给后面的命令(ls-ld),传递的是文件名find |命令  ##把前一个命令的结果,通... 查看详情

老男孩教育每日一题-2017年4月12日-请问如下登录环境故障的原理及解决办法?

请问如下登录环境故障的原理及解决办法?-bash-4.1$ -bash-4.1$本文出自“李导的博客”博客,请务必保留此出处http://lidao.blog.51cto.com/3388056/1915110 查看详情

老男孩教育每日一题-2017年4月26日-通过访问日志access.log统计ip和每个地址访问的次数

通过访问日志access.log统计IP和每个地址访问的次数101.226.61.184 - - [22/Nov/2015:11:02:00 +0800] "GET /mobile/sea-modules/gallery/zepto/1.1.3/zepto.js HTTP/1.1" 200 24662&nbs 查看详情

老男孩教育每日一题-2017年5月4日-有一个oldboy.txt文件,把里面所有字母都转换成大写

老男孩教育每日一题-2017年5月4日-有一个oldboy.txt文件,把里面所有字母都转换成大写文件内容如下:[[email protected] oldboy]# cat oldboy.txt oldboy.blog.51cto.comwww.oldboyedu.com方法一:sed[[email protected] ol 查看详情

老男孩教育每日一题-2017年3月16日:linux网络配置中如何给一块网卡添加多个ip地址

 linux系统给网卡配置VIP的方法常见有两种:别名IP、以及辅助IP   别名IP(alias ip)    ip alias是由linux系统的ifconfig命令来创建和维护的,别名IP就是在网卡设备上绑定的第二个及以上的IP &nb... 查看详情

老男孩教育每日一题-2017年3月20日:使用rsync守护进程模式,经常会出现的异常情况说明,并说明应该如何解决

Rsync服务常见问题汇总讲解:==================================rsync服务端开启的iptables防火墙  客户端的错误现象:Noroutetohost   [[email protected]]# rsync -avz /etc/hosts [email&# 查看详情

老男孩教育每日一题-2017年5月24日-脑洞神探之tmp目录的下的备份文件突然没了,谁来背锅?

1.题目老男孩教育每日一题-2017年5月24日-脑洞神探之tmp目录的下的备份文件突然没了,谁来背锅?2.参考答案1.运维干的2.开发干的3.系统干的,系统安装了一个命令tmpwatch,定期删除文件。在Centos/RHEL/Fedora系统下存在清理机制(Ubuntu... 查看详情

老男孩教育每日一题-2017年5月8日-请根据以下数字信息,确认相应的端口号,端口号对应的服务名称

1.题目老男孩教育每日一题-2017年5月8日-网络服务知识点:请根据以下数字信息,确认相应的端口号,端口号对应的服务名称,以及服务主要的作用(简要说明即可)2021222325676869801101111612.参考答案端口号端口号对应服务名称服务... 查看详情

老男孩教育每日一题-2017年3月29日-使用ifconfig取出网卡eth0的ip地址-看看你有多少方法

方法1:sed命令[[email protected] ~]# ifconfig eth0 |sed -n ‘2p‘ |sed‘s#^.*addr:##g‘|sed ‘s#  B.*$##g‘10.0.0.50方法2:cut[[email protected] ~]#& 查看详情