第五周
1. 总结rocky 系统的启动流程,grub工作流程
rocky 系统的启动流程
POST加电自检 → MBR引导 → GRUB → 加载内核
- 加载BIOS的硬件信息,获取第一个启动设备
- 读取第一个启动设备MBR的引导加载程序(grub)的启动信息
- 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
- 核心执行init程序,并获取默认的运行信息
- init程序执行/etc/rc.d/rc.sysinit文件,重新挂载根文件系统
- 启动核心的外挂模块
- init执行运行的各个批处理文件(scripts)
- init执行/etc/rc.d/rc.local
- 执行/bin/login程序,等待用户登录
- 登录之后开始以Shell控制主机
grub工作流程
- 阶段 1:MBR 加载:计算机启动时,BIOS 首先执行存储在硬盘 MBR(Master Boot Record)中的 GRUB 第一阶段代码。MBR 位于硬盘的第一个扇区,空间非常小,仅能容纳 GRUB 的最小主程序。这个主程序的主要任务是加载 GRUB 的下一个阶段。
- 阶段 1.5:识别文件系统:由于 Stage 1 不能识别不同的文件系统,而 Stage 2 又比较大,只能放在文件系统中的分区里,所以需要先加载 Stage 1.5。Stage 1.5 的作用是连接 Stage 1 和 Stage 2,让系统能够识别 Stage 2 所在的文件系统分区,进而加载 Stage 2。通常在安装 GRUB 时,Stage 1.5 会被安装到紧跟 MBR 之后的 32KB 空间中。不过对于较新的 GRUB 版本(如 GRUB 0.93),在某些情况下 Stage 1.5 并非必需。
- 阶段 2:核心映像加载:在 Stage 1 或 Stage 1.5 的作用下,GRUB 的核心映像被加载。核心映像包含了 GRUB 的主要功能,如文件系统驱动和启动菜单等,通常位于硬盘的一个特定分区中。
- 阶段 3:模块加载:核心映像加载完成后,GRUB 会加载必要的模块,这些模块为 GRUB 提供了额外的功能,比如支持特定的文件系统、提供命令行界面等,使 GRUB 能够更加灵活地适应不同的系统环境和用户需求。
2. 总结内核设计流派及特点。
单体内核:
- 所有核心功能(如进程调度、内存管理、文件系统)紧密集成,直接调用内核函数,减少上下文切换开销。
- 但模块间耦合度高,一个模块的错误可能导致整个系统崩溃(如驱动崩溃可能引发内核 panic)。
混合内核:
- 核心功能(如进程调度、内存管理)运行在内核空间。
- 部分非核心功能(如文件系统、驱动)可以运行在用户空间(但 Linux 内核通常不这样做)
微内核:
- 模块化设计:允许动态加载/卸载模块(类似微内核的“按需加载”)。
- 用户空间驱动:某些特殊场景(如安全关键系统)可能将驱动运行在用户空间(如
user-mode-linux
或seL4
微内核方案)。
3. 总结systemd服务配置文件
配置文件结果由三个部分组成分别是:
1. [Unit] 区块
Description=服务描述(必填)
After=network.target # 指定在哪些服务之后启动
Requires=postgresql # 强依赖(依赖失败则本服务失败)
Wants=redis.service # 弱依赖(依赖失败不影响本服务)
Conflicts=old-service # 禁止与某服务同时运行
2.[Service] 区块
Type=simple # 服务类型(simple/forking/oneshot/notify)
ExecStart=/usr/bin/command # 启动命令(必填)
ExecReload=/bin/kill -HUP $MAINPID # 重载命令
Restart=on-failure # 重启策略(always/on-success/on-failure)
User=nginx # 运行用户
Group=nginx # 运行组
Environment="KEY=value" # 环境变量
WorkingDirectory=/path # 工作目录
LimitNOFILE=65535 # 资源限制(文件描述符数量)
3.[Install] 区块
WantedBy=multi-user.target # 关联到系统启动目标
Alias=servicename-alias # 服务别名
4. 总结DNS域名三级结构,DNS服务工作原理,涉及递归和迭代查询原理
总结DNS域名三级结构
层级 | 定义 | 常见示例 |
---|---|---|
顶级域名 | 最高层级,表示国家、通用类别或国际组织。 | .com (商业)、.org (非营利)、.cn (中国)、.uk (英国) |
二级域名 | 注册者选择的名称,代表组织或品牌。 | example (在 example.com 中) |
三级域名 | 二级域名的子域,用于细分服务或子网(如网站、邮箱服务器)。 | www 、mail 、api (如 www.example.com ) |
例如:www.baidu.com
www:子域名
baidu:二级域名
com:顶级域名
DNS服务工作原理
- 当客户端主机决定访问 https://www.magedu.com 这个域名时,
- 先查询本地 hosts 文件,是否有对应IP地址,如果有,则直接访问该IP地址,域名解析服务结束;
- 再查询本机缓存,如果本机缓存没有解析记录,则会向其配置的DNS服务器发起解析请求;
- DNS代理解析服务器会先查询其缓存是否有这条解析记录,如果有,则直接返回,如果没有,则继续向上解 析;
- DNS代理解析服务器会向根域名服务器发起解析请求,根域名服务器返回 com 域名的DNS地址;
- DNS代理解析服务器继续向 com 域名服务器发起解析请求,com 域名服务器返回 magedu.com 域名服 务器DNS地址;
- DNS代理解析服务器继续向 magedu.com 域名服务器发起解析请求,magedu.com 域名服务器返回 www.magedu.com 主机的IP;
- DNS代理解析服务器将 www.magedu.com 的IP地址存入本机缓存,再读取缓存,将 IP地址发送给客户 端主机;
- 客户端主机通过IP地址顺利访问 https://www.magedu.com;
涉及递归和迭代查询原理
递归原理:
是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没 有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。
一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本 身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果后转交给客户机。
此查询的源和目标保持不变,为了查询结果只需要发起一次查询。
递归算法:客户端向LocalDNS发起域名查询-->localDNS不知道域名对应的IP-->但它知道谁知道-> 他代为帮客户端去查找-->最后再返回最终结果。
迭代原理:
是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址, 用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。
一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对方不能返回权威 的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起进行查询,直到返回查询的 结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询。
迭代算法:客户端向LocalDNS发起域名查询-->localDNS不知道域名对应的IP-->但它知道谁知道并推荐客 户端应该找谁-->客户端自己去找它
6. 实现私有DNS, 供本地网络主机作DNS递归查询。
安装宾得9
yum install bind bind-utils -y
配置bind9支持递归查询
vim /etc/named.conf
options {
listen-on port 53 { 10.0.0.14; }; # 监听的 IP 地址
listen-on-v6 port 53 { ::1; }; # IPv6 监听地址
directory "/var/named"; # 区域文件存放目录
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
recursion yes; # 启用递归查询
allow-recursion { trusted; }; # 允许信任的网络进行递归查询
allow-query { trusted; }; # 允许信任的网络进行查询
allow-transfer { none; }; # 禁止区域传输
forwarders {
1.1.1.1; # Cloudflare DNS
8.8.8.8; # Google DNS
};
forward only; # 仅转发模式
};
# 定义信任的网络
acl trusted {
10.0.0.12/24; # 本地网络
localhost; # 本地主机
};
# 日志配置(可选)
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
# 根区域配置
zone "." IN {
type hint;
file "named.ca";
};
# 本地回环区域
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
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.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
配置区域文件
sudo mkdir -p /var/named/zones
sudo chown named:named /var/named/zones
vim /etc/named.rfc1912.zones
# 正向区域
zone "example.com" IN {
type master;
file "zones/db.example.com";
allow-update { none; };
};
# 反向区域
zone "0.0.10.in-addr.arpa" IN {
type master;
file "zones/db.10.0.0.12";
allow-update { none; };
};
创建正向区域文件
vim /var/named/zones/db.example.com
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023052101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
; 域名服务器
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
; 主机记录
@ IN A 10.0.0.12 ; 域名指向的 IP
ns1 IN A 10.0.0.2 ; 主 DNS 服务器
www IN A 192.168.1.100 ; Web 服务器
mail IN A 192.168.1.101 ; 邮件服务器
; MX 记录
@ IN MX 10 mail.example.com.
创建反向区域文件
vim /var/named/zones/db.10.0.0
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023052101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
; 域名服务器
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
; PTR 记录(IP 到域名的映射)
10 IN PTR ns1.example.com.
11 IN PTR ns2.example.com.
100 IN PTR www.example.com.
101 IN PTR mail.example.com.
重启服务
# 启动服务并设置开机自启
sudo systemctl enable --now named
# 验证服务状态
sudo systemctl status named
配置服务器使用自身 DNS
vim /etc/resolv.conf
nameserver 10.0.0.12 # 指向本地 DNS 服务器
search example.com # 搜索域(可选)
完成之后在客户端测试即可
7. 总结DNS服务器类型,解析类型,正反解析域,资源记录定义。
DNS服务器类型
定义 | 示例 | |
---|---|---|
递归解析服务器 | 接收客户端查询请求,负责完成所有层级查询并返回最终结果(或错误)。 | 本地ISP的DNS服务器、公共DNS(如8.8.8.8) |
权威解析服务器 | 存储特定域名的权威记录,直接回答对该域名的查询。 | ns1.example.com (管理example.com 的DNS记录) |
根DNS服务器 | 全球13组逻辑服务器,存储顶级域名(TLD)的权威服务器信息。 | a.root-servers.net 、b.root-servers.net |
TLD(顶级域名)服务器 | 管理顶级域名(如.com 、.org )下的权威服务器信息。 |
.com TLD服务器、.cn TLD服务器 |
本地DNS服务器 | 用户设备配置的首选DNS服务器,可能是递归解析服务器或缓存服务器。 | 家庭路由器DNS、企业内网DNS |
解析类型
递归查询:是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没 有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。
迭代查询:是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址, 用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。
正反解析域
类型 | 定义 | 用途 |
---|---|---|
正向解析域 | 将域名(如www.example.com )解析为IP地址(如192.0.2.1 )。 |
网站访问、服务发现 |
反向解析域 | 将IP地址(如192.0.2.1 )解析为域名(如www.example.com )。 |
邮件服务器验证(PTR记录)、安全审计 |
资源记录定义
记录类型 | 缩写 | 定义 | 示例 |
---|---|---|---|
A | A | 将域名映射到IPv4地址。 | www.example.com. 300 IN A 192.0.2.1 |
AAAA | AAAA | 将域名映射到IPv6地址。 | www.example.com. 300 IN AAAA 2001:db8::1 |
CNAME | CNAME | 别名记录,将域名指向另一个域名(不能与其他记录共存)。 | blog.example.com. 300 IN CNAME www.example.com. |
MX | MX | 邮件交换记录,指定接收邮件的邮件服务器优先级。 | example.com. 300 IN MX 10 mail.example.com. |
TXT | TXT | 文本记录,用于验证域名所有权、SPF记录、DKIM等。 | example.com. 300 IN TXT "v=spf1 include:_spf.example.com ~all" |
NS | NS | 指定管理该域名的权威DNS服务器。 | example.com. 300 IN NS ns1.example.com. |
PTR | PTR | 反向解析记录,将IP地址映射到域名。 | 1.2.0.192.in-addr.arpa. 300 IN PTR www.example.com. |
SOA | SOA | 起始授权记录,定义域名的权威信息(序列号、主从服务器、刷新时间等)。 | example.com. 300 IN SOA ns1.example.com. admin.example.com. ( 2023101001 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ; Minimum TTL ) |
SRV | SRV | 定义服务地址和端口(如SIP、LDAP)。 | _sip._tcp.example.com. 300 IN SRV 10 60 5060 sip.example.com. |
8. 总结对称加密和非对称加密,单向哈希算法的概念和加密原理
对称加密
加密和解密使用相同的密钥。常见的对称加密算法包括DES(数据加密标准)、3DES(三重DES)、
AES(高级加密标准)等。这些算法通常用于加密大量数据,因为它们速度快且易于实现。
特性:
-加密、解密使用同一个密钥,效率高;
- 将原始数据分割成固定大小的块-,逐个进行加密
- 加密解密双方需要协商使用哪一种秘钥信息
缺陷:
- 密钥过多
- 密钥分发,无法保证获得秘钥的人都是好人。
- 数据来源无法确认
常见算法
- AES(高级加密标准):取代 DES 的主流算法,支持 128/192/256 位密钥,安全性高。
- DES(数据加密标准):早期算法,因密钥长度仅 56 位(易被暴力破解),已逐步淘汰。
- ChaCha20:适用于移动设备和资源受限环境,性能优异。
非对称加密
非对称加密算法:
加密和解密使用不同的密钥,即公钥和私钥。公钥可以公开,而私钥必须保密。常见的非对称加密算法包
括RSA(Rivest-Shamir-Adleman算法)、DSA(Digital Signature Algorithm)数字签名算法、
ECC(椭圆曲线密码学)等。这些算法通常用于数字签名和密钥交换,因为它们提供了更高的安全性。
特性:
- 数据加密:适合加密较小数据,比如: 加密对称密钥
- 数字签名:主要在于让接收方确认发送方身
- 密钥长,算法复杂
- 加密解密效率低
常见算法
- RSA:基于大质数分解难题,常用于证书认证、密钥交换(如 HTTPS、SSH)。
- ECC(椭圆曲线加密):相同安全强度下密钥更短(如 256 位 ECC ≈ 3072 位 RSA),适合移动设备和物联网。
- DSA(数字签名算法):专门用于数字签名,不支持加密
单向哈希算法
单向加密是一种不可逆的加密算法,它只能将明文加密成密文,而无法通过密文还原为明文。通常用于数
据完整性验证和密码存储等场景。常见的单向加密算法包括:SHA(安全散列算法)、SHA-1、SHA-256和
SHA-3、MD5(Message-Digest Algorithm 5)。
特性:
特性:
- 任意长度输入,固定长度输出。
- 若修改数据,指纹也会改变,且有雪崩效应,数据的一点微小改变,生成的指纹值变化非常大。
- 无法从指纹中重新生成数据,即不可逆,具有单向性。
功能:数据完整性
常见算法
- MD5:128位哈希,已发现碰撞漏洞,不推荐用于安全场景。
- SHA-1:160位哈希,已不安全(如2017年Google破解)。
- SHA-2/3:目前主流,抗碰撞性强(如SHA-256、SHA3-256)
9. 总结cdn原理
主要功能
CDN的功能主要包含两块:网络通信功能、内容管理功能。
网络通信功能
高质量的IP通信网络,可以实现跨运营商和跨地域访问的效果,而且访问延时大大降低。
智能DNS解析功能,可以实现高效的、高质量的客户端与服务器间的通信。
内容管理功能
对缓存功能加强,随着网络能力的提高,在本地存储更多的静态文件对象。
用户请求的就是不再只是正在的web服务器,而且缓存了web服务器内容的CDN的节点服务器
通过上面的解析,我们可以简单的感觉到,CDN网络是在用户和web服务器之间增加内容的Cache层,如
何将用户的请求引导到Cache上获得源服务器的数据,主要是通过接管智能DNS实现。
流程
CDN是将DNS的解析功能与服务器本身的存储功能整合在一起了,将原来用户和web服务器之间的通信,
拆分为了Web服务器、CDN主节点、CDN边缘节点、用户端 四者之间的通信联系。
两次解析
浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以一般得到的是该域名
对应的CNAME记录。为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地
址;在此过程中,使用的全局负载均衡DNS解析,这个时候得到CDN缓存服务器(边缘节点)的IP地址,浏览器
在得到实际的IP地址以后,向缓存服务器发出访问请求
内容解析
CDN缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地
址,再由缓存服务器向此实际IP地址提交访问请求;缓存服务器从实际IP地址得得到内容以后,一方面在本地
进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程。
流程透明
通过以上的分析我们可以得到,为了实现既要对普通用户透明(即客户端无需进行任何设置,直接使用被
加速网站原有的域名即可访问),又要为指定的网站提供加速服务的同时降低对ICP的影响,只要修改整个访问
过程中的域名解析部分,以实现透明的加速服务。