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

前端面试常会问到一个问题-"从输入一个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. negix启动不成功

    negix启动闪退,猜测可能端口占用,查看log发现 2020/11/30 11:38:40 [emerg] 15632#8688: CreateFile() "F:\项目工具\nginx- ...

  2. 『学了就忘』Linux权限管理 — 54、sudo授权

    目录 1.什么是sudo授权 2. sudo授权说明 3.sudo命令的使用 示例1 示例2 示例3 1.什么是sudo授权 在Linux系统中,/sbin/和/usr/sbin/两个目录中的命令只有 ...

  3. setoolkit的钓鱼实验

    1.在kali中打开setoolkit 2.在菜单中选择第一个进入社会工程学攻击 3.选择第二个模块属于网站攻击向量 4.选择第五个模块,进行web劫持攻击 5.选择第二个,进行网站克隆 6.发现访问 ...

  4. java 代理模式实现代码

    目录 1.静态代理 2.动态代理 1.静态代理 接口类AdminService.java接口 public interface AdminService { void update(); Object ...

  5. Codeforces 258E - Little Elephant and Tree(根号暴力/线段树+标记永久化/主席树+标记永久化/普通线段树/可撤销线段树,hot tea)

    Codeforces 题目传送门 & 洛谷题目传送门 yyq:"hot tea 不常有,做过了就不能再错过了" 似乎这是半年前某场 hb 模拟赛的 T2?当时 ycx.ym ...

  6. Codeforces 917D - Stranger Trees(矩阵树定理/推式子+组合意义)

    Codeforces 题目传送门 & 洛谷题目传送门 刚好看到 wjz 在做这题,心想这题之前好像省选前做过,当时觉得是道挺不错的题,为啥没写题解呢?于是就过来补了,由此可见我真是个大鸽子(( ...

  7. 配置GitHub和 Gitee共存环境

    配置GitHub 和Gitee共存环境 前言 Git共有三个级别的config文件,分别是system.global和local 在当前环境中,分别对应 %GitPath%\mingw64\etc\g ...

  8. 【Linux】CentOS下升级Python和Pip版本全自动化py脚本

    [Linux]CentOS下升级Python和Pip版本全自动化py脚本 CentOS7.6自带py2.7和py3.6 想要安装其它版本的话就要自己重新下载和编译py其它版本并且配置环境,主要是软链接 ...

  9. c#表格序号列

    <asp:BoundField HeaderText="序号" /> OnRowCreated="gridview_RowCreated" prot ...

  10. Java8 Lambda表达式、函数式接口和方法引用

    目录 Java8 Lambda表达式和函数式接口 Lambda表达式 Lambda的使用 函数式接口FunctionalInterface Java内置四大核心函数式接口 方法引用 构造器引用 Jav ...