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

相关文章

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1