一、网络分层模型:OSI 七层与 TCP/IP 四层

1.1 为什么需要分层模型

网络通信涉及物理信号传输、地址寻址、路由选择、进程间通信、应用协议解析等多个环节。分层模型将复杂过程拆分为职责明确的若干层,每层只与相邻层交互,降低了设计、实现与排障的复杂度。生产环境中常说的"二层交换机"“三层路由器”“四层负载均衡”"七层代理"均源于此。

1.2 OSI 七层模型

层次名称核心职责典型协议/设备
第 7 层应用层为应用程序提供网络服务接口HTTP、HTTPS、SSH、FTP、DNS、SMTP
第 6 层表示层数据格式转换、加密压缩、编码解码SSL/TLS、JPEG、ASCII
第 5 层会话层建立、管理、终止会话NetBIOS、RPC
第 4 层传输层端到端连接、可靠传输、端口寻址TCP、UDP
第 3 层网络层逻辑寻址、路由选择、跨网段转发IP、ICMP、路由器
第 2 层数据链路层物理地址寻址、帧封装、同网段转发MAC、ARP、交换机
第 1 层物理层比特流传输、电气信号、物理介质网线、光纤、网卡、集线器

1.3 TCP/IP 四层模型

TCP/IP 模型是互联网实际运行的协议栈,结构更紧凑,与 OSI 的对应关系如下:

TCP/IP 四层对应 OSI 层核心职责典型协议/设备
应用层应用层 + 表示层 + 会话层业务数据通信HTTP、HTTPS、SSH、DNS、FTP、SMTP
传输层传输层端到端连接与端口寻址TCP、UDP
互联网层网络层跨网段寻址与路由IP、ICMP、路由器
链路层数据链路层 + 物理层同网段物理通信MAC、ARP、以太网、交换机

1.4 各层常见协议与运维关注点

  • 应用层:HTTP/HTTPS 负责 Web 通信,SSH 负责远程管理,DNS 负责域名解析,FTP/SFTP 负责文件传输。排障时关注服务监听、应用日志、证书有效性。
  • 传输层:TCP 提供面向连接、可靠传输;UDP 提供无连接、低延迟传输。关注端口监听、连接状态、防火墙策略。
  • 互联网层:IP 负责主机寻址,ICMP 用于连通性测试(ping)。关注 IP 地址、子网掩码、网关、路由表。
  • 链路层:ARP 完成 IP 到 MAC 的解析,以太网帧完成同网段交付。关注网卡状态、MAC 地址、物理链路。

1.5 数据封装与解封装

发送端自上而下逐层封装,每层添加本层头部:

层级封装内容PDU 名称
应用层HTTP 请求、SSH 命令等业务数据Data
传输层TCP/UDP 头部(源端口、目的端口)Segment / Datagram
互联网层IP 头部(源 IP、目的 IP)Packet
链路层以太网头部(源 MAC、目的 MAC)Frame

接收端自下而上逐层解封装。关键规则:只有目标 MAC 和 IP 均指向本机的数据包,才会继续向上解封并交给对应端口的进程处理。

1.6 TCP 与 UDP 选型

对比项TCPUDP
连接方式面向连接,三次握手建立连接无连接,直接发送
可靠性可靠传输,确认重传、按序到达不保证可靠,丢包不重传
速度相对较慢相对较快
适用场景SSH、HTTP/HTTPS、MySQL、RedisDNS 查询、视频通话、直播、游戏

二、TCP 三次握手与四次挥手

2.1 三次握手(连接建立)

TCP 是全双工协议,通信前必须确认双方的发送与接收能力均正常,并完成初始序列号同步。

握手流程

  1. 第一次握手(SYN):客户端向服务器发送 SYN 报文,Seq = x(随机初始序列号),进入 SYN_SENT 状态。
  2. 第二次握手(SYN-ACK):服务器收到 SYN 后,回复 SYN + ACK 报文,Seq = y(随机初始序列号),Ack = x + 1,进入 SYN_RECEIVED 状态。
  3. 第三次握手(ACK):客户端收到 SYN-ACK 后,回复 ACK 报文,Seq = x + 1,Ack = y + 1,双方进入 ESTABLISHED 状态,连接建立。

为什么需要三次握手

  • 确认双方收发能力均正常(第一次证明客户端能发,第二次证明服务器能收能发,第三次证明客户端能收)。
  • 同步双方初始序列号,为后续可靠传输提供基础。
  • 防止历史重复连接请求被误接受。

2.2 四次挥手(连接释放)

TCP 连接释放需分别关闭两个方向的通道,因此需要四次交互。

挥手流程

  1. 第一次挥手(FIN-ACK):主动关闭方发送 FIN + ACK 报文,Seq = u,Ack = v,进入 FIN_WAIT_1 状态。
  2. 第二次挥手(ACK):被动关闭方收到 FIN 后,回复 ACK 报文,Ack = u + 1,进入 CLOSE_WAIT 状态;主动方收到后进入 FIN_WAIT_2 状态。
  3. 第三次挥手(FIN-ACK):被动关闭方数据发送完毕后,发送 FIN + ACK 报文,Seq = w,Ack = u + 1,进入 LAST_ACK 状态。
  4. 第四次挥手(ACK):主动关闭方回复 ACK 报文,Ack = w + 1,进入 TIME_WAIT 状态;被动方收到后关闭连接。

TIME_WAIT 状态的作用

  • 等待 2MSL(Maximum Segment Lifetime),确保最后一个 ACK 若丢失,被动方重传的 FIN 仍能被处理。
  • 让旧连接在网络中的残留报文全部消失,避免干扰后续复用相同端口的新连接。

2.3 常见 TCP 连接状态

状态含义运维关注点
LISTEN服务正在监听端口正常状态
ESTABLISHED连接已建立,正在通信正常状态
SYN_SENT客户端已发 SYN,等待回复可能网络不通或服务未响应
CLOSE_WAIT对方已关闭,本机未关闭应用未正确关闭连接,需排查
TIME_WAIT主动关闭方等待 2MSL高并发场景常见,大量属正常
LAST_ACK等待最后一个 ACK四次挥手最后阶段

三、tcpdump 与 Wireshark 抓包分析 TCP

3.1 tcpdump 基础用法

tcpdump 是 Linux 下的命令行抓包工具,可直接分析或导出 .pcap 文件供 Wireshark 深度分析。

# 安装
dnf install -y tcpdump

# 抓取指定网卡所有包
tcpdump -i ens160

# 不解析主机名和端口名,提升速度
tcpdump -i ens160 -nn

# 限制抓包数量
tcpdump -i ens160 -nn -c 100

# 按端口过滤
tcpdump -i ens160 -nn port 80
tcpdump -i ens160 -nn port 22

# 按主机过滤
tcpdump -i ens160 -nn host 10.0.0.100

# 组合条件
tcpdump -i ens160 -nn host 10.0.0.100 and port 80

# 保存为 pcap 文件
tcpdump -i ens160 -nn -w /tmp/capture_$(date +%Y%m%d_%H%M%S).pcap

# 读取 pcap 文件
tcpdump -nn -r capture.pcap port 80

3.2 tcpdump 输出解读

10:30:01.123456 IP 10.0.0.100.54321 > 10.0.0.142.80: Flags [S], seq 123456
10:30:01.123478 IP 10.0.0.142.80 > 10.0.0.100.54321: Flags [S.], seq 654321, ack 123457
10:30:01.123489 IP 10.0.0.100.54321 > 10.0.0.142.80: Flags [.], ack 654322
字段说明
时间戳数据包到达时间
源地址:端口发送方 IP 与端口
目标地址:端口接收方 IP 与端口
Flags[S] 表示 SYN,[.] 表示 ACK,[S.] 表示 SYN+ACK,[F] 表示 FIN,[R] 表示 RST

3.3 抓包分析 TCP 三次握手

以访问 Web 服务为例,过滤端口 80:

tcpdump -i ens160 -nn port 80

观察到的三次握手报文:

  1. 客户端 → 服务器:Flags [S], seq 123456
  2. 服务器 → 客户端:Flags [S.], seq 654321, ack 123457
  3. 客户端 → 服务器:Flags [.], ack 654322

三次交互后,连接进入 ESTABLISHED 状态,随后开始 HTTP 请求传输。

3.4 抓包分析 TCP 四次挥手

主动关闭连接后,可观察到:

  1. 主动方 → 被动方:Flags [F.], seq X, ack Y
  2. 被动方 → 主动方:Flags [.], ack X+1
  3. 被动方 → 主动方:Flags [F.], seq Y, ack X+1
  4. 主动方 → 被动方:Flags [.], ack Y+1

3.5 Wireshark 图形化分析

  1. 在服务器上使用 tcpdump 抓包并保存为 .pcap 文件。
  2. 通过 sz 或 SCP 将文件下载到本地。
  3. 使用 Wireshark 打开,过滤表达式示例:
    • tcp.port == 80
    • ip.addr == 10.0.0.142
    • tcp.flags.syn == 1
  4. 右键数据包 → Follow → TCP Stream,可完整查看一次 TCP 会话。

3.6 常见排障场景

问题抓包命令观察重点
SSH 无法连接tcpdump -i ens160 -nn port 22是否收到 SYN,是否回复 SYN-ACK
HTTP 访问异常tcpdump -i ens160 -nn -A port 80请求头、响应状态、RST/FIN
DNS 解析失败tcpdump -i ens160 -nn port 53查询请求与响应是否到达
怀疑丢包tcpdump -i ens160 -nn host 目标IP重传、乱序、重复 ACK

四、DNS 原理与内网 DNS 部署

4.1 DNS 的作用

DNS(Domain Name System,域名系统)将人类易记的域名(如 magedu.com)解析为机器可识别的 IP 地址(如 43.226.56.46)。它是互联网的基础设施之一,采用分布式、层次化的数据库结构。

4.2 DNS 解析完整流程

当用户在浏览器输入域名时,解析流程如下:

  1. 浏览器缓存:检查是否近期访问过该域名。
  2. 本地 hosts 文件/etc/hosts 优先级高于 DNS,常用于内网测试。
  3. 本地 DNS 缓存:操作系统缓存的解析结果。
  4. 递归 DNS 服务器:向配置的 DNS 服务器(如 8.8.8.8114.114.114.114)发起递归查询。
  5. 根域名服务器:递归服务器向根服务器查询顶级域(TLD)服务器地址。
  6. 顶级域服务器:返回该域名对应的权威 DNS 服务器地址。
  7. 权威 DNS 服务器:返回域名对应的 A/AAAA 记录。
  8. 结果返回:递归服务器将结果返回客户端,并缓存一定时间(TTL)。

4.3 递归查询与迭代查询

查询类型发起方特点
递归查询客户端 → 递归 DNS由递归服务器负责查到底,客户端只需等待最终答案
迭代查询递归 DNS → 根/TLD/权威 DNS每层只返回下一层该找谁,由递归服务器逐级追问

4.4 常见 DNS 记录类型

记录类型含义示例
AIPv4 地址记录magedu.com → 43.226.56.46
AAAAIPv6 地址记录magedu.com → 2001:db8::1
CNAME别名记录www.magedu.com → magedu.com
MX邮件交换记录指向邮件服务器
NS域名服务器记录指定权威 DNS 服务器
TXT文本记录用于 SPF、DKIM、域名验证
PTR反向解析记录192.168.100.10 → magedu.com
SOA授权起始记录区域权威信息、序列号、刷新策略

4.5 DNS 查询工具

# 使用 dig 查询
dig magedu.com A
dig magedu.com +short
dig @8.8.8.8 magedu.com

# 使用 nslookup
nslookup magedu.com
nslookup magedu.com 114.114.114.114

# 使用 host
host magedu.com
host -t MX magedu.com
host -t NS magedu.com

4.6 内网 DNS 部署(Bind)

4.6.1 安装 Bind
# Rocky Linux 10
dnf install -y bind bind-utils

# Ubuntu 26.04
apt install -y bind9 bind9-utils
4.6.2 修改主配置文件 /etc/named.conf
options {
    listen-on port 53 { any; };
    allow-query     { any; };
    recursion yes;
    forwarders {
        114.114.114.114;
        8.8.8.8;
    };
    forward first;
    directory "/var/named";
};
4.6.3 声明正向解析区域 /etc/named.rfc1912.zones
zone "magedu.com" IN {
    type master;
    file "magedu.com.zone";
    allow-update { none; };
};
4.6.4 编写区域文件 /var/named/magedu.com.zone
$TTL 86400
@   IN  SOA ns1.magedu.com. admin.magedu.com. (
    2026072801  ; serial
    3600        ; refresh
    1800        ; retry
    604800      ; expire
    86400       ; minimum TTL
)
@       IN  NS      ns1.magedu.com.
ns1     IN  A       192.168.100.10
ruoyi   IN  A       192.168.100.10
mysql   IN  A       192.168.100.20
redis   IN  A       192.168.100.30
nacos   IN  A       192.168.100.40
4.6.5 验证与启动
# 检查配置文件语法
named-checkconf /etc/named.conf

# 检查区域文件语法
named-checkzone magedu.com /var/named/magedu.com.zone

# 启动并设置开机自启
systemctl enable --now named

# 验证解析
dig @127.0.0.1 mysql.magedu.com +short
4.6.6 客户端配置
# Rocky Linux 10
nmcli conn mod ens160 ipv4.dns "192.168.100.10"
nmcli conn up ens160

# Ubuntu 26.04
# 编辑 /etc/netplan/00-installer-config.yaml 添加 nameservers
netplan apply
4.6.7 防火墙放行
# Rocky Linux 10
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload

五、RAID 技术总结

5.1 RAID 基本概念

RAID(Redundant Array of Independent Disks,独立硬盘冗余阵列)将多块物理磁盘组合成一个逻辑磁盘,通过并行读写提升性能,通过冗余算法提高可靠性。实现方式包括:

  • 硬件 RAID:通过 RAID 控制器卡或主板集成芯片实现,操作系统将其识别为单块磁盘。
  • 软件 RAID:通过操作系统或软件实现,如 Linux 的 mdadm

5.2 常见 RAID 级别特性对比

RAID 级别最少磁盘数容错能力可用容量读性能写性能安全性典型应用场景
RAID 01n临时缓存、视频剪辑
RAID 12n-150%一般系统盘、关键数据
RAID 531n-1一般较高数据中心、预算敏感场景
RAID 642n-2较低高安全要求场景
RAID 104每组镜像可坏 1 块50%数据库、高性能服务器
RAID 014有限50%一般较少使用

5.3 各级别详细说明

RAID 0(条带化)
  • 将数据分块(chunk)后分散写入多块磁盘,读写可并行处理。
  • 无冗余、无容错,任意一块磁盘损坏将导致全部数据丢失。
  • 适用场景:追求极致性能且数据可重建的临时性场景。
RAID 1(镜像)
  • 数据同时写入两块磁盘,实现完全冗余。
  • 磁盘利用率 50%,写入性能受限于单盘,读取性能可提升。
  • 适用场景:系统盘、关键业务数据。
RAID 5(分布式奇偶校验)
  • 数据与奇偶校验信息分散存储在所有磁盘上。
  • 可容忍一块磁盘故障,磁盘利用率较高(n-1)。
  • 写入性能受奇偶校验计算影响,重建过程对系统压力较大。
  • 适用场景:数据中心、文件服务器、预算与可靠性兼顾的场景。
RAID 6(双分布式奇偶校验)
  • 与 RAID 5 类似,但保存两份独立的奇偶校验信息。
  • 可容忍两块磁盘同时故障,安全性更高,但写入性能下降、成本增加。
  • 适用场景:对数据安全要求极高的业务系统。
RAID 10(镜像 + 条带化)
  • 先做 RAID 1 镜像对,再将多个镜像对组成 RAID 0。
  • 兼具 RAID 0 的高性能和 RAID 1 的高可靠性。
  • 磁盘利用率 50%,成本较高。
  • 适用场景:数据库、OLTP、高并发 Web 服务。

5.4 选型建议

用途推荐 RAID
操作系统盘RAID 1
重要业务数据RAID 10 + 热备盘
大容量一般数据RAID 5 / RAID 6
临时缓存、可重建数据RAID 0 或不配置 RAID

5.5 Linux 软 RAID 实践(mdadm)

# 创建 RAID 5,使用 3 块数据盘 + 1 块热备盘
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# 查看 RAID 详情
mdadm -D /dev/md0

# 格式化并挂载
mkfs.xfs /dev/md0
mount /dev/md0 /mnt/raid5

# 保存配置
echo '/dev/md0 /mnt/raid5 xfs defaults 0 0' >> /etc/fstab

六、Linux 网络配置(补充)

6.1 查看网络状态

ip a                       # 查看 IP 地址
ip -4 -br addr             # 简洁查看 IPv4 地址
ip route show              # 查看路由表
ip neigh show              # 查看 ARP 缓存
ss -tlnp                   # 查看 TCP 监听端口
ss -tan state established  # 查看已建立连接

6.2 使用 nmcli 配置静态 IP

nmcli con mod ens160 \
  ipv4.method manual \
  ipv4.addresses 10.0.0.142/24 \
  ipv4.gateway 10.0.0.1 \
  ipv4.dns "8.8.8.8 114.114.114.114" \
  autoconnect yes

nmcli con up ens160

6.3 Ubuntu Netplan 配置示例

network:
  version: 2
  ethernets:
    ens160:
      dhcp4: false
      addresses:
        - 10.0.0.142/24
      routes:
        - to: default
          via: 10.0.0.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 114.114.114.114

七、HTTP/HTTPS 与 Nginx 部署概览(第 14–15 天补充)

7.1 HTTP 协议核心

HTTP 工作于 TCP/IP 的应用层,基于请求-响应模型。请求报文由请求行、请求头、空行和请求体组成;响应报文由状态行、响应头、空行和响应体组成。

常见状态码:

状态码含义场景
200请求成功正常返回资源
301永久重定向域名切换、HTTP 跳转 HTTPS
302临时重定向登录跳转、动态分流
304未修改,使用缓存协商缓存命中
400请求语法错误参数格式错误
401未认证缺少登录凭证
403禁止访问权限不足或 IP 受限
404资源不存在URL 错误或文件缺失
500服务器内部错误后端程序异常
502网关错误后端服务不可达
503服务不可用过载或维护中
504网关超时后端响应超时

7.2 HTTPS 与 TLS 握手

HTTPS = HTTP + TLS。TLS 通过非对称加密交换对称密钥,后续使用对称加密传输数据,兼顾安全性与性能。

TLS 1.2 握手流程:

  1. ClientHello:客户端发送支持的 TLS 版本、加密套件、随机数。
  2. ServerHello:服务器返回选定的加密套件、随机数、服务器证书。
  3. 客户端验证证书链(域名、有效期、签发者、吊销状态)。
  4. 客户端生成 Pre-Master Secret,用服务器公钥加密后发送。
  5. 双方根据 Client Random、Server Random、Pre-Master Secret 生成会话密钥。
  6. 后续通信使用会话密钥对称加密。

TLS 1.3 将握手缩短为 1 次 RTT,并移除了不安全的加密算法。

7.3 Nginx 基础部署

# 使用 DNF 快速安装
dnf install -y nginx
systemctl enable --now nginx

# 源码编译安装(生产推荐,可定制模块与路径)
dnf groupinstall -y "Development Tools"
dnf install -y gcc make pcre2-devel zlib-devel openssl-devel

./configure \
  --prefix=/usr/local/nginx \
  --sbin-path=/usr/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --user=nginx --group=nginx \
  --with-http_ssl_module \
  --with-http_v2_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module

make -j$(nproc) && make install

7.4 Nginx 虚拟主机与 location

Nginx 通过 server 块定义虚拟主机,通过 location 块实现 URL 路由。虚拟主机可基于域名、IP 或端口区分。

server {
    listen 80;
    server_name www.magedu.com;
    root /var/www/magedu;
    index index.html;
}

server {
    listen 80;
    server_name blog.magedu.com;
    root /var/www/blog;
    index index.html;
}

location 匹配优先级:

优先级类型语法说明
1精确匹配= /path完全相等,立即生效
2前缀优先匹配^~ /path匹配后停止正则匹配
3正则匹配(区分大小写)~ /pattern按顺序匹配
4正则匹配(不区分大小写)~* /pattern按顺序匹配
5通用前缀匹配/path最长匹配原则
6通用匹配/兜底

7.5 root 与 alias 的区别

指令路径拼接方式示例
rootroot 路径 + location 路径root /var/www; + /images/1.jpg/var/www/images/1.jpg
aliasalias 路径替换 location 路径alias /var/www/img/; + /images/1.jpg/var/www/img/1.jpg

注意:alias 路径末尾必须带斜杠,否则会出现路径拼接异常。


Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐