当你在浏览器中输入了本站网址并回车后,产生了哪些技术步骤?

前段时间在知乎上了看一些网络方面的知识,发现知乎果然不愧是211,985才能入门的中文最高端的社区之一,大佬云集,讲得既生动又形象。由于博主工作上对网络方面有一定的了解,且在自学python的时候也接触过网络编程,在这里,我决定开一篇文章,借鉴一下知乎上的回答方式,来讲讲,当你在浏览器中输入本站域名并回车后,这背后到底发生来什么事情?

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

network.jpg

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

某天,小明心血来潮,想去小伟博客看一下有没有更新新的博文,于是他打开了chrome浏览器,稍微回忆了一下网址,输入了:xiaoweigod.com,并按下了回车。

一 浏览器格式化检查

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

所以在第一步,浏览器对网址进行了格式化检验,确定这是一个有效的网址,才会进入下一步。

但是,在访问之前,浏览器必须知道,用了什么协议,是http呢,还是https呢?显然chrome对这种事情已经见怪不怪了,他有自己的一套方案,这里小明没有给定是什么协议的,于是chrome默认用了http协议,于是将网址修改成了:http://xiaoweigod.com

二 DNS分级查询

在互联网上,有一家名叫TCP/IP的快递公司,专门负责运送用户的包裹。于是chrome联系了TCP/IP快递公司,但却被告知:需要知道对方的IP地址,才能把包裹寄给对方!chrome并不是一个灰心的孩子,于是它找到了“黄页公司”-DNS。求DNS帮忙查询下“xiaoweigod.com”的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,询问 xiaoweigod这个二级域名的域名服务器地址。

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

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

于是市里的DNS公司又不厌其烦的重复了上面的几个步骤,一级一级地查找了 com > kunluncan > w > com > xiaoweigod的域名服务器地址,一直找到了阿里云的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的三次握手

知道了xiaoweigod.com的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老大爷。老大爷一看,是送给家里的xiaoweigod.com的。

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

于是敲开了xiaoweigod.com的门,里面只有index.html在家。index.html头也不回地告诉nginx老大爷,告诉chrome,我们已经搬家了,去找

https://www.xiaoweigod.com(强制跳转)。

七 https加密原理

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

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

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

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

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

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

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

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

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

image.png

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个步骤都成功了,就有了xiaoweigod.com的公钥。

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

TLS大叔用“xiaoweigod.com“公钥加密一段随机的字符串,发送给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老大爷把包裹送到 www.xiaoweigod.com的房间。

八 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上找到xiaoweigod二级域名服务器地址….以此类推,最终找到完整域名的服务器地址。

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

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

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

你对 xiaoweigod.com的一次访问,一共触发了4次完整的DNS查询,1次www强行跳转,1次https强行跳转,1次CDN回源,2次CDN地址解析,更有数不清的资源文件从各个地方被传输到了你的电脑。这些都是通过TCP的三次握手协议,网关,ARP,UDP,nginx,CDN,DNS服务器联合工作。想想人类的智慧还真是可怕啊。。。赞(3) 打赏未经允许不得转载:小伟博客 » 当你在浏览器中输入了本站网址并回车后,产生了哪些技术步骤?

标签:ARPCDNDNSmac地址NginxTLS网络网络原理

misery

misery

置顶推荐

  • 当你在浏览器中输入了本站网址并回车后,产生了哪些技术步骤?2019-01-25
  • linux下搭建L2TP+IPSec服务端,组建异地虚拟局域网2018-12-18
  • 基于python的ssr节点批量部署程序,一键部署N多节点2018-12-14
  • Linux下安装qBittorrent,开启24小时挂机BT下载2018-12-07
  • 【肥宅快乐贴】使用百度人脸识别API,对爬取的小姐姐进行颜值排序2018-10-05
  • 【肥宅快乐贴】用python制作爬虫批量下载图片站上的漂亮小姐姐2018-10-02

你都复制了些什么呀,转载要记得加上出处哦~~

订阅windows系统软件下载使用教程

亲请先耐心的看完此教程

第一部分:软件安装

首先复制下面的链接在您的电脑浏览器(任何浏览器均可)中打开下载软件安装包

http://taofei88.com/xz/sstap.zip

第二部分:软件使用

首先登陆我们官网:http://ssr.taofei88.com/ 复制上面链接在浏览器中打开

然后点击【 连接 】即可
切记切记电脑关机前一定要点 【断开】

这样就完成啦 可以开始您的高速上网啦


注意:

如果出现提示 虚拟网卡未安装 请复制下面链接 下载虚拟网卡软件

下载地址https://www.lanzous.com/i2wddvg

安装我发您的这个文件–我发您的这个文件 安装过程中会自动安装虚拟网卡–网卡安装完毕–退出这个软件
(重要)–然后重新启动 第一次下载安装的软件即可

订阅苹果ios手机下载使用教程

第一部分:订阅地址获取

首先登陆VPN官网:http://ssr.taofei88.com/ 复制网址链接到浏览器打开

复制完了 保存到手机的一个位置

第二部分:软件下载使用
红色警告,聊天框发的账户是登陆到网站的
而不是苹果设备上

打开手机设置,请看图选择


如果已有账号登陆请先退出您的账号,退出是暂时的,不会对您产生任何影响

亲请先耐心的看完此教程


苹果设备账号 jf9a2384@icloud.com密码Aa112211

苹果设备账号 ee912191@icloud.com密码Aa112211


如果已有账号登陆请先退出您的账号,退出是暂时的,不会对您产生任何影响

苹果设备账号 ogc3gvm4@163.com密码Qq112211

苹果设备账号 hgarjgu69905@163.com密码Dd223322

登录后会自动跳转到App商店如未自动跳转请手动打开appstore

选择下面的“Search“

跳转到App store 之后页面变成英文之后才可以

搜索“potatso”

点击现在添加

点击订阅

点击 订阅之后 会进入下面这个页面
Name 框 任意内容即可
Subscription URL 框 订阅地址粘贴进去
Ps:订阅地址是您从网站复制的网址

复制完之后点 右上角 对号

点完对号之后 页面会跳转到下面这个页面

点击代理

选择下图所圈的这个【过期时间下面的均可选择】

点击开始

点击Allow

这样就完成啦 可以开始您的高速上网啦

订阅安卓手机软件下载使用教程

亲请先耐心的看完此教程

第一部分:软件安装

首先复制下面的链接在您的手机浏览器(任何浏览器均可)中打开下载软件安装包

安卓下载地址 http://taofei88.com/xz/ssr-android.apk

因为此软件没有上架安卓应用商店安装的时候可能会被杀毒软件拦截请忽略即可安装完成请看第二部分

第二部分:软件使用

首先登陆我们官网:http://ssr.taofei88.com/

账号密码已发送到淘宝聊天窗口

选中之后 弹到这个页面 点击上方的 小飞机即可

然后点 确定

看到上面有数据在走动 说明成功了 您就可以使用了亲


这样就完成啦 可以开始您的高速上网啦

买前常见问题汇总

–24小时全自动发货–
1.您懂得就是您需要的!
2.下单秒发软件详细教程!
3.稳定高速秒开4k视频!
4.小白也能轻松上手!
5.另有技术在线服务!
请勿发敏感词汇!!!
——————–
所有问题均可加微信咨询

17603219956
——————–
支持设备点我查看?
支持设备:苹果手机,安卓手机,平板电脑,win电脑 ,mac电脑
支持苹果手机Ios/安卓手机/苹果电脑Mac/windows电脑/ipad/普通平板电脑-不支持ps4、游戏主机、路由器只提供账号没有技术支持!【下单秒发软件详细教程-包会用-包能用】
使用小白点我查看?

直接下单-秒发超级详细的使用教程-轻松上手-包教包会-学不会不收费-看不懂人工会教-放心下单哦亲【下单秒发软件详细教程-包会用-包能用】
稳定速度点我查看?

稳定不掉线 4K视频秒开 全网最稳最快 服务最好 没有之一【下单秒发软件详细教程-包会用-包能用】
价格套餐点我查看?

亲您好 我们有4个套餐 套餐一:20元/30天 拍1件 套餐二:60元/188天 拍3件 套餐三:100元/360天 拍5件 套餐四:220元/3660天 拍11件 一件为20元、一件起卖【下单秒发软件详细教程-包会用-包能用】

软件【服务器地址ip】修改教程

出现的软件登录失败网速慢等问题,均可通过修改软件内“服务器ip地址”解决

(修改服务器ip前一定要断开软件)

可供使用的服务器地址有

hk.056520.com
taiwan.056520.com 
meiguo.056520.com 
xinjiapo.056520.com 

riben.056520.com
hanguo.056520.com

请注意 仅仅修改服务器ip 其他的都保持原样

安卓手机 服务器ip修改教程

首先点击图片中的“服务器”,点击后会弹出“小框”直接

将新的服务器地址填入小框内,修改完毕点“确定”保存 然后断开再连接软件即可

苹果手机 服务器ip修改教程

首先点击图片中的“位置” ,然后点击下“ 感叹号 ”,

将新的服务器地址填入小框内,修改完毕点“对号”保存 然后断开再连接软件即可 

win电脑 服务器ip修改教程

首先点击图片中的“位置”,点击后会弹出“小框”直接

修改服务器ip后点“保存” ,然后再连接即可

mac电脑 服务器ip 修改教程

mac电脑修改服务器地址后,点“确定”保存,然后断开重新连接即可