浏览器输入一个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…...
Cool-Request全局请求头配置终极指南:告别重复配置的API测试新体验
Cool-Request全局请求头配置终极指南:告别重复配置的API测试新体验 【免费下载链接】cool-request IDEA API、Java Method debug tools 项目地址: https://gitcode.com/gh_mirrors/co/cool-request 你是否厌倦了在每个API请求中重复配置相同的认证Token、内容…...
别再死记硬背SPI时序了!用STM32CubeMX+W25Q128实战,5分钟搞懂CPOL/CPHA模式选择
从波形到代码:STM32CubeMX可视化解析SPI四种模式的实战指南 当第一次接触SPI通信时,那四种工作模式(CPOL/CPHA组合)就像天书一样令人困惑。传统教程往往要求死记硬背时序图,但今天我们将通过STM32CubeMX和W25Q128 Flas…...
NHSE终极指南:5分钟掌握动物森友会存档编辑器的完整教程
NHSE终极指南:5分钟掌握动物森友会存档编辑器的完整教程 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 还在为《集合啦!动物森友会》中收集稀有物品而烦恼吗?想…...
从排版混乱到学术规范:NKThesis LaTeX模板的中文标题架构演进之路
从排版混乱到学术规范:NKThesis LaTeX模板的中文标题架构演进之路 【免费下载链接】NKThesis 南开大学硕士毕业论文/博士论文模板 (Latex Template for Nankai University) 项目地址: https://gitcode.com/gh_mirrors/nk/NKThesis 在学术写作的数字化浪潮中&…...
UEFI开发避坑指南:WaitForEvent和CreateEvent的5个实战陷阱与正确用法
UEFI开发避坑指南:WaitForEvent和CreateEvent的5个实战陷阱与正确用法 如果你正在开发UEFI驱动或应用,事件机制(Event)一定是绕不开的核心功能。但看似简单的WaitForEvent和CreateEvent,在实际编码中却暗藏玄机。本文将…...
构建多模型备选策略以提升AI应用服务稳定性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 构建多模型备选策略以提升AI应用服务稳定性 在将大模型能力集成到生产应用时,服务可用性是核心考量之一。依赖单一模型…...
从功能测试到测试开发,薪资翻倍的秘密都在这里
当“点点点”撞上职业天花板 如果你是一名功能测试工程师,下面的场景你一定不陌生:每天对着需求文档编写用例,在测试环境里重复着相似的操作路径,偶尔发现一个边界值缺陷便觉得一天没有白费。然而,当你在招聘网站上搜…...
终极指南:如何用Reset-Windows-Update-Tool快速修复Windows更新故障
终极指南:如何用Reset-Windows-Update-Tool快速修复Windows更新故障 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...
NotebookLM智能体插件:AI驱动的自动化知识处理与任务执行
1. 项目概述:当NotebookLM遇上智能体,知识处理的范式革命最近在AI圈子里,一个名为“notebooklm-agent-plugin”的项目引起了我的注意。乍一看,这个名字结合了Google的NotebookLM和当下火热的“智能体”(Agentÿ…...
基于RAG的Obsidian智能知识库:本地部署与优化实战
1. 项目概述:当知识管理遇上大语言模型 如果你和我一样,是 Obsidian 的深度用户,同时又对大语言模型(LLM)的智能涌现能力感到着迷,那么你肯定也想过一个问题:能不能让我的知识库“活”起来&…...
