DNS(一)

介绍

名字解析服务:当主机IP变化时,只要修改名称服务即可,用户仍可以通过原有的名称进行访问而不受影响。

本地名称解析配置文件:hosts

LInux中是 /etc/hosts Windows中是 C:\Windows\System32\drivers\etc\hosts

DNS:Domain Name System 域名系统,应用层协议,是互联网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。基于C/S架构,服务器端口号53/udp,53/tcp

BIND:Bekerley Internet Name Domain,由ISC提供的DNS软件实现

域名由因特网域名与地址管理机构(ICANN,Internet Corporation for Assigned Names and Numbers)管理,这是为承担域名系统管理、IP地址分配、协议参数配置,以及主服务器系统管理等职能而设立的非盈利机构。

FQDN:完全限定域名。主机名+域名构成,最左边是主机名,其余是域名

DNS域名结构

顶级域名分类

|--------|------------------------------------------------------------------------------|
| 国家顶级域名 | .cn中国 .uk英国 .jp日本 .us美国 等 |
| 类别顶级域名 | .com、.top(企业)、.edu(教育机构)、.gov(政府机构)、.mil(军事部门)、.net(互联网及信息中心)、.org(非盈利性组织) 等 |

认识网址结构

域名可划分各个子域,子域可继续划分子域。

aaa.bbb.ccc.com.

其中 aaa 是四级域名,bbb 是三级域名,ccc 是二级域名,com 是顶级域名,. 是根域;

DNS查询类型

递归查询 迭代查询

名称服务器

Name Server,域内负责解析本域内的名称的DNS服务器

IPV4的根域名服务器:全球共13个负责解析根域的DNS服务器,美国10个,荷兰1个,瑞典1个,日本1个。

IPV6的根域名服务器:全球共25个,中国1主3从,美国1主2从

解析类型

正向解析:FQDN > IP

反向解析:IP > FQDN

正反向解析是两个不同的名称空间,是两颗不同的解析树

DNS查询过程

以访问 www.163.com 为例。这是我见过对DNS最通俗易懂的解释了

  1. 首先查找电脑上的 DNS 缓存列表,如果有记录,那么直接返回对应 IP 地址,否则进行下一步;

  2. 查找电脑上的 HOST 文件的映射关系,如果有记录,那么返回对应 IP 地址,否则进行下一步;

  3. 查找互联网线路供应商的本地 DNS 服务器(即中国电信、中国移动或中国联通),本地 DNS 服务器先查找自己的缓存记录,如果有记录,那么返回对应 IP 地址,否则本地 DNS 服务器向根域名服务器发送请求;

  4. 根域名服务器收到请求后,查看是 .com 顶级域名,于是返回 .com 顶级域名服务器的 IP 地址给到本地 DNS 服务器;

  5. 本地 DNS 服务器收到回复后,向 .com 顶级域名服务器发起请求;

  6. .com 顶级域名服务器收到请求后,查看是 .163.com 次级域名,于是返回 .163.com 次级域名服务器的 IP 地址给 DNS 服务器;

  7. 本地 DNS 服务器收到回复后,向 .163.com 次级域名服务器发起请求;

  8. .163.com 次级域名服务器收到请求后,查看是自己管理的域名,于是查看域名和 IP 地址映射表,把 www.163.com 的 IP 地址返回给本地 DNS 服务器;

  9. 本地 DNS 服务器收到回复后,向电脑回复域名对应 IP 地址,并把记录写入本地 DNS 服务器的缓存里;

  10. 电脑收到回复后,使用 IP 地址访问网站,并把记录写入电脑 DNS 缓存中。

DNS软件bind

DNS服务器软件:bind、powerdns,unbound

bind相关程序包

bind:服务器端

bind-libs:相关库

bind-utils:客户端

bind-chroot:安全包,将dns相关文件放至 /var/named/chroot/

相关文件

|---------------------------------------|-----------------------------------------------------------|
| /etc/named.conf | BIND的主配置文件,包含了整个DNS服务器的配置信息。它定义了域名空间、反向解析、区域设置、转发规则、负载均衡等 |
| /usr/sbin/named | BIND的主程序文件 |
| /var/named/named.ca | 包含根DNS服务器的信息 |
| /usr/lib/systemd/system/named.service | BIND的Unit文件 |
| /etc/rndc.conf | 可控制BIND开关、重载、刷新缓存,增删zone等操作。端口 953/tcp |
| /etc/named.rfc1912.zones | 配置DNS区域 |
| /var/named/ZONE_NAME.ZONE | 解析库文件 |

主配置文件

  • 全局配置:options {};
  • 日志子系统配置:logging {};
  • 区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
    zone "ZONE_NAME" IN {};

注意:

  • 任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
  • 缓存名称服务器的配置:监听外部地址即可
  • dnssec: 建议关闭dnssec,设为no

主配置文件的语法检查:named-checkconf

配置生效:rndc reload

实现主DNS服务器

DNS服务器类型

主DNS服务器、从DNS服务器、缓存DNS服务器(转发器)

主DNS服务器

管理维护所负责解析的域内解析库的服务器

从DNS服务器

从主服务器或从服务器通过区域传输解析库副本

  • 序列号:解析库版本号,主服务器解析库变化时,其序列递增
  • 刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
  • 重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
  • 过期时长:从服务器联系不到主服务器时,多久后停止服务
  • 通知机制:主服务器解析库发生变化时,会主动通知从服务器

区域传输

完全传输:传送整个解析库

增量传输:传递解析库变化的部分

解析形式

正向解析:FQDN >>> IP

反向解析:IP >>> FQDN

负责本地域名的正向和反向解析库

正向区域 反向区域

解析答案

肯定答案:存在对应的查询结果

否定答案:请求的条目不存在等原因导致无法返回结果

权威答案:直接由存有此查询结果的DNS服务器(权威服务器)返回的答案

非权威答案:由其它非权威服务器返回的查询答案

资源记录格式

name [TTL] IN rr_type value

注意:

  1. TTL可从全局继承
  2. 使用 "@" 符号可用于引用当前区域的名字
  3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
  4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

各种资源记录

区域解析库:由众多RR组成

资源记录:Resource Record,即RR

记录类型:如下

  • SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录

    magedu.org. 86400 IN SOA ns.magedu.org. nsadmin.magedu.org. (
    2015042201
    2H
    10M
    1W
    1D
    )

    magedu.org. 域名
    86400 SOA记录生存时间,当前为24小时(86400秒)
    IN 固定写法
    SOA 记录类型,起始记录
    ns.magedu.org. 负责此域名的DNS服务器的域名
    nsadmin.magedu.org. 负责此域名的DNS服务器的管理员的电子邮箱地址,由于@具有特殊含义,所以是点.
    2015042201 SOA记录的序列号,每次SOA记录变更时,此值就会增加
    2H 刷新时间,主服务器发送DNS更新到所有从服务器的时间间隔;不加单位默认是秒
    10M 重试时间,主服务器在重试间隔时间内没有收到从服务器的确认,它将再次发送更新
    1W 过期时间,从服务器多久未收到主服务器的更新消息后,它才开始认为自己的信息可能已经过时
    1D 否定答案的TTL值,当一个查询请求得不到回答时,这个值定义了缓存这个"没有答案"的回答的时间

  • A:internet Address,作用,FQDN --> IP

    www.magedu.org. IN A IP地址
    *.magedu.org. IN A IP地址

  • AAAA:FQDN --> IPv6

  • PTR:PoinTeR,IP --> FQDN

    现有 www.magedu.org. 对应 1.2.3.4 ,PTR格式如下
    4.3.2.1.in-addr.arpa. IN PTR www.magedu.org.

    网络地址和后缀可省略,主机地址仍需倒着写,简写如下
    4 IN PTR www.magedu.org.

  • NS:Name Server,专用于标明当前区域的DNS服务器

    magedu.org. IN NS ns1.magedu.org.
    magedu.org. IN NS ns2.magedu.org.

    对NS记录而言,任何一个NS记录后面的服务器名字,都应该在后续有一个A记录
    一个区域可以有多个NS记录

  • CNAME : Canonical Name,别名记录

    www.magedu.org. IN CNAME websrv.magedu.org.

    比如京东 www.jd.com.gslb.qianxun.com. >>> www.jd.com.s.galileo.jcloud-cdn.com. >>> wwwv6.jcloudimg.com. >>> 115.231.223.3 最后才解析到IP
    [root@wenzi ~]# dig www.jd.com
    ...
    ;; QUESTION SECTION:
    ;www.jd.com. IN A

    ;; ANSWER SECTION:
    www.jd.com. 47 IN CNAME www.jd.com.gslb.qianxun.com.
    www.jd.com.gslb.qianxun.com. 47 IN CNAME www.jd.com.s.galileo.jcloud-cdn.com.
    www.jd.com.s.galileo.jcloud-cdn.com. 47 IN CNAME wwwv6.jcloudimg.com.
    wwwv6.jcloudimg.com. 47 IN A 115.231.223.3
    ...

  • MX:Mail eXchanger,邮件服务

    magedu.org. IN MX 10 mx1.magedu.org.

    一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
    对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

允许动态更新

动态更新:可以通过远程更新区域数据库的资源记录

实现动态更新,需要在指定的zone语句块中配置

zone "域名" IN {

type master;

file "zone文件名";

allow-update { any; };

};

实验一:实现主DNS服务器

企业内部用的域名 magedu.org ,能解析企业内部所有以 magedu.org 为后缀的主机

|-------------------------------|-------------------------|
| 192.168.28.158 | DNS主服务器 |
| 192.168.28.156、192.168.28.141 | web服务器 |
| 192.168.28.143 | 用来访问www.magedu.org,验证结果 |

在DNS主服务器上创建一个解析 magedu.org 域的区域解析库

记录所有以 magedu.org 后缀的域与IP的对应关系;一个区域解析对应一个域名。

bash 复制代码
修改DNS服务器配置文件,设置监听端口范围和允许哪些主机可以使用此dns
[root@wenzi ~]# vim /etc/named.conf
options {
        listen-on port 53 { 127.0.0.1; localhost; };
        ...
        allow-query     { localhost; 192.168.28.0/24; };
        ...

进入解析库目录
[root@wenzi ~]# cd /var/named/
[root@wenzi named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
利用现有文件生成所需文件
[root@wenzi named]# cp -a named.localhost magedu.org.zone
$TTL 1D    ;如果在第一行声明了 $TTL 1D,那么下面的所有记录都将使用这个TTL值,直到遇到新的 $TTL 声明或者区域结束为止。

;SOA记录
@       IN SOA  ns1 admin.magedu.org. (
                                        20231014        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
;列出此区域的DNS服务器
@       IN NS  ns1.magedu.org.
;A记录,把主机名ns1映射到 192.168.28.158
ns1     IN A   192.168.28.158
;定义别名www的规范名称是websrv,同时websrv对应两个ip地址,可起到负载均衡作用
www     CNAME   websrv
websrv  A       192.168.28.156
websrv  A       192.168.28.141
*       A       192.168.28.156    ;泛域名,不是www.magedu.org且是magedu.org结尾都映射至此地址

使配置文件包含新增加的解析库,声明此区域

可看到 /etc/named.conf 配置文件中有 include "/etc/named.rfc1912.zones"; 建议将zone卸载此文件内,和配置文件区分开

bash 复制代码
[root@wenzi named]# vim /etc/named.rfc1912.zones
zone "magedu.org" IN {    格式:zone 域名 IN
        type master;      声明是主区域,其它服务器可来此查询区域数据
        file "magedu.org.zone";    包含区域数据的文件
};
...

校验语法

校验zone语法 named-checkzone 域名 区域文件路径

root@wenzi \~\]# named-checkzone magedu.org /var/named/magedu.org.zone

校验配置文件语法

root@wenzi \~\]# named-checkconf

配置web服务器

bash 复制代码
192.168.28.141上配置
[root@wenzi ~]# yum -y install httpd && systemctl start httpd && echo 'www.magedu.org --- 192.168.28.141' > /var/www/html/index.html

192.168.28.156上配置
[root@wenzi ~]# yum -y install httpd && systemctl start httpd && echo 'www.magedu.org --- 192.168.28.156' > /var/www/html/index.html

修改192.168.28.143网卡配置,使DNS指向DNS主服务器,然后验证

反向解析区域

反向区域:即将IP反向解析为FQDN

区域名称:网络地址反写 加 .in-addr.arpa.

如:192.168.28. >>> 28.168.192.in-addr.arpa. 表示反向解析192.168.28.开头的地址

在 /etc/named.rfc1912.zones 定义区域 192.168.28.zone

root@wenzi \~\]# vim /etc/named.rfc1912.zones zone "28.168.192.in-addr-arpa" IN { type master; file "192.168.28.zone"; };

定义 192.168.28.zone 内容,将192.168.28.199解析为www.magedu.com

root@wenzi named\]# vim 192.168.28.zone $TTL 1D @ IN SOA csPTR admin.magedu.org. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS csPTR.magedu.org. 199 IN PTR www.magedu.com.

测试

实现从服务器

  1. 应该为一台独立的名称服务器
  2. 主服务器的区域解析库文件中必须有一条NS记录指向从服务器
  3. 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
  4. 主服务器得允许从服务器作区域传送
  5. 主从服务器时间应该同步,可通过ntp进行
  6. bind程序的版本应该保持一致;否则,应该从高,主低

实验二:实现从DNS服务器

主DNS服务器

修改配置文件

root@wenzi named\]# vim /etc/named.conf options { listen-on port 53 { 127.0.0.1; localhost; }; ... allow-query { localhost; 192.168.28.0/24; }; allow-transfer { 192.168.28.156; }; 允许传输区域数据的主机,即从DNS;同时也有加密功能

定义区域

root@wenzi named\]# vim /etc/named.rfc1912.zones zone "wenzi.com" IN { type master; file "wenzi.com.zone"; };

定义区域解析库

root@wenzi named\]# vim wenzi.com.zone @ IN SOA wz admin.wenzi.com. ( 1 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS wz.wenzi.com. DNS主服务器 IN NS slave.wenzi.com. DNS从服务器 wz IN A 192.168.28.158 slave IN A 192.168.28.156

从DNS服务器

修改配置文件

root@wenzi named\]# vim /etc/named.conf options { listen-on port 53 { 127.0.0.1; localhost; }; ... allow-query { localhost; 192.168.28.0/24; }; allow-transfer { none; }; 允许传输区域数据的主机,此处为none,没有其它从DNS服务器从这里获取zone数据;同时也有加密功能 ...

定义区域文件

root@wenzi named\]# vim /etc/named.rfc1912.zones zone "wenzi.com" { type slave; 此处为slave,从DNS masters { 192.168.28.158; }; 指定主DNS服务器地址 file "slaves/wenzi.com.slave"; 传输过来的zone文件存放地址,默认在/var/named/slaves/目录下 };

测试主机添加两个dns,一个为主DNS服务器IP,一个为从DNS服务器IP;当启动从服务器DNS后,可见主DNS的 wenzi.com.zone 文件已同步过来了

root@wenzi named\]# ll /var/named/slaves/ total 4 -rw-r--r-- 1 named named 257 Oct 16 03:05 wenzi.com.slave \[root@wenzi \~\]# dig wz.wenzi.com @192.168.28.158 ; \<\<\>\> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.14 \<\<\>\> wz.wenzi.com @192.168.28.158 ;; global options: +cmd ;; Got answer: ;; -\>\>HEADER\<\<- opcode: QUERY, status: NOERROR, id: 26790 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;wz.wenzi.com. IN A ;; ANSWER SECTION: wz.wenzi.com. 86400 IN A 192.168.28.158 ;; AUTHORITY SECTION: wenzi.com. 86400 IN NS wz.wenzi.com. wenzi.com. 86400 IN NS slave.wenzi.com. ;; ADDITIONAL SECTION: slave.wenzi.com. 86400 IN A 192.168.28.156 ;; Query time: 0 msec ;; SERVER: 192.168.28.158#53(192.168.28.158) ;; WHEN: Mon Oct 16 03:20:17 CST 2023 ;; MSG SIZE rcvd: 111 \[root@wenzi \~\]# dig wz.wenzi.com @192.168.28.156 ; \<\<\>\> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.14 \<\<\>\> wz.wenzi.com @192.168.28.156 ;; global options: +cmd ;; Got answer: ;; -\>\>HEADER\<\<- opcode: QUERY, status: NOERROR, id: 58088 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;wz.wenzi.com. IN A ;; ANSWER SECTION: wz.wenzi.com. 86400 IN A 192.168.28.158 ;; AUTHORITY SECTION: wenzi.com. 86400 IN NS wz.wenzi.com. wenzi.com. 86400 IN NS slave.wenzi.com. ;; ADDITIONAL SECTION: slave.wenzi.com. 86400 IN A 192.168.28.156 ;; Query time: 0 msec ;; SERVER: 192.168.28.156#53(192.168.28.156) ;; WHEN: Mon Oct 16 03:21:39 CST 2023 ;; MSG SIZE rcvd: 111

修改主DNS的 wenzi.com.zone 文件,测试变化是否同步

root@wenzi \~\]# vim /var/named/wenzi.com.zone $TTL 1D @ IN SOA master admin.wenzi.com. ( 1 ; serial 变化时序列号一定要变化,不然从DNS检测不到变化 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS master.wenzi.com. IN NS slave.wenzi.com. master IN A 192.168.28.158 slave IN A 192.168.28.156 \[root@wenzi \~\]# dig master.wenzi.com @192.168.28.158 ; \<\<\>\> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.14 \<\<\>\> master.wenzi.com @192.168.28.158 ;; global options: +cmd ;; Got answer: ;; -\>\>HEADER\<\<- opcode: QUERY, status: NOERROR, id: 26790 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;master.wenzi.com. IN A ;; ANSWER SECTION: master.wenzi.com. 86400 IN A 192.168.28.158 ;; AUTHORITY SECTION: wenzi.com. 86400 IN NS master.wenzi.com. wenzi.com. 86400 IN NS slave.wenzi.com. ;; ADDITIONAL SECTION: slave.wenzi.com. 86400 IN A 192.168.28.156 ;; Query time: 0 msec ;; SERVER: 192.168.28.158#53(192.168.28.158) ;; WHEN: Mon Oct 16 03:20:17 CST 2023 ;; MSG SIZE rcvd: 111 \[root@wenzi \~\]# dig master.wenzi.com @192.168.28.156 ; \<\<\>\> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.14 \<\<\>\> master.wenzi.com @192.168.28.156 ;; global options: +cmd ;; Got answer: ;; -\>\>HEADER\<\<- opcode: QUERY, status: NOERROR, id: 58088 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;master.wenzi.com. IN A ;; ANSWER SECTION: master.wenzi.com. 86400 IN A 192.168.28.158 ;; AUTHORITY SECTION: wenzi.com. 86400 IN NS master.wenzi.com. wenzi.com. 86400 IN NS slave.wenzi.com. ;; ADDITIONAL SECTION: slave.wenzi.com. 86400 IN A 192.168.28.156 ;; Query time: 0 msec ;; SERVER: 192.168.28.156#53(192.168.28.156) ;; WHEN: Mon Oct 16 03:21:39 CST 2023 ;; MSG SIZE rcvd: 111

停止主DNS的named服务,rndc stop ,测试从DNS是否起作用

root@wenzi \~\]# dig master.wenzi.com ; \<\<\>\> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.14 \<\<\>\> master.wenzi.com ;; global options: +cmd ;; Got answer: ;; -\>\>HEADER\<\<- opcode: QUERY, status: NOERROR, id: 13481 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;master.wenzi.com. IN A ;; ANSWER SECTION: master.wenzi.com. 86400 IN A 192.168.28.158 ;; AUTHORITY SECTION: wenzi.com. 86400 IN NS master.wenzi.com. wenzi.com. 86400 IN NS slave.wenzi.com. ;; ADDITIONAL SECTION: slave.wenzi.com. 86400 IN A 192.168.28.156 ;; Query time: 0 msec ;; SERVER: 192.168.28.156#53(192.168.28.156) ;; WHEN: Mon Oct 16 03:32:10 CST 2023 ;; MSG SIZE rcvd: 111

访问到的DNS是从DNS,已生效。

DNS转发(缓存)

利用DNS转发,可以将用户的DNS请求,转发至指定的DNS服务器,而非默认的根DNS服务器,并将指定服务器查询的返回结果进行缓存,提高效率。

注意:

  1. 被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
  2. 在全局配置块中,关闭dnssec功能

dnssec-enable no;

dnssec-validation no;

转发方式

对非本机所负责解析区域的请求,全转发给指定的服务器

在全局配置块中实现:

复制代码
Options {
        forward  first|only;
        forwarders { ip;};
};
8.2.2 特定区域转发

仅转发对特定的区域的请求,比全局转发优先级高

复制代码
zone "ZONE_NAME" IN {
    type forward;
    forward  first|only;
    forwarders { ip;};
};

first:先转发至指定DNS服务器,如果无法解析查询请求,则本服务器再去根服务器查询

only: 先转发至指定DNS服务器,如果无法解析查询请求,则本服务器将不再去根服务器查询

相关推荐
me8322 分钟前
【Linux】Jenkins连接云服务器Docker失败,全程排查。(注意)
linux·服务器·jenkins
cui_ruicheng11 分钟前
Linux基础开发工具(一):软件管理与 Vim 编辑器入门
linux·编辑器·vim
jaycyj21 分钟前
Linux 高级命令
linux
冉佳驹22 分钟前
Linux ——— 网络开发核心知识与协议实现详解
linux·http·https·udp·json·tcp·端口号
HalvmånEver23 分钟前
MySQL数据库基础入门总结(从0到1)
linux·数据库·mysql
小猪咪piggy23 分钟前
【接口自动化】(2) pytest 测试框架
运维·自动化·pytest
Lugas Luo28 分钟前
Kernel 5.10 ATA 驱动分析与车载环境诊断
linux·嵌入式硬件
顶点多余31 分钟前
死锁+线程安全
linux·开发语言·c++·系统安全
饺子大魔王的男人33 分钟前
Linux 下 Apache RocketMQ 部署与公网访问实现指南
linux·apache·rocketmq
A.A呐38 分钟前
【Linux第二十五章】高级IO
linux·运维·服务器