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

相关文章

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N