在浏览器中输入网址后,会有哪些神奇的事情发生?

网络 通信技术
在浏览器中输入网址后,网站便打开了。你可能想不到,就这一个简简单单的步骤,背后藏着多么复杂的技术步骤。

在浏览器中输入网址后,网站便打开了。

你可能想不到,就这一个简简单单的步骤,背后藏着多么复杂的技术步骤。

为了方便理解,我们请出本文的主人公赵四和刘能,通过他们的视角,来了解从用户输入网址,到打开网站到底经历了什么。

有一天,赵四听说刘能建了一个个人网站,想去一探究竟。于是他在浏览器中输入了zhaosi.com的域名并回车。

[[393075]]

[[393076]]

浏览器是刘能的小弟,刘能不论下什么命令,浏览器都会乖乖照做。但浏览器也是一个有原则的人,一些明显错误的命令,它会马上反馈给刘能,告诉他这是不对的。

浏览器首先会检查刘能输入的网址是否合法。如果刘能输入的网址zha.osi.com或者zhao@si.com那么浏览器会立即告诉刘能,这是不对的。

为了自己方便,刘能下达的命令经常很模糊,比如这次访问网站,他直接输入zhaosi.com,并没有告诉浏览器是用http协议还是https协议。

多嘴去问刘能又不太好,于是浏览器有自己的处理方法。如果老板没有明确告诉我,那么我就默认使用http协议,如果明确告诉我要使用https,那么就打开https://zhaosi.com这个网站。

以上只是万里长征的第一步。如果要建立刘能和赵四网站之间连接,打开zhaosi.com还有很长的路要走。

第一个拦路虎是TCP/IP,这是一家很大的公司,垄断了整个快递行业,如果你想寄快递,只能通过这家公司,大家也都只认它。

它还不怕挨罚,前两天阿里巴巴因垄断行为被罚180亿,TCP/IP只是笑笑不说话~

[[393077]]

这家公司有一个规定:只认IP,不认网址(域名)。

你告诉TCP/IP要把这个包括寄到赵四的网站没用,必须告诉它准确的地址,精确到门牌号(IP)。

可刘能并不知道赵四的网站IP地址是多少,咋办?

于是浏览器找到了DNS公司,它的主营业务类似于114查号台。114可以帮忙查电话号码,而DNS可以帮忙查域名对应的IP地址。

[[393078]]

刘能告诉DNS赵四的网站地址是zhaosi.com,委托它帮忙查询一下对应的IP地址,再联系TCP/IP。

DNS接受委托后,开始查询。先查查自己内存里的DNS Cache,没有找到!再查查本地硬盘的host文件,也没有找到。最后它只能联系自己的DNS服务器8.8.8.8。

漫长的查IP地址之路开始了。

DNS将自己的查询打好包。

  • 收件人地址:8.8.8.8
  • 寄件人:1.1.1.1

负责收件的是UDP,接过包裹后,他在上面写了几笔:

  • 收件人53号
  • 发件人56002号

之所以要写上门牌号,是因为一个地址可能对应很多个门牌号。

干完这些事后,他联系IP司机,请求他把包裹送到目的地。IP司机查了IP路由表,发现要出关,出关的要求是,司机必须知道MAC地址。

怎么办?IP司机想了一个好方法,问问当地的想到ARP不就行了?

ARP立马喊了一声,网关MAC地址妥妥的收入囊中:xx.xx.xx.xx.xx.xx

有了MAC地址,IP司机顺利出关,上了Internet高速公路,一路狂奔……

最终包裹到达DNS服务器,DNS服务器一看,zhaosi.com的IP地址,刚好在本地缓存里有,直接告诉浏览器即可。

如果本地缓存没有,怎么办?

DNS会向根域名服务器发起查询,他会先问根域名服务器:“你有zhaosi.com的IP地址吗?”

根域名服务器告诉他:“去com服务器找。”

接着他去问com服务器,一层层下来,终于知道zhaosi.com的IP地址了,最后再告诉浏览器。

历经千辛万苦,DNS不负使命,终于拿到IP地址,这下可以联系TCP/IP公司了。

根据TPC协议,刘能想要访问赵四的网站,必须先问赵四在不在,要对方在才行。通常的要这样联系对方:

“在吗?想去你家做客。”

赵四:“我在,欢迎啊!”

“好的,马上就到”

经过这三次对话(三次握手)后,包裹便可以顺利到达目的地。

刘能终于打开了赵四的个人网站。

刘能打死也不知道,自己一个动作,会产生如此复杂的计算量……

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2022-03-04 08:56:58

HTTPDNS 服务器浏览器

2018-01-03 15:17:26

2010-07-06 10:11:25

浏览器

2020-09-01 11:40:01

HTTPJavaTCP

2023-01-14 16:11:27

浏览器URL回车

2020-10-09 08:59:55

输入网址解密

2022-04-25 10:26:11

Python代码浏览器

2021-07-26 05:01:55

浏览器渲染流程

2023-10-30 23:14:57

浏览器URL网页

2021-04-20 19:15:51

浏览器网络URL

2010-07-09 13:07:58

Linux环境浏览器

2021-06-04 15:55:32

浏览器UC浏览器安卓手机

2023-05-17 00:10:55

GPU浏览器解锁

2021-04-21 08:28:06

微软EdgeGoogle

2010-04-05 21:57:14

Netscape浏览器

2012-03-09 09:11:29

Node.js

2011-08-01 14:02:15

2017-09-22 13:24:20

2023-12-12 17:56:05

终端JavaScrip代码

2017-03-03 16:50:01

点赞
收藏

51CTO技术栈公众号