Linux中DNS搭建

文章目录

  • 一、DNS介绍
    • 1.1、DNS是什么
    • 1.2、DNS的工作原理
    • 1.3、DNS的域名结构
  • 二、Bind介绍
    • 2.1、bind概述
    • 2.2、bind主要配置文件
  • 三、DNS安装
  • 四、主要配置文件解析(除/etc/named.conf)
    • 4.1、/etc/named.rfc1912.zones
    • 4.2、/etc/rc.d/init.d/named
    • 4.3、/etc/rndc.conf
    • 4.4、/usr/sbin/named-checkconf
    • 4.5、/usr/sbin/named-checkzone
    • 4.6、/var/named/named.ca
    • 4.7、/var/named/named.localhost


一、DNS介绍

1.1、DNS是什么

域名系统(Domain Name System,简称DNS)是互联网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP数串。

人们可以通过DNS,将易于记忆的域名转换为对应的IP地址,从而访问到相应的网络资源。例如,当人们在浏览器中输入一个网址如“www.example.com”,系统会向DNS服务器发送请求,查询该域名对应的IP地址,然后通过该IP地址访问网站。

1.2、DNS的工作原理

DNS的工作原理基于域名解析,将用户友好的域名转换为机器可读的IP地址,涉及多个级别的DNS服务器,包括本地DNS服务器、根域名服务器、顶级域名服务器和权威域名服务器。以下是具体流程:

  • 浏览器缓存检查
    • 步骤:当用户在浏览器中输入一个域名时,系统会首先检查浏览器缓存,如果找到相应的记录,则直接使用该记录。
    • 目的:提高解析速度,减少网络请求。
  • 操作系统缓存检查
    • 步骤:若浏览器缓存未命中,系统会检查操作系统缓存,如Windows的hosts文件。
    • 目的:操作系统层面的缓存记录,可以快速解析一些常用或最近访问过的域名。
  • 本地DNS服务器查询
    • 步骤:如果本地缓存未命中,请求会被发送到本地DNS服务器。
    • 逻辑:本地DNS服务器先检查自己的缓存记录,未找到的话,向根域名服务器发起查询请求。
  • 根域名服务器查询
    • 步骤:根域名服务器指引本地DNS服务器联系相应的顶级域名服务器(如.com、.org等)。
    • 目的:提供正确的顶级域名服务器信息,进行下一步查询。
  • 顶级域名服务器查询
    • 步骤:本地DNS服务器向指定的顶级域名服务器发送请求,获取管理该域名的权威域名服务器信息。
    • 目的:定位到具体的权威域名服务器,获取最终的解析结果。
  • 权威域名服务器查询
    • 步骤:本地DNS服务器向权威域名服务器查询具体的IP地址,并将结果返回给用户。
    • 缓存机制:本地DNS服务器将解析结果缓存起来供后续使用,同时用户系统也会根据TTL值缓存解析结果。
  • 递归查询和迭代查询
    • 递归查询:通常发生在用户设备与本地DNS服务器之间,本地DNS服务器代替用户完成所有上游查询。
    • 迭代查询:发生在本地DNS服务器与其他各级域名服务器之间,每次查询都需要继续向其他服务器发起请求。

在这里插入图片描述

1.3、DNS的域名结构

DNS的域名结构采用层次树状结构,从根域到主机,这种结构设计有助于管理庞大的互联网域名空间,实现域名的有序分配和解析。

  • 根域
    • 根域:位于域名空间的最顶层,一般用一个“.”表示。这个点代表DNS的根,有了这个点,完全合格域名(FQDN)就是一个绝对路径。
    • 根域名服务器:全球有13个逻辑根域名服务器,它们的名称分别是a.root-servers.net到m.root-servers.net。这些服务器是DNS层级中最重要的,负责管理整个域名空间的解析权。
  • 顶级域
    • 顶级域:位于根域下一层,代表一种类型的组织机构或国家地区。例如,.com、.net、.org通常用于通用商业和组织用途,而.cn、.uk等则表示国家代码顶级域。
    • 顶级域名服务器:管理该顶级域名下的所有二级域名。当收到以某个顶级域结尾的域名解析请求时,会转发给相应的顶级域名服务器。
  • 二级域
    • 二级域:用来标明顶级域内的一个特定组织。例如,在.cn顶级域名下,可以设置二级域名如 .com.cn、.net.cn、.edu.cn等。
    • 权威域名服务器:负责一个区域的域名服务器,也称为权威域名服务器。顶级域名服务器也可以算作是权威域名服务器,只不过由于其特殊性,专门划分为一类。
  • 子域
    • 子域:二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名。
    • 自主管理:子域由所属的组织或用户自主管理,可以在其下继续划分更具体的三级域或四级域。
  • 主机
    • 主机:位于域名空间最下层,代表一台具体的计算机。例如,www、mail都是具体的计算机名字,可用FQDN如www.sina.com.cn、mail.sina.com.cn来表示。
    • FQDN:平时上网输入的网址都是FQDN名,如www.sina.com.cn表示要访问“sina.com.cn”域中一台名为“www”的计算机。

在这里插入图片描述

二、Bind介绍

2.1、bind概述

BIND(Berkeley Internet Name Domain)是全球使用最广泛的DNS服务软件之一,由加州大学伯克利分校开发,并成为事实上的DNS服务标准。BIND安装包包括核心程序、配置文件和相关工具。

BIND作为一个功能强大的开源DNS服务软件,广泛应用于各类网络环境中,不仅提供高效的域名解析服务,还支持动态更新和缓存机制。

  • BIND的作用
    • 域名解析:BIND将复杂的IP地址转换为人类可读的域名,使用户可以通过简单的网址访问网站,而无需记住复杂的IP地址。
    • 区域文件管理:BIND通过管理DNS区域文件来控制DNS记录的存储和更新,这些记录包括A记录、CNAME记录、MX记录等。
    • 缓存和查询响应:BIND具有缓存功能,可以暂时存储查询结果,减少解析时间和网络负载。同时,它可以快速响应客户端的查询请求,提高DNS解析效率。
    • 动态更新支持:BIND支持动态DNS更新,允许客户端在不停机的情况下修改DNS记录,适用于频繁变更IP地址的场景。
  • BIND的工作流程
    • 初始化套接字:服务器端调用socket函数创建套接字,用于后续的网络通信。
    • 绑定地址和端口:通过bind函数将套接字与特定的IP地址和端口号绑定,确保服务器在该地址和端口上监听请求。
    • 监听连接请求:服务器调用listen函数,开始在绑定的地址和端口上监听客户端的连接请求。
    • 接受连接请求:当客户端的连接请求到来时,服务器使用accept函数接受请求并创建新的套接字进行通信。
    • 数据交换:服务器和客户端通过已建立的连接进行双向数据交换,服务器可以使用send函数向客户端发送数据,使用recv函数接收来自客户端的数据
  • 其他服务的功能
    • Unbound:一个开源的DNS解析器,专注于DNS查询的响应速度和安全性。它主要作为转发代理服务器使用,可以有效地处理大量的并发查询请求。
    • PowerDNS:一个高性能的DNS服务器软件,支持多种后端数据库,适合大规模部署。它提供了灵活的配置选项,可以根据不同需求进行优化。
    • dnsmasq:一个轻量级的DNS服务器,适用于局域网环境。它可以提供DNS缓存、DHCP服务和DNS反向解析功能,配置简单,资源占用少。

2.2、bind主要配置文件

  • /etc/named.conf
    • 主配置文件:/etc/named.conf是BIND的主配置文件。它包含了DNS服务器的全局设置,如监听端口、服务作用范围、是否启用递归查询等。此文件还可能包含其他区域文件的位置信息,通过include语句引入其他配置文件。
  • /etc/named.rfc1912.zones
    • 区域定义文件:/etc/named.rfc1912.zones文件用于定义DNS区域。该文件列出了所有正向和反向解析区域的配置信息,每个区域指向一个具体的区域文件。
  • /etc/rc.d/init.d/named
    • 启动脚本:/etc/rc.d/init.d/named是一个启动脚本文件。这个脚本用于控制BIND服务的启动、停止和重启操作。在系统启动过程中,该脚本会自动启动BIND服务。
  • /etc/rndc.conf
    • rndc配置文件:/etc/rndc.conf是用于配置rndc的工具的配置文件。rndc(Remote Name Daemon Control)是一个管理BIND服务的工具,可用于执行服务器的监控和控制任务。这个文件包含了rndc的配置选项,如密钥、控制通道等。
  • /usr/sbin/named-checkconf
    • 语法检查工具:/usr/sbin/named-checkconf是一个用于检查/etc/named.conf文件语法正确性的工具。在修改配置文件后,运行此命令可以确保文件没有语法错误,从而避免因配置错误导致的服务启动失败。
  • /usr/sbin/named-checkzone
    • 区域文件检查工具:/usr/sbin/named-checkzone用于检查DNS区域文件(如example.com.zone)的语法和一致性。这个工具可以帮助管理员在更新区域文件后,发现并修正文件中的错误。
  • /var/named/named.ca
    • 根提示文件:/var/named/named.ca是BIND的根提示文件。这个文件包含了互联网根DNS服务器的信息,用于辅助本地DNS服务器进行递归查询。当本地DNS服务器无法直接解析某个域名时,会查询根服务器获取进一步的解析信息。
  • /var/named/named.localhost
    • 本地主机数据库:/var/named/named.localhost用于提供本地主机的DNS解析信息。这个文件通常包含了本地网络中的回环地址(127.0.0.1)和对应的域名(如localhost)。这确保了本地主机可以通过标准域名访问自己。

这些配置文件共同协作,为BIND提供了完整的配置信息,使其能够高效地完成DNS解析任务;管理员需要熟悉这些文件的作用和位置,以便能够准确配置和维护DNS服务器。

三、DNS安装

安装BIND 软件包

[root@root ~]# dnf install bind bind-utils

编辑 BIND 的配置文件 /etc/named.conf,根据需求进行配置

[root@root ~]# vi /etc/named.conf 
[root@root ~]# cat /etc/named.conf 
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//# 定义BIND服务器的全局选项。
options {#指定DNS服务器监听的IP地址和端口,这里是本地回环地址(127.0.0.1)和端口53。listen-on port 53 { 127.0.0.1; };#指定DNS服务器监听的IPv6地址和端口,这里是本地回环地址(::1)和端口53。listen-on-v6 port 53 { ::1; };#设置工作目录为"/var/named"。directory       "/var/named";#设置缓存文件的位置为"/var/named/data/cache_dump.db"。dump-file       "/var/named/data/cache_dump.db";#设置统计文件的位置为"/var/named/data/named_stats.txt"。statistics-file "/var/named/data/named_stats.txt";#设置内存统计文件的位置为"/var/named/data/named_mem_stats.txt"。memstatistics-file "/var/named/data/named_mem_stats.txt";#设置安全根文件的位置为"/var/named/data/named.secroots"。secroots-file   "/var/named/data/named.secroots";#设置递归文件的位置为"/var/named/data/named.recursing"。recursing-file  "/var/named/data/named.recursing";#允许本地主机进行查询。allow-query     { localhost; };/* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.- If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so willcause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatlyreduce such attack surface */#开启递归查询。recursion yes;#开启DNSSEC验证。dnssec-validation yes;#设置动态密钥目录的位置为"/var/named/dynamic"。managed-keys-directory "/var/named/dynamic";#设置GeoIP数据库目录的位置为"/usr/share/GeoIP"。geoip-directory "/usr/share/GeoIP";#设置进程ID文件的位置为"/run/named/named.pid"。pid-file "/run/named/named.pid";#设置会话密钥文件的位置为"/run/named/session.key"。session-keyfile "/run/named/session.key";/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */#包含加密策略配置文件。include "/etc/crypto-policies/back-ends/bind.config";
};logging {#定义默认的调试日志通道,将日志输出到"data/named.run"文件中,并设置日志级别为动态。channel default_debug {file "data/named.run";severity dynamic;};
};#定义根区域("."),类型为hint,文件位置为"named.ca"。
zone "." IN {type hint;file "named.ca";
};#包含RFC 1912定义的区域文件。
include "/etc/named.rfc1912.zones";#包含根密钥文件。
include "/etc/named.root.key";

启动 BIND 服务

[root@root ~]# systemctl start named

设置 BIND 服务在系统启动时自动启动

[root@root ~]# systemctl enable named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.

四、主要配置文件解析(除/etc/named.conf)

4.1、/etc/named.rfc1912.zones

[root@root ~]# cat /etc/named.rfc1912.zones
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and https://tools.ietf.org/html/rfc6303
// (c)2007 R W Franks
// 
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// Note: empty-zones-enable yes; option is default.
// If private ranges should be forwarded, add 
// disable-empty-zone "."; into options
// zone "localhost.localdomain" IN { // 定义一个名为localhost.localdomain的区域,类型为master,文件名为named.localhost,不允许更新type master;file "named.localhost";allow-update { none; };
};zone "localhost" IN { // 定义一个名为localhost的区域,类型为master,文件名为named.localhost,不允许更新type master;file "named.localhost";allow-update { none; };
};zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { // 定义一个名为1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa的区域,类型为master,文件名为named.loopback,不允许更新type master;file "named.loopback";allow-update { none; };
};zone "1.0.0.127.in-addr.arpa" IN { // 定义一个名为1.0.0.127.in-addr.arpa的区域,类型为master,文件名为named.loopback,不允许更新type master;file "named.loopback";allow-update { none; };
};zone "0.in-addr.arpa" IN { // 定义一个名为0.in-addr.arpa的区域,类型为master,文件名为named.empty,不允许更新type master;file "named.empty";allow-update { none; };
};

4.2、/etc/rc.d/init.d/named

(注:不同的linux版本在不同的路径下,名字也不一定相同)

[root@root]# cat /usr/lib/systemd/system/named.service 
[Unit]  # 定义一个单元,用于描述服务的配置信息
Description=Berkeley Internet Name Domain (DNS)  # 描述服务的功能
Wants=nss-lookup.target  # 表示该服务依赖于nss-lookup.target服务
Wants=named-setup-rndc.service  # 表示该服务依赖于named-setup-rndc.service服务
Before=nss-lookup.target  # 表示该服务在nss-lookup.target服务之前启动
After=named-setup-rndc.service  # 表示该服务在named-setup-rndc.service服务之后启动
After=network.target  # 表示该服务在network.target服务之后启动[Service]  # 定义一个服务,用于描述服务的运行方式
Type=forking  # 表示该服务为forking类型,即主进程会创建子进程
Environment=NAMEDCONF=/etc/named.conf  # 设置环境变量NAMEDCONF的值为/etc/named.conf
EnvironmentFile=-/etc/sysconfig/named  # 从/etc/sysconfig/named文件中读取环境变量
Environment=KRB5_KTNAME=/etc/named.keytab  # 设置环境变量KRB5_KTNAME的值为/etc/named.keytab
PIDFile=/run/named/named.pid  # 设置PID文件的路径为/run/named/named.pidExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi'  # 在服务启动前执行的命令,用于检查配置文件
ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS  # 启动服务的命令,使用指定的配置文件和选项
ExecReload=/bin/sh -c 'if /usr/sbin/rndc null > /dev/null 2>&1; then /usr/sbin/rndc reload; else /bin/kill -HUP $MAINPID; fi'  # 重新加载服务的命令ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'  # 停止服务的命令PrivateTmp=true  # 表示该服务使用私有的临时目录[Install]  # 定义安装信息
WantedBy=multi-user.target  # 表示该服务希望被multi-user.target目标所引用

4.3、/etc/rndc.conf

在CentOS Stream中,rndc.conf文件默认不存在。但可以使用named.conf文件来配置rndc(Remote Name Daemon Controller)。

rndc是用于控制BIND名称服务器的工具,它通过TCP连接与名称服务器进行通信。要使用rndc,您需要确保在named.conf文件中启用了controls语句,并指定了一个或多个允许的IP地址和密钥。

[root@root /]# find /etc -name 'rndc.conf'
[root@root /]# find / -name 'rndc.conf'
[root@root /]# 

4.4、/usr/sbin/named-checkconf

/usr/sbin/named-checkconf 是一个二进制文件,因为它是一个执行具体任务的程序。这个文件是 BIND 软件包的一部分,专门用于解析并检查 DNS 配置文件及其所包含的所有文件的语法错误。

4.5、/usr/sbin/named-checkzone

/usr/sbin/named-checkzone 是一个二进制文件,因为它是一个执行具体任务的程序。这个文件是 BIND 软件包的一部分,专门用于解析并检查 DNS 区域文件的语法错误。与 named-checkconf 工具类似,named-checkzone 也是通过命令行接口接受特定参数来执行其功能的。

4.6、/var/named/named.ca

[root@root sbin]# cat /var/named/named.ca
; <<>> DiG 9.18.20 <<>> -4 +tcp +norec +nostats @d.root-servers.net
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47286
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1450
;; QUESTION SECTION:
;.                              IN      NS;; ANSWER SECTION:
.                       518400  IN      NS     a.root-servers.net. ; 定义根服务器a的域名和TTL
.                       518400  IN      NS     b.root-servers.net. ; 定义根服务器b的域名和TTL
.                       518400  IN      NS     c.root-servers.net. ; 定义根服务器c的域名和TTL
.                       518400  IN      NS     d.root-servers.net. ; 定义根服务器d的域名和TTL
.                       518400  IN      NS     e.root-servers.net. ; 定义根服务器e的域名和TTL
.                       518400  IN      NS     f.root-servers.net. ; 定义根服务器f的域名和TTL
.                       518400  IN      NS     g.root-servers.net. ; 定义根服务器g的域名和TTL
.                       518400  IN      NS     h.root-servers.net. ; 定义根服务器h的域名和TTL
.                       518400  IN      NS     i.root-servers.net. ; 定义根服务器i的域名和TTL
.                       518400  IN      NS     j.root-servers.net. ; 定义根服务器j的域名和TTL
.                       518400  IN      NS     k.root-servers.net. ; 定义根服务器k的域名和TTL
.                       518400  IN      NS     l.root-servers.net. ; 定义根服务器l的域名和TTL
.                       518400  IN      NS     m.root-servers.net. ; 定义根服务器m的域名和TTL;; ADDITIONAL SECTION:
a.root-servers.net.     518400  IN      A      198.41.0.4        ; 定义根服务器a的IPv4地址和TTL
b.root-servers.net.     518400  IN      A      170.247.170.2      ; 定义根服务器b的IPv4地址和TTL
c.root-servers.net.     518400  IN      A      192.33.4.12        ; 定义根服务器c的IPv4地址和TTL
d.root-servers.net.     518400  IN      A      199.7.91.13        ; 定义根服务器d的IPv4地址和TTL
e.root-servers.net.     518400  IN      A      192.203.230.10     ; 定义根服务器e的IPv4地址和TTL
f.root-servers.net.     518400  IN      A      192.5.5.241        ; 定义根服务器f的IPv4地址和TTL
g.root-servers.net.     518400  IN      A      192.112.36.4       ; 定义根服务器g的IPv4地址和TTL
h.root-servers.net.     518400  IN      A      198.97.190.53      ; 定义根服务器h的IPv4地址和TTL
i.root-servers.net.     518400  IN      A      192.36.148.17      ; 定义根服务器i的IPv4地址和TTL
j.root-servers.net.     518400  IN      A      192.58.128.30      ; 定义根服务器j的IPv4地址和TTL
k.root-servers.net.     518400  IN      A      193.0.14.129       ; 定义根服务器k的IPv4地址和TTL
l.root-servers.net.     518400  IN      A      199.7.83.42        ; 定义根服务器l的IPv4地址和TTL
m.root-servers.net.     518400  IN      A      202.12.27.33       ; 定义根服务器m的IPv4地址和TTL
a.root-servers.net.     518400  IN      AAAA   2001:503:ba3e::2:30 ; 定义根服务器a的IPv6地址和TTL
b.root-servers.net.     518400  IN      AAAA   2801:1b8:10::b     ; 定义根服务器b的IPv6地址和TTL
c.root-servers.net.     518400  IN      AAAA   2001:500:2::c     ; 定义根服务器c的IPv6地址和TTL
d.root-servers.net.     518400  IN      AAAA   2001:500:2d::d     ; 定义根服务器d的IPv6地址和TTL
e.root-servers.net.     518400  IN      AAAA   2001:500:a8::e     ; 定义根服务器e的IPv6地址和TTL
f.root-servers.net.     518400  IN      AAAA   2001:500:2f::f     ; 定义根服务器f的IPv6地址和TTL
g.root-servers.net.     518400  IN      AAAA   2001:500:12::d0d   ; 定义根服务器g的IPv6地址和TTL
h.root-servers.net.     518400  IN      AAAA   2001:7fe::53       ; 定义根服务器h的IPv6地址和TTL
i.root-servers.net.     518400  IN      AAAA   2001:500:1::53     ; 定义根服务器i的IPv6地址和TTL
j.root-servers.net.     518400  IN      AAAA   2001:503:c27::2:30 ; 定义根服务器j的IPv6地址和TTL
k.root-servers.net.     518400  IN      AAAA   2001:7fd::1        ; 定义根服务器k的IPv6地址和TTL
l.root-servers.net.     518400  IN      AAAA   2001:500:9f::42    ; 定义根服务器l的IPv6地址和TTL
m.root-servers.net.     518400  IN      AAAA   2001:dc3::35       ; 定义根服务器m的IPv6地址和TTL

4.7、/var/named/named.localhost

[root@root /]# cat /var/named/named.localhost
$TTL 1D ; 设置默认生存时间(TTL)为1天
@       IN SOA  @ rname.invalid. ( ; 定义主域名服务器(SOA)记录,将"@"作为域名,rname.invalid.作为负责该域的管理员邮箱0      ; serial ; 序列号,用于标识DNS记录的版本1D     ; refresh ; 刷新时间,指定多久后从备份服务器更新主服务器的信息1H     ; retry ; 重试时间,指定在失败后多久重新尝试获取信息1W     ; expire ; 过期时间,指定何时该记录失效3H )   ; minimum ; 缓存时间,指定其他服务器应缓存此记录的最短时间NS      @ ; 定义域名服务器(NS)记录,将"@"作为域名A       127.0.0.1 ; 定义地址(A)记录,将IPv4地址127.0.0.1映射到域名"@"AAAA    ::1 ; 定义地址(AAAA)记录,将IPv6地址::1映射到域名"@"

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

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

相关文章

C++学习/复习15--栈与队列概述及练习/deque/适配器的概念

1.1stack概念 1.2stack函数 1.3最小栈 1.4栈的压入弹出 1.5逆波兰表达式 1.6栈实现队列 1.7层序遍历 1.8stack模拟实现 2.1queue概念 2.2queue函数 2.3queue模拟实现 3.1deque适配器 3.2deque功能 3.3deque原理 3.4deque特点与适配器

RNN的变种们:GRULSTM双向RNN

上篇笔记记录到RNN的一个缺点&#xff1a;训练时会出现梯度消失&#xff0c;解决的办法是找到一个更优的计算单元。这里也有GRU和LSTM。 GRU&#xff08;Gated Recurrent Unit&#xff09;门控训练网络 什么是门控机制&#xff1f;就是对当前的输入进行一个筛选。门打开&…

数据安全未来之路,天空卫士荣誉领榜《中国数据安全50强(2024)》

《中国数据安全50强&#xff08;2024&#xff09;》 数世咨询首份《中国数据安全50强&#xff08;2024&#xff09;》报告发布。天空卫士凭借其卓越的技术创新、市场领导力、业务收入能力和企业发展能力&#xff0c;在众多竞争者中脱颖而出&#xff0c;荣登50强榜单&#xff0…

17. 一个I/O项目:构建命令行程序(下)

目录 五、采用测试驱动开发完善库的功能5.1 编写失败测试用例5.2 编写成功测试用例5.3 在run函数中打印搜索到的行 六、添加大小写不敏感功能七、将错误信息输出到标准错误八、附录完整代码 五、采用测试驱动开发完善库的功能 5.1 编写失败测试用例 在lib.rs中写一个简单的se…

【算法训练记录——Day31】

Day31——贪心算法Ⅰ 1. 理论1.1 什么是贪心1.2 什么时候用贪心1.3 贪心算法一般步骤 2.leetcode455——分发饼干3.leetcode376——摆动序列 目标&#xff1a; 理论leetcode455——分发饼干leetcode376——摆动序列leetcode53 —— 最大字序和 1. 理论 算法随想录——贪心 1…

c语言---循环 、判断基础知识详解

if语句 else离最近的if语句结合。 if语句题目 //1. 判断一个数是否为奇数 //2. 输出1 - 100之间的奇数 #include <stdio.h> int main() {int n 0;scanf("%d", &n);if (n % 2){printf("奇数\n");}else{printf("不是奇数\n"…

[C#]使用深度学习算法opencvsharp部署RecRecNet广角图像畸变矫正校正摄像广角镜头畸变图像

【论文地址】 https://arxiv.org/abs/2301.01661 【训练源码】 https://github.com/KangLiao929/RecRecNet 【参考源码】 https://github.com/hpc203/recrecnet-opencv-dnn 【算法介绍】 广角镜头在VR技术中显示出诱人的应用&#xff0c;但它会在捕获的图像中引入严重的径…

镜头跟踪的两种方法

方法一 (1) 原理&#xff1a;使球与摄像机保持固定的角度和距离 (2) 给Main Camera添加CamraCtrller.cs组件 public Transform Player;//小球的Transformprivate Vector3 offset;//小球与摄像机位置的偏移&#xff08;在三轴上的距离&#xff09;void Start(){offset Playe…

深度神经网络——什么是降维?

引言 什么是降维&#xff1f; 降维是用于降低数据集维度的过程&#xff0c;采用许多特征并将它们表示为更少的特征。 例如&#xff0c;降维可用于将二十个特征的数据集减少到仅有几个特征。 降维通常用于无监督学习任务 降维是一个用于降低数据集维度的过程&#xff0c;采用许…

c语言指针经典笔试题

指针的笔试题目 //深度讨论数组名 int main1() {int a[] { 1,2,3,4 };printf("%d\n", sizeof(a)); //sizeof内部出现数组名代表是整个数组的大小 //16printf("%d\n", sizeof(a 0)); //首元素地址0还是首元素地址 4/8printf("%d\n", sizeof(*…

TestProject Python SDK入门

2024软件测试面试刷题&#xff0c;这个小程序&#xff08;永久刷题&#xff09;&#xff0c;靠它快速找到工作了&#xff01;&#xff08;刷题APP的天花板&#xff09;-CSDN博客跳槽涨薪的朋友们有福了&#xff0c;今天给大家推荐一个软件测试面试的刷题小程序。​编辑https://…

阻力支撑相对强度(RSRS)选股系列报告之三

https://download.csdn.net/download/SuiZuoZhuLiu/89447699?spm1001.2014.3001.5503https://download.csdn.net/download/SuiZuoZhuLiu/89447699?spm1001.2014.3001.5503

《维汉翻译通》App一款免费的维吾尔语翻译工具,也是新疆人学习中文的利器!维吾尔文OCR识别提取文字神器,功能丰富、界面简洁无广告、操作简单!

免费翻译&#xff0c;无界限沟通 《维汉翻译通》App提供免费的短文本翻译服务&#xff0c;无论是日常对话还是专业术语&#xff0c;都能迅速给出准确的翻译结果。维吾尔语免费翻译工具的加入&#xff0c;更是让这款App成为学习维吾尔语的必备应用。 智能OCR&#xff0c;文字识…

#QT(QCharts绘制曲线)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;绘制曲线图表 3.记录&#xff1a; 4.代码 pro QT core gui #加入以下代码引入charts QT charts greaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses depre…

npm发布自己的插件包:新手教程

npm&#xff08;Node Package Manager&#xff09;是Node.js的包管理工具&#xff0c;广泛用于JavaScript项目中。本文将为你介绍如何从零开始发布一个npm插件包。 前提条件 在开始之前&#xff0c;你需要确保以下几点&#xff1a; 安装Node.js和npm&#xff1a;你可以在No…

消息中间件比较:Redis,Kafka和RabbitMQ

对微服务使用异步通信时&#xff0c;通常使用消息代理。代理确保不同微服务之间的通信可靠且稳定&#xff0c;消息在系统内得到管理和监控&#xff0c;并且消息不会丢失。您可以从几个消息代理中进行选择&#xff0c;它们的规模和数据功能各不相同。这篇博文将比较三种最受欢迎…

中医药人工智能大模型正式启动

6月15日&#xff0c;在横琴粤澳深度合作区举行的中医药广东省实验室&#xff08;以下简称横琴实验室&#xff09;第一届学术委员会第一次会议暨首届横琴中医药科技创新大会上&#xff0c;中医药横琴大模型、中药新药智能自动化融合创新平台同时启动。这也是该实验室揭牌半年来取…

迷你手持小风扇十大名牌排名有哪些?公认迷你小风扇排行榜揭开!

随着夏季高温的来临&#xff0c;迷你小风扇成为了大家追求清凉和舒适的必备工具。其小巧便携的设计、强劲的风力和长续航时间&#xff0c;使得迷你小风扇迅速在市场上走红。然而&#xff0c;面对琳琅满目的品牌和各种型号&#xff0c;如何选择一款既高效又耐用的迷你小风扇成为…

UE5 C++ 跑酷游戏练习 Part1

一.修改第三人称模板的 Charactor 1.随鼠标将四处看的功能的输入注释掉。 void ARunGANCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) {// Set up action bindingsif (UEnhancedInputComponent* EnhancedInputComponent CastChecked&…

python+unity手势控制地球大小

效果图如下 具体操作如下 1 在unity窗口添加一个球体 2 给球体添加材质,材质图片使用地球图片 地球图片如下 unity材质设置截图如下 3 编写地球控制脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class test : MonoBehavio…