浏览器输入一个URL之后发生了什么?

news2024/9/24 17:14:47
  1. URL解析
  2. DNS解析
  3. TCP连接
  4. TSL连接
  5. HTTP请求
  6. TCP挥手
  7. 接收并解析响应

URL 解析

image.png
主要分为:

  • 协议,eg http,https
  • 域名或者ip地址,eg www.baidu.com

域名相对于ip地址来说,更方便人们记忆,但是实际的网络传输中使用的是ip地址

  • 端口号,不同的协议对应不同的端口号,一般可以不写,eg http是80,https是443
  • 请求的资源或路径,默认不写就是 /index

DNS 解析

根据域名找到对应的ip
首先会在本机查找浏览器缓存,如果没有查操作系统缓存
如果还没有,就后台向本机已经通过DHCP配置好的DNS服务器发起一个查询递归请求
DNS服务器会首先查询自己的缓存,如果没有就向分布式DNS域名系统发起迭代查询,依次是根域名服务器,顶级域名服务器,权限域名服务器
image.png

TCP连接

image.png

image.png

  • 第一次发送连接请求
    • 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: 第三次确认是否多余?

不多余。这是为了防止已失效的连接请求报文段突然又传到了服务器而导致错误,造成服务端资源浪费
假如我们把连接改为两次握手,就会产生如下错误情况
image.png

TSL 连接

q: Http和Https的区别?

  • Http是明文传输,容易遭到窃听和篡改,Https对传输内容做了加密
  • Http缺乏报文完整性验证,Https对报文做了验证
  • Http缺乏身份验证,Https加入了身份验证机制
  • 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。

如果你输入http://www.taobao.com , 你首先会获得一个重定向的响应
然后浏览器重新发起对https://www.taobao.com 的请求

image.png

image.png

TSL 连接的过程如下:

image.png

消息发送与验证

image.png

HTTP请求

建立连接后,浏览器发起Http请求,Http报文如下
image.png

TCP 挥手

image.png

image.png

客户端和服务端都可以释放连接

  • 第一次发送释放连接请求
    • 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报文段丢失,则服务端会一直等待或者重传,浪费资源
image.png

q: 服务端如何发现客户端故障?

image.png

接收并解析响应

image.png

参考资料

  • 浏览器输入url发生了
  • 在浏览器输入 URL 回车之后发生了什么(超详细版) - 知乎 (zhihu.com)
  • 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系! | Dailc的个人主页 (dailichun.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/935502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java“牵手”天猫商品快递费用API接口数据,天猫API接口申请指南

天猫平台商品快递费用接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取天猫商品的标题、价格、库存、商品快递费用,宝贝ID,发货地,区域ID,快递费用,月销量、总销量、库存、详情…

十几款拿来就能用的炫酷表白代码

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 表白代码 1、坐我女朋友好吗,不同意就关机.vbs2、坐我女朋友好吗&…

订单状态定时处理、来单提醒和客户催单

一、Spring Task 1.1 基本介绍 1.2 cron表达式 cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间 构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义 每个域的含义分别为:秒、分钟、小时、日…

C++|观察者模式

观察者模式: 定义对象间的一种一对多(变化)的依赖关系,以便当一个 对象(Subject)的状态发生改变时,所有依赖于它的对象都 得到通知并自动更新 动机: 在软件构建过程中,我们需要为某些对象建立…

【深度学习 | 核心概念】那些深度学习路上必经的核心概念,确定不来看看?(一)

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

基于吉萨金字塔建造算法优化的BP神经网络(预测应用) - 附代码

基于吉萨金字塔建造算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于吉萨金字塔建造算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.吉萨金字塔建造优化BP神经网络2.1 BP神经网络参数设置2.2 吉萨金字塔建造算法应用…

SpringBoot与前端交互遇到的一些问题

一、XXX.jar中没有主清单属性 场景: SpringBoot打的jar包在Linux运行报错 解决方案: 百度找了很多都是一样的答案,但是解决不了我的问题,于是我新建了一个springboot项目发现打的jar包可以在Linux上运行。检查了下只要把下面这2个…

R语言之缺失值处理

文章和代码已经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 R语言 也可获取。 文章目录 缺失值处理1. 识别缺失值2. 探索数据框里的缺失值3. 填充缺失值3.1 删除缺失值:na.omit( )、complete.cases( …

机器学习:异常检测实战

文章目录 Anomaly Detection目录任务介绍数据集方法评估Baseline报告报告评价标准 Anomaly Detection 目录 任务介绍 无监督的异常检测 数据集 方法 autoencode 是否能够还原出原始类型图片,基于重构loss来判断是否正常 重构误差当作异常分数 评估 采用ROC和AUC…

Kubernetes入门 十、HPA 自动扩/缩容

目录 概述安装metrics-server使用HPA 概述 我们已经可以通过手动执行 kubectl scale 命令实现Pod的扩缩容,但是这显然不符合 Kubernetes 的定位目标–自动化和智能化。Kubernetes 期望可以通过监测Pod的使用情况,实现 Pod 数量的自动调整,于…

Orange Pi 3B 开发板 开箱评测 和 系统安装教程

香橙派 Orange Pi 3B(RK3566)开发板 开箱测评 和 系统烧录教程 简介 香橙派 Orange Pi 3B 是一款树莓派大小的单板计算机,但接口更加齐全,包括一个全尺寸 HDMI 接口和一个 M.2 存储插槽,售价199起。 Orange Pi 3B 采…

【Tkinter系列02/5】界面初步和布局

本文是系列文章第二部分。前文见:【Tkinter系列01/5】界面初步和布局_无水先生的博客-CSDN博客 说明 一般来说,界面开发中,如果不是大型的软件,就不必用QT之类的实现,用Tkinter已经足够,然而即便是Tkinter规…

软考:中级软件设计师:OSI/RM七层模型,网络技术标准与协议

软考:中级软件设计师:OSI/RM七层模型 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的…

No117.精选前端面试题,享受每天的挑战和学习

文章目录 断点续传怎么做的秒传怎么实现var let const 块级作用域ts Partial Omit 怎么实现的箭头函数有哪些限制箭头函数为什么不能作为构造函数promise常用apiMap和Object的区别vue怎么实现双向绑定 断点续传怎么做的 断点续传是指在文件下载或上传过程中,当连接…

ForexClub七夕交易大赛启动! 点燃交易之火为爱而战!

在这个充满激情的七夕季,ForexClub与您携手,掀起交易狂潮!点燃您心中的交易热忱,冲锋市场,赢取惊人奖金!别等了,参赛即有机会获得77美元的交易赠金,让我们一同为迸发的交易机会,燃烧一片天! 【大…

直流无刷电机工作原理及有感方波控制

BLDC方波控制 BLDC工作原理BLDC换向驱动过程有感控制模式 BLDC工作原理 首先要知道,BLDC转起来是基于什么原理 BLDC包括定子(线圈)和转子(永磁体),线圈要通电,通电的线圈具有磁场,该…

基于寄生捕食算法优化的BP神经网络(预测应用) - 附代码

基于寄生捕食算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于寄生捕食算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.寄生捕食优化BP神经网络2.1 BP神经网络参数设置2.2 寄生捕食算法应用 4.测试结果:5…

01.基于自定义MVC架构的用户登录与首页展示实现 — OA项目实践

目录 本章节目标:完成OA项目用户登录及首页展示 一.用户登录 User.java UserDao.java IUserDao.java UserAction.java login.jsp(登录界面) userManage.jsp (数据绑定,修改,删除) userEdit.jsp(用…

windows wvp-gb28181-pro一键安装的脚本流程

流程图 【金山文档】 windows wvp安装脚本流程https://kdocs.cn/l/cataPonNMXNm

信息系统项目管理师(第四版)教材精读思维导图-第四章信息系统管理

请参阅我的另一篇文章,综合介绍软考高项: 信息系统项目管理师(软考高项)备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图PDF格式 本章思维导图XMind源文件 目录 4.1 管理方法 4.2 管理要点 4.1 管理方…