linux必会原理之输入网址到看到页面内容原理

author author     2022-07-30     161

关键词:

用户从浏览器输入网址到页面显示,细分了一下基本上由八大快原理组成,他们是:
dns解析原理、TCP三次连接、http请求数据包、数据包的封装、数据包的解封装、集群内部的一个请求、服务器的响应报文、四次断开
> dns解析原理:
当用户在客户端输入网址后,客户端会先访问本地的hosts文件和dns缓存,我们hosts一般都是做测试使用来配置的。所以设备第一访问这个网址,在本地的hosts和local是没有这个解析的,这个时候会向LDNS(也交本地dns寻求解析),如果lDNS这里有记录,就会反馈给客户端,如果LDNS没有这个记录,LDNS就会向全球13台的根服务器去解析。这13台服务器是“层级式”域名解析体系,最上面的服务器叫做根服务器,在我们网址的后面都会影藏一个. 这个点就代表的是根服务器,根服务器下面的13台服务器叫做一级域也叫顶级域,再下面的是二级域,当根服务器收到请求后,根服务器只有下面的13台顶级域的解析,他会告诉LDNS去访问对应的一级域名,一级域名服务器收到请求后,查看自己的A记录,告知LDNS去找etiantian这个服务器,LDNS再次找到etiantian服务器,etiantian服务器查看自己的A记录,把信息告知LDNS。lDNS把信息告知客户端。LDNS和本地的dns都会把这条记录缓存下来也叫做A记录还有一些的记录例如邮件的MX记录,prt反向解析记录,cname记录。A记录不是一对一的,他可以一对多。这里有个ttl (time to live)是控制dns的缓存周期的,ttl是什么那?就是dns多长时间刷新一下,对于网站修改量小的可以把ttl改的时间长一点。例如3600秒,这样dns缓存的时间长,用户访问数据可直接从本地读取,加快了流量,如果一个网址修改量大,我们就要把ttl时间改小点,如果太大,服务器那边已经修改了,本地缓存的还是旧的。如果太小也不好,假如1秒,dns就刷新的太快,全球dns刷新一次要12个小时多,所以用户一直是同通过递归和迭代的方式去解析给后端dns解析服务器带来了很大的压力。到处dns解析就介绍了。客户端得到了网址对应的ip了;下面用户将要去访问这个ip的服务器了
> tcp的三次握手
客户端向服务器端发送一个syn的请求,状态从closed变成了syn_sent,服务器在收到客户端的syn请求后,把syn发回给客户端,同时也会回发送一个ack,服务器从状态变成syn_rcvd状态,客户端收到服务器返回的syn和客户端后,返回一个ack给服务端,客户端的状态变成establish,服务器收到客户端发回的ack后状态变成established,到此tcp的连接建立成功
>http请求报文
为什么要先连接后进行http的协议?
http协议是在tcp协议之上,所以只有tcp连接建立了以后应用层的http协议才可以通信~~~~~~~~~~~~~~~~~~~~~~~
http的请求报文一般有请求行,请求头,请求主体三部分组成,在请求行里面包含了请求方法,URL和http的协议版本还有一个空行,他们之间都是用空格分隔的,现在使用的请求方法有GET.PUT,POST,HEAD,DELETE,MOVE.GET方法是把客户端请求指定的内容,从服务器端获得该内容;PUT方法是把客户端的资源上传到服务器来代替指定的内容;POST方法将客户的资源提交到服务器,例如注册表单,delete和move不经常用,这里就不介绍。下面看请求头都有哪些东西?在请求头里面包含了:媒体类型,语言类型,压缩方法,客户端信息,主机头,连接状态等一些信息,这里与这个请求头相关的最常用的请求头就是Content-Type媒体和Content-Length请求长度这两种。在请求头的下面是一个“空行”,这里通过发送回车或者换行符来告诉空行以下不会有请求头的内容了。在空行的下面是请求主体,如果是get方法这里是没有请求主体的。到此http的请求报文包含这些东西,然后经过OSI的七层模型开始给这个请求头进行数据封装
> 数据包封装
请求报文在应用层封装数据,在传输层会封装上tcp头转换成数据段,在网络层封装上ip数据段转换成数据包,在数据链路层封装进去mac和llc头,把数据包转换成帧,下面会在物理层把帧转换成bit流来传送,现在客户端这的所有工作都结束了,下面bit流会到达远程的Lb负载服务器,负载服务器通过解封装把数据提取出来,解封装的过程正好是封装数据包的反向,从物理层开始,一直到应用层。在应用层分析出请求报文的信息后,负载会向后面的内容集群查找指定的内容,我们常用的软件负载有‘nginx LVS HAproxy’优缺点自己了解,当然还有硬件的负载A10和′F5等。如果请求的信息是静态信息,复制会请求后方的静态服务器,公司如果有CDN的情况,会把这些静态文件放在CDN前面,这样客户访问速度快,也能给内部集群减少压力;如果请求包含css,jss等一些是动态数据,由于这些结构的化的动态数据都存放在后台的数据库,或者nfs,所以会去请求数据库或者nfs服务器,当然在数据库和nfs前面有缓存服务器类似mamcache ,会直接访问缓存,这样都是对内部的一个优化。把用户想要的数据经过内部集群的一个调用,最后要返回到客户端,在这里就出现了http的响应报文
http的响应报文包含有:起始行(也叫状态行),响应头部,空行和响应主体。起始行内包含了协议及版本,状态码以及状态信息。http协议有0.9 1.0.1和1.1现在0.9已经淘汰找不到了。1.0和1.1相比,1.0版本服务器和客户端只能保持短连接,请求完毕会关闭这个连接,而1.1增加了keep-alive持久连接,可扩展性,缓存处理等特点,持久连接也是在请求头里面体现,当收到客户端的请求头包含close信息时,请求断开。协议版本后面是数字的一个状态码,这个状态码是反馈给客户端的信息,告知是否连接成功,以及故障大体的方向,状态码范围100-199,指定客户端应响应的动作,200-299请求成功,还有300-399 400-499客户端的错误导致 500-599,服务器的错误导致,我们工作中经常能见到几个代码,需要注意下,例如:200 表示请求成功,301 永久跳转,但是请求是成功的,403 forbidden 禁止访问,这里一般是服务器一端的权限配置问题,404 not found 这个也是服务器端的,造成这个原因有很多,有可能是集群内部数据的返回超时,或者请求的内容在服务器上已经不存在,500这是一个内容服务器的笼统报错,造成这个的原因很多,502 bad gateway一般是代理服务器请求后端,后端没有放回或者请求超时,一般为方向代理的下面的节点问题;503 services unavailable  服务器不可用,可能是服务器超载或者宕机,或者反向代理后面没有提供服务的节点 504 Gateway timeout 代理向后请求,后端在一定时间内没有给反馈,造成的超时。下面看看响应头部,这里主要包含了,媒体类型MIME,时间,服务器服务版本,连接状态,字符集类型,MIME是一种文本标记,中间由一条斜杠来分割的;在响应头部下面是一个空行,告诉响应头部内容结束,下面是响应主体,这里装载了给客户端的数据,这些数据都是文本,也可以是二进制的(图片,视频)
客户端收到响应报文后,向服务器发送一个fin的信号,客户端从established状态变成了FIN_wait1,服务器收到客户端的FIN后返回一个ACK,同时服务器状态变为close_wait,客户端收到服务器返回的ack,状态变成了fin_wait2,这个时候客户端会等服务器,如果服务器还没有发送完数据,就继续发送,如果发送完毕 会给客户端发送一个FIN,此时服务器变为LAST_ACK状态,客户端收到服务器的fin后,马上返回一个ack给服务器告知收到,状态进入到time-wait,此时客户端在等2msl时间后进入到closed状态,服务器收到客户端ack后进入到closed状态。到此四次断开结束,还有一种情况就是closing状态,这是由于客户端发送了fin给服务器,而没有收到服务器的ack 却收到了服务器的fin,发生ack丢包的情况,这有可能是网络原因。。。上面就是用户从浏览器输入网址到看到页面内容的一个过程

本文出自 “系统天下” 博客,请务必保留此出处http://sgk2011.blog.51cto.com/1551358/1794644

从url输入到页面展现原理(代码片段)

打开浏览器从输入网址到网页展现,背后到底发生了什么?经历怎么样的一个过程?总体来说分为以下几个过程:DNS解析:将域名解析成IP地址TCP连接:TCP三次握手发送HTTP请求服务器处理请求并返回HTTP报文浏览器解析渲染页面断开... 查看详情

漫画es原理必知必会的倒排索引和分词(代码片段)

倒排索引的初衷倒排索引,它也是索引。索引,初衷都是为了快速检索到你要的数据。我相信你一定知道mysql的索引,如果对某一个字段加了索引,一般来说查询该字段速度是可以有显著的提升。每种数据库都有自己要解决的问... 查看详情

动态二维码制做原理

参考技术A首先,动态二维码的内容是可以编辑的。其次动态二维码的扫描次数和位置等数据是可以统计的,包括扫描的确切日期时间。动态二维码使用短网址跳转到实际访问页面。即动态二维码本身存储的是短网址而不是实际... 查看详情

djingo之路由层(代码片段)

目录Django必会操作之三剑客如何在浏览器中输入网址访问响应资源Django配置数据库连接Request对象Django必会操作之三剑客三剑客之render作用:返回request,和一个html页面,可以给html页面传值三剑客之HttpResponse作用:向网页返回一... 查看详情

从浏览器输入网址回车到看到页面过程到底经历了什么?(代码片段)

作者:老油条IT记公众号:老油条IT记#前言:从浏览器输入网址到回车看到页面的过程,面试逃不掉的一个问题,我们知道从浏览器输入网址到看到页面主要是涉及DNS解析,TCP三次握手,请求报文,响应报文,TCP4次挥手。#首先我... 查看详情

web前端之html标签总结(代码片段)

Web前端之HTML标签总结一、HTML基本原理网页的原理:用户输入网址之后,对应的服务器就发现有人请求我的网页了,所以这个服务器就会把网页和相关的图片、js文件、css文件、flash文件都通过HTTP协议传输到用户的电... 查看详情

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

...到页面的过程大纲:1、用户访问网站流程框架2、DNS解析原理*****3、tcp/ip三次握手原理*****4、http协议原理(www服务的请求过程)请求报文细节!5、大规模网站集群架构细节。6、http协议原理(www服务的响应过程)响应报文细节!... 查看详情

解析vue-router相关干货及工作原理(代码片段)

...文主要介绍了vue-router相关基础知识及单页面应用的工作原理,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。单页面工作原理是通过浏览器URL的#后面的hash变化就... 查看详情

图解从url到网页通信原理

前言一、文本对话--从请求到响应二、TCP/IP协议族介绍三、基于TCP/IP通信过程四、TCP建立连接及断开(重点补充)小结 前言互联网的原始目的,就是为了传输文本(文本对话)。那我们使用浏览器发送请求后页面是如何呈现... 查看详情

浏览器渲染原理

浏览器输入url到页面呈现发生了什么?1:输入url 浏览器会开启一个线程来处理这个请求,对URL分析判断如果是http协议就按照Web方式来处理,浏览器会从历史记录,书签等地方,找到已经输入的字符串可能对应的url,然后给... 查看详情

浏览器从输入到输出的过程与原理四之互联网

...做出了详尽的规定。理解了这些协议,就理解了互联网的原理。当我们通过DNS解析的过程知道了某个域名(比如www.nDos.com)对应的IP地址,下一步是判断本机IP与该服务器IP是否在同一个子网络,这里需要用到子网掩码(下文将详... 查看详情

cdn技术之--内容缓存工作原理

有CDN前的网站服务技术–硬件扩展:高成本,灵活性和可扩展性比较差–镜像技术(mirroring):镜像服务器安装有一个可以进行自动远程备份的软件,每隔一定时间,各个镜像服务器就会到网站的源服务器上去获取最新的内容–... 查看详情

sparkmllib之aggregate和treeaggregate从原理到应用

在阅读sparkmllib源码的时候,发现一个出镜率很高的函数——aggregate和treeAggregate,比如matrix.columnSimilarities()中。为了好好理解这两个方法的使用,于是整理了本篇内容。由于treeAggregate是在aggregate基础上的优化版本,因此先来看看... 查看详情

大数据必知必会|hive架构设计和原理(代码片段)

前言        大家好,我是梦想家Alex。在上一篇文章简单介绍HDFS,MapReduce,Yarn的架构思想和原理,收获和反响还不错,那本篇内容,我们继续,本篇文章,我来为大家介绍Hive架构思想和设计原... 查看详情

大数据必知必会|hive架构设计和原理(代码片段)

前言        大家好,我是梦想家Alex。在上一篇文章简单介绍HDFS,MapReduce,Yarn的架构思想和原理,收获和反响还不错,那本篇内容,我们继续,本篇文章,我来为大家介绍Hive架构思想和设计原... 查看详情

互联网相关原理

1,上网  当我们平时上网的时候,打开浏览器输入一个网址www.bokeyuan.com/a/demo.html的时候,我们的计算机将远程服务器发出一个HTTP请求,请求的是服务器中a文件夹中的demo.html文件。服务器接收到请求,然后响应了这个请求,... 查看详情

python之爬虫爬虫的原理

在上文中我们说了:爬虫就是请求网站并提取数据的自动化程序。其中请求,提取,自动化是爬虫的关键!下面我们分析爬虫的基本流程爬虫的基本流程发起请求通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以... 查看详情

web安全原理剖析(十四)——xss漏洞原理(代码片段)

目录4.3反射型XSS攻击4.4反射型XSS代码分析4.3反射型XSS攻击  页面http://127.0.0.1/xss/xss1.php实现的功能是在“输入”表单中输入内容,单击“提交”按钮后,将输入的内容放到“输出”表单中,例如当输入“11”,单... 查看详情