当你在浏览器中输入了网址访问时产生了哪些技术步骤

news2025/1/20 4:38:51

当你在浏览器中输入了网址访问时产生了哪些技术步骤

前段时间在知乎上了看一些网络方面的知识,刚好小编自己也是从事这一块的相关工作由对网络方面有一定的了解。今天我们来讲讲,当你在浏览器中输入本站域名并回车后,这背后到底发生来什么事情?

(因平台原因本文中www即为xxx ,com即为zzz,http/ccccc即为cccc/ccccc)

大致总结归纳了下,发生的事情如下图:

 

看到这里,大部分人都是蒙的。哪怕你有一点网络知识的基础,看起来也是蒙的。为了跟大家生动形象地说明原理,下面,我们用拟人的手法,讲述从输入一个网址,到最终显示出页面,这背后所发生的事情。

某天,小明心血来潮,想去艾西服务器论坛看一下有没有更新的博文,于是他打开了chrome浏览器,稍微回忆了一下网址,输入了:27server.zzz,并按下了回车。

一 ,浏览器格式化检查

chrome检查了一下,嗯?这好像是一个蛮标准的网址。但如果小明输入的是27server@zzz或者27server.zzz1这样的,chrome就会无情的拒绝小明的提议,并提示他网址出错。

所以在第一步,浏览器对网址进行了格式化检验,确定这是一个有效的网址,才会进入下一步。但是,在访问之前,浏览器必须知道,用了什么协议,是http呢,还是https呢?显然chrome对这种事情已经见怪不怪了,他有自己的一套方案,这里小明没有给定是什么协议的,于是chrome默认用了http协议,于是将网址修改成了:cccc://27server.zzz

二 DNS分级查询

在互联网上,有一家名叫TCP/IP的快递公司,专门负责运送用户的包裹。

于是chrome联系了TCP/IP快递公司,但却被告知:需要知道对方的IP地址,才能把包裹寄给对方!chrome并不是一个灰心的孩子,于是它找到了“黄页公司”-DNS。

求DNS帮忙查询下“27server.zzz”的IP地址是多少?DNS于是着手开始查找。首先看了下本地的hosts文件,没有找到对应!然后看了下本地内存,也没有!没办法,DNS只好联系了村口的一家名叫路由器的公司,192.168.1.1。路由器查看了下,最近村里没人访问过这个域名呀,要不你去市里的DNS公司问问?这是市里的DNS公司地址:114.114.114.114

于是DNS又联系了市里的DNS公司,却被告知最近市里最近也没人访问过这个域名。但是市里的DNS公司毕竟是专业的DNS公司,不会随便推卸责任,对DNS说,你等一等,我找我的上级查询下。于是市里的DNS公司联系了它的上级,根域名服务器。这个根域名服务器可了不得,全球只有13台,掌控着全球的DNS根域名查询。市里的DNS公司找到了离他最近的根域名服务器,说:“老哥,麻烦帮我查下.com顶级域名的服务器地址。”

没过一会儿,根域名服务器回复道:“你好,你要查询的地址是1.2.3.4。”

于是市里的DNS公司又联系到了1.2.3.4,询问 27server这个二级域名的域名服务器地址。

同样,1.2.3.4回复给了市里的DNS公司,地址是2.3.4.5。

市里的DNS公司又找2.3.4.5问了下,地址是:27server.zzz.w.kunluncan.zzz。等等,这怎么是一个别名(CNAME)?

于是市里的DNS公司又不厌其烦的重复了上面的几个步骤,一级一级地查找了 com > kunluncan > w > com > 27server的域名服务器地址,一直找到了驰网云的CDN域名服务器,DNS联系了对方,对方回复道:“查询到25个IP地址,分别是xxxxxxxx,帮你找到了离你最近的地址,3.4.5.6,已经打包,收件人地址:114.114.114.114 发件人地址:3.3.3.3,已委托TCP/IP快递公司的UDP小哥发送给你。”

三,网关 ARP原理

UDP是这一行的老司机,随手在包裹上写着:

收件人门牌号:53

发件人门牌号:56002

因为UDP知道,同一个地址会有很多的门牌号,为了避免混淆,必须要写。

UDP随手联系了TCP/IP公司的货车司机,让他捎带一下这个包裹。

司机来了,把包裹放进了驾驶室,坐上车准备开车。

司机打开了导航(路由表),发现要出关(网关),但是要知道关口的编号(mac地址)。但是导航信息里并没有关口的编号。于是司机找到了当地的向导ARP,问这个关口的编号是多少?ARP吼了一嗓子,关口回复说:“我的编号是xxxxx”。司机很快就到达了关口,关口放行,载着快递,上了Internet高速公路,一路狂奔不止。

四,建立DNS缓存

市里的DNS公司收到结果后,又通过村口的路由器公司联系到了DNS,并把结果告诉给了对方。同时村口的路由器公司和DNS都在自己的小本本上默默地记下了这个对应关系。

最后,DNS又把结果告诉给了已经等得不耐烦的chrome了。

  

五 ,TCP的三次握手

知道了27server.zzz的IP地址,chrome又立即联系了TCP/IP快递公司,快递公司派出了TCP小哥来接洽此时。和UDP小哥不同的是,TCP小哥是一个做事一丝不苟的人,知道chrome想要去拜访3.4.5.6,就要先和对方联系一下,确定在不在,这是通过TCP三次握手实现的。

TCP小哥:在吗?有人想要去拜访您。

对方:在啊,随时欢迎。

TCP小哥:马上到。

这三次消息,要通过TCP/IP公司的司机来来回回运输三次。DNS查询也是同样的道理,这里就不赘述了。

通过这三次握手,TCP小哥建立起了一条chrome到3.4.5.6的通道。

chrome将http请求消息(我是谁,要找谁等),打包给了TCP小哥,寄件人IP地址:2.2.2.2 门牌号:23755。收件人IP地址:3.4.5.6 门牌号:80

然后TCP小哥联系了司机,将包裹送到了3.4.5.6的80门牌号上。

六 Nginx的工作原理

3.4.5.6的80门牌号的门卫是nginx老大爷。老大爷一看,是送给家里的27server.zzz的。

路上老大爷看了下nginx.conf里找人的顺序:首先找index.php,如果找不到就找index.htm,再找不到就找index.html。

于是敲开了27server.zzz的门,里面只有index.html在家。index.html头也不回地告诉nginx老大爷,告诉chrome,我们已经搬家了,去找ccccc://xxx.27server.zzz(强制跳转)。

七 https加密原理

chrome收到了这个消息,立马又重复了上面的所有步骤,联系了“黄页公司”DNS,费了很大一番周折,找到了 xxx.27server.zzz的IP地址。

其实这两次访问,整体流程相似,不一样的地方如下:

查找到 xxx.27server.zzz的IP地址后,chrome这回没有直接把包裹给TCP小哥,而是联系了TLS安保大叔,让他全权负责包裹的安全问题,确保包裹在运输过程中的安全,即包裹的内容保密,包裹内容不能被篡改、替换。

TLS大叔需要先和对方沟通安保措施,沟通的渠道,就是上文三次握手建立的渠道。

TLS大叔先发言:你好,我支持TLS版本1.2,以及我的认证算法、加密算法、数据校验算法,此外还有我的随机码,收到请回复。

TLS服务器回复:你好,我也支持1.2版本,那我们就使用xx认证算法、xx加密算法、xx数据校验算法,我的随机码是xx,来实现安保措施,你看好吗?

TLS大叔:没问题啊,能出示一下你的证件(数字证书)吗?

TLS服务器:okay,这是我的证件,请过目。

TLS大叔发现对方发过来的证书:

 

TLS大叔不放心,验证了下证书,过程如下:

1. 用DigiCert Global Root CA的公钥解密证书Encryption Everywhere DV的签名

作为一个权威CA,已经被浏览器预先安装在可信任根证书列表,那么我们信任该CA的一切,当然包括其公钥,在该证书里包含了明文的公钥。

解开了,证明是该CA私钥加密的,由于CA私钥只有CA知道,证书有效,并信任Encryption Everywhere DV的公钥。

2. 同样原理用Encryption Everywhere DV的公钥解密DigiCert Global Root CA的签名。

如果上述2个步骤都成功了,就有了27server.zzz的公钥。

3. 再检查下证书的有效期,如果没有过期,那么进入下一个步骤。

TLS大叔用“27server.zzz“公钥加密一段随机的字符串,发送给TLS服务器。

TLS服务器用自己的私钥解密,得到明文字符串。

至此,双方分享了这个神秘的字符串,双方还有早前分享的随机码(nonce),双方使用同样的算法,可以推导出相同的master key,进而推导出session key、HMAC key。

Session Key用于加密/解密数据, HMAC Key主要用于保护数据的完整性,以防被第三方篡改。

整个TLS沟通过程就算完成了,TLS大叔把浏览器扔给自己的包裹,外面加了一层保险箱,密码锁(session key)只有TLS大叔、TLS服务器知道。

然后TLS大叔把包裹给了TCP小哥,TCP小哥看了下包裹,没啥两样,就是收件人的门牌号从80变成了443。

包裹到达后,443门牌号的门卫是TLS服务器,TLS服务器用自己的密码打开了包裹,包裹里有个小纸条,上面写着“Application Data =http”,知道这是http的东西,于是转手又让nginx老大爷把包裹送到 xxx.27server.zzz的房间。

八 CDN(内容分发网络)原理

这回nginx老大爷一看index.php不在家,但是留了个字条,说对方如果要图片这些静态资源,那么直接给他,如果要找我们,请到IP地址:5.6.7.8来找我。没办法,nginx老大爷又委托TLS大叔跟对方的服务器5.6.7.8的TLS对接了下,商量下包裹加密,又TCP/IP快递公司,把包裹寄到了5.6.7.8的443门牌,送给了index.php。index.php发现需要主页,这需要进行计算。于是找来了php家族,计算完了又把主页打包成了html样式,返回给了chrome。

chrome收到了html样式的包裹,这是一种标记语言,需要经过解释才能把原来的页面还原出来。

于是chrome又埋头计算,终于通过里面写的规则,把图片文字拼拼凑凑,拼成了一个完整的页面,展示给了小明。

小明怎么也不会想到,按下了一次回车,在后台居然触发了这么大的计算量。。。

 对于以上的内容,这里我们用稍微专业点的语言解释一下:

访问网址,首先通过域名查询IP地址。

浏览器会先查询hosts文件,然后查询内存中是否有对应的DNS缓存。如果电脑连接路由器上网,而DNS又是自动获取的话,DNS服务器就会被指定为路由器(局域网网关),如果局域网中没人访问过这个地址,那么在路由器的内存中不会存在这条DNS解析记录。于是又往上查找各层级的DNS服务器,从家里到区,到城市的DNS服务器,能不能找到缓存,取决于这个区域有没有人访问过这个域名。一直查到最上层,如果都没有找到的话,就会请求根域名服务器,从找到com域名服务器地址,再从com上找到27server二级域名服务器地址….以此类推,最终找到完整域名的服务器地址。

找到地址后,是一个CNAME形式,解析到了阿里云CDN的DNS服务器上,阿里云的DNS服务器又通过用户的访问IP判断出用户的地理位置,返回最靠近用户的CDN服务器地址。CDN通俗点说,就是把你的网站资源镜像到全国各地的服务器上,从而实现不同地区用户的访问加速。

用户通过这两层DNS查询后,得到了离自己最近的CDN服务器地址,访问这个地址,CDN服务器根据配置的缓存规则,返回了静态资源,其他则通过访问源服务器进行返回(CDN回源)。

因为对应27server.zzz这个地址,我只放了一个index.html。访问这个页面,会自动跳转到 ccccc://xxx.27server.zzz。浏览器访问27server.zzz后,又继续访问ccccc://xxx.27server.zzz,此时通过两次DNS查询,CDN返回图片,js,css等静态资源,然后php的内容则通过CDN回源,源服务器的php计算后,转化为html样式,返回给访问者。

你对 27server.zzz的一次访问,一共触发了4次完整的DNS查询,1次www强行跳转,1次https强行跳转,1次CDN回源,2次CDN地址解析,更有数不清的资源文件从各个地方被传输到了你的电脑。这些都是通过TCP的三次握手协议,网关,ARP,UDP,nginx,CDN,DNS服务器联合工作。

我是艾西,今天的分享就到这里啦希望对有需要的小伙伴有帮助我们下期见

拥有一台服务器可以做很多有趣的事情!

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

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

相关文章

yolov3加上迁移学习和适度的数据增强形成的网络应用在输电线异物检测

Neural Detection of Foreign Objects for Transmission Lines in Power Systems Abstract. 输电线路为电能从一个地方输送到另一个地方提供了一条路径,确保输电线路的正常运行是向城市和企业供电的先决条件。主要威胁来自外来物,可能导致电力传输中断。…

【高阶数据结构】二叉树搜索树 {概念;实现:核心结构,增删查,默认成员函数;应用:K模型和KV模型;性能分析;相关练习}

二叉搜索树 一、二叉搜索树的概念 二叉搜索树又称二叉排序树,它可以是一棵空树,若果不为空则满足以下性质: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点…

Cadence软件屏幕显示问题

问题 就是今天打开Cadence软件想导出网表看一下,发现没有显示确定按钮什么的,那个窗口也是无语,不能移动,缩放也只能左右缩放,还不能缩小什么的,真的醉了,后面就是调整窗口的分辨率。 因为我最…

windwos系统如何创建typecho个人博客并通过内网穿透实现无公网IP访问

文章目录 前言1. 环境安装2.安装Typecho3.安装cpolar内网穿透4. 固定公网地址5.配置Typecho 前言 Typecho是一款PHP语言编写的开源博客程序,它是一个轻量级的内容管理系统,专注于博客领域。支持多用户、多站点、多语言等功能,可以满足不同用…

Win10怎么关闭自动更新?简单4招为你解决烦恼!

“买了一部win10的电脑,每次电脑自动更新都会导致我一些文件丢失或者系统错误。怎么才能关闭win10自动更新的功能呢?” Win10自动更新有时候会很影响我们使用电脑。在目前电脑用户中,使用win10系统的用户占大多数。因此很多朋友都会反映win10…

LLM(大语言模型)解码时是怎么生成文本的?

Part1配置及参数 transformers4.28.1 源码地址:transformers/configuration_utils.py at v4.28.1 huggingface/transformers (github.com) 文档地址:Generation (huggingface.co) 对于生成任务而言:text-decoder, text-to-text, speech-…

华为质量管理:从产品质量到用户体验,Kano模型成为新方向

目录 前言 华为质量管理的四个阶段 基于 IPD 如何做质量管理呢? CSDN相关课程 作者简介 前言 今天继续来谈谈华为流程体系中的质量管理过程。 通常来说质量具体是指产品的质量,也就是产品的使用价值及其属性。 产品再细分的话可以分为三个层次&a…

沃尔玛、亚马逊、ozon卖家必看:如何为旺季做准备?

近二十年来,得益于国家外贸政策的大力扶持,再加上近几年国家对跨境电商行业发展的高度重视,国货出海机会明显增多。 在政策利好的情况下,生产制造业的蓬勃发展等各种有利的局面,可谓是天时地利人和,那么在…

JetBrains 2023.2全新发布!IDEA、PyCharm等支持AI辅助

日前JetBrains官方正式宣布旗下IDE系列今年第二个重要版本——v2023.2全新发布,涵盖了 IntelliJ IDEA、PyCharm、WebStorm等一众知名产品,接下来我们一起详细了解一下他们的更新重点吧~ IntelliJ IDEA v2023.2——引入AI辅助开发 IntelliJ IDEA 2023.2…

java-CyclicBarrier、CountDownLatch、Semaphore 的用法以及 volatile 关键字的作用

CyclicBarrier、CountDownLatch、Semaphore 的用法 1. CountDownLatch(线程计数器 ) CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务 A,它要等待其他 4 个任务执行完毕之后才…

powerJob报错以及解决办法集锦

1. 本地测试成功新建任务并运行成功,但是部署到服务器时新建任务只要 “参数”有中文就无法报错 前台报错信息: ERROR:JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException…

MySQL 小数类型介绍

文章目录 前言1. 浮点类型1.1 数值精度说明1.2 整数超出范围1.3 小数超出范围1.4 精度误差说明 2. 定点类型2.1 数值精度说明2.2 整数超出范围2.3 小数超出范围 总结 前言 对于保证精度的数字,MySQL 也有对应的小数类型,下图是 MySQL 中小数类型概览。 …

Unity 之利用 localEulerAngle与EulerAngle 控制物体旋转

文章目录 概念讲解localEulerAngle与EulerAngle的区别 概念讲解 欧拉角(Euler Angles)是一种常用于描述物体在三维空间中旋转的方法。它使用三个角度来表示旋转,分别绕物体的三个坐标轴(通常是X、Y和Z轴)进行旋转。这…

cvat 安装部署

官网地址: https://github.com/opencv/cvat/tree/masterhttps://github.com/opencv/cvat/tree/master 1.从官网上下载源码地址。 2.配置环境变量 vim /etc/profile 或者执行: export CVAT_HOSTyour-ip-address 3.执行命令 docker-compose up -d …

视频中的声音怎么提取出来?这样做提取出来很简单

提取视频中的声音可以有多种用途。例如,我们可能希望从视频中提取音乐或音效,以在其他项目中使用。或者,可能需要将视频中的对话转录为文本,以便更轻松地编辑和共享内容。无论目的是什么,提取视频中的声音都可以帮助我…

Dwg如何转dxf格式?分享三种转换小技巧

DWG格式是CAD的原生格式,但是DXF文件格式是CAD支持的通用格式。将DWG文件转换为DXF文件可以使其他软件能够读取和编辑这些文件,因为大多数CAD软件都支持DXF格式。此外,DXF文件比DWG文件更小,在传输和存储时更方便。因此&#xff0…

“摧毁我们的文明”?推特博主马斯克批评TikTok:我决定不再使用

根据8月25日的消息,推特博主DogeDesigner发表了关于TikTok的批评言论,声称这个应用正在“摧毁我们的文明”。 他在配图中展示了两种形象,左边的形象代表着各方面的专家知识,如天文学、数学、物理学、哲学和生活等,但似…

从LeakCanary看内存快照生成

前面我们已经完成了生命周期监控并且可以通过ReferenceQueue和WeakHashMap的比较确定哪些对象发生泄漏了,那么接下来需要考虑的就是如何确定这个对象是被谁持有导致泄漏的呢? 从内存泄漏一文中可知,当我们使用Android Studio或MAT分析内存泄…

vue3范围选择组件封装

个人项目地址: SubTopH前端开发个人站 (自己开发的前端功能和UI组件,一些有趣的小功能,感兴趣的伙伴可以访问,欢迎提出更好的想法,私信沟通,网站属于静态页面) SubTopH前端开发个人站…

测试框架pytest教程(10)自定义命令行-pytest_addoption

pytest_addoption pytest_addoption是pytest插件系统中的一个钩子函数,用于向pytest添加自定义命令行选项。 在pytest中,可以使用命令行选项来控制测试的行为和配置。pytest_addoption钩子函数允许您在运行pytest时添加自定义的命令行选项,…