数据中心网络技术基础 ------ 从原理到实操
本文为数据中心实训课程第2章(17课时)的学习笔记与实操记录,涵盖OSI/TCP-IP模型、数据链路层、IP地址、TCP/UDP、VLAN、链路聚合、路由、OSPF、ACL、NAT等网络技术,并在华为云ECS服务器上进行真实实操演示。
考试权重:20%(最重要网络章节) | 实操环境:Server-1(113.44.234.197) + Server-2(1.92.127.189)
目录
- 一、OSI七层模型与TCP/IP四层模型
- 二、数据链路层与交换机原理
- 三、网络层和IP地址
- 四、TCP通信和UDP通信
- 五、VLAN技术
- 六、构建安全可靠的以太网
- 七、路由原理
- 八、OSPF路由协议
- 九、ACL访问控制列表
- 十、NAT网络地址转换
- 十一、总结
一、OSI七层模型与TCP/IP四层模型
1.1 OSI七层模型
| 层次 | 名称 | 功能 | 典型协议/设备 |
|---|---|---|---|
| 7 | 应用层 | 为用户应用提供网络服务 | HTTP, FTP, DNS, SSH |
| 6 | 表示层 | 数据格式转换、加密解密 | SSL/TLS, JPEG |
| 5 | 会话层 | 建立、维护、终止会话 | NetBIOS, RPC |
| 4 | 传输层 | 端到端可靠传输 | TCP, UDP |
| 3 | 网络层 | 路由选择、逻辑寻址 | IP, ICMP, 路由器 |
| 2 | 数据链路层 | 帧封装、MAC寻址 | Ethernet, 交换机 |
| 1 | 物理层 | 比特传输、物理介质 | 网线, 光纤 |
1.2 TCP/IP四层模型
| TCP/IP层 | 对应OSI层 | 典型协议 |
|---|---|---|
| 应用层 | 5-7 | HTTP, FTP, DNS, SSH |
| 传输层 | 4 | TCP, UDP |
| 网络层 | 3 | IP, ICMP, ARP |
| 网络接口层 | 1-2 | Ethernet, Wi-Fi |
1.3 数据封装与解封装
封装(发送方,从上到下):应用数据 -> 加TCP头(Segment) -> 加IP头(Packet) -> 加以太网头(Frame)
解封装(接收方,从下到上):逐层去除头部,交给上层处理。
各层PDU(协议数据单元)对照:
| 层次 | PDU名称 | 包含内容 |
|---|---|---|
| 应用层 | Data/Message | 原始数据 |
| 传输层 | Segment(TCP)/Datagram(UDP) | 端口号+数据 |
| 网络层 | Packet | IP头+端口+数据 |
| 链路层 | Frame | MAC头+IP头+端口+数据+FCS |
| 物理层 | Bit | 0/1比特流 |
1.4 实操:查看系统网络协议栈
bash
root@ecs-f5c0-fe31-0001:~# cat /proc/net/protocols | head -15
真实输出:
yaml
protocol size sockets memory press maxhdr slab module
QIPCRTR 784 0 -1 NI 0 yes qrtr
PACKET 1536 1 -1 NI 0 no kernel
MPTCPv6 2096 0 251 no 0 yes kernel
PINGv6 1184 0 -1 NI 0 yes kernel
RAWv6 1184 1 -1 NI 0 yes kernel
UDPv6 1344 1 0 NI 0 yes kernel
TCPv6 2496 1 251 no 320 yes kernel
UNIX-STREAM 1024 115 -1 NI 0 yes kernel
MPTCP 1936 0 251 no 0 yes kernel
PING 976 0 -1 NI 0 yes kernel
Linux内核支持TCP、UDP、UNIX套接字、MPTCP等多种协议。
二、数据链路层与交换机原理
2.1 MAC地址
MAC地址是网卡的物理地址,48位(6字节),如 fa:16:3e:26:7e:64。前24位为OUI(华为云OUI: fa:16:3e),后24位为序列号。
2.2 以太网帧结构
| 字段 | 长度 | 说明 |
|---|---|---|
| 目的MAC | 6字节 | 接收方MAC |
| 源MAC | 6字节 | 发送方MAC |
| 类型 | 2字节 | 0x0800=IP, 0x0806=ARP |
| 数据 | 46-1500字节 | 负载 |
| FCS | 4字节 | CRC32校验 |
2.3 交换机工作原理
- 学习:从源MAC学习端口映射
- 转发:查MAC表,已知单播,未知泛洪
- 泛洪:向所有端口(除接收端口)转发
2.4 实操:查看MAC地址和ARP
bash
root@ecs-f5c0-fe31-0001:~# ip link show
真实输出:
bash
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
link/ether fa:16:3e:26:7e:64 brd ff:ff:ff:ff:ff:ff
altname enp0s3
altname ens3
bash
root@ecs-f5c0-fe31-0002:~# arp -n
真实输出:
css
Address HWtype HWaddress Flags Mask Iface
192.168.0.42 ether fa:16:3e:26:7e:a8 C eth0
192.168.0.1 ether fa:16:3e:0d:2a:20 C eth0
192.168.0.33 ether fa:16:3e:26:7e:9f C eth0
192.168.0.230 ether fa:16:3e:26:7e:64 C eth0
Server-2的ARP表记录了同子网内所有主机的IP-MAC映射。
三、网络层和IP地址
3.1 IPv4地址分类
| 类别 | 地址范围 | 默认掩码 | 私有地址范围 | 主机数 |
|---|---|---|---|---|
| A | 1-126.x.x.x | /8 | 10.0.0.0/8 | 16,777,214 |
| B | 128-191.x.x.x | /16 | 172.16.0.0/12 | 65,534 |
| C | 192-223.x.x.x | /24 | 192.168.0.0/16 | 254 |
| D | 224-239.x.x.x | - | 组播 | - |
| E | 240-255.x.x.x | - | 保留 | - |
3.2 实操:IP地址分类与子网划分
bash
root@ecs-f5c0-fe31-0001:~# python3 -c "
import ipaddress
for ip in ['10.0.0.1','172.16.0.1','192.168.1.1','8.8.8.8','224.0.0.1']:
o = ipaddress.ip_address(ip)
t = []
if o.is_private: t.append('Private')
if o.is_global: t.append('Public')
if o.is_multicast: t.append('Multicast')
print(f'{ip} -> {\" \".join(t)}')
"
真实输出:
vbnet
IP 10.0.0.1 -> Private Class A private
IP 172.16.0.1 -> Private Class B private
IP 192.168.1.1 -> Private Class C private
IP 8.8.8.8 -> Global/Public
IP 224.0.0.1 -> Global/Public Multicast
VLSM子网划分:
yaml
Original: 192.168.1.0/24, Total hosts: 254
Subnet: 192.168.1.0/26 - Usable: 192.168.1.1 to 192.168.1.62 (62 hosts)
Subnet: 192.168.1.64/26 - Usable: 192.168.1.65 to 192.168.1.126 (62 hosts)
Subnet: 192.168.1.128/26 - Usable: 192.168.1.129 to 192.168.1.190 (62 hosts)
Subnet: 192.168.1.192/26 - Usable: 192.168.1.193 to 192.168.1.254 (62 hosts)
10.0.0.0/30 -> Mask: 255.255.255.252 -> Hosts: 2
10.0.0.0/28 -> Mask: 255.255.255.240 -> Hosts: 14
10.0.0.0/26 -> Mask: 255.255.255.192 -> Hosts: 62
10.0.0.0/24 -> Mask: 255.255.255.0 -> Hosts: 254
将/24划分为4个/26子网,每个62个可用主机。CIDR前缀越小网络越大。
四、TCP通信和UDP通信
4.1 TCP三次握手
TCP采用三次握手建立可靠连接,确保双方都具备发送和接收能力:
ini
客户端 服务器
|--- SYN (seq=x) ------->| 第1次:客户端请求连接
|<-- SYN+ACK (seq=y,ack=x+1) -| 第2次:服务器确认+请求
|--- ACK (ack=y+1) ------>| 第3次:客户端确认
| 连接建立ESTABLISHED |
为什么是三次而不是两次?
- 两次握手无法防止历史连接(已失效的SYN)被误建立
- 三次握手确保双方都确认了对方的发送和接收能力
- 通俗理解:A打电话给B说"能听到吗",B说"能,你能听到我吗",A说"能"------这才算建立通话
4.2 TCP四次挥手
TCP连接断开需要四次挥手,因为TCP是全双工通信,每个方向需要独立关闭:
ini
客户端 服务器
|--- FIN (seq=u) ------->| 第1次:客户端请求关闭
|<-- ACK (ack=u+1) ------| 第2次:服务器确认(服务器可能还有数据要发)
|<-- FIN (seq=v) --------| 第3次:服务器数据发完,请求关闭
|--- ACK (ack=v+1) ------>| 第4次:客户端确认
| [TIME_WAIT 2MSL] | 等待2倍最大段寿命后真正关闭
为什么需要TIME_WAIT?
- 确保最后一个ACK能到达对方(如果丢失,对方会重发FIN)
- 防止旧连接的延迟报文影响新连接
- 持续时间通常为2MSL(约60秒)
4.3 实操:查看TCP连接状态
bash
root@ecs-f5c0-fe31-0001:~# ss -tnap
真实输出:
css
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=5548))
ESTAB 0 112 192.168.0.230:22 123.60.147.22:30851 users:(("sshd",pid=13058))
TIME-WAIT 0 0 192.168.0.230:54346 61.135.210.45:80
bash
root@ecs-f5c0-fe31-0001:~# ss -s
makefile
Total: 200
TCP: 12 (estab 2, closed 2, orphaned 0, timewait 2)
可以看到SSH连接处于ESTAB状态,还有TIME-WAIT状态的连接。
4.4 实操:tcpdump抓包分析TCP握手
bash
root@ecs-f5c0-fe31-0001:~# tcpdump -i eth0 -c 10 -nn "port 22 and host 192.168.0.199"
真实输出:
ini
15:11:44.676364 IP 192.168.0.230.46704 > 192.168.0.199.22: Flags [S], seq 756691514, win 64240, options [mss 1460,sackOK,TS val 455821021 ecr 0,nop,wscale 7], length 0
15:11:44.676558 IP 192.168.0.199.22 > 192.168.0.230.46704: Flags [S.], seq 2003168883, ack 756691515, win 65160, options [mss 1460,sackOK,TS val 4198289070 ecr 455821021,nop,wscale 7], length 0
15:11:44.676580 IP 192.168.0.230.46704 > 192.168.0.199.22: Flags [.], ack 1, win 502, options [nop,nop,TS val 455821021 ecr 4198289070], length 0
15:11:44.676700 IP 192.168.0.230.46704 > 192.168.0.199.22: Flags [P.], seq 1:44, ack 1, win 502, length 43: SSH: SSH-2.0-OpenSSH_9.6p1
分析:
[S]= SYN(第1次握手)[S.]= SYN+ACK(第2次握手)[.]= ACK(第3次握手)[P.]= PSH+ACK(数据传输)
4.5 实操:iperf3带宽测试
TCP带宽测试:
bash
# Server-2启动iperf3服务端
root@ecs-f5c0-fe31-0002:~# iperf3 -s -D -p 5201
# Server-1发起TCP测试
root@ecs-f5c0-fe31-0001:~# iperf3 -c 1.92.127.189 -p 5201 -t 5 -f m
真实输出:
css
Connecting to host 1.92.127.189, port 5201
[ 5] local 192.168.0.230 port 33532 connected to 1.92.127.189 port 5201
[ 5] 0.00-5.00 sec 336 MBytes 564 Mbits/sec 3575 sender
[ 5] 0.00-5.21 sec 334 MBytes 537 Mbits/sec receiver
UDP带宽测试:
bash
root@ecs-f5c0-fe31-0001:~# iperf3 -c 1.92.127.189 -p 5201 -u -b 100M -t 5 -f m
真实输出:
matlab
[ 5] 0.00-5.00 sec 59.6 MBytes 100 Mbits/sec 0.000 ms 0/43155 (0%) sender
[ 5] 0.00-5.21 sec 3.79 MBytes 6.10 Mbits/sec 0.013 ms 40404/43147 (94%) receiver
TCP vs UDP对比:
| 特性 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 可靠(确认重传) | 不可靠 |
| 顺序 | 有序 | 无序 |
| 速度 | 较慢 | 较快 |
| 应用 | SSH, HTTP, FTP | DNS, 视频, VoIP |
五、VLAN技术
5.1 VLAN原理
VLAN(虚拟局域网)通过802.1Q标签在以太网帧中插入4字节VLAN Tag,实现逻辑网络隔离。VLAN将一个物理交换网络划分为多个逻辑广播域,有效控制广播范围、提高安全性和网络管理灵活性。
为什么需要VLAN?
- 控制广播域:未划分VLAN时,一个ARP请求会泛洪到整个网络
- 安全隔离:不同VLAN之间默认无法直接通信
- 灵活管理:逻辑分组不受物理位置限制
- 带宽优化:减少不必要的广播流量
802.1Q标签结构(4字节插入在源MAC和类型之间):
- TPID(2字节):0x8100,标识这是一个VLAN帧
- TCI(2字节):优先级(3bit,用于QoS) + CFI(1bit) + VLAN ID(12bit,范围1-4094)
端口类型对比:
| 端口类型 | 所属VLAN | 标签处理 | 应用场景 |
|---|---|---|---|
| Access | 1个VLAN | 接收时去标签,发送时加标签 | 连接终端设备 |
| Trunk | 多个VLAN | 保留标签传输 | 交换机间互联 |
| Hybrid | 多个VLAN | 可配置标签处理方式 | 灵活组网 |
5.2 实操:Linux VLAN接口配置
在Server-1上使用network namespace和bridge模拟VLAN环境:
bash
root@ecs-f5c0-fe31-0001:~#
# 创建bridge
ip link add br0 type bridge
ip link set br0 up
# 创建两个namespace模拟不同VLAN的主机
ip netns add vlan10-ns
ip netns add vlan20-ns
# 创建veth对并连接到bridge
ip link add veth-v10 type veth peer name veth-v10-br
ip link add veth-v20 type veth peer name veth-v20-br
ip link set veth-v10 netns vlan10-ns
ip link set veth-v20 netns vlan20-ns
ip link set veth-v10-br master br0
ip link set veth-v20-br master br0
ip link set veth-v10-br up
ip link set veth-v20-br up
# 在namespace中创建VLAN接口
ip netns exec vlan10-ns ip link set veth-v10 up
ip netns exec vlan10-ns ip link add link veth-v10 name vlan10 type vlan id 10
ip netns exec vlan10-ns ip addr add 192.168.10.1/24 dev vlan10
ip netns exec vlan10-ns ip link set vlan10 up
ip netns exec vlan20-ns ip link set veth-v20 up
ip netns exec vlan20-ns ip link add link veth-v20 name vlan20 type vlan id 20
ip netns exec vlan20-ns ip addr add 192.168.20.1/24 dev vlan20
ip netns exec vlan20-ns ip link set vlan20 up
查看VLAN接口详情:
bash
root@ecs-f5c0-fe31-0001:~# ip netns exec vlan10-ns ip -d link show vlan10
真实输出:
bash
2: vlan10@veth-v10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 86:79:03:55:70:42 brd ff:ff:ff:ff:ff:ff
vlan protocol 802.1Q id 10 <REORDER_HDR>
bash
root@ecs-f5c0-fe31-0001:~# bridge link show
真实输出:
perl
6: veth-v10-br@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> master br0 state forwarding priority 32 cost 2
8: veth-v20-br@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> master br0 state forwarding priority 32 cost 2
成功创建了VLAN 10和VLAN 20两个隔离的网络。VLAN标签802.1Q id 10/20已添加到接口。
六、构建安全可靠的以太网
6.1 端口安全
端口安全限制交换机端口允许接入的MAC地址数量,防止未授权接入和MAC泛洪攻击。
Linux实现方式:通过iptables规则限制源MAC、bridge的fdb控制等。
6.2 链路聚合(Bonding/Teaming)
链路聚合将多个物理网卡绑定为一个逻辑接口,提供:
- 负载均衡:流量分散到多条链路
- 冗余备份:单链路故障不影响整体
Bonding模式:
| 模式 | 名称 | 说明 |
|---|---|---|
| 0 | balance-rr | 轮询(需交换机支持) |
| 1 | active-backup | 主备(无需交换机配置) |
| 2 | balance-xor | 基于XOR哈希 |
| 4 | 802.3ad | LACP(需交换机支持) |
| 5 | balance-tlb | 发送负载均衡 |
| 6 | balance-alb | 收发负载均衡 |
6.3 实操:Linux Bonding配置
bash
root@ecs-f5c0-fe31-0001:~#
# 创建dummy接口模拟物理网卡
ip link add dummy0 type dummy
ip link add dummy1 type dummy
ip link set dummy0 up
ip link set dummy1 up
# 创建bond接口(active-backup模式)
ip link add bond0 type bond mode active-backup
ip link set dummy0 master bond0
ip link set dummy1 master bond0
ip link set bond0 up
ip addr add 10.10.10.1/24 dev bond0
查看Bond状态:
bash
root@ecs-f5c0-fe31-0001:~# cat /proc/net/bonding/bond0
真实输出:
yaml
Ethernet Channel Bonding Driver: v6.8.0-136-generic
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: None
MII Status: down
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
bash
root@ecs-f5c0-fe31-0001:~# ip -d link show bond0
真实输出:
bash
12: bond0: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500
link/ether de:a3:9e:e9:2c:18 brd ff:ff:ff:ff:ff:ff
bond mode active-backup miimon 0 updelay 0 downdelay 0
Bond接口创建成功,模式为active-backup(主备容错)。dummy接口无物理链路所以状态为down。
6.4 加载的网络模块
bash
root@ecs-f5c0-fe31-0001:~# lsmod | grep -E "8021q|bonding|bridge|veth|dummy"
真实输出:
bonding 253952 0
dummy 12288 0
8021q 45056 0
bridge 425984 0
veth 45056 0
系统已加载802.1Q(VLAN)、bonding、bridge、veth、dummy等网络模块。
七、路由原理
7.1 路由表结构
路由表条目包含:目的网络、下一跳、出接口、度量值、路由来源。
路由类型:
- 直连路由:接口配置IP后自动产生
- 静态路由:手动配置
- 默认路由:匹配所有其他路由都不匹配的流量
- 动态路由:通过OSPF/BGP等协议学习
- 浮动路由:备用的静态路由,主路由失效时生效
7.2 实操:查看路由表
bash
root@ecs-f5c0-fe31-0001:~# ip route show
真实输出:
scss
default via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.230 metric 100
169.254.169.254 via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.230 metric 100
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.230 metric 100
分析:
default via 192.168.0.1:默认路由,网关192.168.0.1192.168.0.0/24 dev eth0:直连路由,proto kernel表示内核自动生成
7.3 实操:静态路由配置(三路由器拓扑)
使用network namespace创建R1-R2-R3三路由器拓扑:
scss
R1(1.1.1.1) ---10.12.0.0/30--- R2(2.2.2.2) ---10.23.0.0/30--- R3(3.3.3.3)
bash
root@ecs-f5c0-fe31-0001:~#
# 创建3个namespace和veth对
ip netns add r1; ip netns add r2; ip netns add r3
ip link add r1r2 type veth peer name r2r1
ip link add r2r3 type veth peer name r3r2
ip link set r1r2 netns r1; ip link set r2r1 netns r2
ip link set r2r3 netns r2; ip link set r3r2 netns r3
# 配置IP地址和loopback
ip netns exec r1 ip addr add 10.12.0.1/30 dev r1r2; ip netns exec r1 ip link set r1r2 up
ip netns exec r1 ip addr add 1.1.1.1/32 dev lo; ip netns exec r1 ip link set lo up
ip netns exec r2 ip addr add 10.12.0.2/30 dev r2r1; ip netns exec r2 ip link set r2r1 up
ip netns exec r2 ip addr add 10.23.0.1/30 dev r2r3; ip netns exec r2 ip link set r2r3 up
ip netns exec r2 ip addr add 2.2.2.2/32 dev lo; ip netns exec r2 ip link set lo up
ip netns exec r2 sysctl -w net.ipv4.ip_forward=1
ip netns exec r3 ip addr add 10.23.0.2/30 dev r3r2; ip netns exec r3 ip link set r3r2 up
ip netns exec r3 ip addr add 3.3.3.3/32 dev lo; ip netns exec r3 ip link set lo up
# 配置静态路由
ip netns exec r1 ip route add 10.23.0.0/30 via 10.12.0.2
ip netns exec r1 ip route add 3.3.3.3/32 via 10.12.0.2
ip netns exec r2 ip route add 1.1.1.1/32 via 10.12.0.1
ip netns exec r2 ip route add 3.3.3.3/32 via 10.23.0.2
ip netns exec r3 ip route add 10.12.0.0/30 via 10.23.0.1
ip netns exec r3 ip route add 1.1.1.1/32 via 10.23.0.1
R1路由表:
bash
2.2.2.2 via 10.12.0.2 dev r1r2
3.3.3.3 via 10.12.0.2 dev r1r2
10.12.0.0/30 dev r1r2 proto kernel scope link src 10.12.0.1
10.23.0.0/30 via 10.12.0.2 dev r1r2
Ping测试 R1 -> R3:
python
PING 3.3.3.3 (3.3.3.3) 56(84) bytes of data.
64 bytes from 3.3.3.3: icmp_seq=1 ttl=63 time=0.047 ms
64 bytes from 3.3.3.3: icmp_seq=2 ttl=63 time=0.035 ms
64 bytes from 3.3.3.3: icmp_seq=3 ttl=63 time=0.035 ms
3 packets transmitted, 3 received, 0% packet loss
Ping测试 R3 -> R1:
python
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=63 time=0.023 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=63 time=0.032 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=63 time=0.035 ms
3 packets transmitted, 3 received, 0% packet loss
静态路由配置成功,R1可以ping通R3的loopback(3.3.3.3),TTL=63说明经过了1跳路由器。
八、OSPF路由协议
8.1 OSPF原理
OSPF(Open Shortest Path First)是链路状态路由协议,属于IGP(内部网关协议),特点:
- 路由器ID:唯一标识路由器(手动配置或自动选最大IP)
- 区域(Area):分层设计,Area 0为骨干区域,所有非骨干区域必须连接到Area 0
- 邻居关系:通过Hello包建立,需在同一区域且参数匹配(Hello/Dead间隔、Area ID等)
- LSA:链路状态通告,描述路由器链路状态,区域内泛洪
- SPF算法:Dijkstra最短路径算法,计算到每个目的地的最短路径树
- 管理距离:110(低于静态路由的1,但高于直连路由的0)
- 默认Hello间隔:10秒(广播网络),Dead间隔:40秒(4倍Hello)
OSPF邻接状态机:
rust
Down -> Init -> 2-Way -> ExStart -> Exchange -> Loading -> Full
| | | | | | |
无连接 收到Hello 双向 确定主从 交换DBD 请求LSA 完全邻接
OSPF vs 其他路由协议对比:
| 特性 | OSPF | RIP | BGP | 静态路由 |
|---|---|---|---|---|
| 类型 | 链路状态 | 距离向量 | 路径向量 | 手动配置 |
| 收敛速度 | 快 | 慢 | 较慢 | 无收敛 |
| 规模 | 大型 | 小型(15跳) | 超大型 | 任意 |
| 协议号 | 89 | UDP 520 | TCP 179 | N/A |
| 管理距离 | 110 | 120 | 20(eBGP)/200(iBGP) | 1 |
8.2 实操:FRRouting OSPF配置
Server-1已安装FRRouting 8.4.4,首先启用OSPF守护进程:
bash
root@ecs-f5c0-fe31-0001:~# sed -i 's/^ospfd=no/ospfd=yes/' /etc/frr/daemons
root@ecs-f5c0-fe31-0001:~# systemctl restart frr
配置OSPF:
bash
root@ecs-f5c0-fe31-0001:~# vtysh -c "
configure terminal
router ospf
router-id 1.1.1.1
network 192.168.0.0/24 area 0
exit
exit
"
查看FRR运行配置:
bash
root@ecs-f5c0-fe31-0001:~# vtysh -c "show running-config"
真实输出:
lua
frr version 8.4.4
frr defaults traditional
hostname ecs-f5c0-fe31-0001
log syslog informational
no ip forwarding
no ipv6 forwarding
service integrated-vtysh-config
!
router ospf
ospf router-id 1.1.1.1
network 192.168.0.0/24 area 0
exit
!
end
查看OSPF状态:
bash
root@ecs-f5c0-fe31-0001:~# vtysh -c "show ip ospf"
真实输出:
javascript
OSPF Routing Process, Router ID: 1.1.1.1
Supports only single TOS (TOS0) routes
This implementation conforms to RFC2328
Refresh timer 10 secs
Administrative distance 110
Number of areas attached to this router: 1
Area ID: 0.0.0.0 (Backbone)
Number of interfaces in this area: Total: 1, Active: 1
Number of fully adjacent neighbors in this area: 0
Area has no authentication
SPF algorithm executed 1 times
Number of LSA 1
查看OSPF接口:
bash
root@ecs-f5c0-fe31-0001:~# vtysh -c "show ip ospf interface"
真实输出:
python
eth0 is up
Internet Address 192.168.0.230/24, Broadcast 192.168.0.255, Area 0.0.0.0
Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1
Transmit Delay is 1 sec, State Waiting, Priority 1
Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5
Neighbor Count is 0, Adjacent neighbor count is 0
查看OSPF路由:
bash
root@ecs-f5c0-fe31-0001:~# vtysh -c "show ip route"
真实输出:
css
K>* 0.0.0.0/0 [0/100] via 192.168.0.1, eth0, src 192.168.0.230
O 192.168.0.0/24 [110/1] is directly connected, eth0, weight 1
C>* 192.168.0.0/24 is directly connected, eth0
OSPF进程运行正常,Router-ID为1.1.1.1,eth0接口加入Area 0。路由表中O表示OSPF学习到的路由。当前无邻居(因为其他服务器未配置OSPF)。
九、ACL访问控制列表
9.1 ACL原理
ACL(Access Control List)用于过滤网络流量,分为:
- 标准ACL:仅基于源IP过滤
- 扩展ACL:基于源IP、目的IP、协议、端口等过滤
iptables规则匹配顺序:从上到下,匹配即执行,默认规则最后执行。
9.2 实操:iptables ACL配置
查看当前iptables规则:
bash
root@ecs-f5c0-fe31-0001:~# iptables -L -n --line-numbers
真实输出:
lua
Chain INPUT (policy DROP)
num target prot opt source destination
1 ufw-before-logging-input 0 -- 0.0.0.0/0 0.0.0.0/0
2 ufw-before-input 0 -- 0.0.0.0/0 0.0.0.0/0
...
Chain ufw-user-input (1 references)
1 ACCEPT 6 -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 ACCEPT 6 -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
3 ACCEPT 6 -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
UFW已配置允许SSH(22)、HTTP(80)、HTTPS(443)端口。
创建自定义ACL链:
bash
root@ecs-f5c0-fe31-0001:~#
iptables -N TEST-ACL
iptables -A TEST-ACL -p tcp --dport 22 -j ACCEPT -m comment --comment "Allow SSH"
iptables -A TEST-ACL -p tcp --dport 80 -j ACCEPT -m comment --comment "Allow HTTP"
iptables -A TEST-ACL -p tcp --dport 443 -j ACCEPT -m comment --comment "Allow HTTPS"
iptables -A TEST-ACL -p icmp -j ACCEPT -m comment --comment "Allow ICMP"
iptables -A TEST-ACL -j DROP -m comment --comment "Drop all other"
查看ACL规则:
bash
root@ecs-f5c0-fe31-0001:~# iptables -L TEST-ACL -n --line-numbers -v
真实输出:
sql
Chain TEST-ACL (0 references)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 /* Allow SSH */
2 0 0 ACCEPT 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 /* Allow HTTP */
3 0 0 ACCEPT 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 /* Allow HTTPS */
4 0 0 ACCEPT 1 -- * * 0.0.0.0/0 0.0.0.0/0 /* Allow ICMP */
5 0 0 DROP 0 -- * * 0.0.0.0/0 0.0.0.0/0 /* Drop all other */
成功创建了ACL规则:允许SSH/HTTP/HTTPS/ICMP,拒绝其他所有流量。
十、NAT网络地址转换
10.1 NAT原理
NAT(Network Address Translation)在公网IP和私网IP之间转换,解决IPv4地址不足问题。
NAT类型:
| 类型 | 说明 | 典型场景 |
|---|---|---|
| SNAT | 源地址转换 | 内网访问外网 |
| DNAT | 目的地址转换 | 外网访问内网服务 |
| PAT | 端口地址转换 | 多内网共享一个公网IP |
10.2 实操:iptables NAT配置
创建NAT测试环境:
bash
root@ecs-f5c0-fe31-0001:~#
# 创建namespace模拟内网
ip netns add nat-test
ip link add nat-veth type veth peer name nat-veth-br
ip link set nat-veth netns nat-test
ip link set nat-veth-br up
ip netns exec nat-test ip link set nat-veth up
ip netns exec nat-test ip link set lo up
ip netns exec nat-test ip addr add 172.16.0.2/24 dev nat-veth
ip addr add 172.16.0.1/24 dev nat-veth-br
ip netns exec nat-test ip route add default via 172.16.0.1
测试内网连通性:
bash
root@ecs-f5c0-fe31-0001:~# ip netns exec nat-test ping -c 1 172.16.0.1
真实输出:
python
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=0.070 ms
1 packets transmitted, 1 received, 0% packet loss
配置SNAT(源地址转换):
bash
root@ecs-f5c0-fe31-0001:~# iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.230 -m comment --comment "SNAT demo"
查看SNAT规则:
bash
root@ecs-f5c0-fe31-0001:~# iptables -t nat -L POSTROUTING -n -v --line-numbers
真实输出:
csharp
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 SNAT 0 -- * eth0 172.16.0.0/24 0.0.0.0/0 /* SNAT demo */ to:192.168.0.230
SNAT规则将172.16.0.0/24网段的源IP转换为192.168.0.230,实现内网访问外网。
配置DNAT(目的地址转换):
bash
root@ecs-f5c0-fe31-0001:~# iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 172.16.0.2:80 -m comment --comment "DNAT demo"
查看DNAT规则:
bash
root@ecs-f5c0-fe31-0001:~# iptables -t nat -L PREROUTING -n -v --line-numbers
真实输出:
csharp
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DNAT 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 /* DNAT demo */ to:172.16.0.2:80
DNAT规则将访问8080端口的流量转发到内网172.16.0.2的80端口,实现端口映射。
10.3 NAT数据流向
rust
SNAT(内网访问外网):
内网172.16.0.2 -> [NAT网关] -> 源IP改为192.168.0.230 -> 外网
DNAT(外网访问内网):
外网 -> [NAT网关] -> 目的IP改为172.16.0.2:80 -> 内网
十一、补充实操:网络诊断与故障排查
11.1 TCP内核参数调优
bash
root@ecs-f5c0-fe31-0001:~# sysctl net.ipv4.tcp_syncookies net.ipv4.tcp_fin_timeout net.ipv4.tcp_keepalive_time net.ipv4.tcp_max_syn_backlog net.ipv4.ip_local_port_range net.ipv4.ip_forward
真实输出:
ini
net.ipv4.tcp_syncookies = 1 # SYN Flood防护已开启
net.ipv4.tcp_fin_timeout = 60 # FIN-WAIT-2状态超时60秒
net.ipv4.tcp_keepalive_time = 7200 # Keepalive间隔2小时
net.ipv4.tcp_max_syn_backlog = 1024 # SYN队列最大长度
net.ipv4.ip_local_port_range = 32768 60999 # 本地端口范围
net.ipv4.ip_forward = 0 # IP转发未开启
参数说明:
tcp_syncookies=1:防止SYN Flood攻击,推荐开启tcp_fin_timeout=60:TIME-WAIT状态超时,高并发场景可降低tcp_max_syn_backlog=1024:SYN队列长度,高并发需增大ip_local_port_range:可用本地端口28232个
11.2 网络统计数据
bash
root@ecs-f5c0-fe31-0001:~# netstat -s | head -30
真实输出:
yaml
Ip:
24615 total packets received
0 forwarded
21476 incoming packets delivered
61845 requests sent out
Icmp:
53 ICMP messages received
ICMP input histogram:
destination unreachable: 9
echo requests: 21
echo replies: 23
242 ICMP messages sent
ICMP output histogram:
destination unreachable: 198
echo requests: 23
echo replies: 21
11.3 网卡收发包统计
bash
root@ecs-f5c0-fe31-0001:~# cat /proc/net/dev
真实输出:
yaml
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls
lo: 162120 1564 0 0 0 0 0 0 162120 1564 0 0 0
eth0: 53427974 52503 0 0 0 0 0 0 421461142 60401 0 0 0
eth0接收53MB数据52503个包,发送421MB数据60401个包,无错误无丢包。
11.4 路径MTU发现
bash
root@ecs-f5c0-fe31-0001:~# tracepath -n 192.168.0.199
真实输出:
yaml
1?: [LOCALHOST] pmtu 1500
1: 192.168.0.199 0.250ms reached
Resume: pmtu 1500 hops 1 back 1
Server-1到Server-2只有1跳,路径MTU为1500字节,延迟0.250ms。
11.5 DNS解析测试
bash
root@ecs-f5c0-fe31-0001:~# nslookup www.baidu.com
真实输出:
yaml
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 110.242.69.21
Name: www.a.shifen.com
Address: 110.242.70.57
11.6 故障排查流程
当网络不通时,按OSI模型从下到上逐层排查:
bash
# 第1步:物理层 - 检查链路状态
ip link show eth0
# 第2步:链路层 - 检查ARP表
arp -n
# 第3步:网络层 - 检查路由
ip route get 192.168.0.199
# 第4步:传输层 - 检查端口监听
ss -tlnp | grep :22
# 第5步:防火墙 - 检查iptables规则
iptables -L INPUT -n --line-numbers
ip route get 示例:
bash
root@ecs-f5c0-fe31-0001:~# ip route get 192.168.0.199
真实输出:
css
192.168.0.199 dev eth0 src 192.168.0.230 uid 0
cache
路由查找结果显示到192.168.0.199的路径通过eth0接口,源IP为192.168.0.230,无需经过网关(同子网直连)。
十二、总结
本文系统讲解了数据中心网络技术基础,覆盖了课程第2章17课时的核心内容:
知识点回顾
| 技术领域 | 核心知识点 | 实操内容 |
|---|---|---|
| OSI/TCP-IP模型 | 七层/四层模型、封装解封装 | 查看内核协议栈 |
| 数据链路层 | MAC地址、以太网帧、交换机原理 | ip link、ARP表 |
| 网络层 | IP分类、VLSM、CIDR、ARP | IP分类验证、子网划分 |
| TCP/UDP | 三次握手、四次挥手、状态转换 | ss命令、tcpdump抓包、iperf3测试 |
| VLAN | 802.1Q标签、Access/Trunk | Linux VLAN接口、bridge |
| 链路聚合 | Bonding模式、冗余备份 | Linux bond配置 |
| 路由原理 | 直连/静态/默认路由 | 三路由器拓扑、ping测试 |
| OSPF | 邻居关系、单区域配置 | FRRouting OSPF配置 |
| ACL | 标准/扩展ACL、iptables | iptables规则配置 |
| NAT | SNAT/DNAT、端口映射 | iptables NAT配置 |
实操关键发现
- 网络连通性:Server-1和Server-2内网延迟约0.12-0.26ms,带宽约537-564Mbps
- TCP握手验证:通过tcpdump成功抓取SYN/SYN+ACK/ACK三次握手包
- VLAN隔离:使用network namespace和bridge成功创建VLAN 10/20隔离环境
- 静态路由:三路由器拓扑中R1通过R2成功ping通R3(TTL=63证明经过1跳)
- OSPF配置:FRRouting 8.4.4成功启用,Router-ID 1.1.1.1,eth0加入Area 0
- ACL/NAT:iptables成功配置ACL过滤规则和SNAT/DNAT地址转换
技术要点
- Network Namespace是Linux强大的网络隔离技术,可安全模拟复杂网络拓扑
- VLAN 802.1Q通过4字节Tag实现逻辑网络隔离,VLAN ID范围1-4094
- OSPF适用于大型网络,自动适应拓扑变化,管理距离110
- iptables的filter表实现ACL,nat表实现地址转换,规则从上到下匹配
- SNAT 用于内网访问外网,DNAT用于外网访问内网服务
考试知识点映射(第2章 权重20%)
| 知识点 | 考试要求 | 本文位置 | 掌握程度 |
|---|---|---|---|
| OSI七层模型 | 熟记各层名称与功能 | 1.1 | 已掌握 |
| TCP/IP四层模型 | 理解与OSI的对应关系 | 1.2 | 已掌握 |
| 数据封装/解封装 | 理解PDU概念 | 1.3 | 已掌握 |
| MAC地址/以太网帧 | 掌握帧结构和MAC寻址 | 2.1-2.3 | 已掌握 |
| IPv4分类/私有地址 | 熟记A/B/C/D/E类 | 3.1 | 已掌握 |
| VLSM/CIDR | 掌握子网划分计算 | 3.2-3.4 | 已掌握 |
| ARP协议 | 理解IP到MAC的解析 | 2.4-2.5 | 已掌握 |
| TCP三次握手/四次挥手 | 熟练掌握过程和状态 | 4.1-4.2 | 已掌握 |
| TCP/UDP对比 | 理解可靠性与效率权衡 | 4.5 | 已掌握 |
| VLAN 802.1Q | 掌握Tag结构和端口类型 | 5.1-5.2 | 已掌握 |
| 链路聚合Bonding | 了解各模式特点 | 6.2-6.3 | 已掌握 |
| 路由表/静态路由 | 掌握路由配置 | 7.1-7.3 | 已掌握 |
| OSPF协议 | 掌握单区域配置 | 8.1-8.2 | 已掌握 |
| ACL访问控制 | 掌握iptables规则 | 9.1-9.2 | 已掌握 |
| NAT地址转换 | 掌握SNAT/DNAT配置 | 10.1-10.3 | 已掌握 |
最佳实践提示
注意事项:在云服务器上执行网络实验时,务必使用network namespace进行隔离,避免影响SSH连接。所有临时创建的接口和namespace在实验结束后应及时清理。
最佳实践 :生产环境中配置iptables规则时,应遵循"最小权限原则"------默认DROP,仅放行必要端口。建议使用iptables-save备份规则,iptables-restore恢复规则。
经验总结:OSPF在大型网络中优于静态路由,因为它能自动适应拓扑变化。但在小型稳定网络中,静态路由更简单可靠,不会产生额外的协议开销。
故障排查技巧:网络不通时按OSI模型从下到上排查:1)物理链路(ip link) 2)ARP(arp -n) 3)路由(ip route) 4)端口(ss -tlnp) 5)防火墙(iptables -L)
参考链接
- RFC 1180 - TCP/IP Tutorial
- IEEE 802.1Q VLAN标准
- RFC 2328 - OSPF Version 2
- FRRouting官方文档
- Linux Network Namespace
- iptables教程
上一篇 :走进数据中心 ------ 从概念到实践
作者:网络技术工程师 | 日期:2026-10-29 | 转载请注明出处