一文看懂:网址,URL,域名,IP地址,DNS,域名解析
一个执着于技术的公众号
前言
今天给大家梳理一篇关于
网址
、URL
、IP地址
、域名
、DNS
、域名解析
的白话长文,并以简单的提问-解答 形式让读者更加深刻理解,希望有助于读者的学习,面试和工作!
1、一个疑问
在指出这个问题之前,首先我们要清楚以下几点:
互联网上的所有数据都是存储在主机(服务器)上
互联网中的所有主机都拥有唯一的IP地址
互联网中任意两台主机通信都是通过IP地址来实现
那么了解上述内容之后,我们以两台主机最简单的通信方式——上网
为例,为大家说明这个疑问是什么!
21世纪的每个人应该都熟悉网上冲浪(不知道还有没有人用这个词)的过程,我们上网的实质就是获取网址对应主机上的数据并在用户主机上进行展示
(浏览器上),那么我们就该怀疑一个问题:
互联网中的任意两台主机通信是依靠IP进行的
,而我们上网只是输入的网址,并不是IP地址,怎么就能找到对方主机并获取它的数据呢?
因此,势必存在某种机制,将网址解析成为了IP地址,再通过IP地址进行通信!这个机制也是贯穿本文所有技术知识的主线!
2、网址
1. 网址是什么?
网址
,也叫做域名
,又称URL
,是互联网用户用来标识
主机的名字。该名字具有唯一性,层次性;字面意义可以表示主机的账号、功能、性质、所属的地区或组织,便于所有互联网用户记忆与使用!
URL
,即Uniform Resource Locator
,统一资源定位符
,用于指明
互联网主机的服务器及具体的网页位置,URL的构成策略
与示例
如下:
特点:网址命名遵循互联网域名规则,且易于管理,包括分配,确认、回收,同时与主机IP地址进行绑定,在用户访问域名时能够高效的将网址映射到IP地址(高效由域名服务器保证,详见后文)。
2. 网址的出现解决了什么问题?
网址
/域名
/URL
的出现解决了以下两个问题:
问题一:
IP
地址是
互联网中所有主机的统一寻址方式
,使用IP地址能够直接访问互联网上主机数据、资源,但由于IP地址只是一串数据,不具有实际意义,导致所有互联网用户记忆起来十分困难。问题二: 在Internet架构中,几乎所有的应用层软件都不是通过IP地址来访问互联网中的主机资源,而是要求用户
输入
具有一定意义的主机名
字来访问
对应主机的。
3. 网址的结构组成
上面提到的主机名称,也就是网址/域名的命名遵循了一定规则,这个规则便是由互联网中的“名字管理机构”来制定的,即域名系统DNS
。这里先介绍下网址的组成:
主机名.机构名.网络名.顶级域名
互联网中的某台主机域名由其所属各级域名及其自身名字共同组成(即由子域名构成),级别从左到右依次增加,最右边为顶级域名,最左边为主机自己的名字,各级子域名使用“.”隔开。常见的格式如下:
下面将详细介绍上图提到的域名系统DNS,包括DNS诞生解决了什么问题,域名发展史,域名层级,部分顶层域名对象,域名服务器,域名解析过程与IP技术拓展!
3、DNS域名系统
1. DNS是什么?
DNS
,英文全写为Domain Name System
,中文意思为域名系统
,是互联网中提供域名与IP地址互相映射的分布式数据库。
2. DNS发展史
3. DNS解决了什么问题?
前文已经提到DNS域名系统
是互联网中的主机域名管理系统
,充当“管理员”的角色!DNS在诞生之前(ARPANET时期),互联网中的每台主机都是用一个文件来记录所有的主机名及其IP地址,这个文件就是hosts
文件,所有主机都必须定期从相应站点来更新
该文件,用于同步
互联网中主机的新增
、变更
、消失
。
可以想象,随着互联网中的主机数量增加,hosts
文件必将越来越大,在维护更新方面的难度更是激增,主机名更是频繁发生冲突,为了解决这个问题,1983年
DNS域名系统问世。
4. DNS域名层次结构
DNS是一个分层的树形结构,各层由域构成,域的意义如下:
域表示一个区域、一个范围
每个域可容纳大量主机
每个主机必有自己的域,却不一定有自己的域名地址
DNS标准规定,单个域名长度一般在63个字符以内,最长不超过255个字符
DNS标准规定,域名中的字符限26个字母(不分大小写),数字,连字符“-”(不能作为子 域名首字母与末尾字母)
域所在服务器称为域名服务器,主要用于将域名映射为IP地址(详见后文)
DNS的域名树由根域,顶级域,二级域及其子域构成,其结构图与示例如下:
下面逐一介绍各级域:
根域
,由互联网网络信息中心(InterNIC)负责管理,用点“.”
表示,无名称,是域名系统中的最高级别域
,标准域名结尾应包含根域“.”,但实际使用中该根域都是省略的,所以大家常见的网址末尾并没有“.”。顶级域
(Top-Level Domains = TLD),隶属于根域,是仅次于根域的下一级域,由国家顶级域
(ccTLD)与通用顶级域
(gTLD)共同组成。国家顶级域共有243个(即全球的国家与地区总数),而通用顶级域,也叫国际域名,其数量是随着因特网的发展在逐渐增加,理论会达到无穷多个。下表罗列出了常见的
通用顶级域名
:
二级域
,正式给组织和个人注册使用的唯一名称,如亚马逊、IBM,微软的官方网址中的字眼“amazon”“ibm”“microsoft”就是这些企业注册的二级域名。二级域以下子域,在二级域中的组织机构可以根据需要来进一步划分子域,如销售部门用sale子域名,业务部门用business子域名等。
前文中已经提到域名的出现是为了解决用户记忆困难的问题,实际在互联网中并不能使用域名进行主机间的通信,而仍然需要使用IP地址进行数据交互,所以DNS系统在提供域名功能的同时,更大的作用是能够高效的将域名解析映射到对应主机的IP地址。这就是即将为大家介绍的域名服务器的作用。
5. 域名服务器
域名服务器构成了DNS中的分布式网络系统,其功能主要是为内外主机提供域名与IP地址的互相解析映射服务。域名服务器分布在互联网的各子网中,每个域名服务器负责管理连接到本子网的所有主机,并为其提供服务,服务内容为:
客户机应用程序将目标主机域名发送给其所属子网的域名服务器,域名服务器给该客户机返回对应的目标主机IP地址;若本子网中的域名服务器无法查询到目标主机域名的IP,则根据DNS的标准IP地址解析流程提供进一步的查询服务,该过程将在下文“域名解析过程”中详细介绍。
4、域名解析过程
通过域名获取对应IP地址的过程叫做域名解析,参与域名解析过程最重要的单元就是域名服务器,域名服务器的体系结构如下:
根域名服务器
,是全球级别最高,最重要的域名服务器,全世界共有13
台(IPv4根域名服务器,编号为A到M),1个主根服务器和9个辅根服务器在美国,欧洲2个辅根服务器,位于英国和瑞典,亚洲1个辅根服务器,位于日本。根域名服务器只记录其下级顶级域名服务器的域名及其IP地址,当低级域名服务器遇到无法解析的域名时,首先会向根域名服务器求助。顶级域名服务器
,级别同顶级域,用于记录注册在该顶级域名服务器上的所有二级域名并提供DNS查询服务。权限域名服务器
,为一个区域的主机提供DNS查询服务,如果查询结果为空,则通知发起请求的DNS用户应到哪个权限域名服务器进一步查询。
本地域名服务器
,不在上图的域名服务器体系中,但在域名解析中扮演重要的角色。每台主机发出的DNS域名查询请求首先都会发送到本地域名服务器。本地域名服务器可以设立在个人,大学,公司等各种范围内,又叫做首选DNS
(很熟悉吧),就是我们计算机网络连接中的首选DNS:
一张图看懂域名解析全过程:
上图以用户访问头条网站为例,简明扼要的为大家讲述了用户输入网址到获取IP地址的全过程,下面我们来详细解释该过程:
1、用户打开计算机,在浏览器中输入头条网址后计算机将向本地DNS服务器发起域名解析请求
。本地DNS服务器通常由互联网服务提供商(ISP)提供,如三大运营商。
2、本地DNS服务器接收到用户的DNS请求后,首先查询
其自身缓存记录中是否存在头条域名对应的IP地址,如果存在,则直接将该IP地址回传给用户计算机;否则,将进一步向根域名服务器发起求助。
3、由于根域名服务器只会记录其下级的13个顶级域名服务器,而不会直接记录域名与IP的映射关系,所以在接收到本地域名服务器的解析请求时,根域名服务器将告知
本地服务器:“你所请求的域名由.com顶级域名服务器管理,其IP为xxx”。
4、本地DNS服务器进一步向.com顶级域名服务器发起
域名解析请求,由于.com域名服务器也不会记录域名与IP的映射关系,而是告知请求者去该域名所属的域服务器上查询,并给出其IP地址。
5、本地DNS服务器继续向域服务器发起头条域名解析请求,便会得到
头条域名对应的IP地址,这时本地DNS服务器不仅会向用户计算机返回IP地址,同时在其自身缓存中增加头条域名与其IP的记录,从而加快其他计算机获取头条域名对应IP的解析速度。
总结
本文以通俗易懂的语言结合实际问题详细阐述了网址、域名、IP地址、URL、域名服务器、域名解析等相关技术原理,并配置了细致的示意图,让内容更易于读者理解、记忆。希望有利于读者的学习、工作!
来源:猴哥技术站
往期精彩
如有收获,点个在看,诚挚感谢
一文看懂:网址,URL,域名,IP地址,DNS,域名解析的更多相关文章
- 一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难.有意思的是Web服务器/Web容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现.本文将带读者对这四个相似概念如何区分. 1 ...
- [转帖]一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
一文看懂web服务器.应用服务器.web容器.反向代理服务器区别与联系 https://www.cnblogs.com/vipyoumay/p/7455431.html 我们知道,不同肤色的人外貌差别 ...
- 【转帖】一文看懂docker容器技术架构及其中的各个模块
一文看懂docker容器技术架构及其中的各个模块 原创 波波说运维 2019-09-29 00:01:00 https://www.toutiao.com/a6740234030798602763/ ...
- 一文看懂https如何保证数据传输的安全性的【转载、收藏】
一文看懂https如何保证数据传输的安全性的 一文看懂https如何保证数据传输的安全性的 大家都知道,在客户端与服务器数据传输的过程中,http协议的传输是不安全的,也就是一般情况下http是明 ...
- [转帖] 一文看懂:"边缘计算"究竟是什么?为何潜力无限?
一文看懂:"边缘计算"究竟是什么?为何潜力无限? 转载cnbeta 云计算 雾计算 边缘计算... 知名创投调研机构CB Insights撰文详述了边缘计算的发展和应用前景 ...
- 一文看懂Stacking!(含Python代码)
一文看懂Stacking!(含Python代码) https://mp.weixin.qq.com/s/faQNTGgBZdZyyZscdhjwUQ
- Nature 为引,一文看懂个体化肿瘤疫苗前世今生
进入2017年,当红辣子鸡PD-1疗法,一路横扫多个适应症.而CAR-T治疗的“小车”在获得FDA专委会推荐后也已经走上高速路,成为免疫治疗又一里程碑事件.PD-1.CAR-T之后,下一个免疫治疗产品 ...
- 一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了
一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了 转载: 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它 ...
- 转载来自朱小厮博客的 一文看懂Kafka消息格式的演变
转载来自朱小厮博客的 一文看懂Kafka消息格式的演变 ✎摘要 对于一个成熟的消息中间件而言,消息格式不仅关系到功能维度的扩展,还牵涉到性能维度的优化.随着Kafka的迅猛发展,其消息格式也在 ...
随机推荐
- 什么时候使用session?什么时候使用application?
application:程序全局变量对象,对每个用户每个页面都有效session:用户全局变量,对于该用户的所有操作过程都有效
- synchronized与Lock、volatile的区别
synchronized与volatile的区别 volatile是线程同步的轻量级实现,因此volatile性能好于synchronized voaltile修饰变量,synchronized修饰方 ...
- django 三件套(render,redirect,HttpResponse)
Django基础必备三件套**: HttpResponse 内部传入一个字符串参数,返回给浏览器. from django.shortcuts import HttpResponse def inde ...
- django基础环境配置
Django环境搭建 1.下载安装 命令行 pip install django==1.11.21 pip install django==1.11.21 -i 源 pycharm setting - ...
- 若没有任何实例包含Class Body 则enum被隐式声明为final
本文参考 今天在Java Language Specification上偶然看到一条关于枚举的语法特点说明 An enum declaration is implicitly final unless ...
- Java中final的使用
原文链接https://www.cnblogs.com/dolphin0520/p/10651845.html 作者Matrix海 子 本文为笔记 0. 概述 final和static一样都是修饰词, ...
- Leetcode刷题之链表中箭头转移和内容转移
链表中箭头转移和内容转移 链表中特别注意xxx.next=xxx 和xxx=xxx的区别 xxx.next=xxx表示将指针(箭头)转移 xxx=xxx表示将内容转移 Leetcode206翻转链表 ...
- HTML5与HTML4区别简介
移动互联网的快速发展,尤其是4G时代已经来临,加上微软在Windows 10中搭载了新的浏览器Edge取代了IE的地位,所以现在很多网站都开始抛弃IE朝着HTML5发展,PC端在不同浏览器之间的兼容性 ...
- 认识 Function.prototype.bind()
欢迎前端爱好者加入QQ群:112916679 答疑解惑,且可获取更多前端资料! bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个 ...
- Python窗口学习之浅尝按键触发事件
一.窗口上敲键盘触发事件(以Enter键为例) 二.点击窗口按钮触发事件(以鼠标左键双击为例) 代码: import tkinter as tk root = tk.Tk() root.geometr ...