《TCP/IP详解 卷一》第11章 DNS

目录

11.1 引言

11.2 DNS名称空间

11.2.1 DNS命名语法

11.3 名称服务器和区域

11.4 DNS缓存

11.5 DNS 协议

11.5.1 DNS消息格式

11.5.2 DNS 扩展格式(EDNS0)

11.5.3 UDP 或 TCP

11.5.4 问题(查询)和区域区段格式

11.5.5 回答、授权和额外信息区段格式

11.5.6 资源记录类型

11.5.7 动态更新(DNS UPDATE)

11.5.8 区域传输和DNS通知

11.6 排序列表、循环和分离DNS

11.7 开放DNS服务器和DynDNS

11.8 透明度和扩展性

11.9 从 IPv4 向 IPv6 转换 DNS

11.10 LLMNR 和 mDNS

11.11 LDAP

11.12 与DNS相关的攻击

11.13 总结


11.1 引言

DNS:Domain Name System

host name可作为域名。

DDNS(Dynamic Domain Name System):

        作用:

                即使主机IP改变时,也可用用固定域名来访问。

        实现原理:

                IP改变时,主机DDNS客户端将新IP通知服务器,DDNS服务器就创建新IP-域名映射。

        使用场景:

                远程控制(如远程访问家中智能设备)。

花生壳网站可提供DDNS服务。

11.2 DNS名称空间

名称空间:name space

TLD:Top Level Domain,顶级域名,是域名体系中最高级别的域名,即域名的最右边。

TLD举例:

        国家代码顶级域名(ccTLD)如.cn,.us

        通用顶级域名(gTLD):如.com,.net,.edu

        新通用顶级域名(New gTLDs):如 .app,.blog,.shop

而根DNS服务器存储和管理这全球顶级域名(TLD)的域名服务器信息。

11.2.1 DNS命名语法

完全限定域名(FQDN):

        即完整域名,从顶级域名一直到主机名。

        唯一地标识互联网主机。

非限定域名:

        未指定完整域名结构的域名。结合默认域名后缀可生成完整域名。

        DHCP服务器有两个DHCP option用于下发默认域名后缀:

                默认域名扩展。(一个域名后缀)

                搜索列表。(多个域名后缀,逐一使用,直到DNS解析成功)

举例:

        用户输入vangogh,本地DNS添加后缀后转换为完整域名vangogh.cs.berkeley.edu.,然后进行DNS解析器。

FQDN完整域名:如www.net.in.turn.de.,从右向左解析。

标签不区分大小。

        如"example.com"、"EXAMPLE.COM"被DNS解析为相同IP。

11.3 名称服务器和区域

DNS服务器中管理单位为区域(zone),一个区域是DNS名称空间的一棵子树。

        如一个公司的DNS服务器,管理一颗子树,包括www.example.com、mail.example.com 等。

一个区域至少有两台DNS服务器:

        主服务器:负责处理对该区域中域名修改、更新和查询请求。数据是最新的。

        辅服务器:备份。

                备份方法:DNS区域传输功能。

11.4 DNS缓存

DNS服务器把DNS解析记录连同TTL一起给客户端。

该TTL值是该DNS记录在客户端的存活时间。当解析相同域名,无需再次向DNS服务器请求,降低互联网流量。

TTL过期后,清除该记录缓存。

TTL单位:秒。

Linux中名称服务缓存进程(Name Service Caching Daemon, NSCD)提供客户端缓存功能。

        配置文件为/etc/nscd.conf文件,包括:

                1. 缓存什么解析记录(DNS和其他服务)

                2. TTL等参数。

11.5 DNS 协议

DNS协议包括两个部分:

        DNS解析服务:

        区域传输:DNS服务器同步域名解析信息到其他服务器。

任播地址Anycast:

        发送到任播地址的数据会按照路由协议的距离方法,被路由到最近任播地址接口。

所以一组DNS服务器可使用相同任播地址,客户端就近使用,实现负载均衡和主辅备份。

DNS查询有两种类型:

        递归查询:

                DNS客户端向本地服务器查询。

                本地服务器向根服务器查询。

                根服务器向顶级服务器查询。

                        未完成解析之前客户端一直阻塞等待。

        迭代查询:

                DNS客户端向本地服务器查询。

                        本地服务器返回根服务器IP给客户端。

                DNS客户端向根服务器查询。

                        根服务器返回顶级服务器IP给客户端。

                反复。。。

大部分的DNS服务器是递归查询。

而根服务器和TLD服务器是迭代查询。

        如果使用递归查询时,主机会阻塞,导致互联网性能不佳。

11.5.1 DNS消息格式

RR:资源记录(Resource Record)

        是DNS服务器存储的域名信息。

最常用两种记录:

        A 记录(Address Record):域名到IPv4地址的映射。

        AAAA 记录(IPv6 Address Record):域名到IPv6地址的映射。

区域传输:从服务器从主DNS服务器处获取最新的域名区域数据,确各个服务器数据同步。

DNS报文类型有:

        DNS查询/响应:

        区域传输请求/响应:

        通知报文:主服务器向从服务器发送通知报文,告知从服务器更新域名信息。

        更新报文:允许客户端动态向DNS服务器添加、修改或删除记录。

授权服务器:

        如果DNS服务器不具备请求域名的解析信息,它会向授权服务器发送查询请求。

DNS报文格式:

事务ID:客户端设置,服务器返回时复制。用来匹配响应和查询。

标志字段:

        QR:消息类型,0(査询),1(响应)。

        Opcode:查询类型,0 (标准查询),4(通知),5(更新)

        AA:响应是否来自授权服务器。

        TC:响应是否被截断。

        RD:客户端期望递归查询。

        RA:DNS服务器是否支持递归查询。

        Z:保留位

        AD:信息已授权

        CD:禁用安全检查

        RCODE:表示响应状态,值0(响应正确),3 (响应出错,如名称差错或不存在域名)

每个域名由一系列标签组成。标签类型有两种:

        数据标签(data label):

                举例www.pearson.com的编码如下:

        压缩标签(compression label) :

                当多个标签中有相同字符时,可用来减少报文大小。

11.5.2 DNS 扩展格式(EDNS0)

DNS扩展机制:

        EDNS0:Extension Mechanisms for DNS version 0

        作用:

                支持更大DNS消息。

                传输额外选项信,如DNS(SEDNS安全)。

11.5.3 UDP 或 TCP

对于TCP和UDP来说,DNS端口号都是53。

DNS通常使用UDP封装。

一个DNS消息最多512字节。

预期响应长度超过512字节,但服务器只返回前512字节,此时会在响应中设置TC(被截断)标志。

该解析器可用TCP再次发出查询,此时就返回超过512字节消息,因为TCP可以MSS分段。

TCP MSS选项的作用:

        避免IP分段,降低开销,提高性能。

使用UDP封装DNS时,应用层应处理超时和重传。

11.5.4 问题(查询)和区域区段格式

问题区段:

        也就是查询区段。用于DNS查询报文。

        其中包含信息:

                需要查询的名称。

                查询类型:A是查询IPv4地址,AAAA是查询IPv6。

                查询类:值是1(互联网类),254(没有类),255(所有类)

11.5.5 回答、授权和额外信息区段格式

RR:资源记录,即DNS映射记录。

这三个区段就是RR的集合。用于DNS响应报文。

授权区段:

        当DNS服务器无法直接回答查询请求时,可指示客户端向授权区段中的服务器发送进一步的查询请求。

11.5.6 资源记录类型

即请求一个名称对应的什么资源:

RR类型                 解析对象

A                           IPv4地址

NS                        名称服务器

AAAA                    IPv6地址

IXFR                     增量区域传输

AXFR                    完全区域传输,TCP

11.5.7 动态更新(DNS UPDATE)

客户端通过UPDATE 报文地向DNS服务器添加、修改或删除资源记录。

11.5.8 区域传输和DNS通知

区域传输:从主服务器复制区域的一组RR到从服务器。保持多服务器区域内容同步

区域传输触发时机:

        定时器

        DNS NOTIFY消息

DNS NOTIFY消息作用:

        主DNS对某区域修改后,向辅DNS发送DNS NOTIFY 消息。

        辅DNS就会向主DNS发出Zone Transfer 请求。

区域传输两种方式:

        完整传输:内容大,使用TCP分段。

        增量传输:只传输更新条目,可能先用UDP,若响应消息太大,则切换到TCP。

11.6 排序列表、循环和分离DNS

若请求名称对应的主机有多个IP(内网IP,外网IP),服务器返回IP时如何排序?

        普遍情况: 基于请求报文中源IP或目的IP地址排序。

DNS循环:

        当多台服务器对应同一域名服务,可将DNS服务器配置为DNS循环,实现负载均衡。

        具体做法:每个DNS客户端请求域名时,DNS服务器交替返回这些 IP 地址。使得客户端每次请求都得到不同服务器IP地址,实现负载均衡。

        缺点:当记录被缓存时,该负载均衡效果不好。

分离DNS (split DNS):

        一种网络配置方案。

        允许企业用户访问内部资源时使用内部DNS服务器进行域名解析,而在访问外部资源时使用公共DNS 服务器。

        原理:通过查询报文的源/目的IP,返回特定资源记录集合。

        作用:

                内外网隔离:不允许用户通过公共DNS访问内部指定资源。减少内部资源受到外部攻击风险。

                提高DNS解析效率,优化网络性能。

                可在内网DNS上配置,限制对特定域名访问。提高网路安全。

11.7 开放DNS服务器和DynDNS

DDNS:即动态DNS,即使IP地址变动时,也可使用固定域名来访问。

原理:

        当IP地址变化时,DDNS客户端发送新IP地址给DDNS服务器。

        DDNS服务器再将新IP和域名更新带ISP DNS服务器中。

11.8 透明度和扩展性

扩展:实现新的RR类型。

11.9 从 IPv4 向 IPv6 转换 DNS

DNS64可将A记录转换为AAAA记录。并和IPv4/IPv6 NAT转换器一起工作,以允许只有IPv6的客户端访问IPv4网络的服务。

11.10 LLMNR 和 mDNS

这是两种局域网DNS协议。

LLMNR:

        即本地链路组播名称解析(Link-Local Multicast Name Resolution)

        非标协议,微软开发,Windows系统常用。

        使用组播通信,服务器使用UDP端口5355。

mDNS:

        组播DNS,multicast DNS

        标准协议, macOS 和 Linux系统常用。

        使用组播通信,使用UDP端口5353

        作用:

                是用于局域网内部DNS。

两者功能相同,如:

        局域网设备互相发现。

        局域网内部主机名解析。

区别:

        LLMNR用于IPv4,不支持IPv6。

        mDNS主要用于IPv6 网络中,同时支持IPv4和IPv6网络。

11.11 LDAP

LDAP:Lightweight Directory Access Protocol,轻量级目录访问协议

目前使用LDAPv3

LDAP服务器常用于在企业内部。

        用于保留目录信息,如位置、电话号码和组织单位,管理用户账户、服务。

11.12 与DNS相关的攻击

DNSSEC:DNS安全

DNS攻击:

        1. DoS攻击,使DNS服务器过载。

        2. 改变资源记录内容。

        3. 伪装成官方DNS服务器,回复假的资源记录,导致主机连接至错误IP地址(例如,银行的Web站点)

2001年DNS的重大DoS攻击:

        伪造大量各种源IP地址,请求AOL. COM的MX记录。导致响应流量定向到任何伪源IP处。

        而DNS请求是较小报文,然而响应较大(约20倍),这称为放大攻击。

MX记录:Mail Exchange记录,即请求邮件服务器域名对应IP。

DNS数据内容攻击:DNS服务器缓存内容被错误数据替代,导致客户端定向到伪服务器。

DNS Flood攻击解决方法:

        防火墙收到DNS请求,会代替DNS服务器响应DNS请求,并将TC标志(截断)位置1,要求DNS客户端以TCP方式发送DNS请求。

        如果客户端是真实源,会继续以TCP方式发送DNS请求。

        如果客户端是虚假源,则不会再以TCP方式发送DNS请求。

11.13 总结

下图是无DNS缓存时,DNS查询步骤:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是SpringCloud,有哪些组件?

spring Cloud 是基于spring boot的分布式系统开发工具,它提供了一系列开箱即用的,针对分布式系统开发的特性和组件。用于帮助开发人员快速构建和管理云原生应用程序。 Spring Cloud 的主要目标是解决分布式系统中的常见问题,例如服务发现,负载均衡,配置管理,断路器,消息总…

搜索回溯算法(DFS)1------递归

目录 简介: 递归问题解题的思路模板 例题1:汉诺塔 例题2:合并两个有序链表 例题3:反转链表 例题4:两两交换链表中的节点 例题5:Pow(x,n)-快速幂 结语: 简介&…

C++_哈希表

目录 1、哈希表的用法 2、哈希函数-除留余数法 3、哈希冲突 4、闭散列和开散列 4.1 闭散列 4.1.1 哈希表的扩容 4.1.2 二次探测 4.2 开散列(哈希桶) 4.2.1 开散列的扩容 结语 前言-哈希表概念: 哈希表也是一种存储信息的结构&am…

数据结构(一)——概述

一、绪论 1.1数据结构的基本概念 数据:用来描述客观事物的数、计算机中是字符及所有能输入并被程序识别和处理的符号的集合。 数据元素:数据的基本单位,一个数据元素可由若干数据项组成。 数据结构:指相互之间存在一种或多种特…

“羊驼“入侵CV,美团浙大沈春华团队将LLaMA向CV扩展,构建全新基础模型VisionLLaMA

本文首发:AIWalker https://arxiv.org/abs/2403.00522 https://github.com/Meituan-AutoML/VisionLLaMA 本文概述 大型语言模型构建在基于Transformer的架构之上来处理文本输入, LLaMA 系列模型在众多开源实现中脱颖而出。类似LLaMa的Transformer可以用来处理2D图像吗&#xf…

FreeRTOS学习笔记-基于stm32f103(1)基础知识

一、裸机与RTOS 我们使用的32板子是裸机,又称前后台系统。裸机有如下缺点: 1、实时性差。只能一步一步执行任务,比如在一个while循环中,要想执行上一个任务,就必须把下面的任务执行完,循环一遍后才能执行…

【Java设计模式】三、简单工厂、工厂方法模式、抽象工厂模式

文章目录 0、案例:咖啡屋1、简单工厂模式 静态工厂(不属于23种之列)2、工厂方法模式3、抽象工厂模式4、简单工厂模式 配置文件解除耦合5、JDK源码中对工厂模式的应用 0、案例:咖啡屋 模拟咖啡店点餐。咖啡有多种,抽…

day6 数组 嵌套循环

1&#xff1a;打印杨辉三角 91 int arr[6][6];92 int i,j0;93 for(i0;i<6;i)94 {95 for(j0;j<i;j) 96 {97 if(j0||ij)98 {99 arr[i][j]1; …

14 数值稳定性 + 模型初始化和激活函数【李沐动手学深度学习v2笔记】

1. 数值稳定性 神经网络的梯度 向量对向量求导&#xff08;梯度&#xff09;得到矩阵&#xff0c;太多的矩阵进行乘法会导致常见的两个问题 梯度消失和梯度爆炸 MLP MLP使用ReLU作为激活函数 梯度爆炸的问题 输入很大的时候梯度接近为0 梯度消失 梯度消失的问题 只能训练比…

一个强大的 VS Code 的AI代码插件:Fitten Code

AI 代码助手有 GitHub Copilot&#xff0c;一直想用&#xff0c;但是要爬梯子&#xff0c;还要收费。 一款国产AI写代码神器 Fitten Code&#xff0c;满足了我对AI写代码的幻想。它在功能上基本和 GitHub Copilot 差不多。 重要是的是&#xff0c;免费&#xff0c;免费&#…

【Web - 框架 - Vue】随笔 - Vue的简单使用 - 快速上手

【Web - 框架 - Vue】随笔 - Vue的简单使用 - 快速上手 Vue模板代码 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>模板</title> </head> <body> <div></div>…

安装Docker及DockerCompose

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

09 Qt扩展LineEdit组件:Input输入框

系列文章目录 01 Qt自定义风格控件的基本原则-CSDN博客 02 从QLabel聊起&#xff1a;自定义控件扩展-图片控件-CSDN博客 03 从QLabel聊起&#xff1a;自定义控件扩展-文本控件-CSDN博客 04 自定义Button组件&#xff1a;令人抓狂的QToolButton文本图标居中问题-CSDN博客 0…

数仓项目6.0(一)

尚硅谷大数据项目【电商数仓6.0】企业数据仓库项目_bilibili 数据流转过程 用户➡️业务服务器➡️数据库存储➡️数仓统计分析➡️数据可视化 数据仓库处理流程&#xff1a;数据源➡️加工数据➡️统计筛选数据➡️分析数据 数据库不是为了数据仓库服务的&#xff0c;需要…

【开源】SpringBoot框架开发数据可视化的智慧河南大屏

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 A4.2 数据模块 B4.3 数据模块 C4.4 数据模块 D4.5 数据模块 E 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数据可视化的智慧河南大屏&#xff0c;包含了GDP、…

MATLAB环境下基于离散小波变换的心电信号伪影去除及PQRST波检测

可穿戴个人健康监护系统被广泛认为是下一代健康监护技术的核心解决方案。监护设备不断地感知、获取、分析和存储大量人体在日常活动中的生理数据&#xff0c;为人体的健康状况提供必要的、准确的、集成的和长期的评估和反馈。在心电监测领域&#xff0c;可穿戴传感器具有以下应…

C及C++每日练习(1)

一.选择&#xff1a; 1.以下for循环的执行次数是&#xff08;&#xff09; for(int x 0, y 0; (y 123) && (x < 4); x); A.是无限循环 B.循环次数不定 C.4次 D.3次 对于循环&#xff0c;其组成部分可以四个部分&#xff1a; for(初始化;循环进行条件;调整) …

JavaScript实现的计时器效果

之前做过电商网站倒计时的效果&#xff0c;今天在倒计时的基础上&#xff0c;把代码修改了一下&#xff0c;改为计时器效果&#xff0c;实现了以下功能&#xff1a; 1.点击“开始”后&#xff0c;按秒计时且“开始”文字变为“停止”&#xff1b; 2.点击“停止”&#xff0c;计…

【Python实战】——Python+Opencv是实现车牌自动识别

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

自动化测试过程中的手机验证码处理!

手机验证码登录很普遍了&#xff0c;那么在自动化测试的时候需要登录&#xff0c;登录不了就意味着很多自动化就没法执行下去了。 到底该怎么处理呢&#xff1f;其实并不难&#xff0c;我们先看下验证码的业务逻辑&#xff0c;在我们“点击获取验证码”按钮的时候&#xff0c;…