一次网络请求的 解析图(一)

1,060 阅读6分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」 

最近在做 自研网关,必不可免的需要使用 网络协议的东西,这里 正好整理下

DNS 分类

LocalDNS 和 HTTP DNS

LocalDNS

这里讲解 从浏览器 输入网址 到 localDNS的过程

image.png

LocalDNS 问题列表

除了LocalDNS 还有HTTPDNS ,客户端怎么知道用哪个

默认 LocalDNS, 如果想用 HTTPDNS 需要对接,可以用 云服务提供的 也可以 自己找一个开源的项目 搞

客户端怎么知道 LocalDNS的ip

8.8.8.8 就是一个 DNS 节点,从DNS 获取 对应的节点ip 列表

LocalDNS 里面存储的是什么东西?

    g-api.csdn.net
    ----------------------------------------
    记录名称. . . . . . . : g-api.csdn.net
    记录类型. . . . . . . : 1
    生存时间. . . . . . . : 232
    数据长度. . . . . . . : 4
    部分. . . . . . . . . : 答案
    A (主机)记录  . . . . : 120.46.209.149

你说 我改操作系统的缓存 可能因为 浏览器 dns缓存还在 ,会不生效?

会,新增是需要等缓存过期 才生效,删除会立刻生效

LocalDNS 步骤

先是向游览器中找是否有此域名的缓存,如果有则解析结束,没有则继续查找操作系统缓存中是否有这个域名对应的dns结果。

DNS查询顺序:浏览器缓存→系统缓存→路由器缓存→ISP DNS 缓存→递归搜索

问题来了 , 浏览器 的缓存 存在哪了? 操作系统的缓存 又在哪呢?

以 chrome 为例

chrome://net-internals/#dns 这里可以看各域名的DNS 缓存时间

image.png

删除浏览器 dns 缓存

image.png

image.png

然后 重新访问 掘金网站 就会看到1

image.png

图中3个分别为 DNS查询、TCP三次握手、SSL连接

然后 再次刷新 看看是不是不重新访问dns了

image.png

嗯嗯 ,不访问了

操作系统缓存

机器对应的 hosts文件 (windows路径 C:\Windows\System32\drivers\etc)

操作

ipconfig /displaydns显示dns缓存

ipconfig /flushdns 刷新DNS记录

ipconfig /renew重请从DHCP服务器获得IP

hosts 和 dns的对应关系

image.png

image.png

操作系统 dns 缓存 添加一个juejin的解析

hosts 添加 127.0.0.1 juejin.cn

需要等到 浏览器 dns 缓存 过期才会刷新到404

执行 ipconfig /flushdns 也是不行的,因为这个时候 用的是 浏览器的dns缓存,需要clear 浏览器的缓存 才会生效

HttpDNS

HTTPDNS的原理

HTTPDNS是使用HTTP协议向DNS服务器的进行请求,代替传统的DNS协议使用UDP协议向DNS服务器的进行请求,绕开了运营商的Local DNS,简化了请求的复杂性,避免了使用运营商Local DNS造成的劫持和跨网问题。

解析详细过程:

用户输入网址如[www.baidu.com] 回车–>游览器解析网址,获取域名,解析域名。

① 先是向游览器中找是否有此域名的缓存,如果有则解析结束,没有则继续查找操作系统缓存中是否有这个域名对应的dns结果。

② 如果以上两则都未能命中,则游览器会向你部署HTTPDNS服务器发送HTTP请求(直接访问HTTPDNS的IP),HTTP服务器返回域名解析结果,然后浏览器缓存起来。

HTTP DNS 优势

  • 域名防劫持

    使用HTTP(HTTPS)协议进行域名解析,域名解析请求直接发送至HTTPDNS服务器,绕过运营商Local DNS,避免域名劫持问题。

  • 调度精准

    由于运营商策略的多样性,其Local DNS的解析结果可能不是最近、最优的节点,HTTPDNS能直接获取客户端IP地址,基于客户端IP获得最精准的解析结果,让客户端就近接入业务节点。

  • 低解析延迟

    配合端上策略(热点域名预解析、缓存DNS解析结果、解析结果懒更新)实现毫秒级低解析延迟的域名解析效果。

  • 快速生效

    配合阿里云的权威DNS服务云解析,您在权威DNS变更的解析结果将快速同步给HTTPDNS,覆盖原有缓存记录,帮助您实现秒级的域名解析切换。

  • 扩展性强

    软件定义解析(SDNS)提供更自主可控的流量调度能力。

  • 全球可用

    全球节点覆盖,支持对接Akamai、CloudFlare等国际权威DNS,实现全球精准解析。

  • 稳定可靠

    服务可用性不低于99.99%,可为您提供稳定可靠的服务保障。

  • 高可用性

    HTTPDNS从节点之间、节点内部两个维度提升服务的高可用性。

    • HTTPDNS接入了阿里优质的BGP网络,与全国主流运营商都实现了BGP互联。同时HTTPDNS使用了Anycast IP网络,正常情况下可以实现对不同地域用户使用同一IP提供服务,在单个节点出现故障的情况下,无缝切换到其他节点,实现了高可用。
    • 在节点内部,依托阿里云优质的网络环境和负载均衡技术,HTTPDNS服务端集群化部署,保障服务可用性。

HTTPDNS解决了LocalDNS的哪些问题

1、DNS劫持;

前面我们有讲到,运营商的dns服务器是核心(LocalDNS大多数为运营商DNS服务器),处在整个DNS解析的交互的中心,这里容易发生劫持。而HTTPDNS直接通过ip地址去访问HTTPDNS服务器,从根本上解决了这个问题。

2、平均访问延迟下降:

从前面可以看出,localDNS的解析过程十分复杂,需要递归好几次。

而HTTPDNS,由于是IP直接访问HTTPDNS服务器,则只需要一个来回就能拿到解析的结果。

3、用户连接失败率下降:

通过算法降低以往失败率过高的服务器排序,通过时间近期访问过的数据提高服务器排序,通过历史访问成功记录提高服务器排序。如果ip(a)访问错误,在下一次返回ip(b)或者ip(c) 排序后的记录。(LocalDNS很可能在一个ttl时间内(或多个ttl)都是返回记录)。

HTTP DNS的适用场景

1、对首屏时延要求比较高的APP或者网页;

2、希望降低访问延迟、减少跨网访问的资讯、游戏类APP;

3、希望降低连接失败率,提升业务成功率的通用APP;

4、域名屡次被劫持,希望用户访问顺畅无阻的APP;

使用 HTTP DNS

其实就是后台 启动一个 HTTP DNS 服务器

也可以使用 阿里云

页面调用 image.png

获取 对应的ip列表

阿里云价钱

image.png

后续

下一篇 会继续 一次http 网络请求的 流程,还有很多东西。。。

image.png