【网络是怎样连接的】—— 向 DNS 服务器查询 IP 地址

2023-11-19


IP

1. 基本知识

互联网和公司内部的局域网都是基于 TCP/IP 的思路来设计的,由一些小的子网,通过路由器连接起来组成一个大的网络,这里的子网可以理解为用集线器连接起来的几台计算机

在这里插入图片描述

在网络中,所有的设备都会被分配一个地址,这个地址就相当于现实中某条路上的 xx 号 xx 室,其中号对应的号码是分配给整个子网的,而室对应的号码是分配给子网中的计算机的,这个整体的地址就是 IP 地址

实际的 IP 地址是一串 32 比特的数字,按照 8 比特(1 字节)为一组分成 4 组,分别用十进制表示,然后再用圆点隔开。但仅凭这一 串数字我们无法区分哪部分是网络号,哪部分是主机号。在 IP 地址的规则中,网络号加主机号总共是 32 比特,但这两部分的具体结构是不固定的。在组建网络时,用户可以自行决定它们之间的分配关系,因此,我们还需要另外的附加信息来表示 IP 地址的内部结构

在这里插入图片描述

这一附加信息称为子网掩码,格式如图所示,是一串与 IP 地址长度相同的 32 比特数字,其左边一半都是 1,右边一半都是 0。其中,子网掩码为 1 的部分表示网络号,子网掩码为 0 的部分表示主机号。将子网掩码按照和 IP 地址一样的方式以每 8 比特为单位用圆点分组后写在 IP 地址的右侧,也可以把 1 的部分的比特数用十进制表示并写在 IP 地址的右侧

2. DNS 解析

查询 IP 地址的方法非常简单,只要询问最近的 DNS 服务器就可以了。对于 DNS 服务器,我们的计算机上一定有相应的 DNS 客户端,而相当于 DNS 客户端的部分称为 DNS 解析器,或者简称解析器,通过 DNS 查询 IP 地址的操作称为域名解析

解析器实际上是一段程序,它包含在操作系统的 Socket 库中,Socket 库是用于调用网络功能的程序组件集合。调用解析器后,解析器会向 DNS 服务器发送查询消息,然后 DNS 服务器会返回响应消息,其中包含查询到的 IP 地址,解析器会取出 IP 地址,并将其写入浏览器指定的内存地址中


DNS

1. 基本工作

DNS 服务器的基本工作就是接收来自客户端的查询消息,然后根据消息的内容返回响应。 其中,来自客户端的查询消息包含以下三种信息:

  • 域名:服务器、邮件服务器(邮件地址中 @ 后面的部分)的名称
  • Class:在最早设计 DNS 方案时,DNS 在互联网以外的其他网络中的应用也被考虑到了,而 Class 就是用来识别网络的信息。不过,如今除了互联网并没有其他的网络了,因此 Class 的值永远是代表互联网的 IN
  • 记录类型:表示域名对应何种类型的记录。例如,当类型为 A 时,表示域名对应的是 IP 地址;当类型为 MX 时,表示域名对应的是邮件服务器。对于不同的记录类型,服务器向客户端返回的信息也会不同

DNS 服务器上事先保存有前面这 3 种信息对应的记录数据,如图所示。DNS 服务器就是根据这些记录查找符合查询请求的内容并对客户端作出响应的

在这里插入图片描述

2. 域名的层次结构

互联网中存在着不计其数的服务器,将这些服务器的信息全部保存在一台 DNS 服务器中是不可能的,因此一定会出现在 DNS 服务器中找不到要查询的信息的情况,解决办法就是将信息分布保存在多台 DNS 服务器中, 这些 DNS 服务器相互接力配合,从而查找出要查询的信息。不过,这个机制有点复杂,因此我们先来看一看信息是如何在 DNS 服务器上注册并保存的

首先,DNS 服务器中的所有信息都是按照域名以分层次的结构来保存的,类似于公司中的事 业集团、部门、科室这样的结构。DNS 中的域名都是用句点来分隔的,比如 www.lab.glasscom.com,这里的句点代表了不同层次之间的界限,一个层级的部分称为域,越靠右的位置表示其层级越高

这种具有层次结构的域名信息会注册到 DNS 服务器中,一个域的信息是作为一个整体存放在 DNS 服务器中,不能将一个域拆开来存放在多台 DNS 服务器中。 不过,DNS 服务器和域之间的关系也并不总是一对一的,一台 DNS 服务器中也可以存放多个域的信息。于是,DNS 服务器也具有了像域名一样的层次结构,每个域的信息都存放在相应层级的 DNS 服务器中

3. 查询 DNS 服务器并获取 IP

互联网中有数万台 DNS 服务器,肯定不能一台一台挨个去找,可 以采用下面的办法:首先,将负责管理下级域的 DNS 服务器的 IP 地址注册到它们的上级 DNS 服务器中,然后上级 DNS 服务器的 IP 地址再注册到 更上一级的 DNS 服务器中,以此类推。这样,我们就可以通过上级 DNS 服务器查询出下级 DNS 服务器的 IP 地址,也就可以向下级 DNS 服务器发送查询请求了

在前面的讲解中,似乎 com、cn 这些域(称为顶级域)就是最顶层了, 它们各自负责保存下级 DNS 服务器的信息,但实际上,com 和 jp 的上面还有一级域,称为根域,一般书写域名时经常被省略,如果要明确表示根域,应该像 www.lab.glasscom.com. 这样在域名的最后再加上一个句点,这个句点就代表根域。根域的 DNS 服务器中保管着 com、cn 等的 DNS 服务器的信息。由于上级 DNS 服务器保管着所有下级 DNS 服务器的信息,所以我们可以从根域开始一路往下顺藤摸瓜找到任意一个域的 DNS 服务器

除此之外还需要完成另一项工作,那就是将根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。因此,客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器

分配给根域 DNS 服务器 的 IP 地址在全世界仅有 13 个,而且这些地址几乎不发生变化,因此将这些地址保存在所有的 DNS 服务器中也并不是一件难事。实际上,根域 DNS 服务器的相关信息已经包含在 DNS 服务器程序的配置文件中了,只要安装了 DNS 服务器程序,这些信息也就被自动配置好了

所有的准备工作就都完成以后,DNS 服务器就能够从上万台 DNS 服务 器中找到目标服务器了,下面就来看一看这个过程是如何进行的

在这里插入图片描述

  1. 客户端首先会访问最近的一台 DNS 服务器,假设我们要查询 www.lab. glasscom.com 这台 Web 服务器的相关信息
  2. 由于最近的 DNS 服务器中没有存放 www.lab.glasscom.com 这一域名对应的信息,所以我们需要从顶层开始向下查找。最近的 DNS 服务器中保存了根域 DNS 服务器的信息,因此它会将来自客户端的查询消息转发给根域 DNS 服务器
  3. 根域 服务器中也没有 www.lab.glasscom.com 这个域名,但根据域名结构可以判断 这个域名属于 com 域,因此根域 DNS 服务器会返回它所管理的 com 域中的 DNS 服务器的 IP 地址。接下来,最近的 DNS 服务器又会向 com 域的 DNS 服务器发送查询消息
  4. com 域中也没有 www.lab.glasscom.com 这个域名的信息,和刚才一样,com 域服务器会返回它下面的 glasscom.com 域的 DNS 服务器的 IP 地址
  5. 以此类推,只要重复前面的步骤,就可以顺藤摸瓜找到目标 DNS 服务器,只要向目标 DNS 服务器发送查询消息, 就能够得到我们需要的答案,也就是 www.lab.glasscom.com 的 IP 地址了
  6. 收到客户端的查询消息之后,DNS 服务器会按照前面的方法来查询 IP 地址,并返回给客户端
  7. 客户端就知道了 Web 服务器 的 IP 地址,也就能够对其进行访问了
4. 通过缓存加快 DNS 服务器的响应

在真实的互联网中,一台 DNS 服务器可以管理多个域的信息,上级域和下级域有可能共享同一 台 DNS 服务器。在这种情况下,访问上级 DNS 服务器时就可以向下跳过一级 DNS 服务器,直接返回再下一级 DNS 服务器的相关信息

此外,有时候并不需要从最上级的根域开始查找,因为 DNS 服务器有一 个缓存功能,可以记住之前查询过的域名。如果要查询的域名和相关信息已经在缓存中,那么就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。相比每次都从根域找起来说,缓存可以减少查询所需的时间

并且,当要查询的域名不存在时,不存在这一响应结果也会被缓存。这样,当下次查询这个不存在的域名时,也可以快速响应

这个缓存机制中有一点需要注意,那就是信息被缓存后,原本的注册信息可能会发生改变,这时缓存中的信息就有可能是不正确的。因此,DNS 服务器中保存的信息都设置有一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。而且,在对查询进行响应时,DNS 服务器也会告知客户端这一响应的结果是来自缓存中还是来自负责管理该域名的 DNS 服务器


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【网络是怎样连接的】—— 向 DNS 服务器查询 IP 地址 的相关文章

  • ESP32-AT指令学习笔记

    目录 前言 一 硬件和软件准备 二 使用步骤 1 下载固件 2 接线 总结 前言 针对 ESP32 芯片 实现了一些常用的 AT 指令集 链接地址为 ESP32 AT指令集 该指令集可用于用户 MCU PC 同 ESP32 进行交互 也适用
  • 数据库系统概论第五版课后习题答案第七章

    第七章 数据库设计 1 试述数据库设计过程 答 这里只概要列出数据库设计过程的六个阶段 l 需求分析 2 概念结构设计 3 逻辑结构设计 4 数据库物理设计 5 数据库实施 6 数据库运行和维护 这是一个完整的实际数据库及其应用系统的设计过
  • Spring总结

    1 Spring概述 1 1 简介 Spring 春天 gt 给软件行业带来了春天 2002年 Rod Jahnson首次推出了Spring框架雏形interface21框架 2004年3月24日 Spring框架以interface21框
  • 企业及个人如何有效防护网络攻击

    企业及个人如何有效防护网络攻击 众所周知 网络攻击手段有很多 让人眼花缭乱 防不胜防 其带来的危害和影响也非常之大 因此 如何防范网络攻击 成为大家关注的重点 本文为大家介绍一些防范网络攻击的小技巧 快来看看吧 1 对于个人来说 密码不少于
  • 赛事

    第25届中国机器人及人工智能大赛成功举办 2023年6月13日至14日 第二十五届中国机器人及人工智能大赛于海南科技职业大学成功举办 大赛由中国人工智能学会主办 共有来自清华大学 哈尔滨工业大学 中国科学技术大学 西安交通大学等500多所高
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是

随机推荐

  • MATLAB实现CNN-LSTM卷积长短期记忆神经网络数据分类预测

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 内容介绍 一种基于长短时记忆网络和卷积神经网络的文本分类方法 首先 利用词向量将输入文本进行向
  • Win7 64位操作系统连接HP 1010打印机完美解决方案

    工作的第一天就遇到问题 新电脑无法连接老式的HP1010打印机 64位Windows7系统无法连接32位XP网络共享打印机 而32位WIN7就可以 这里分享个简单的解决方法 先去下载一个64位的打印机驱动 然后添加打印机 注意这里要添加的是
  • SQL---DML---ORDER BY排序检索子句的几种方式

    关系数据库设计理论认为 如果不明确规定排序顺序 则不应该假定检索出的数据的顺序有意义 为了明确地排序用SELECT语句检索出来的数据 可使用ORDER BY子句 排序一列数据 SELECT 列名1 FROM 表名 ORDER BY 列名2
  • 【2022年MathorCup大数据竞赛】B题:北京移动用户体验影响因素研究(四)(问题一的千余行代码整理)

    目录 代码整理 一 问题一附件1语音业务数据集处理代码 二 问题一附件2上网业务数据集处理代码 一 问题一附件1语音业务数据集处理代码 问题一附件1语音业务数据集处理代码 import numpy as np import pandas a
  • 打包前后端项目并部署至服务器

    1 打包前端项目 打包命令 npm run build 执行完命令后 会生成一个名为 dist 的文件夹 这个就是打包好的前端项目 2 打包后端项目 2 1 执行 maven 的 clean 删除项目编译创建的 target 文件夹 2 2
  • fastcgi 模块各个常用变量的意义

    nginx fasrcgi 模块的文档 http nginx org en docs http ngx http fastcgi module html fastcgi pass 设置FastCGI服务器的地址 将匹配到该location的
  • C语言程序的结构

    1 C语言程序主要由函数构成 函数是C语言程序的基本单位 一个C语言源程序必须有一个main函数 可以包含一个main函数和若干个其他函数 主函数可以调用其他函数 其他函数之间可以互相调用 但其他函数不能调用主函数 被调用的函数可以是系统提
  • 时序算法研究系列之Prophet安装(准备篇)

    前言 新开一个关于时序数据预测算法的系列博客 计划整理目前的时序数列的预测方法 原理 应用 心得等 其中Prophet因为在安装时候踩了很多雷 所以专门开一个准备篇写安装过程 下一篇讲述具体应用 目录 前言 Prophet 简介 方法一 方
  • 查看字节码

    1 安装插件 ASM Bytecode outline 与hexview 2 查看字节码 源码 package com asm public class HelloWorld public static void main System o
  • 【华为OD机试真题 JAVA】求最多可以派出多少支团队

    JS版 华为OD机试真题 JS 求最多可以派出多少支团队 标题 求最多可以派出多少支团队 时间限制 1秒 内存限制 262144K 语言限制 不限 用数组代表每个人的能力 一个比赛活动要求参赛团队的最低能力值为N 每个团队可以由1人或2人组
  • Eclipse插件之Bytecode Outline

    本文介绍如何利用Eclipse插件Bytecode Outline在Eclipse中的操作使用 Eclipse是目前非常流行的开发平台 开放扩展的架构让很多程序员找到了自己个性化的工作环境 Bytecode Outline 插件可以把当前的
  • U盘安装ubuntu16.04及IP配置,硬盘挂载。

    U盘安装ubuntu16 04及IP配置 硬盘挂载 准备一个启动盘 进入BIOS 安装系统 设置静态ip 挂载硬盘脚本 安装基本包 准备一个启动盘 准备一个U盘 可以用 ultraiso 工具来制作 进入BIOS 将U盘插入要安装的电脑 开
  • 理解gateway网关,及与前端联调过程

    1 一些概念 客户端向Spring Cloud Gateway发出请求 然后在Gateway Handler Mapping中找到请求相匹配的路由 将其发送到Gateway Web Handler Handler再通过制定的过滤器链来将请求
  • NeRF神经辐射场中关于光线从世界坐标系转换为NDC坐标系 Representing Scenes as Neural Radiance Fields for View Synthesis

    本文旨在回复一个粉丝的关于坐标系变换编程提问 并结合下面的一个代码进行解释 完整代码参考我前面的文章 补充 希望那个同学可以看见 因为公众号对话10天未互动默认无法再回复消息了 def get ndc rays H W focal near
  • 两层及N层全连接神经网络模型原理

    两层及N层全连接神经网络模型原理 前言 1 两层MLP 1 1 前向传播 1 2 反向传播 2 N层MLP 2 1 网络参数 2 2 超参数优化 3 MLP优化 前言 深度学习是学习样本数据的内在规律和表示层次 在学习过程中获得的信息对诸如
  • 蓝桥杯最长不下降子序列,线段树python

    问题描述 给定一个长度为 N 的整数序列 A1 A2 AN 现在你有一次机会 将其 中连续的K 个数修改成任意一个相同值 请你计算如何修改可以使修改后的数 列的最长不下降子序列最长 请输出这个最长的长度 最长不下降子序列是指序列中的一个子序
  • 1+x 证书 Web 前端开发中级理论考试(试卷 6 )

    1 x 证书 Web 前端开发中级理论考试 试卷 6 官方QQ群 1 x 证书 web 前端开发初级对应课程分析 http blog zh66 club index php archives 194 1 X 证书 Web 前端开发中级对应课
  • 2022国赛5:神州路由器DHCP服务配置

    配置如下 RA配置 Router conf Router host RA RA config int g0 1 RA config g0 1 ip add 192 168 10 1 255 255 255 0 RA config g0 1
  • STM32+ESP8266+MQTT连接阿里云(1)

    ESP8266连接阿里云的流程 发送 目的是让ESP8266退出透传 AT RESTORE 让模块恢复出厂设置 AT 判断模块的好坏及工作状态 正常就会回复OK ATE0 关闭回显 这个没什么好说的 AT CWMODE CUR 1 设置为s
  • 【网络是怎样连接的】—— 向 DNS 服务器查询 IP 地址

    IP 1 基本知识 互联网和公司内部的局域网都是基于 TCP IP 的思路来设计的 由一些小的子网 通过路由器连接起来组成一个大的网络 这里的子网可以理解为用集线器连接起来的几台计算机 在网络中 所有的设备都会被分配一个地址 这个地址就相当