浏览器输入一个URL之后发生了什么?
- URL解析
- DNS解析
- TCP连接
- TSL连接
- HTTP请求
- TCP挥手
- 接收并解析响应
URL 解析
主要分为:
- 协议,eg http,https
- 域名或者ip地址,eg www.baidu.com
域名相对于ip地址来说,更方便人们记忆,但是实际的网络传输中使用的是ip地址
- 端口号,不同的协议对应不同的端口号,一般可以不写,eg http是80,https是443
- 请求的资源或路径,默认不写就是 /index
DNS 解析
根据域名找到对应的ip
首先会在本机查找浏览器缓存,如果没有查操作系统缓存
如果还没有,就后台向本机已经通过DHCP配置好的DNS服务器发起一个查询递归请求
DNS服务器会首先查询自己的缓存,如果没有就向分布式DNS域名系统发起迭代查询,依次是根域名服务器,顶级域名服务器,权限域名服务器
TCP连接
- 第一次发送连接请求
- SYN=1表示这是一个TCP连接请求报文段
- seq设为x,作为TCP客户进程所选的初始序号
- TCP规定SYN=1的报文段不能携带数据,但要消耗掉一个序号
- 第二次发送请求连接请求确认报文段
- SYN=1和ACK=1表示这是一个TCP连接请求确认报文段
- seq设为y,作为TCP服务进程所选的初始序号
- ack=x+1,这是对TCP客户进程所选的初始序号的确认
- 因为SYN=1,所以不能携带数据,但要消耗掉一个序号
- 第三次发送请求连接确认的确认
- ACK=1,表示这是一个普通的TCP确认报文段
- seq=x+1,第一次发送请求连接,TCP客户进程所选的初始序号x,不携带数据,但是消耗一个序号
- ack=y+1,这是对TCP服务进程所选的初始序号的确认
- 普通的确认报文段可以携带数据
- 如果不携带数据,则不消耗序号;在这种情况下,下一个发送的序号seq仍为x+1
q: 第三次确认是否多余?
不多余。这是为了防止已失效的连接请求报文段突然又传到了服务器而导致错误,造成服务端资源浪费
假如我们把连接改为两次握手,就会产生如下错误情况
TSL 连接
q: Http和Https的区别?
- Http是明文传输,容易遭到窃听和篡改,Https对传输内容做了加密
- Http缺乏报文完整性验证,Https对报文做了验证
- Http缺乏身份验证,Https加入了身份验证机制
- 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
如果你输入http://www.taobao.com
, 你首先会获得一个重定向的响应
然后浏览器重新发起对https://www.taobao.com
的请求
TSL 连接的过程如下:
消息发送与验证
HTTP请求
建立连接后,浏览器发起Http请求,Http报文如下
TCP 挥手
客户端和服务端都可以释放连接
- 第一次发送释放连接请求
- FIN=1和ACK=1,表示这是一个TCP连接释放报文段
- seq=u,u为上一次发送请求的seq+1,即已传发送过的字节序号+1
- ack=v,表示对上一次请求确认的确认 ,即服务端已收到的字节序号+1
- TCP规定FIN=1的报文段即使不携带数据也要消耗一个序号
- 第二次发送对释放连接请求的确认
- ACK=1,表示这是一个普通的确认
- seq=v,v为服务端以收到的字节序号+1(正好和第一次请求的ack一致)
- ack=u+1,这是对连接释放报文段的确认
中间服务端可能还要有数据进行发送
- 第三次发送,TCP服务端发送TCP连接释放报文段
- FIN=1和ACK=1,表示这是一个TCP连接释放报文段
- seq=w,是因为服务端可能又发送了若干数据
- ack=u+1是对第一次请求连接释放报文段的重复确认
- 第四次TCP客户端发送普通确认报文段
- ACK=1,表示这是一个普通的确认
- seq=u+1,是因为第一次发送请求时消耗了一个字节序列
- ack=w+1,这是对第三次请求的确认
q: 最后等待2MSL是否有必要?
有必要。如果最后一次TCP报文段丢失,则服务端会一直等待或者重传,浪费资源
q: 服务端如何发现客户端故障?
接收并解析响应
参考资料
- 浏览器输入url发生了
- 在浏览器输入 URL 回车之后发生了什么(超详细版) - 知乎 (zhihu.com)
- 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系! | Dailc的个人主页 (dailichun.com)
相关文章:

浏览器输入一个URL之后发生了什么?
URL解析DNS解析TCP连接TSL连接HTTP请求TCP挥手接收并解析响应 URL 解析 主要分为: 协议,eg http,https域名或者ip地址,eg www.baidu.com 域名相对于ip地址来说,更方便人们记忆,但是实际的网络传输中使用的是ip地址 端…...

uniapp 布局(自定义导航栏加固定高度的主要内容)
不想让整体页面出现滚动条 页面大致分为三部分,导航栏、主题内容、tabbar,不想让整个页面出现滚动条,只想让主要内容滚动。 我这里是直接用了uni.getSystemInfoSync(),整体分为两部分,自定义头部和滚动内容ÿ…...

android手机销售app(IDEA,SpringBoot,SSM,MySQL)+支付宝支付+全套视频教程
本项目亮点: 支付宝支付 eCharts柱状图图表数据统计 【项目功能介绍】 本系统包含后台管理和前端app双端系统,后台管理的功能包含: 登录, 退出, 修改管理员信息(基本信息与头像),资源管理,角色管理,资源权限分配,字典管理,用户管理,图书管理,订单管理,订单统计; a…...
深入探讨Java虚拟机(JVM)的工作原理与优化策略
摘要:本文对Java虚拟机(JVM)的工作原理进行深入探讨,包括其内存管理、垃圾回收以及代码执行等方面。同时,文章还通过具体的代码示例,阐述了JVM的优化策略,旨在提高Java程序的性能。 一、引言 …...
WPF数据绑定
数据绑定是一个很强大且优雅的技能,之前用过好多次,但有些地方总不是特别清晰,常常需要重新翻阅资料来回顾,于是这次用了几天时间好好梳理一下,记录一下。 首先数据绑定对数据对象的要求:需要是公有属性&a…...
Android学习之路(6) 其他UI控件
ImageView(图像视图) RadioButton(单选按钮)&Checkbox(复选框) 开关按钮ToggleButton和开关Switch ProgressBar(进度条) SeekBar(拖动条) RatingBar(星级评分条) ScrollView(滚动条)...
matlab实现牛顿迭代法求解非线性方程
非线性方程是指含有未知数的方程,且方程中至少有一个未知数的次数大于一或者含有非一次幂的函数(如指数、对数、三角函数等)。例如,$f(x) x^3 - 2x - 5 0$就是一个非线性方程。非线性方程通常没有显式的解析解,因此需…...

Cpp学习——编译链接
目录 编辑 一,两种环境 二,编译环境下四个部分的 1.预处理 2.编译 3.汇编 4.链接 三,执行环境 一,两种环境 在程序运行时会有两种环境。第一种便是编译环境,第二种则是执行环境。如下图: 在程序运…...
android - fragment 数据丢失?状态丢失?
最佳答案 一些状态丢失的例子: 1. 假设您有一个按钮和一个 TextView 。在代码中,你已经定义了初始值为 0 的整数 i,它通过单击按钮递增 1,并且它的值显示在 TextView 中。假设你已经按下按钮 5 次,那么 textview 将被设置为 0。也…...
Git基本操作
本地仓库 当我们初始化(git init)之后,会在当前目录下生成一个与项目并列的.git文件夹,当我们对项目作出更改之后使用git commit命令,一般是将修改提交到本地仓库,也就是该文件夹下面的文件会对应修改&…...

Nginx配置文件详解
Nginx配置文件详解 1、Nginx配置文件1.1主配置文件详解1.2子配置文件 2、全局配置部分2.1修改启动的工作进程数(worker process) 优化2.2cpu与worker process绑定2.3 PID 路径修改2.4 修改工作进程的优先级2.5调试工作进程打开的文件的个数2.6关闭master-worker工作…...
【0217】stats collector(统计信息收集器)进程启动原理(1)
文章目录 1. 启动 stats collector进程1.1 stats collector进程启动过程1.1.1 检查套接字 pgStatSock 是否存在1.1.2 重新启动失败的stats collector频率1.1.3 fork() 三种返回值处理1.2 detach所有共享内存段1.3 detach 共享内存段1.4 stats collecotr进程启动的主体相关阅读:…...

【应用层】网络基础 -- HTTPS协议
HTTPS 协议原理加密为什么要加密常见的加密方式对称加密非对称加密 数据摘要&&数据指纹 HTTPS 的工作过程探究方案1-只使用对称加密方案2-只使用非对称加密方案3-双方都使用非对称加密方案4-非对称加密对称加密中间人攻击-针对上面的场景 CA认证理解数据签名方案5-非对…...

实验篇—— 基因家族Motif 分析
实验篇—— 基因家族Motif 分析 文章目录 前言一、名词解释二、实操1. MEME工具箱2. Motif Discovery(基序发现)1. 结果网页2. 在TBtools中(额外) 2. Motif Enrichment(基序富集分析)3. Motif Search&#…...
Linux拓展之阻止或禁用普通用户登录
禁止指定用户登录 chsh -s /sbin/nologin 指定用户名示例 chsh -s /sbin/nologin testuser恢复指定用户登录 chsh -s /bin/bash 指定用户名示例 chsh -s /bin/bash testuser参考 https://blog.csdn.net/cnds123321/article/details/125232580 https://www.cnblogs.com/cai…...

Linux系统USB摄像头测试程序(四)_视频旋转及缩放
下面的程序实现了视频的旋转及缩放,窗口中点击鼠标左键视频向左旋转,点击鼠标右键视频向右旋转并且视频缩小了二分之一。程序中首先把yvyv422转换成了RGB24,然后利用opencv进行了旋转和缩放,其后用sdl2进行了渲染。使用了ffmpeg、…...

大模型+学习机,是概念游戏还是双向奔赴?
众所周知,2023年上半年大模型概念炙手可热。各大科技公司纷纷卷入,或宣称布局相关领域,或率先官宣自研大模型。而随着资本市场对大模型概念的热情有所消退,属于这片战场的新一轮角逐慢慢聚焦在了技术的落地应用上。 8月15日&#…...
linux怎么查看用户属于哪个组
查看当前用户所属组 shell> groups root查看指定用户所属组 shell> groups testuser testuser : testusershell> id testuser uid1000(testuser) gid1000(testuser) groups1000(testuser)查看组文件 shell> cat /etc/group...

邂逅JavaScript
前言:前端三大核心 前端开发最主要需要掌握的是三个知识点:HTML、CSS、JavaScript 一、认识编程语言 1.计算机语言 前面我们已经学习了HTML和CSS很多相关的知识: 在之前我们提到过, HTML是一种标记语言, CSS也是一种样式语言; 他们本身都是属于计算…...
Android 中 Fragment判空
1. 判断 Fragment 是否已经被添加到 Activity 中,可以通过 Fragment 的 isAdded() 方法来判断。 2. 判断 Fragment 的 View 是否已经被创建,可以通过 Fragment 的 getView() 方法来判断。 3. 判断 Fragment 是否已经被销毁,可以通过 Fragme…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...