第1章大型互联网公司的基础架构——1.2 客户端连接机房的技术1:DNS

客户端启动时要做的第一件事情就是通过互联网与机房建立连接,然后用户才可以在客户端与后台服务器进行网络通信。目前在计算机网络中应用较为广泛的网络通信协议是TCP/IP,它的通信基础是IP地址,因为IP地址有如下两个主要功能。

  1. 标识设备:接入网络的设备必须有一个独一无二的IP地址,这样才能唯一标识一个网络目标。
  2. 网络寻址:将数据包从一个网络设备发送到另一个网络设备,需要携带目标网络设备的IP地址,通过TCP/IP中的IP路由寻址功能,数据包最终可以到达目标网络设备。

客户端要与机房建立连接,就需要知道机房公网IP地址(暴露在互联网中可访问的IP地址),但是IP地址通常由一串冰冷的数字组成,没有可读性,不方便记忆,于是人们又制定出另一套字符型的地址方案:域名地址。“域名”是大家都很熟悉的名词,在浏览器中输入简单易记的域名(如www.baidu.com),就可以访问到对应的网站,它的底层其实是由DNS来实现的。

1.2.1 DNS的意义

DNS( Domain Name System,域名系统)是互联网中的核心服务,它维护域名与对应 IP地址的映射关系,并提供将域名翻译为IP地址的域名解析功能。DNS在互联网中有非常广泛的应用,它为用户和互联网公司带来了很多便利。例如:

  1. 互联网公司可以创建简单、便于用户记忆的域名并注册到DNS服务器,用户仅需输入域名就能访问到对应的网站。
  2. 通过维护域名与多个IP地址的映射关系,DNS可以将针对同一个域名的不同用户请求解析到不同的IP地址,从而缓解单一后台服务器的资源压力。
  3. 互联网公司因架构升级、网络改造等需要变更机房公网IP地址时,仅需在DNS服务器中重新配置最新的IP地址,而不会对用户造成任何干扰。
  4. 基于DNS可以实现灵活的负载均衡策略,比如DNS服务器可以对IP地址进行监测——如果发现机房某公网IP地址对应的服务器宕机,那么DNS服务器可以将这个IP地址及时摘除,防止用户无法访问后台。

接下来详细介绍DNS的技术原理。

1.2.2 域名结构

如图1-2所示,域名采用了层次化的树形结构来命名。树的顶端节点为根,根的下一层称为顶级域名,指的是域名的后缀部分,如最常见的.com.net等通用域或者.cn.us等国家域;顶级域名的下一层是二级域名,指的是域名的倒数第二部分,一般表示域名注册人或主体所使用的网络名称,如google.comapple.com;二级域名的下一层是三级域名, 指的是域名的倒数第三部分,表示二级域名的子域名。实际上,域名可能还包括四级域名、五级域名等,它们的含义根据上文类推,每一级域名都控制下一级域名的分配。

image-20250216110358579

对于域名mail.google.com来说,顶级域名是.com,二级域名是google.com,三级域名 是mail.google.com

1.2.3 域名服务器

按照域名的层级结构,可以把域名服务器分为4种不同的类型。

(1)根域名服务器(根DNS服务器)

根域名服务器是全球互联网的中枢神经,它负责互联网顶级域名的解析,即它掌握着全部顶级域名的名称与IP地址的映射关系。目前全球仅有13台IPv4根域名服务器,其中主根域名服务器部署在美国,其余12台辅根域名服务器有9台部署在美国、2台部署在欧洲、1台部署在日本。根域名服务器由美国政府授权的互联网名称与数字地址分配机构(ICANN)统一管理。

(2)顶级域名服务器(顶级DNS服务器)

顾名思义,顶级域名服务器负责管理在每个顶级域名下注册的二级域名解析工作,即它可以根据二级域名寻找到二级域名服务器的IP地址。顶级域名服务器就相当于一个朝代的封疆大吏。

(3)权威域名服务器(权威DNS服务器)

权威域名服务器负责对特定的域名进行解析,它管理顶级域名下的二级域名、三级域名、四级域名等的服务器。从名字中的“权威”可以看出,权威域名服务器最终决定了一个域名到底应该被解析成哪个IP地址,它是DNS中最核心的部分。

每个域名对应的权威域名服务器都可能不同,每个权威域名服务器仅可解析它负责的域名,比如负责google.com域名的权威域名服务器无法解析域名apple.com。大型互联网公司一般会自建权威域名服务器,而中小型企业一般会将域名托管给知名的权威域名服务商。

(4)本地域名服务器(本地DNS服务器)

本地域名服务器不属于域名层次结构中的任何一层,但是它对DNS非常重要,相当于域名解析的缓存。任何一台主机在进行网络地址配置时,都会配置一台域名服务器作为本地域名服务器,它是主机在进行域名查询时首先要查询的域名服务器。本地域名服务器一般由网络运营商提供,它作为主机访问网络时域名解析的总代理,会将域名解析结果缓存到本地,以便加速主机后面的域名解析过程。

1.2.4 域名解析过程

域名解析一般采用递归查询方式执行,一个完整的域名解析过程如图1-3所示。

  1. 当客户端访问某个域名时,会先在设备的本地缓存中查找是否有此域名对应的IP地址。本地缓存包括浏览器缓存计算机系统Hosts文件DNS缓存
  2. 如果本地缓存中没有对应的IP地址,则客户端向本地域名服务器发起域名解析请求。如果本地域名服务器保存了域名对应的IP地址,则可以直接返回;否则,本地域名服务器作为客户端的全权代理,递归地完成域名解析。
  3. 本地域名服务器先向根域名服务器发起域名解析请求。根域名服务器收到请求后,会根据所要查询的域名的后缀将所对应的顶级域名服务器(如.com)地址返回给本地域名服务器。
  4. 本地域名服务器根据返回结果向所对应的顶级域名服务器发起查询请求。顶级域名服务器会先查看自己的缓存中是否有此域名的解析记录,如果有,则将IP地址解析结果返回给本地域名服务器,本地域名服务器再将其返回给客户端,域名解析完成。而如果顶级域名服务器的缓存中没有解析记录,则将域名对应的权威域名服务器地址返回给本地域名服务器。
  5. 本地域名服务器继续向权威域名服务器发起域名解析请求。权威域名服务器最终将与域名关联的IP地址返回给本地域名服务器,本地域名服务器再将其返回给客户端,域名解析完成。

image-20250216111311130

可以看到,除客户端查询本地缓存和本地域名服务器发起请求之外,域名解析的其余各环节均以本地域名服务器为中心进行递归查询,本地域名服务器在域名解析的整个环节中承担了代理的角色。

需要额外说明的是,一旦本地域名服务器获得域名解析记录,它就会在本地进行记录缓存,以便下次客户端再向它查询同一个域名时可以直接获得结果,而不用再进行递归查询了。被缓存的域名解析记录格式大致如图1-4所示。

image-20250216111433001

当查询域名(如www.baidu.com)时,域名解析记录会包含如下数据。

  • 生存周期(TTL):表示这条记录在本地域名服务器中被缓存的时长。
  • 协议类型(Class): 一般标识为IN,表示因特网。
  • 记录类型(Type ): A表示IPv4地址,AAAA表示IPv6地址。
  • 记录数据(Rdata ):与域名关联的地址信息。

总结

什么是DNS?

  • DNS( Domain Name System,域名系统)是互联网中的核心服务,它维护域名与对应 IP地址的映射关系,并提供将域名翻译为IP地址的域名解析功能。

域名服务器的类型?

  1. 根域名服务器
  2. 顶级域名服务器
  3. 权威域名服务器
  4. 本地域名服务器

DNS解析流程?

  1. 当客户端访问某个域名时,会先在设备的本地缓存中查找是否有此域名对应的IP地址。本地缓存包括浏览器缓存计算机系统Hosts文件DNS缓存
  2. 如果本地缓存中没有对应的IP地址,则客户端向本地域名服务器发起域名解析请求。如果本地域名服务器保存了域名对应的IP地址,则可以直接返回;否则,本地域名服务器作为客户端的全权代理,递归地完成域名解析。
  3. 本地域名服务器先向根域名服务器发起域名解析请求。根域名服务器收到请求后,会根据所要查询的域名的后缀将所对应的顶级域名服务器(如.com)地址返回给本地域名服务器。
  4. 本地域名服务器根据返回结果向所对应的顶级域名服务器发起查询请求。顶级域名服务器会先查看自己的缓存中是否有此域名的解析记录,如果有,则将IP地址解析结果返回给本地域名服务器,本地域名服务器再将其返回给客户端,域名解析完成。而如果顶级域名服务器的缓存中没有解析记录,则将域名对应的权威域名服务器地址返回给本地域名服务器。
  5. 本地域名服务器继续向权威域名服务器发起域名解析请求。权威域名服务器最终将与域名关联的IP地址返回给本地域名服务器,本地域名服务器再将其返回给客户端,域名解析完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全面解析鸿蒙(HarmonyOS)开发:从入门到实战,构建万物互联新时代

文章目录 引言 一、鸿蒙操作系统概述二、鸿蒙开发环境搭建三、鸿蒙核心开发技术1. **ArkUI框架**2. **分布式能力开发**3. **原子化服务与元服务** 四、实战案例:构建分布式音乐播放器五、鸿蒙开发工具与调试技巧六、鸿蒙生态与未来展望结语 引言 随着万物互联时代…

Android:播放Rtsp视频流的两种方式

一.SurfaceView Mediaplayer XML中添加SurfaceView: <SurfaceViewandroid:id"id/surface_view"android:layout_width"match_parent"android:layout_height"match_parent"/> Activity代码&#xff1a; package com.android.rtsp;impor…

Next.js【详解】CSS 样式方案

全局样式 Global CSS 默认已创建&#xff0c;即 src\app\globals.css&#xff0c;可根据需要修改 默认在全局布局中导入 src\app\layout.tsx import "./globals.css";组件样式 CSS Modules 新建文件 src\app\test\styles.module.css .red {color: red;}导入目标页面…

LVS相关原理

一、LVS集群的体系结构 1.1 LVS简介 LVS 是 Linux Virtual Server 的简称&#xff0c;也就是 Linux 虚拟服务器 , 是一个由章文嵩博士发起的自由软件项目&#xff0c;它的官方站点是 www.linuxvirtualserver.org 。现在 LVS 已经是 Linux标准内核的一部分&#xff0c;在Linux2…

【2025深度学习系列专栏大纲:深入探索与实践深度学习】

第一部分:深度学习基础篇 第1章:深度学习概览 1.1 深度学习的历史背景与发展轨迹 1.2 深度学习与机器学习、传统人工智能的区别与联系 1.3 深度学习的核心组件与概念解析 神经网络基础 激活函数的作用与类型 损失函数与优化算法的选择 1.4 深度学习框架简介与选择建议 第2…

Java与C语言中取模运算符%的区别对比

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 &#x1f4af;前言&#x1f4af;C语言中的取模运算符 %基本行为示例 注意事项示例&#xff1a;负数取模 &#x1f4af;Java中的取模运算符 %基本行为示例 对浮点数的支持示例&#xff1a;浮点数取模 符…

OpenCV机器学习(4)k-近邻算法(k-Nearest Neighbors, KNN)cv::ml::KNearest类

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::KNearest 是 OpenCV 机器学习模块中的一部分&#xff0c;它提供了实现 k-近邻算法&#xff08;k-Nearest Neighbors, KNN&#xff09;的…

过于依赖chatgpt编程会有哪些弊端?

过于依赖ChatGPT编程可能会带来以下问题&#xff1a; 1. 基础不扎实&#xff0c;容易“变菜” 以前遇到代码还会琢磨哪里不懂、怎么改&#xff0c;现在直接复制粘贴&#xff0c;时间长了可能连基本的语法和逻辑都搞不清楚。就像考试总抄答案&#xff0c;真让你自己写的时候脑子…

红队视角出发的k8s敏感信息收集——Kubernetes API 扩展与未授权访问

针对 Kubernetes 第三方组件与 Operator 的详细攻击视角分析&#xff0c;涵盖 Service Mesh、Helm Releases 和 Database Operators 的潜在风险及利用方法。 攻击链示例 1. 攻击者通过未授权的 Tiller 服务部署恶意 Helm Chart → 2. 创建后门 Pod 并横向移动至 Istio 控制平…

3D与2D机器视觉机械臂引导的区别

3D与2D机器视觉在机械臂引导中的主要区别如下&#xff1a; 数据维度 2D视觉&#xff1a;仅处理平面图像&#xff0c;提供X、Y坐标信息&#xff0c;无法获取深度&#xff08;Z轴&#xff09;数据。 3D视觉&#xff1a;处理三维空间数据&#xff0c;提供X、Y、Z坐标及物体的姿态…

日常开发中,使用JSON.stringify来实现深拷贝的坑

使用JSON.stringify的方式来实现深拷贝的弊端 弊端一&#xff1a;无法拷贝NaN、Infinity、undefined这类值 无法拷贝成功的原因&#xff1a; 对于JSON来说&#xff0c;它支持的数据类型只有null、string、number、boolean、Object、Array&#xff0c;所以对于它不支持的数据类…

AI大模型(如GPT、BERT等)可以通过自然语言处理(NLP)和机器学习技术,显著提升测试效率

在软件测试中,AI大模型(如GPT、BERT等)可以通过自然语言处理(NLP)和机器学习技术,显著提升测试效率。以下是几个具体的应用场景及对应的代码实现示例: 1. 自动生成测试用例 AI大模型可以根据需求文档或用户故事自动生成测试用例。 代码示例(使用 OpenAI GPT API): …

【Linux】Ubuntu Linux 系统——Node.js 开发环境

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天星期五了&#xff0c;同时也是2025年的情人节&#xff0c;今晚又是一个人的举个爪子&#xff01;&#xff01; &#x1f642; 本文是有关Linux 操作系统中 Node.js 开发环境基础知识&#xff0c;后续我将添加更多相关知识噢&a…

Dockerfile 编写推荐

一、导读 本文主要介绍在编写 docker 镜像的时候一些需要注意的事项和推荐的做法。 虽然 Dockerfile 简化了镜像构建的过程&#xff0c;并且把这个过程可以进行版本控制&#xff0c;但是不正当的 Dockerfile 使用也会导致很多问题。 docker 镜像太大。如果你经常使用镜像或者…

mysql 学习16 视图,存储过程,存储函数,触发器

视图&#xff0c; 存储过程&#xff0c; 存储函数 触发器

SpringBoot+Vue+数据可视化的动漫妆造服务平台(程序+论文+讲解+安装+调试+售后等)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当今数字化高速发展的时代&#xff0c;动漫产业迎来了前所未有的繁荣&#xff0c;动漫…

rtsp rtmp 跟 http 区别

SDP 一SDP介绍 1. SDP的核心功能 会话描述&#xff1a;定义会话的名称、创建者、时间范围、连接地址等全局信息。媒体协商&#xff1a;明确媒体流的类型&#xff08;如音频、视频&#xff09;、传输协议&#xff08;如RTP/UDP&#xff09;、编码格式&#xff08;如H.264、Op…

Containerd 简介、安装与使用指南

1. Containerd 简介 Containerd 是一个开源的容器运行时&#xff0c;专注于管理容器的生命周期。它最初是 Docker 的一部分&#xff0c;后来被分离出来成为一个独立的项目&#xff0c;并成为 Kubernetes 和其他容器平台的底层运行时。Containerd 提供了容器的创建、启动、停止…

开源语音克隆项目 OpenVoice V2 本地部署

#本机环境 WIN11 I5 GPU 4060ti 16G 内存 32G #开始 git clone https://github.com/myshell-ai/OpenVoice.git conda create -n opvenv python3.9 -y conda activate opvenv pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/…

【Prometheus】prometheus结合domain_exporter实现域名监控

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…