从应用层到实体层的协议太多了,我们并不能一一涉及,目前来说就打算整理可能会与前端相关的协议.

前端面试常会问到一个问题-"从输入一个url到页面渲染经历了哪些过程".这其实是一个相当复杂的过程,所以总结的时候常常是归纳了几个重要的步骤.而这次我将尝试通过结合协议的方式去理解它们.

URL组成

首先,我们需要先了解网址的组成.举例说明

未解析版

https://i.cnblogs.com/posts/edit

https----->https协议
i.cnblogs.com --- 域名
/posts/edit 路由

解析版

(不代表实际地址,我瞎编的一个,只是为了说明组成)

https//192.168.1.255:443/index.html

https ---->https协议
192.168.1.255---->IP地址
443 ---->端口号
index.html---->文件路径

所以我们可以大概知道URL有这些组成,协议(http或者https协议)、IP地址、端口号、路径.那么,结合URL,我在之前前端路由那里已经大概解释了,路由为啥指向index.html静态资源路径,剩下的就需要知道域名是怎么解析成IP的,https是干嘛用的,端口号是怎么来的.

DNS协议

DNS为域名系统,其重要功能是域名转IP.在互联网中,每台计算机都会分到一个IP地址,我们可以通过IP地址去访问这些计算机,得到相关服务.而DNS就是关了管理域名和IP的系统.

首先,我们了解一下域名的组成.

i.cnblogs.com

而它的实际域名是

i.cnblogs.com.root

DNS是分级查询的,而域名的每个点都是一个分级.

      ".root":是根域名,因为大家都是这个根域名,所以就隐藏了.

".com":顶级域名,其他还有".cn"之类的

".cnblogs":次级域名,可以自定义

"i":三级域名或者主机名,如果不加,默认是"www"

DNS的解析就是按这种分级进行解析的.

DNS

1.当你输入一个域名的时候,计算机会先去本地的hosts文件中找有没有对应的映射关系,如果有就直接拿到对应id,没有就去到DNS解析器(具体作用就是将在完整合规的域名请求信息上再加几个信息,),之后再

2.查看本地DNS缓存,这些缓存可以会分存在很多地方,最主要的是DNS解析器和浏览器缓存中.比如你成功访问过一次某网站了,浏览器就可能把这个域名和ip的映射保存起来,下次输入相同域名时就可直接获取.到目前为止都没有向DNS服务器发请求.假如以上步骤都没找到,则

3.向DNS服务器发送请求,关于DNS服务器的工作流程如下.

1):首先会向本地DNS服务器发请求,这个本地并不是说在自己电脑上,而是给你指定的服务器.我们window+r ,然后输入cmd,然后再ipconfig/all 能看到我们的网络信息,其中有个就是DNS服务器的ip地址,这个就是咱们的本地DNS服务器,也就是"专门对你负责的",所以当它找到对应ip返回给我们时,这个域名解析是有权威性的.当本地DNS服务器没有对应的映射时,便会求助外界.

2):本地DNS服务器有内置根域名服务器对应的ip地址,目前全世界有13个根域名服务器,本地DNS服务器内部可能对应其中的多条.接下来便进行DNS的分级查询.查询的流程如下

         a):先向这些根服务器发送一个".com"的搜索条件,然后可能有多条信息,告诉本地服务器我们都有相关信息.但是本地DNS服务器只会保存首先回复的根域名服务器的相关信息,并且不再向其他根服务器发送信息.

             b):根服务器下面管理着许多下一级服务器.当本地服务找到对自己负责的根服务器时,便会再给它发一个".cnblogs.com"的请求.而该根服务器则会返回一个列表,告诉本地服务器有哪些服务器有相关信息,并把对应服务器的ip给出来.

             c):本地服务器拿到对应ip之后便会去请求,发送"i.cnblogs.com"请求,对应服务器将会给出一条或者多条信息.如果是多条,将会有多个ip,每条对应每个ip,也就是是这一个域名对应了多条ip,而这些ip理论上都是可以访问的.

                  假如这个服务器并没有"i.cnblogs.com",那本地服务器则会拿到另一个服务器去查,知道把所有次级服务器查完或者查到想要的ip为止.

            d):转发.以上的三个步骤已经是个完整的流程了,但是转发是一直新规则.默认情况下,当本地DNS服务器没解析成功时会向根服务器发送请求,然后逐级往下.这个顺序.但是转发是可以打破这种顺序的.它可以让服务器直接去向指定服务器发送请求,不必循规蹈矩.但是前提是必须安装转发器,并且配置了转发目标服务器ip.

到目前为止我们只是解析了ip,拿到了如下的地址

https//192.168.1.255/index.html

下一篇我们再分析https

参考文献:

阮一峰网络日志:DNS原理入门

DNS的工作原理及解析

前端浅谈-协议相关(DNS协议)的更多相关文章

  1. 网络协议 16 - DNS 协议:网络世界的地址簿

    [前五篇]系列文章传送门: 网络协议 11 - Socket 编程(下):眼见为实耳听为虚 网络协议 12 - HTTP 协议:常用而不简单 网络协议 13 - HTTPS 协议:加密路上无尽头 网络 ...

  2. 前端浅谈-协议相关(http/https)

    当DNS工作完之后得到了一个网址 https//192.168.1.255/index.html 这个并不符合标准的请求路径.接下来就是https的功能了.讲https前先讲讲它的前身http协议 H ...

  3. 前端浅谈---协议相关(TCP连接)

    TCP连接 http的描述里面,我弱化了交互过程的描述,因为它相对复杂.所以我在此单独描述.客户端和服务端传递数据时过程相对谨慎和复杂,主要是开始和结束的过程.而这整个过程就是TCP连接.连接流程大体 ...

  4. 浅谈iOS开发的协议(protocol)和代理(delegate)

    协议和代理对于一个新手来说确实不讨好理解,也有很多的iOS开发的老手对此是懂非懂的.网上的很多博文只是讲了怎么使用,并没有说的很明白.下面我谈一下我的理解. 1.你要先搞明白,协议和代理为什么会出现, ...

  5. 浅谈 Raft 分布式一致性协议|图解 Raft

    前言 本篇文章将模拟一个KV数据读写服务,从提供单一节点读写服务,到结合分布式一致性协议(Raft)后,逐步扩展为一个分布式的,满足一致性读写需求的读写服务的过程. 其中将配合引入Raft协议的种种概 ...

  6. 网络协议 16 - DNS 协议

    为什么在地址栏输入域名,就能直接访问到对应服务器?全局负载均衡和内部负载均衡又是什么?这些都和 DNS 解析息息相关,让我们一起来解密 DNS 解析.     其实说起 DNS 解析,应该都知道它很像 ...

  7. Web 前端 - 浅谈外部手动控制 Promise 状态

    前言 当有多个共享资源.协同操作的时候,往往需要根据动态亦或是复杂的条件以控制和调用程序逻辑. 还是那句话,懂的人自然懂,不懂的人也搜不到这个随笔. 设计 PendingPromise<T> ...

  8. 前端浅谈-Js的组成

    这里主要想详细的分析一下浏览器渲染过程,但东西比较多.所以分成多个部分. JS由三个部分组成,分别为ECMAScript.BOM.DOM. 其中BOM是浏览器层面的东西,而DOM是页面层面的东西.简单 ...

  9. 网络协议 19 - RPC协议综述:远在天边近在眼前

    [前五篇]系列文章传送门: 网络协议 14 - 流媒体协议:要说爱你不容易 网络协议 15 - P2P 协议:小种子大学问 网络协议 16 - DNS 协议:网络世界的地址簿 网络协议 17 - HT ...

随机推荐

  1. 用Docker搭建RabbitMq的普通集群和镜像集群

    普通集群:多个节点组成的普通集群,消息随机发送到其中一个节点的队列上,其他节点仅保留元数据,各个节点仅有相同的元数据,即队列结构.消费者消费消息时,会从各个节点拉取消息,如果保存消息的节点故障,则无法 ...

  2. 通过修改host加速访问GitHub

    加速访问GitHub 原理:绕过 DNS 解析,直接使用本地的 DNS 记录进行直接跳转. 可以通过 http://ping.chinaz.com/ 链接查询github的DNS信息,例如,可以直接打 ...

  3. [cf1349D]Slime and Biscuits

    枚举最终的获得所有饼干的人$i$(以下简称"获胜者"),对于$i$获胜的情况,令其贡献为游戏轮数,否则其贡献为0,记$F_{i}$为期望贡献(即所有情况概率*贡献之和),答案即为$ ...

  4. [cf1515G]Phoenix and Odometers

    显然这条路径只能在$v_{i}$所在的强连通分量内部,不妨仅考虑这个强连通分量 对这个强连通分量dfs,得到一棵外向树(不妨以1为根) 考虑一条边$(u,v,l)$,由于强连通,总存在一条从$v$到$ ...

  5. [atAGC045E]Fragile Balls

    构造一张有向图$G=([1,n],\{(a_{i},b_{i})\})$(可以有重边和自环),定义其连通块为将其看作无向图(即边无向)后分为若干个连通块 记$in_{i}$为$i$的入度(即最终盒子中 ...

  6. SpringMVC注解搭配环境

    1.准备文件 2.工程中的pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

  7. 【程序员翻身计划】Java高性能编程第一章-Java多线程概述

    目标 重点: 线程安全的概念 线程通信的方式与应用 reactor线程模型 线程数量的优化 jdk常用命令 Netty框架的作用 难点 java运行的原理 同步关键字的原理 AQS的抽象 JUC的源码 ...

  8. CF1354F Summoning Minions

    考虑我们一定是先放我们选定了\(m\)个数,一定是先放了\(m-1\)个数上去,然后让放上一个不打算选的然后拿下来,白嫖\(b * (m-1)\)的贡献,最后放上一个打算放的. 考虑我们一定是按\(b ...

  9. UOJ 75 - 【UR #6】智商锁(矩阵树定理+随机+meet-in-the-middle)

    题面传送门 一道很神的矩阵树定理+乱搞的题 %%%%%%%%%%%%%%% vfk yyds u1s1 这种题目我是根本想不出来/kk,大概也就 jgh 这样的随机化带师才能想到出来吧 首先看到生成树 ...

  10. 爬虫动态渲染页面爬取之Splash的介绍和使用

    Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库.利用它,我们同样可以实现动态渲染页面的抓取. 1. 功能介 ...