浏览器从输入URL到页面展示这个过程中都经历了什么
一. URL输入
URL是统一资源定位符,用于定位互联网上的资源,俗称网址。我们在地址栏输入网址后敲下回车,浏览器会对输入的信息进行以下判断:
1. 检查输入的内容是否是一个合法的URL连接
2. 如果合法的话,则会判断URL是否完整,如果不完整的话,浏览器可能会对地址进行猜测,补全地址的前缀或者后缀。
3. 如果不合法的话,将输入内容作为搜索条件,使用用户设置的默认搜索引擎来进行搜索。大部分的浏览器会从历史记录,书签等地方开始查找我们输入的内容,并给出智能提示。
二. DNS域名解析
因为浏览器不能直接通过域名找到对应的服务器IP地址,所以需要进行DNS解析,找到对应的IP地址进行访问。DNS解析域名的过程如下:
首先用户在浏览器中输入域名,操作系统会检查浏览器缓存和本地hosts文件中是否有这个网址记录,有的话就从记录里面找到对应的IP地址,完成域名的解析。
没有的话,就用TCP/IP参数中设置的DNS服务器进行查询, 如果要查询的域名包含在本地配置区域资源中,则返回解析结果,完成域名解析。
如果还没有的话再接着检查本地DNS服务器是否缓存有该网址记录,有的话就返回解析结果,完成域名解析。
如果还没有的话,本地DNS服务器会发送查询报文到根DNS服务器,根DNS服务器收到请求后,返回顶级域DNS服务器地址,然后本地DNS服务器再发送查询报文到顶级域DNS服务器,顶级域DNS服务器收到请求后,返回权威DNS服务器的地址,然后本地DNS服务器再发送查询报文到权威DNS服务器,权威DNS服务器收到请求后,返回最终的IP地址,完成域名的解析。
三. TCP连接
当浏览器获取到服务器的IP地址后,浏览器会用一个随机的端口号向服务器的80端口发起TCP连接请求,连接请求到达服务器端后,通过TCP三次握手建立TCP连接。
TCP三次握手,其实就是建立一个TCP连接。客户端与服务器交互需要3个数据包,所以叫三次握手。握手的主要作用就是为了确认双方的接收和发送能力是否正常,初始序列包,交换窗口大小等信息。
第一次握手:客户端发送SYN报文,并进入SYN_SENT状态,等待服务器的确认。
第二次握手:服务器收到SYN报文,需要向客户端发送SYN+ACK报文,此时服务器进入SYN_RCVD状态。
第三次握手:客户端收到SYN+ACK报文,向服务器发送确认包,客户端进入ESTABLISHED状态。待服务器收到客户端发送ACK包也会进入ESTABLISHED状态,完成三次握手。
那为什么TCP采用三次握手,二次握手不可以吗?
主要是因为以下原因:
1. 确认双方的收发能力。TCP建立连接之前,需要确认客户端和浏览器双方的收包和发包的能力,最开始的一次握手,客户端发送网络包,服务端收到了,这样服务端就能得出结论:客户端的发送能力,服务端的接收能力是正常的。第二次握手,服务端发包,客户端收到了,这样客户端就能得出结论:服务端的接收,发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。第三次握手:客户端发包,服务端收到了,这样服务端就能得出结论:客户端的接收,发送能力正常,服务端自己的发送,接收能力也正常。所以,只有三次握手才能确认双方的接收与发送能力是否正常。
2. 确认序列号可靠同步。如果是两次握手,服务端无法确认客户端是否已经接收到了自己发送的初始序列号,如果第二次握手报文丢失,那么客户端就无法知道服务端的初始序列号,那TCP的可靠性也就无从谈起了。
3. 阻止重复历史连接的初始化。客户端由于某种原因发送了两个不同序号的SYN包,由于网络环境的复杂性,旧的数据包有可能先到达服务器。如果是两次握手,服务器收到旧的SYN就会立刻建立连接,那么就会造成网络异常。如果是三次握手,服务器需要回复SYN+ACK包,客户端会对比应答的序号,如果发现是旧的报文,就会给服务器发RST报文,直到正常的SYN到达服务器后才正常建立连接。所以要三次握手才有足够的上下文信息来判断当前连接是否是历史连接。
4. 安全问题。TCP新建连接时,内核会为连接分配一系列内存资源,如果采用两次握手,旧建立连接,那会放大DDOS攻击的。TCP作为一种可靠的传输控制协议,其核心思想是既要保证数据可靠传输,又要提高传输的效率,而三次握手恰好可以满足以上两方面的需求。
四. 发送HTTP请求
建立连接后,就可以通过HTTP进行数据的传输了。
如果是https的话,会在TCP和HTTP之间多添加一层协议作为加密及认证的服务,HTTPS使用SSL和TLS协议保障了信息的安全。SSL协议的作用是认证客户端和服务器,确保数据发送到正确的客户端和服务器,加密数据防止数据中途被窃取,维护数据的完整性,确保数据在传输过程中不被改变。TLS协议的作用是用于在两个通信应用程序之间提供保密性和数据完整性。TLS协议由两层组成:TLS记录协议和TLS握手协议。
五. 服务端响应请求
服务器收到请求后,将发回一个HTTP的响应报文,内容包括相关的响应头和HTML正文。
六. 浏览器解析渲染页面
不同的浏览器引擎渲染过程不太一样。以谷歌浏览器为例。
先请求服务器得到HTML文件,处理HTML标记并构建DOM树;
然后向浏览器发送请求得到CSS文件,处理CSS标记并构建CSSOM树;
接着将DOM树和CSSOM树合并为一颗渲染树,根据渲染树来布局。
布局就是获取渲染树的结构,节点位置和大小,是依据盒子模型来进行的,每个元素都用一个盒子来表示,然后这些盒子在页面上进行排列和和嵌套,以计算每个节点的几何信息,最后将各个节点渲染到屏幕上。
第一步,浏览器发送请求以后,服务器或者本地返回给浏览器HTML文件,解析HTML文件,并且构建DOM;
第二步,在解析HTML文件的时候遇到了link标签,浏览器就去请求CSS文件,请求CSS文件的同时会继续解析HTML文件,
第三步,此时遇到了script标签,浏览器就去请求JS文件,此时服务器或者本地就会陆续返回CSS和JS文件,实际操作中会先得到CSS还是JS文件要看具体情况。必须要等到CSSOM构建完成了才能执行JS文件。
七. HTTP请求结束,断开TCP连接
浏览器会默认开启持久连接,也就是标签页关闭的时候,TCP连接才会关闭。这个关闭的过程就是4次挥手。
最开始一次挥手,客户端发起FIN包,客户端进入FIN_WAIT_1状态。TCP规定,即使FIN包不携带数据,也要消耗一个序号。
第二次挥手,服务端端收到FIN包,发出确认包ACK,并带上自己的序号,服务器端进入了CLOSE_WAIT状态。这个时候客户端已经没有数据要发送了,不过服务器端有数据发送的话,客户端依然需要接收。客户端接收到服务端发送的ACK后,进入了FIN_WAIT_2状态。
第三次挥手,服务器端数据发送完毕后,向客户端发送FIN包,半连接状态下服务器可能有发送了一些数据。服务器此时进入了LAST_ACK状态。
第四次挥手,客户端收到服务器的FIN包后,发出确认包ACK,此时客户端就进入了TIME_WAIT状态。此时TCP连接还没有释放,必须经过两个MSL后,才会进入CLOSED状态。而服务器端收到客户端的确认包ACK后就进入了CLOSED状态,可以看出服务器端结束TCP连接的时间要比客户端早一些。
为什么建立连接握手三次,关闭连接时需要是四次呢?
其实在TCP握手的时候,接收端发送SYN+ACK的包是将一个ACK和一个SYN合并到一个包中,所以减少了一次包的发送,三次完成握手。
对于四次挥手,因为TCP是全双工通信,在主动关闭方发送FIN包后,接收端可能还要发送数据,不能立即关闭服务器端到客户端的数据通道,所以也就不能将服务器端的FIN包和对客户端的ACK包合并发送,只能先确认ACK,然后服务器等到无需发送数据时再发送FIN包,所以四次挥手时必须是四次数据包的交互。
相关文章:
浏览器从输入URL到页面展示这个过程中都经历了什么
一. URL输入 URL是统一资源定位符,用于定位互联网上的资源,俗称网址。我们在地址栏输入网址后敲下回车,浏览器会对输入的信息进行以下判断: 1. 检查输入的内容是否是一个合法的URL连接 2. 如果合法的话,则会判断URL…...
2023-09-22 monetdb-事务管理-乐观并发控制-记录
摘要: 2023-09-22 monetdb-事务管理-记录 相关文档: Transaction Management | MonetDB Docs https://en.wikipedia.org/wiki/Optimistic_concurrency_control monetdb事务管理: MonetDB/SQL 支持以 START TRANSACTION 标记并以 COMMIT 或 ROLLBACK 关闭的多语句事务方案。如果…...
蓝桥等考Python组别四级008
第一部分:选择题 1、Python L4 (15分) 字符“D”的ASCII码值比字符“F”的ASCII码值小( )。 1234正确答案:B 2、Python L4 (15分) 下面的Python变量名正…...
SpringMVC 学习(二)Hello SpringMVC
3. Hello SpringMVC (1) 新建 maven 模块 springmvc-02-hellomvc (2) 确认依赖的导入 (3) 配置 web.xml <!--web/WEB-INF/web.xml--> <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee…...
交换机之间配置手动|静态链路聚合
两台交换机,配置链路聚合: 1、禁止自动协商速率,配置固定速率 int G0/0/1 undo negotiation auto speed 100int G0/0/2 undo negotiation auto speed 100 2、配置eth-trunk int eth-trunk 1 mode manual | lacp-staticint G0/0/1 eth-trun…...
Shiro高级及SaaS-HRM的认证授权
Shiro在SpringBoot工程的应用 Apache Shiro是一个功能强大、灵活的,开源的安全框架。它可以干净利落地处理身份验证、授权、企业会话管理和加密。越来越多的企业使用Shiro作为项目的安全框架,保证项目的平稳运行。 在之前的讲解中只是单独的使用shiro&…...
eclipse svn插件安装
1.进入eclipse的help->Eclipse Marketplace,如下图所示: 2.输入“svn”,再按回车,如下图: 3.这我选择的是 Subversive,点击后面的“install”按钮,如下图 Eclipse 下连接 SVN 库有两种插件 —— Subclipse 与 Subversive &…...
C语言 cortex-A7核 UART总线 实验
一、C 1)uart4.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h&quo…...
不同走向地下管线的地质雷达响应特征分析
不同走向地下管线的地质雷达响应特征分析 前言 以PVC管线为例,建立不同走向(水平倾斜、垂直倾斜、水平相邻)的三维管线地质模型,进行三维地质雷达数据模拟,分析不同走向地下管线的地质雷达响应特征。 文章目录 不同…...
Nginx负载均衡详解
一、负载均衡介绍 1、负载均衡的定义 单体服务器解决不了并发量大的请求,所以,我们可以横向增加服务器的数量(集群),然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多…...
基于Spring Boot的宠物咖啡馆平台的设计与实现
目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 看护师信息管理 宠物寄养管理 健康状况管理 点单 宠物体验 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已…...
TYVJ P1026 犁田机器人
描述 Farmer John為了让自己从无穷无尽的犁田工作中解放出来,於是买了个新机器人帮助他犁田。这个机器人可以完成犁田的任务,可惜有一个小小的缺点:这个犁田机器人一次只能犁一个边的长度是整数的长方形的田地。 因為FJ的田地有树和其他障碍…...
软件测试面试经验分享,真实面试题
前言 本人普通本科计算机专业,做测试也有3年的时间了,讲下我的经历,我刚毕业就进了一个小自研薪资还不错,有10.5k(个人觉得我很优秀),在里面呆了两年,积累了一些的经验和技能&#…...
计算机网络 - 链路层
计算机网络 - 链路层 计算机网络 - 链路层 基本问题 1. 封装成帧2. 透明传输3. 差错检测 信道分类 1. 广播信道2. 点对点信道 信道复用技术 1. 频分复用2. 时分复用3. 统计时分复用4. 波分复用5. 码分复用 CSMA/CD 协议PPP 协议MAC 地址局域网以太网交换机虚拟局域网 基本问题…...
5.wifi开发【智能家居:上】,开发准备:智能开关灯,智能采集温湿,智能调彩灯
一。wifi智能家居项目开发 【开发准备1】:继电器控制开发 1.智能开关 器件准备:wifi(esp8266,使用CP2102)继电器 结果: 2.继电器工作原理 (1)继电器是一种自动电气开关 ÿ…...
26523-2022 精制硫酸钴 随笔练习
声明 本文是学习GB-T 26523-2022 精制硫酸钴. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了精制硫酸钴的要求、试验方法、检验规则、标志、标签、包装、运输和贮存。 本文件适用于精制硫酸钴。 注:该产品主要用于…...
企业该如何选择数字化转型工具?_光点科技
随着科技的不断进步和数字化的浪潮席卷全球,企业数字化转型已经成为了保持竞争力和持续增长的关键因素之一。无论企业规模大小,数字化转型都可以提高效率、降低成本、改善客户体验,从而实现更好的业务结果。然而,要成功进行数字化…...
算法与数据结构-Trie树
文章目录 什么是“Trie 树”?如何实现一棵 Trie 树?Trie 树真的很耗内存吗?Trie 树与散列表、红黑树的比较 什么是“Trie 树”? Trie 树,也叫“字典树”。顾名思义,它是一个树形结构。它是一种专门处理字符…...
语音助手开发小记(2023.9.25)
通道问题 在使用函数swr_alloc_set_opts给SwrContext传递输入输出的音频参数时,需要设置通道,这里通道为2,但是通道布局不能传递2.比如AV_CH_LAYOUT_STEREO 实际值为3 如果要计算通道布局的通道数使用函数av_get_channel_layout_nb_channels…...
FastestDet---模型训练
代码:https://github.com/dog-qiuqiu/FastestDet 一、构造数据集 数据集格式YOLO相同,每张图片对应一个txt标签文件。标签格式:“category cx cy wh”,category为类别id,cx, cy为归一化标签框中心点的坐标,w, h为归一化标签框的宽度和高度, .txt标签文件内容示例如下: 0…...
基于SpringBoot的医院管理系统
目录 前言 一、技术栈 二、系统功能介绍 病床信息管理 药房信息管理 个人中心管理 药房信息 病床类别 科室信息管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展,医院也在创建着属于自己的管理系统。本文介…...
java图片转pdf ,pdf 导出
pom引入jar <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.0-RC2</version></dependency> 转pdf方法 /*** 使用pdfbox将jpg转成pdf** throws IOException IOException*/pu…...
掌握Go的运行时:从编译到执行
目录 一、Go运行编译简介Go语言的目标和设计哲学运行时环境编译过程小结 二、执行环境操作系统与硬件层系统调用(Syscalls)虚拟内存 Go运行时(Runtime)Goroutine调度器内存管理和垃圾收集网络I/O代码示例:Go运行时调度…...
打造香港最安全便捷的银行,众安银行发布首份技术白皮书
作者:林海宾&李龙 作为香港金融科技的代表,香港虚拟银行通过科技驱动,为客户提供了安全、便捷、普惠的金融服务。在八间持牌的虚拟银行中,众安银行目前在用户数量、存款、资产和收入规模上均处于领先水平。最快120秒线上开户…...
Spring实现简单的Bean容器
1.BeanDefinition,用于定义 Bean 实例化信息,现在的实现是以一个 Object 存放对象 public class BeanDefinition {/*** bean对象*/private Object bean;/*** 存放 (定义)Bean 对象*/public BeanDefinition(Object bean) {this.bea…...
Python15题day13
③continue的好处 break是跳出循环体,continue是跳过continue语句后面的代码块,循环并不停止 题目要求: 使用input函数接受用户的输入,如果用户输入的数值小于等于10,则判断是奇数还是偶数如果数值大于10,则输出“输入…...
聊聊并发编程——多线程之AQS
目录 队列同步器(AQS) 独占锁示例 AQS之同步队列结构 解析AQS实现 队列同步器(AQS) 队列同步器AbstractQueuedSynchronizer(以下简称同步器),是用来构建锁或者其他同步组 件的基础框架&…...
DE0开发板交通灯十字路口红绿灯VHDL
名称:基于DE0开发板的交通灯十字路口红绿灯 软件:Quartus 语言:VHDL 要求: 设计一个十字路口交通信号灯的控制电路。分为两种情况,正常状态和报警状态。 1.正常状态:要求红、绿灯按一定的规律亮和灭&a…...
华为云云耀云服务器L实例评测使用 | 通过程序实现直播流自动分段录制
华为云云耀云服务器L实例评测使用 | 通过程序实现直播流自动分段录制 1. 准备工作2. 环境搭建3. 心得总结 1. 准备工作 随着云计算时代的进一步深入,越来越多的中小企业企业与开发者需要一款简单易用、高能高效的云计算基础设施产品来支撑自身业务运营和创新开发。基…...
前端教程-webpack
官网 webpack webpack基础 视频教程 尚硅谷Webpack5入门到原理(面试开发一条龙)...
做一个网站一般需要多少钱/青岛网站排名提升
[转]POI大数据量Excel解决方案参考文章: (1)[转]POI大数据量Excel解决方案 (2)https://www.cnblogs.com/justbeginning/p/3833041.html 备忘一下。...
常熟网站建设哪家好/上海培训机构排名榜
3.1 Caching模式 Caching(缓存)模式描述了如何通过用完资源后不立刻释放资源来避免对资源的昂贵的重新获取。资源会维持它们的标识,并保留在某种可以快速访问的存储器中。它们可以被重用,从而避免了重新获取。 1.问题 对相同资源的…...
成都淮洲新城建设投资有限公司网站/网络广告电话
本文将以 kaldi 中 timit 的例程来看整个 run.sh 脚本的执行过程。 数据准备 请先进入 kaldi\egs\timit\s5\ 这个目录。 运行环境 由于 kaldi 可以在本地运行,也可以在 Oracle GridEngine 上运行,因此,请修改 cmd.sh。 如果你是在本地运行&am…...
重庆网站推广哪家好/拓客引流推广
JetCache学习笔记 - lwh147 - 博客园JetCache学习笔记和问题记录https://www.cnblogs.com/lwh147/p/15176574.html 在分布式系统中,使用redis的原子性操作实现分布式锁,不过在自己编辑代码的时候,会出现一些代码上的问题,这个工具…...
wordpress 默认端口/网页设计网站
static作用(修饰函数、局部变量、全局变量)在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。 (1)先来介绍它的第一条也是最重要的一条:隐藏。 当我们同时编译多个文件时&a…...
一个数据库怎么做二个网站/百度收录技术
今天终于考完了70-528,长长舒口气 呵呵,可以安安心心的回国度假了。这次考试真是一波三折啊。下面先说说考试过程 一个月前开始准备考MCTS,但是当时只是似懂非懂这个东西,一直都觉得可有可无,所以当时也没有太放在心上。天天70-536的Training…...