在浏览器输入URL,按下回车之后的流程?
1. 在浏览器中输入一个URL
2. 查找本地配置文件
如果之前有访问过,浏览器会进行缓存,如果没有的话会在本机域名解析文件hosts文件中寻找是否存在该URL的域名映射,如Windows的配置文件:C:\Windows\System32\drivers\etc\hosts。如果有相应URL->IP的映射,则使用该映射并访问相应的IP地址,跳到第四步发起TCP连接;若没有,则到第三步。
3. DNS解析
去DNS找(DNS本身也是一台服务器,也具有自己的ip地址,通常是配置在操作系统中),DNS中管理着几乎全世界所有的URL->IP的映射,找到的话就返回该IP地址。DNS服务器不是唯一,世界上有很多。当局部的DNS服务器无法解析这个域名时,他有两种途径:
a. 递归解析:局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后得到的查询结果返回给局部DNS服务器,再由局部DNS服务器返回给客户端。
b. 迭代解析:当局部DNS服务器自己不能回答客户机的DNS查询时,也可以通过迭代查询的方式进行解析,如图所示。局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到得到查询结果为止。也就是说,迭代解析只是帮你找到相关的服务器而已,而不会帮你去查。
4. 发起TCP连接
当浏览器获得IP地址后,就会与服务器进行TCP连接(三次握手),如果使用的是HTTPS协议,还会有一个TLS的握手
a. 第一次握手 (发出连接请求):客户端将标志位SYN置为1,随机产生一个值为seq=J(J的取值范围为=1234567)的数据包到服务器,客户端进入SYN_SENT状态,等待服务端确认。
b. 第二次握手 (回应连接请求):服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务端进入SYN_RCVD状态。
c. 第三次握手 (收到回应,最后确认):客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务端,服务端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,完成三次握手,随后客户端A与服务端B之间可以开始传输数据了。
d. 三次握手的原因:第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。
作者:CyC2018
链接:https://leetcode.cn/leetbook/read/tech-interview-cookbook/oeb2ld/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
5. 浏览器发送HTTP请求 (Request)
6. 服务器返回HTTP响应 (Response)
7. 断开TCP连接
当浏览器希望与服务器断开时(反之亦然),就会与对方进行TCP断开连接(四次挥手)。
a. 第一次挥手 (告诉对方我要断开了,停止向对方传输信息,但仍接收对方信息):Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
b. 第二次挥手 (对方收到请求,并关闭接收从我这里过去的信息流,并发送确信给我,但仍可能在向我传输信息):Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
c. 第三次挥手 (对方完成对我的信息传输,关闭了对我传输的信息流,并告知我)Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
d. 第四次挥手 (我收到对方对我传输流的关闭,并告知对方我收到了,我也关闭了从对方接收的流,对方收到我的关闭信息,进入closed状态)Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
8. 浏览器对Response进行页面渲染
参考:
- 【狂神说Java】JavaWeb入门到实战
- 前端经典面试题之一(浏览器输入url按下回车后发生了什么)
在浏览器输入URL,按下回车之后的流程?相关推荐
- 浏览器 重定向次数限制_在浏览器输入URL到页面渲染的整个流程是如何的?都有哪些步骤?...
问题:输入 URL 到页面渲染的整个流程 DNS解析 TCP握手 TLS握手 浏览器开始解析文件 构建 DOM 树.构建 CSSOM 树.解析JS 生成 Render 树 调用 GPU 绘制,合成图层 ...
- 从浏览器输入URL到展示页面的全流程
从本地终端(如手机.电脑)访问一个网站,怎么处理请求并且加载出数据的.实际上考察的是计算机网络TCP/IP协议栈. 主要的得分项为TCP协议各层的描述.数据传送的封装和解包.一次页面包含多个TCP连接 ...
- 输入url并按下回车的那一刻发生了什么?
一.事前准备 在进行网络通信前,本机需要知道四个参数分别是: 本机的IP地址 子网掩码 网关的IP地址 DNS的IP地址 这四个参数通常在开机时,通过DHCP服务器获取,该过程遵循DHCP协议,该协议 ...
- 前端——在浏览器输入url后发生了都发生了什么
一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么? 主要包括以下几个基本步骤: 浏览器的地址栏输入URL并按下回车. 浏览器查找当前URL是否存在缓存,并比较缓存是否过期. DNS解 ...
- 在浏览器中输入URL按下回车键后发生了什么
在浏览器中输入URL按下回车键后发生了什么 [1]解析URL [2]DNS查询,解析域名,将域名解析为IP地址 [3]ARP广播,根据IP地址来解析MAC地址 [4]分别从应用层到传输层.网络层和数据 ...
- 在浏览器输入url回车后发生了什么
在浏览器输入url回车后发生了什么 转载 https://www.cnblogs.com/tisikcci/p/5866753.html
- 在浏览器输入url回车之后发生了什么?
在浏览器输入url回车之后发生了什么? 浏览器解析URL(https://www.baidu.com/dist/test.html),获得协议(https).web服务器名(baidu.com)和文件 ...
- 【网络】浏览器输入URL到展示页面全过程(含互联网协议及HTTPS简介)
这里写自定义目录标题 前言 1.URL介绍 2.DNS查找 3.互联网协议 3.1 实体层 3.2 链路层 3.2.1 以太网协议 3.2.2 Mac地址 3.2.3 广播 3.3 网络层 3.3.1 ...
- HTTP浏览器输入URL后发生了什么
原文:"天龙八步"细说浏览器输入URL后发生了什么 慕课大神 本文摘要: 1.DNS域名解析: 2.建立TCP连接: 3.发送HTTP请求: 4.服务器处理请求: 5.返回响应 ...
- 每天一道面试题 浏览器输入URL到页面呈现详细过程
浏览器输入URL到页面呈现过程 1.当用户敲下回车的那一刻,浏览器会判断用户输入的是ip地址还是域名 2.如果是ip地址就直接访问,否则就会先解析域名 3.域名的解析会先从浏览器缓存中去查询,是否有之 ...
最新文章
- php的安装配置,PHP 安装/配置
- 开发日记-20190914 关键词 汇编语言王爽版 第七章第八章
- JavaScript eval()
- 输入法注入源码_将注入进行到底:利用Mono注入C#游戏脚本
- springsession使用redis
- UpdatePanel之间的调用
- LLVM和clang
- Python 科学计算库 Numpy 准备放弃 Python 2 了
- js之事件冒泡和事件捕获详细介绍
- ML/DL-复习笔记【十】- 分组卷积和深度可分离卷积的区别
- 深入浅出WPF(1)——什么是WPF
- 程序员修炼之道(一)
- 面经_黑盒测试与白盒测试
- 图像检索哈希算法综述
- 易思ESPCMS企业建站管理系统 P8.21120101 稳定版
- android studio图形验证码,android 一行代码,快速实现图片验证码(附android studio 版小demo)...
- 蚂蚁电竞ANT27VQ电子竞技显示器重磅来袭
- 系统非功能需求(质量属性)
- 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板
- 科技战疫——战疫背后的神秘力量
热门文章
- 图解FDISK与FORMAT命令分区与格式化
- java如何输入(输出)二进制,八进制,十六进制数?(新手向)
- 【学习记录】使用多协程和队列,爬取时光网电视剧TOP100的数据
- 论文笔记 - Learning Compact Binary Descriptors with Unsupervised Deep Neural Networks
- 求最大公约数代码 Java_java怎么求最大公约数?
- 《场景革命》读书笔记
- java访问邮箱 apache,关于apache common-mail发邮件,部分邮箱无法接收有关问题
- 13.6.1 PDF 偏执狂
- IOS 开发环境,证书和授权文件是什么?
- Redis配置详解(转)