TCP/IP 协议——十一章:名称解析和域名系统

2023-10-13 10:59

本文主要是介绍TCP/IP 协议——十一章:名称解析和域名系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

名称解析和与域名系统

互联网支持使用主机名称来识别包括客户机和服务器在内的主机。主机名称通过名称解析的过程转换成IP地址

DNS是一个分布式的客户机/服务器网络数据库,TCP/IP应用程序使用它来完成主机名称和IP地址之间的映射。从应用程序的角度看,访问DNS是通过一个称为地址解析器的应用程序库来完成的。通常,在请求TCP打开一个连接或使用UDP发送一个单播数据报之前,应用程序必须将主机名称转换位IPv4与/或IPv6地址。

DNS缓存

名称服务其包含如名称到IP地址映射的信息,这些信息可以从三个途径获得:

  1. 直接来自区域数据库
  2. 区域传输的结果(来自一个从属服务器)
  3. 来自于在处理解析过程中的另一台服务器

第一种情况中,服务器应该包含该区域的授权信息(authoritative information),也可以称为该区域的授权服务器(authoritative server)。

值得一提的是,缓存同时适用于成功的解析和不成功的解析(称为否定缓存(negative caching))。如果一个特定域名的请求无法返回一个记录,该事实也会被缓存。当出错的应用程序一再请求不存在的域名时,这样做就可以帮助降低互联网流量。

DNS协议

DNS协议由两部分组成:

  • 用于执行对DNS特定名称查询的查询/响应协议
  • 名称服务器用于交换数据库记录的协议(区域传输

一个完整的解析过程发生在几个实体之间,过程如图所示:

 

 

  1. A.HOEM 上的解析软件首先向本地名称服务器 GW.HOME 发送请求,请求将某域名如 EXAMPLE.COM 转化成一个IP地址;
  2. 很遗憾 GW.HOME 不知道这个IP地址,也不知道 EXAMPLE.COM 或是 COM TLD 的名称服务器,于是它转发到另一个DNS服务器,例如ISP提供的服务器地址;  这个过程称为解析)
  3. ISP提供的服务器也不清楚,所以它联系根服务器 ;   根服务器不是递归的)
  4. 因为根服务器不是递归的,所以其返回需要联系的 COM TLD 的名称服务器的信息;
  5. 根据根服务器提供的信息,ISP服务器就找到了 gTLD 服务器;
  6. gTLD服务器给出了域名   EXAMPLE.COM 的名称服务器和服务器的IP地址,例如 A.IANA-SERVERS.NET;
  7. 基于6返回的信息,ISP联系适当的服务器;
  8. 该服务器返回请求的地址;
  9. ISP服务器把地址返回给 GW.HOME;
  10. GW.HOME 再返回查询请求。

DNS消息格式

基本的DNS消息格式用于所有的DNS操作(查询,响应,区域传输,通知和动态更新

如图所示:

 

名称解释
事务ID客户端设置,服务器返回,在客户端用于匹配响应和查询
QR查询(0),响应(1)
OpCode操作吗,0表示查询,4表示通知,5表示更新,其他值无效
AA表示授权回答
TC表示截断回答,使用UDP时,当应答的长度超过512字节时,只返回前512个字节
RD期望递归,设置表示支持递归查询,但是对不支持递归的服务器没有效果,例如根服务器
Z置0,为将来保留
AD设置为真表示信息是已授权的
CD设置为真表示禁用安全检查
RECODE

响应码,具体见P370,常见有以下两种:

0        NoError      没有错误

3        NXDomain    不存在域名;引用了未知域名

 随后的四个字段表示组成DNS消息的问题、回答、授权和额外信息区段中的条目的数目

标签

数据标签以一字节的计数开始,该计数指定其后的字节数目。 名称以值为0结束。如图所示:

注意,每个标签的长度必须在0和63之间

压缩标签,如图所示:

首字节偏移量为0,如果出现了重复的标签既可以压缩。在重复出现的某个位置的字节两个高位置1,然后其后的14个字节组成一个偏移量。例如图中重复出现的edu,偏移量为4,两个高位置1后,其余为0则为192+后面置为4

 


原文地址:

https://www.cnblogs.com/Huzr/p/8849237.html

转载于:https://www.cnblogs.com/wang-shishuang/p/10622788.html

这篇关于TCP/IP 协议——十一章:名称解析和域名系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/202726

相关文章

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境