《计算机网络—自顶向下方法》 第二章Wireshark实验:DNS协议分析

news2024/9/23 3:31:00

        域名系统 DNS(Domain Name System) 是互联网使用的命名系统,用于把便于大家使用的机器名字转换为 IP 地址。许多应用层软件经常直接使用 DNS,但计算机的用户只是间接而不是直接使用域名系统。 互联网采用层次结构的命名树作为主机的名字,并使用分布式的域名系统 DNS。DNS 是:

  1. 一个有分层的 DNS服务器实现的分布式数据库;
  2. 一个使得主机能够查询分布式数据库的应用层协议。

        采用客户服务器方式,使大多数名字都在本地进行解析。名字到 IP 地址的解析是由若干个域名服务器程序完成的,域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器。当一个应用进程需要把主机名解析为 IP 地址是,该用户进程就调用解析程序,并成为 DNS 的一个客户,把待解析的域名放在 DNS 请求报文中,以 UDP 用户数据报的方式发给本地域名服务器。本地域名服务器查找域名后,把对应的 IP 地址放在回答报文中返回。若本地域名服务器不能回答该请求,则该本地域名服务器就暂时成为 DNS 中的另一个客户,并向其他域名服务器发出查询请求。

为什么是分布式?

        DNS 的一种简单的设计是,在互联网中只使用一个 DNS 服务器,该服务器包含所有的映射,所有客户的查询都发往该服务器。现在来考虑下,为什么 DNS 不使用集中式设计而是使用分布式?原因主要有一下 4 点:

  • 单点故障:如果该 DNS 服务器崩溃,则整个因特网都会因此瘫痪;
  • 通信容量:单个 DNS 服务器不得不处理所有的 DNS 查询(数量级是上亿台主机);
  • 远距离的集中式数据库:单个 DNS 服务器不可能“邻近”所有的查询客户,会导致严重的时延;
  • 维护:单个 DNS 服务器不得不为所有因特网主机保留记录,这使得数据库异常庞大,且需要频繁更新。

        总而言之,单一的 DNS 服务器上运行集中式数据库,完全没有拓展能力。

        DNS 系统是一种将域名和 IP 地址相互映射的以层次结构分布的数据库系统。DNS 系统采用递归查询请求的方式来响应用户的查询,为互联网的运行提供关键性的基础服务。

        DNS 系统的解析过程描述如下:

  1. 主机先向本地域名服务器进行递归查询;
  2. 本地域名服务器采用迭代查询,向一个根域名服务器进行查询;
  3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的 IP 地址;
  4. 本地域名服务器向顶级域名服务器进行查询;
  5. 顶级域名服务器告诉本地域名服务器,下一步查询权威服务器的 IP 地址;
  6. 本地域名服务器向权威服务器进行查询;
  7. 权威服务器告诉本地域名服务器所查询的主机的IP地址;
  8. 本地域名服务器最后把查询结果告诉主机。

        本实验的主要内容是基于 Wireshark 工具去分析 DNS 的解析过程及其协议字段。

1 DNS 协议分析

1.1 nslookup 域名解析

1.1.1 域名结构

        IP 地址是网络中面向应用的计算机主机的标志,而域名则是互联网中面向用户的主机的标志。为了保证域名的唯一性,域名系统采用层次结构。如下图所示:

  • 每一个域名(只讨论英文域名)都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成;
  • 标号序列总长度不能超过 255 个字符,它由点号分割成一个个的标号(label);
  • 每个标号应该在 63 个字符之内,每个标号都可以看成一个层次的域名;
  • 级别最低的域名写在左边,级别最高的域名写在右边,如 www.baidu.com
  • com: 一级域名。表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(非盈利组织) 等;
  • baidu: 二级域名,指公司名;
  • www: 表示该公司的 WEB 服务器对应的主机。

1.1.2 域名服务器

        域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名及其 IP 地址数据库的主机。

        域名服务器由高向低进行层次划分,可分为以下几大类:

  • 根域名服务器:最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助;
  • 顶级域名服务器:负责管理在该顶级域名服务器下注册的二级域名;
  • 权限域名服务器:负责一个区的域名解析工作;
  • 本地域名服务器:当一个主机发出 DNS 查询请求时,这个查询请求首先发给本地域名服务器。

        注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为区。各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射。DNS 服务器的管辖范围不是以“域”为单位,而是以“区”为单位。

        我们需要注意的是:

  • 每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器;
  • 每一级域名服务器都知道下级域名服务器的 IP 地址;
  • 为了容灾,每一级至少设置两个或以上的域名服务器。

1.1.3 域名解析

        域名解析主要是将主机名(例如 www.example.com)转换为计算机友好的 IP 地址(例如 192.168.1.1),域名解析的基本过程:

  • (1) 输入域名后,先查找自己主机对应的域名服务器,域名服务器先查找自己的数据库中的数据;
  • (2) 如果没有, 就向上级域名服务器进行查找, 依次类推;
  • (3) 最多回溯到根域名服务器,肯定能找到这个域名的 IP 地址;
  • (4) 域名服务器自身也会进行一些缓存, 把曾经访问过的域名和对应的 IP 地址缓存起来,可以加速查找过程。

        简单的域名对应的 IP 地址查询,也可以使用 ping 命令来完成。

1.1.4 域名解析与 nslookup

        nslookup 是一种网络管理命令行工具,可用于查询 DNS 域名和 IP 地址。无论是 linux 或者是 window 下都有这个工具,用好它对平常的域名解析情况,或者对域名服务器的维护都有帮助。
语法:

    nslookup [ -Option ... ] [ Host ] [ -NameServer ]

        nslookup 命令以两种方式查询域名服务器:

  • 交互模式:当没有给出操作参数时进入,操作对象和操作方式可以通过相应交互命令来告诉。
  • 命令模式:在一个命令行中将操作对象和操作方式告知命令,nslookup 将执行结果返回。实际使用中,采用这种方式比较多。

        下面列举几种主要用法:

  1. 直接查询 查询一个域名的 A 记录,使用默认的 DNS 服务器,语法为:nslookup domain 例如: nslookup baidu.com

        从中可以看出:
(1) baidu.com 的域名解析所使用的 DNS 服务器地址 172.21.0.10
(2) baidu.com 域名对应的主机有几个IP地址。

  1. 指定域名服务器查询
nslookup domain  dns-server

        将查询请求发送到 DNS 服务器 bitsy.mit.edu,而不是默认的 DNS 服务器。如:

nslookup baidu.com 172.21.0.10
  1. 查询其他记录,语法格式如下:
nslookup -type=type domain 

        通过指定 -type 参数的具体类型,执行其他类型的查询。常用类型说明:

  • MX:邮件服务器记录;
  • NS:名字服务器记录;
  • PTR:反向记录。

        如查询baidu.com对应的名字服务器记录:

nslookup -type=NS baidu.com

结果如图:

        查询 IP 地址172.11.4.107对应的域名(反向查询):

nslookup -type=PTR 172.11.4.107

结果如图:

1.2 查看与设置 DNS 服务器操作

1.2.1 如何查看网卡默认的 DNS 服务器

        在我们使用的 Linux 操作系统里面,DNS 服务器的配置信息在 /etc/resolv.conf 文件里面。查看该文件的命令如下:

cat /etc/resolv.conf

        该文件内容如下图所示:

        可以看出,默认的 DNS 服务器 IP 是:172.21.0.10

1.2.2 如何修改网卡默认的 DNS 服务器

        可以直接修改 resolv. conf文件,方法如下:

vim /etc/resolv.conf        		// 打开resolv.conf 文件

        改为如下内容:

nameserver 114.114.114.114 		# 修改成你的主DNS
nameserver 8.8.8.8    			# 修改成你的备用DNS

        配置完成后,需重启网络服务才生效,重启网络服务的语句为:

service networking restart

1.3 DNS 报文分析

1.3.1 DNS 域名解析过程

        DNS 协议属于应用层,使用客户端-服务器模式运行在通信的端系统之间。在通信的端系统之间通过端到端传输输协议( UDP 协议,通常使用 53 号端口)来传送 DNS 报文。DNS 系统解析过程如下图所示:

        DNS 客户需要访问 WEB 服务器 www.abc.xyz.com,则客户机可以访问本地的 hosts 文件,看能否知道主机名称对应的 IP 地址,如果 hosts 文件不能解析该主机名称,则只能通过向客户机所设定的 DNS 服务器进行查询。查询过程如下:

  • (1) DNS 客户机向本地域名服务器发送查询请求,查找域名 www.abx.xyz.com 的 IP 地址。本地域名服务器查询本地的缓存,如果有这个地址,则将地址返回给 DNS 客户机;
  • (2) 如果本地域名服务器缓存没有这个地址,则发送查询请求到根域名服务器,询问 www.abx.xyz.com 的地址,根域名服务器会将子域 com 的域名服务器的地址返回给本地域名服务器;
  • (3) 本地域名服务器再向 com 域发送查询请求,com 域服务器无法提供地址,但会把下一级的域名服务器 xyz.com 的地址发送给本地域名服务器;
  • (4) 重复(2)、(3)的过程,最后 xyz.com 域名服务器把 abc.xyz.com 域名服务器地址发送给本地域名服务器;
  • (5) 本地域名服务器再向 abc.xyz.com 域名服务器发送地址查询请求 abc.xyz.com,找到了 www.abc.xyz.com 的地址,就将这个地址发送给本地域名服务器;
  • (6) 本地域名服务器把地址保存到缓存,同时返回给 DNS 客户机。

        有两种查询方式,分别是:

1. 递归查询
        主机向本地域名服务器的查询,一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。

2. 迭代查询
        本地域名服务器向根域名服务器的查询,通常是采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。

  1. 递归查询:主机向本地域名服务器的查询一般都是采用递归查询;
  2. 迭代查询:本地域名服务器向根域名服务器的查询通常采用迭代查询。只是通常,也有的采用递归查询。

1.3.2 域名解析协议

        域名解析的实现是依靠 DNS 协议来完成。有两种 DNS 报文——查询报文和响应报文,分别来实现 DNS 的查询请求和响应请求。

        DNS 协议报文格式如下:

1. 头部
        (1) 会话标识(2 字节) DNS 报文的 ID 标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分 DNS 应答报文是哪个请求的响应。
        (2) 标志(2 字节) 各字段定义如下:

  • QR(1 bit) 查询/响应标志,0 为查询,1 为响应
  • opcode(4 bit) 0 表示标准查询,1 表示反向查询,2 表示服务器状态请求
  • AA(1 bit) 表示授权回答
  • TC(1 bit) 表示可截断的
  • RD(1 bit) 表示期望递归
  • RA(1 bit) 表示可用递归
  • rcode(4 bit) 表示返回码,0 表示没有差错,3 表示名字差错,2 表示服务器错误(Server Failure)

        (3) 数量字段(总共 8 字节): 各自表示后面的四个区域的数目。

  • Questions 表示查询问题区域节的数量
  • Answers 表示回答区域的数量
  • Authoritative nameservers 表示授权区域的数量
  • Additional recoreds 表示附加区域的数量

**2. 正文 **

        正文部分由查询区域和资源记录区域组成。
        (1) 查询区域

  • 查询名:长度不固定,且不使用填充字节,一般该字段表示的就是需要查询的域名(如果是反向查询,则为 IP ,反向查询即由 IP 地址反查域名)。其构成如下:
  • 查询类型:规定如下

        注:查询类通常为 1 ,表明是 Internet 数据。

        (2) 资源记录 (RR) 区域(包括回答区域、授权区域和附加区域)

        这三个区域分别是:回答区域,授权区域和附加区域,其格式都是一样的。

  • 域名( 2 字节或不定长):格式和 Queries 区域的查询名字字段是一样的;
  • 查询类型:表明资源纪录的类型,与查询类型表格相同;
  • 查询类:对于 Internet 信息,总是 IN ;
  • 生存时间(TTL):以秒为单位,表示的是资源记录的生命周期;
  • 资源数据:可变长字段,表示按照查询段的要求返回的相关资源记录的数据。

1.4 NS 类型的 DNS 解析报文分析

1.4.1 如何捕获 NS 类型的 DNS 报文

        DNS 中 NS 记录 NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个 DNS 服务器来进行解析。 在注册域名时,总有默认的 DNS 服务器,每个注册的域名都是由一个 DNS 域名服务器来进行解析的,DNS 服务器 NS 记录地址一般以以下的形式出现:ns1.domain.comns2.domain.com 等。 简单的说,NS 记录是指定由哪个 DNS 服务器解析你的域名。

        在执行 nslookup 时,可以通过指定参数 -type=NS 来查询指定域名对应的域名服务器。如下图所示。

1.4.2 解析 DNS 请求报文

        通过 Wireshark 可以抓取执行上述操作报文列表。筛选 DNS 协议的报文,找到查询请求报文,展开如下图所示。

        可以看出,请求查询报文的的 Type 字段为 NS ,即 Authorizative Name Server 。即希望得到权威的名字服务。该请求报文是通过 UDP 协议进行传输的,端口号为 53 。

传输层协议使用 TCP 还是 UDP ?

        DNS 可以使用 UDP/53 ,也可以使用 TCP/53 。当响应报文的长度小于 512B 时,就使用 UDP (因为 UDP 的最大报文长度为 512B );若响应报文的长度超过 512B ,则选用 TCP 。DNS 协议关于 UDP 和 TCP 的选择通常为以下两种情况:
        (1) 若 DNS 客户程序事先知道响应报文的长度超过 512B ,则应当使用 TCP 连接;

        注意:主域名服务器与辅助域名服务器在进行区域传送时,通常数据量都比较大,所以 DNS 规定,区域传送使用 TCP 协议。

        (2) 若解析程序不知道响应报文的长度,它一般使用 UDP 协议发送 DNS 查询报文,若 DNS 响应报文的长度大于 512B ,服务器就截断响应报文,并把 TC(truncated) 置为 1 。在这种情况下,DNS 客户程序通常使用 TCP 重发原来的查询请求,从而它将来能够从 DNS 服务器中收到完整的响应。

1.4.3 解析 DNS 应答报文

        查看随后的响应报文,可以看到有多个响应报文。这些报文就是在进行解析baidu.com域名对应的权威服务器过程中响应的报文。展开这些报文,可以看到第一个响应报文如下图所示。

        该报文应答部分有多个服务器地址,其第一个地址类型为 SOA(start of a zone of an authority),即权威区域的开始。其后的服务器地址类型为 SRV(Server selection),即服务器选择。
随后的多个报文都是对查询报文的响应。

        由于前述响应报文长度大于 512B ,随后再次出现了一个查询请求报文,查看其传输层协议,可以看到换用了 TCP 协议。

        同样有多个应答报文进行响应。查看这些报文的应答类型,有些是 SRV ,有些是 A(Address,内容是具体的 IP 地址)。
        查看最后一个应答报文,如下图所示。

        可以看出,其权威 DNS 服务器的名称为:ns.dns.cluster.local

1.5 反向 DNS 解析

1.5.1 反向解析

        在 nslookup 中,类型参数设为 PTR 表示反向解析。反向解析是用于将一个 IP 地址映射到对应的域名,也可以看成是 A 记录的反向,IP 地址的反向解析。下图演示了反向解析 IP 地址 39.156.69.79 的操作。

        注意:反向解析时IP地址的顺序也是反的

反向解析查询报文

        下图是 Wireshark 抓获的查询报文。

        展开 Query 段,可以看到,此报文的 Type 为 PTR ,即反向解析。反向解析的 name 是 IP 地址再加了 in-addr.arpa 这部分。

反向解析响应报文

        下图是 Wireshark 抓获的反向解析应答报文。

        展开该报文的 Answers 部分,可以看到该段的 Type 是 PTR ,查询的 name 是 IP 地址加in-addr.arpa 部分,而响应的 Domain Name 的值为:79-69-156-39.dynamic.dsl.as9105.com

1.6 指定服务器的DNS报文分析

        打开 Wireshark ,并在过滤器中输入 DNS 。筛选出 DNS 协议报文,并开始捕获报文。然后打开终端,输入命令并执行 nslookup baidu.com 114.114.114.114,在 Wireshark 中停止捕获报文;

        从报文列表可以看出,经历了多次查询与应答,在最后一轮才得到了baidu.com的 A 地址。查询的百度域名依次为:

baidu.com.default.svc.cluster.local
baidu.com.svc.cluster.local
baidu.com.cluster.local
baidu.com

        依次查看其应答报文,可以看出,前几次的应答都是 Authoritative Nameserver ,类型为 SOA ,即域名分区,没有得到真正的 IP 地址;只有最后一次才得到 Answers ,其类型 Type 为 A ,其 IP 地址为 220.181.38.148,39.156.69.79

补充:ipconfig

         ipconfig(对于Windows)和 ifconfig(对于Linux / Unix)是主机中最实用的程序,尤其是用于调试网络问题时。这里我们只讨论ipconfig,尽管Linux / Unix的 ifconfig 与其非常相似。 ipconfig 可用于显示您当前的TCP/IP信息,包括您的地址,DNS服务器地址,适配器类型等。例如,您只需进入命令提示符,输入

ipconfig /all

        所有关于您的主机信息都类似如下面的屏幕截图所显示。

         ipconfig 对于管理主机中存储的DNS信息也非常有用。在第2.5节中,我们了解到主机可以缓存最近获得的DNS记录。要查看这些缓存记录,在 C:\> 提示符后输入以下命令:

ipconfig /displaydns

        每个条目显示剩余的生存时间(TTL)(秒)。要清除缓存,请输入:

ipconfig /flushdns

        清除了所有条目并从hosts文件重新加载条目。


2 实验分析

        现在,我们熟悉nslookupipconfig,我们准备好了一些正经的事情。首先让我们捕获一些由常规上网活动生成的DNS数据包。

  • 使用ipconfig清空主机中的DNS缓存。
  • 打开浏览器并清空浏览器缓存。 (若使用Internet Explorer,转到工具菜单并选择Internet选项;然后在常规选项卡中选择删除文件。)
  • 打开Wireshark,然后在过滤器中输入“ip.addr==your_IP_address”,您可以先使用ipconfig获取你的IP地址。此过滤器将删除既从你主机不发出也不发往你主机的所有数据包。
  • 在Wireshark中启动数据包捕获。
  • 使用浏览器访问网页: https://www.nuaa.edu.cn/
  • 停止数据包捕获。
  1. 运行nslookup 以获取一个亚洲的Web 服务器的IP 地址。该服务器的IP 地址
    是什么?
    答:这里使用的阿里的公众 DNS 223.5.5.5 替代我的 ISP 服务商的 DNS 进行查
    询,这里我查询的是南航(https://www.nuaa.edu.cn/)的IP 地址。可以在图中看到我请求阿里公共DNS 来获取南航的IP 地址,为:218.94.136.180

  2. 找到DNS查询和响应消息。它们是否通过UDP或TCP发送?
    答:是 UDP。

  3. DNS是查询消息的目标端口是什么? DNS响应消息的源端口是什么?
    答:都是 53 端口。

  1. DNS 查询消息发送到哪个 IP 地址?使用 ipconfig 来确定本地 DNS 服务器的 IP 地址。这两个 IP 地址是否相同?
  1. 检查 DNS 查询消息。DNS 查询是什么 “Type” 的?查询消息是否包含任何 “answers”?
    答:Type 为 “A”,表示查询 IP 地址,没有任何 “answers”。

  2. 检查DNS响应消息。提供了多少个"answers"?这些答案具体包含什么?
    答:提供了 2 个 “answers”,是该域名的 2 个 IPV4 地址。

  3. 考虑从您主机发送的后续 TCP SYN 数据包。 SYN 数据包的目的 IP 地址是否与 DNS 响应消息中提供的任何 IP 地址相对应?
    答:是相对应的。

  4. 这个网页包含一些图片。在获取每个图片前,您的主机是否都发出了新的 DNS 查询?
    答:没有,因为本机 DNS 已经被缓存了,因此不需要发起新的 DNS 查询。

  5. DNS查询消息的目标端口是什么? DNS响应消息的源端口是什么?
    答:目标端口和源端口都是 53。

  1. DNS 查询消息的目标 IP 地址是什么?这是你的默认本地 DNS 服务器的 IP 地址吗?
    答:225.3.3.3,是我修改的默认本地 DNS 服务器的 IP 地址。

  1. 检查 DNS 查询消息。DNS 查询是什么 “Type” 的?查询消息是否包含任何 “answers”?
    答:Type 为 “A”,表示查询 IP 地址,没有任何 “answers”。
  1. 检查 DNS 响应消息。提供了多少个 “answers”?这些答案包含什么?
    答:提供了 1 个 “answers”,是该域名的 IPV4 地址。

        现在重复上一个实验,但换成以下命令:

nslookup www.aiit.or.kr bitsy.mit.edu
  1. DNS 查询消息发送到的 IP 地址是什么?这是您的默认本地 DNS 服务器的 IP 地址吗?
    答:18.0.72.3,不是我的默认本地 DNS 服务器的 IP 地址。
  1. 检查DNS查询消息。DNS 查询是什么 “Type” 的?查询消息是否包含任何 “answers”?
    答:Type 为 “A”,表示查询 IP 地址,没有任何 “answers”。
  1. 检查 DNS 响应消息。提供了多少个 “answers”?这些答案包含什么?
    答:提供了 1 个 “answers”,是该域名的 IPV4 地址。

补充:dig命令

        命令行工具 dig 可以跟 DNS 服务器互动,它的查询语法如下(美元符号$是命令行提示符)

$ dig @[DNS 服务器] [域名]

        网上有很多公用的 DNS 服务器,这篇文章选择 Cloudflare 公司提供的 1.1.1.1 进行演示,向 1.1.1.1 查询域名,就执行下面的命令。


参考

  • DNS 原理入门:http://www.ruanyifeng.com/blog/2016/06/dns.html
  • DNS 查询原理详解:http://www.ruanyifeng.com/blog/2022/08/dns-query.html
  • DNS协议分析:https://www.educoder.net/shixuns/4yze3kp5/challenges
  • 《计算机网络-自顶向下方法》笔记:https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES
  • Wireshark实验——DNS域名系统:https://www.cnblogs.com/linfangnan/p/12771157.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch高级训练框架Ignite详细介绍与常用模版

引言 Ignite是Pytorch配套的高级框架,我们可以借其构筑一套标准化的训练流程,规范训练器在每个循环、轮次中的行为。本文将不再赘述Ignite的具体细节或者API,详见官方教程和其他博文。本文将分析Ignite的运行机制、如何将Pytorch训练代码转为…

Kubectl-AI: 一款 OpenAI GPT 自动生成应用 K8s yaml神器

首页: 官网 下载安装 wget https://github.com/sozercan/kubectl-ai/releases/download/v0.0.10/kubectl-ai_linux_amd64.tar.gz tar xvf kubectl-ai_linux_amd64.tar.gz -C /usr/local/bin/kubectl-ai需要OpenAI API密钥或Azure OpenAI服务 API密钥和端点以及有效的Kubernet…

系统移植——linux内核移植——分析内核编译过程

uImage镜像文件 1.进入linux内核源码目录 ubuntuubuntu:~$ cd FSMP1A/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61/ 打开Makefile文件 vi Makefile 搜索include 因为 $(SRCARCH)->arm 所以上述指令为 arch/arm/Makefile 2.进入linux内核源码目录下,arch/arm目录下…

Windows 11 本地部署 Stable Diffusion web UI

Windows 11 本地部署 Stable Diffusion web UI 0. 什么是 Stable Diffusion1. 什么是 Stable Diffusion web UI2. Github 地址3. 安装 CUDA Toolkit 11.84. 安装 cuDNN v8.9.1 for CUDA 11.x5. 配置环境变量6. 安装 Python 3.10.67. 安装 Stable Diffusion web UI8. 启动 Stabl…

吊打面试官的Java项目经验一:物流系统

引言: java面试一般分为两部分,技术面试和项目面试,相信大多数小伙伴们都刷过很多技术性的面试题,连博主本人也刷过很多无聊的面试题,但是对于项目经验的面试,可能很多刚入行小伙伴属于一个空白期&#xff…

【软考|软件设计师】编辑距离算法

目录 编辑距离算法: 步骤: 实例: 题: 完整代码如下: 调试: 代码解析: 具体过程参考: 编辑距离算法: 是一种计算两个自符串之间差异程度的方法,它通过…

现场工程师出马:VMware+LVM卷快速在windows Server上部署Kafka集群

最近遇到的疑难现场问题层出不穷,本次遭遇的挑战是在4台windows Server 服务器上部署Kafka集群。这是一种比较少见的操作,原因是有些依赖的驱动对虚拟化支持不好,只能运行在实体win机上。 原有的上层业务是由B团队开发运维,现在B…

今年的博客数量上两百了

今年的博客数量上两百了 不知不觉在 C S D N CSDN CSDN中写了那么多篇文章。与 C S D N CSDN CSDN相伴的生活中,我过得很充实。

并发编程10:Java对象内存布局和对象头

文章目录 10.1 面试题10.2 Object object new Object()谈谈你对这句话的理解?10.3 对象在堆内存中布局10.3.1 权威定义----周志明老师JVM10.3.2 对象在堆内存中的存储布局 10.4 再说对象头的MarkWord10.5 聊聊Object obj new Object()10.5.1 运行结果展示10.5.2 压…

C++入门(命名空间、缺省参数、函数重载、引用、内联函数)

全文目录 引言C输入与输出命名空间概念使用使用域作用限定符::使用某个成员使用using namespace 引入整个命名空间域使用using引入某个成员 缺省参数概念分类 函数重载定义与调用原理 引用定义需要注意 使用引用作为返回型参数引用作为返回值 引用与指针的区别 内联函数总结 引…

华为OD机试真题 Java 实现【猜字谜】【2023Q2】

一、题目描述 小王设计了一人简单的清字谈游戏,游戏的迷面是一人错误的单词,比如nesw,玩家需要猜出谈底库中正确的单词。猜中的要求如 对于某个谜面和谜底单词,满足下面任一条件都表示猜中: 变换顺序以后一样的&…

np保存数据为txt或者csv格式

目录 1、基础参数 2、参数详解 2.1、fmt 2.2、delimiter 2.3、newline 2.4、header 1、基础参数 numpy.savetxt(fname,arrry,fmt%.18e,delimiter ,newline\n,header,footer,comments# ,encodingNone,) 2、参数详解 fname:要存入的文件、文件名、或生成器。arrry:要存储…

xxl-Job分布式任务调度 入门

1.概述 1.1 什么是任务调度 我们可以先思考一下业务场景的解决方案: 某电商系统需要在每天上午10点,下午3点,晚上8点发放一批优惠券。 某银行系统需要在信用卡到期还款日的前三天进行短信提醒。 某财务系统需要在每天凌晨0:10结算前一天的…

C高级第二天

#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,const char *argv[]) { int n 0, m 0, MAX 0; int arr[n][m]; printf("请输入矩阵行数、列数>>>"); scanf("%d%d", &n…

【动态规划】线性DP

目录 一&#xff1a;思考方式 二&#xff1a;例题 例题1&#xff1a;数字三角形 例题二&#xff1a;最长上升子序列​​​​​​​ 例题三&#xff1a;最长公共子序列 一&#xff1a;思考方式 线性dp就是一条线上的动态规划 二&#xff1a;例题 例题1&#xff1a;数字三…

Python基础(三)

目录 1、Python的输入函数input() 1、input函数介绍 1.1作用&#xff1a; 1.2返回值类型&#xff1a; 1.3值得存储&#xff1a; 2、input函数的基本使用 2、Python中的运算符 2.1算术运算符 2.1.1标准算术运算符 2.1.2取余运算符(%) 2.1.3幂运算符(**) 2.1.4特殊运…

分布式锁的多种实现方式

1、不使用分布式锁 synchronized (this){int stock Integer.parseInt(Objects.requireNonNull(stringRedisTemplate.opsForValue().get("stock")));if (stock > 0) {int realStock stock - 1;// 更新库存stringRedisTemplate.opsForValue().set("stock&qu…

vi编辑器的三种模式及其对应模式下常用指令

vi是Linux系统的第一个全屏幕交互式编辑工具&#xff0c;在嵌入式的 学习中是一个不可或缺的强大的文本编辑工具。 一、三种模式 命令模式 如何进入命令模式&#xff1a;按esc键 复制&#xff1a;yy nyy(n&#xff1a;行数) 删除(剪切): dd ndd 粘贴&#xff1a;p 撤销&…

【Java】java | 将可运行jar打包成exe可执行文件

一、说明 1、javafx桌面程序&#xff0c;但又不想安装jre环境 2、需要将可执行jar打包成exe 3、使用工具exe4j 二、操作步骤 1、下载exe4j https://exe4j.apponic.com/ 2、安装 说明1&#xff1a; 在d盘建个exe4j的文件夹 说明2&#xff1a; 建个output文件jar&#xff0c;存放…

计算机组成原理——计算机系统的组成

一台完整的计算机包括硬件和软件两部分&#xff0c;另外还有一部分固话的软件成为固件(Frimware)&#xff0c;固件兼具软件和硬件的特性&#xff0c;常见的如个人计算机中的BIOS&#xff0c;BIOS&#xff08;Basic Input/Output System&#xff09;是个人计算机上的一个基本输入…