1. DNS

在互联网上的每一个计算机都拥有一个唯一的地址,称作“IP地址”(即互联网协议地址)。由于IP地址(为一串数字)不方便记忆,DNS允许用户使用一串常见的字母(即“域名”)取代。比如,您只需键入www.icann.org,而不是“192.0.34.163”。即可访问ICANN的官方网站。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入DNS名称时,DNS服务可以将此名称解析为与之相关的其他信息,如IP地址。因为,你在上网时输入的网址,是通过域名解析系解析找到相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。

1.1 概念

DNS,全称Domain Name System,即域名解析系统。DNS帮助用户在互联网上寻找路径。在互联网上的每一个计算机都拥有一个唯一的地址,称作“IP地址”(即互联网协议地址)。由于IP地址(为一串数字)不方便记忆,DNS允许用户使用一串常见的字母(即“域名”)取代。

DNS是指:域名服务器(DomainNameServer)。在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。

1.2 Hosts

在互联网的早期,网络只有几台电脑。人们用hosts文件记录机器名字到IP的映射,后来网络的规模越来越大。hosts文件记录映射已经不可行了,所以发明了DNS,域名系统。但是hosts文件仍然保留在操作系统中,hosts文件的优先级高于DNS查询。操作系统首先会在hosts文件中找域名对应的IP地址,没有找到它才会去问DNS服务器。

参考:HSTS详解    HTTPS 原理解析

1.3 DNS缓存

为了增加访问效率,计算机有域名缓存机制,当访问过某个网站并得到其IP后,会将其域名和IP缓存下来,下一次访问的时候,就不需要再请求域名服务器获取IP,直接使用缓存中的IP,提高了响应的速度。当然缓存是有有效时间的,当过了有效时间后,再次请求网站,还是需要先请求域名解析。

但是域名缓存机制也可能会带来麻烦。例如IP已变化了,仍然使用缓存中的IP来访问,将会访问失败。再如 同一个域名在内网和外网访问时所对应的IP是不同的,如在外网访问时通过外网IP映射到内网的IP。同一台电脑在外网环境下访问了此域名,再换到内网来访问此域名,在DNS缓存的作用下,也会去访问外网的IP,导致访问失败。根据情况,可以手动清除DNS缓存或者禁止DNS缓存机制。

ipconfig/displaydns -查看被缓存的域名解析

ipconfig/flushdns -清空DNS缓存

参考 一次dns缓存引发的惨案 dns默认缓存时间是多少?dns缓存默认多久刷新?

1.4 区域文件

一个区域内的所有数据,包括主机名和对应IP地址、刷新间隔和过期时间等,都必须要存放在DNS服务器内,而用来存放这些数据的文件就称为区域文件。DNS服务器的区域数据文件一般存放在/var/named目录下。一台DNS服务器内可以存放多个区域文件,同一个区域文件也可以存放在多台DNS服务器中。

1.5 ISP

ISP(Internet Service Provider),互联网服务提供商,即向广大用户综合提供互联网接入业务、信息业务、和增值业务的电信运营商。ICP(Internet Content Provider)是互联网内容提供商,向广大用户综合提供互联网信息业务和增值业务的电信运营商。

在互联网应用服务产业链“设备供应商——基础网络运营商——内容收集者和生产者——业务提供者——用户”中,ISP/ICP处于内容收集者、生产者以及业务提供者的位置。

ISP:全称为Internet Service Provider,即因特网服务提供商,能提供拨号上网服务、网上浏览、下载文件、收发电子邮件等服务,是网络最终用户进入Internet的入口和桥梁。它包括Internet接入服务和Internet内容提供服务。这里主要是Internet接入服务,即通过电话线把你的计算机或其他终端设备连入Internet。

中国三大基础运营商:

中国电信:拨号上网、ADSL、1X、CDMA1X,EVDO rev.A、FTTx、光纤接入EPON、FDD/TDD LTE

中国移动:拨号上网、GPRS及EDGE无线上网、TD-SCDMA无线上网,一少部分FTTx、FDD LTE

中国联通:GPRS,W-CDMA、无线上网、 拨号上网、ADSL、FTTx、FDD/TDD LTE

1.6 根DNS

根服务器主要用来管理互联网的主目录,全世界只有13台(这13台根域名服务器名字分别为“A”至“M”),1个为主根服务器在美国。其余12个均为辅根服务器,其中9个在美国,欧洲2个,位于英国和瑞典,亚洲1个位于日本。

所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理,这13台根服务器可以指挥Firefox或Internet Explorer这样的Web浏览器和电子邮件程序控制互联网通信,由于根服务器中有经美国政府批准的260个左右的互联网后缀(如.com、.xyz、.net、.top等)和一些国家的指定符(如法国的.fr、挪威的.no等),美国政府对其管理拥有很大发言权。[1] 根域名服务器是架构因特网所必须的基础设施。在国外,许多计算机科学家将根域名服务器称作“真理”(TRUTH),足见其重要性。换句话说——攻击整个因特网最有力、最直接,也是最致命的方法恐怕就是攻击根域名服务器了。

1.7 DNS解析过程

Ø 你在浏览器输入了网址,然后浏览器通过UDP协议向本地服务器的53号端口发送了DNS解析请求(1号过程)。

Ø 如果本地DNS服务器缓存了百度的DNS记录(关于DNS缓存在下一节会详细讲),如果没有该记录就回向根服务器请求(2号路径),然后根服务器收到请求后,会返回给本地服务器相应的顶级域名DNS服务器地址。以www.baidu.com为例,就回返回解析com顶级域名的服务器(3号路径)。

Ø 然后本地服务器知道TLD DNS服务器的地址后就会向该服务器发送解析请求(4号请求),然后TLD服务器返回给本地DNS服务器百度的权威服务器的IP地址(5号路径)。

Ø 同上,本地DNS服务器向百度的权威DNS服务器发起查询请求(6号路径)。就回得到百度权威DNS服务器返回给本地服务器的百度服务器的IP地址(7号路径)。

Ø 最后,本地DNS服务器会把百度服务器的IP地址返回给你的电脑(8号路径),同时将这条记录缓存在本地DNS服务器。

注意:以上这种方式称为“先递归,再轮询”的查询方式,计算机网络中还存在其他的查询方式如仅仅的”递归“,可是上面这种查询方式时最常用的。

DNS服务器技术

DNS有一点令人担忧,这就是像wikipedia.org 或者 facebook.com这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈:

1. 循环 DNS 是DNS查找时返回多个IP时的解决方案。举例来说,Facebook.com实际上就对应了四个IP地址。

2. 负载平衡器 是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。

3. 地理 DNS 根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。

4. Anycast 是一个IP地址映射多个物理主机的路由技术。 美中不足,Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。

1.8 结束

通过DNS解析,本机操作系统会得到一个与域名相对应的IP地址,本机下一步要做的是,通过这个IP地址,与相关的服务器取得联系,并最终链接成功。

当然在发送请求通信的报文之前,本机操作系统软体与计算机硬体之间,还有路由器等都有许多底层的交互内容,在这里先留下更深层次的坑。

浏览器从输入到输出的过程与原理三之DNS的更多相关文章

  1. Python中输入和输出(打印)数据

    一个程序要进行交互,就需要进行输入,进行输入→处理→输出的过程.所以就需要用到输入和输出功能.同样的,在Python中,怎么实现输入和输出? Python3中的输入方式: Python提供了 inpu ...

  2. web工作方式,浏览网页,打开浏览器,输入网址按下回车键,然后会显示出内容,这个过程是怎样的呢?

    以下内容摘自<Go Web编程>,介绍的通俗易懂. 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容.在这个看似简单的用户行为背后,到底隐藏了些什 ...

  3. Android Multimedia框架总结(二十)MediaCodec状态周期及Codec与输入/输出Buffer过程(附实例)

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53183718 前言:前面几节都是 ...

  4. 在浏览器中输入url地址 -> 显示主页的过程

    -来自<图解HTTP> 最近在进行前端面试方面的一些准备,看了网上许多相关的文章,发现有一个问题始终绕不开: 在浏览器中输入URL到整个页面显示在用户面前时这个过程中到底发生了什么.仔细思 ...

  5. 浏览器输入一个url的过程,以及加载完html文件和js文件的标志

    简单理解: 当在浏览器地址栏输入一url时,浏览器会做以下几个步骤: 1.将url转化为ip地址,也就是DNS解析,(先找本地host文件中是否有对应的ip地址,如果有就直接用,没有的话,就按域名的二 ...

  6. 在浏览器中输入URL后,执行的全部过程。会用到哪些协议?(一次完整的HTTP请求过程)

    在浏览器中输入URL后,执行的全部过程.会用到哪些协议?(一次完整的HTTP请求过程) 整个流程如下: 域名解析 为了将消息从你的PC上传到服务器上,需要用到IP协议.ARP协议和OSPF协议. 发起 ...

  7. 在浏览器中输入 www.baidu.com 后执行的全部过程

    现在假设如果我们在客户端(客户端)浏览器中输入http://www.baidu.com,而baidu.com为要访问的服务器(服务器),下面详细分析客户端为了访问服务器而执行的一系列关于协议的操作: ...

  8. Python笔记_第一篇_面向过程_第一部分_4.格式化输入和输出

    开始Python编程首先要学习两类最常用(经常出现和使用)输入和输出.学习编程最重要的状态就是“人机交互”,所以这两类函数显得尤其重要. 第一部分 格式化输入 1.1   函:input 语:inpu ...

  9. 在浏览器中输入Google.com并且按下回车之后发生了什么(转载)

    原文地址:https://github.com/skyline75489/what-happens-when-zh_CN#id9 本文试图回答一个古老的面试问题:当你在浏览器中输入google.com ...

随机推荐

  1. Sql Sever 2012数据库更名失败 error:5030

    打开SQL Server 2012数据库时,对HzWind_2MW数据库名修改为HzWind_2MW_GEM,结果出现如图1所示: 图1 数据库更名时出现error:5030 数据库不能重名名5030 ...

  2. Python sys os getpass 包的导入

    块的导入 导入一个py文件,解释器解释该py文件 导入一个包,解释器解释该包下的 init.py 文件 import module 直接导入模块 from module.xx.xx import xx ...

  3. 【learning】微信跳一跳辅助c++详解 轻松上万 【上】

    写在前面 17年年底Wechat出了这个跳一跳的小游戏,今年2月份的时候简单地玩了一下,发现被游戏虐了(手太残了只能跳20多).     今天刚好有点空,于是就花了一个下午的时间写了一个跳一跳的c++ ...

  4. IP等级

    IP是Ingress Protection的缩写,IP等级是针对电气设备外壳对异物侵入的防护等级,来源是国际电工委员会的标准IEC 60529,这个标准在2004年也被采用为美国国家标准.  在这个标 ...

  5. mysql互为主从实战设置详解及自动化备份(Centos7.2)

    mysql互为主从实战设置详解(Centos7.2) 第一步:mysql配置  my.cnf配置 服务器1 (10.89.10.90) [mysqld]  server-id=1  log-bin=/ ...

  6. 剑指offer二十六之二叉搜索树与双向链表

    一.题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二.思路 对二叉搜索树中序遍历的结果即为排序的结果,在中序遍历的过程中,建 ...

  7. MVC的默认约定

    MVC项目中有很多默认约定,一种是对项目目录分配的约定,比如默认情况下需要将Javascript文件放置在Script文件夹中,但这并不妨碍你将这个文件夹重新命名,也可以将整个文件夹放置到任何想要放置 ...

  8. vue-cli 中的 webpack 配置详解

    本篇文章主要介绍了 vue-cli 2.8.2 中的 webpack 配置详解, 做个学习笔记 版本 vue-cli 2.8.1 (终端通过 vue -V 可查看) vue 2.2.2 webpack ...

  9. Docker挂载主机目录Docker访问出现Permission denied的解决办法

    Docker挂载主机目录,访问相应的文件出现Premission denied的权限访问问题,   [root@localhost soft]# docker images REPOSITORY    ...

  10. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...