What happens when 从输入 URL 到显示页面间发生了什么

这是个老生常谈的话题了。大一的时候在科创社,有次分享就是围绕这个展开的。作为计算机专业学生,多想想某个简单的功能背后是如何实现的,这就是 What happens when 的问题。访问网页的流程想必都能说出一二。流程无非如此:输入网址敲回车->查 DNS->找到 IP 地址->通过 TCP 三次握手建立连接->浏览器发送 Http 请求->收到回应->浏览器渲染页面->结束连接

但如果具体到细节,如 DNS 怎么查,TCP/IP 中各个协议间的关系,三次握手四次挥手的目的,http 与 https,长连接与短连接之类的问题,就不太能说清了。故通过本文把整个过程涉及到的知识点过一遍。

一、查询 DNS


概述

DNS(Domain Name System),用来将域名翻译为 IP 地址。最早的地址是手动分配的,“在工作时间内,通过电话联系SRI的NIC(网络信息中心),将自己的主机名与地址告诉他们,写入集中式主机表”。这时候有了域的概念,如教育机构的计算机应该属于 edu. 域。后来,手动维护一个集中主机表变得越来越复杂,于是有了 DNS 协议。DNS 在 1983 年 11 月在因特网标准草案 RFC822 发布。这是原文地址: https://tools.ietf.org/html/rfc882

域名空间采取树的结构, 全球 13 组根域名服务器以英文字母 A 到 M 依序命名。在域名中 com. org. cn. 这些是顶级域名,结尾的.号可以省略,URL 再往前是二级域名、三级域名。
在这里插入图片描述

查询域名,第一步是检查浏览器的本地缓存,之后是检查本机的缓存,在 Windows 中为C:\Windows\System32\drivers\etc\hosts,在 Linux 中是 /etc/hosts。若没找到,接下来是本地 DNS 服务器缓存,也就是 LDNS,使用递归查找。本地 DNS 服务器若没找到,则去请求根域名服务器,从树的顶点迭代向下查,找到顶级域名服务器地址,继续查找,直到找到。如图所示:
{% img /img/whtchaxun.png [查询] %}

dns.ip.cn 这里列出了一些公共 DNS 服务器的IP地址,有我们熟悉的114.114.114.114,8.8.8.8以及各大运营商的各省 DNS 服务器。

DNS 主要在端口号 53 上使用 UDP 来完成请求。DNS 查询由客户端的单个 UDP 请求和服务器的单个 UDP 响应组成。当答案的长度超过 512 字节时,若客户端和服务器均支持 EDNS 时,将使用较大的UDP数据包。否则,将使用 TCP 再次发送。

DNS 记录

根域名服务器的顶级域名查找文件可以在官方网站看到 https://www.iana.org/domains/root/files ,下载来的 root.zone 文件只有2.09MB。可以看到根DNS服务器的记录,截止目前共有 22016 行,每一个顶级域名都会有若干条记录,比如 me. 这个顶级域名,前五行指向了五个 me. 顶级域名的 DNS 服务器域名,他们的 IP 地址在后续记录,每个都支持 IPV4 与 IPV6.
{% img /img/whtme.jpg [me] %}

记录有 A、CNAME、MX、NS、TXT、SPF 等多种类型,在倒数第二列体现。其中:
A/AAAA:IPv4 与 IPv6 地址
CNAME: 别名,指向原名
MX: 邮件路由记录,指向邮件服务器
NS: 指向域名解析服务器
DS: TXT: 说明性的字符
SPF: TXT 的一种运用,发信侧在 SPF 记录备注规则(如自身 IP),接收方可以通过查询,决定是否接受
更多类型自查维基百科。

DNS 负载均衡: CDN (内容分发网络)

仅仅一台服务器很难应付高并发、远距离的可靠连接,故而需要负载均衡技术。CDN 使用了 DNS 负载均衡,

①当用户点击网站页面上的内容 URL,经过本地 DNS 系统解析,DNS 系统会最终将域名的解析权交给CNAME指向的 CDN 专用 DNS 服务器。

②CDN 的 DNS 服务器将 CDN 的全局负载均衡设备 IP 地址返回用户。

③用户向 CDN 的全局负载均衡设备发起内容 URL 访问请求。

④CDN 全局负载均衡设备根据用户IP地址,以及用户请求的内容 URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。

⑤区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。

⑥全局负载均衡设备把服务器的 IP 地址返回给用户。

⑦用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。

—— 《CDN 技术详解》

dig命令看看 DNS 如何解析饿了么官网 ele.me

leo@leo-virtual-machine:~$ dig @a.root-servers.net ele.me

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @a.root-servers.net ele.me
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2200
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 5, ADDITIONAL: 11
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ele.me.				IN	A

;; AUTHORITY SECTION:
me.			172800	IN	NS	c0.nic.me.
me.			172800	IN	NS	a0.nic.me.
me.			172800	IN	NS	b2.nic.me.
me.			172800	IN	NS	b0.nic.me.
me.			172800	IN	NS	a2.nic.me.

;; ADDITIONAL SECTION:
c0.nic.me.		172800	IN	A	199.253.61.1
c0.nic.me.		172800	IN	AAAA	2001:500:55::1
a0.nic.me.		172800	IN	A	199.253.59.1
a0.nic.me.		172800	IN	AAAA	2001:500:53::1
b2.nic.me.		172800	IN	A	199.249.127.1
b2.nic.me.		172800	IN	AAAA	2001:500:4f::1
b0.nic.me.		172800	IN	A	199.253.60.1
b0.nic.me.		172800	IN	AAAA	2001:500:54::1
a2.nic.me.		172800	IN	A	199.249.119.1
a2.nic.me.		172800	IN	AAAA	2001:500:47::1

;; Query time: 178 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Thu Mar 26 19:23:12 CST 2020
;; MSG SIZE  rcvd: 344

找到 me. 的五顶级域名服务器,选一个看:

leo@leo-virtual-machine:~$ dig @a0.nic.me ele.me

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @a0.nic.me ele.me
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42409
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ele.me.				IN	A

;; AUTHORITY SECTION:
ele.me.			86400	IN	NS	ns1.alibabadns.com.
ele.me.			86400	IN	NS	ns2.alibabadns.com.

;; Query time: 302 msec
;; SERVER: 199.253.59.1#53(199.253.59.1)
;; WHEN: Thu Mar 26 19:23:44 CST 2020
;; MSG SIZE  rcvd: 85

获得两个阿里巴巴的 DNS 域名,ns1.alibabadns.comns2.alibabadns.com,继续查

leo@leo-virtual-machine:~$ dig @ns2.alibabadns.com ele.me

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @ns2.alibabadns.com ele.me
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20973
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ele.me.				IN	A

;; ANSWER SECTION:
ele.me.			300	IN	A	106.15.160.220
ele.me.			300	IN	A	106.14.48.241

;; Query time: 134 msec
;; SERVER: 106.11.35.18#53(106.11.35.18)
;; WHEN: Thu Mar 26 19:24:46 CST 2020
;; MSG SIZE  rcvd: 67

找到了饿了么的两个 IP 地址。也可以使用 nslookup 命令查询,在 Windows 下分别查询 ele.me 与 www.ele.me:

C:\Users\leo-6>nslookup ele.me
服务器:  public1.114dns.com
Address:  114.114.114.114

非权威应答:
名称:    ele.me
Addresses:  106.14.48.241
          106.15.160.220

C:\Users\leo-6>nslookup www.ele.me
服务器:  cache1-xx
Address:  124.89.1.129

非权威应答:
名称:    v6-zb-alibaba-clould.tengine.alibaba.com
Addresses:  2408:4001:1000::4
          47.92.62.13
          47.92.21.245
Aliases:  www.ele.me
          dualstack-sopush.elemecdn.com

试一试访问 ele.me 会发生什么。首先是302的状态码,把我们重定向至 www.ele.me 。
{% img /img/whw1.jpg [me] %}

之后是访问 www.ele.me 的地址 47.92.21.245 ,获得了一些 js 文件。
{% img /img/whw2.jpg [me] %}

文件让我们继续访问 https://shadow.elemecdn.com/god/WEB://www.ele.me 。{% img /img/whw3.jpg [me] %}

地址是 113.200.15.85,根据域名判断,显然是它的一个 CDN 服务器。
{% img /img/whw4.jpg [me] %}

原本打算一次写完,结果一个 DNS 就写了好多。先到这里吧。

参考资料:
https://segmentfault.com/a/1190000002578457 利用dns解析来实现网站的负载均衡
https://www.jianshu.com/p/b483300378af DNS的A、CNAME、MX、NS、TXT、SPF记录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值