网络基础概念详解


本文详细介绍网络基础设施的核心概念,包括网卡、网关、网桥和路由表,这些是理解网络通信的基础。

网卡

什么是网卡

网卡(Network Interface Card,NIC)是计算机与网络之间的物理接口,负责将数据转换为可以在网络上传输的信号。

graph LR
    A[计算机] --> B[网卡]
    B --> C[网络]
    C --> D[其他设备]
    
    style A fill:#ffcccc
    style B fill:#ccffcc
    style C fill:#ccccff

网卡的功能

  1. 数据封装:将上层数据封装成帧
  2. 数据发送:将数据转换为电信号发送到网络
  3. 数据接收:接收网络信号并转换为数据
  4. 地址识别:通过 MAC 地址识别数据包
  5. 错误检测:检测数据传输错误

网卡的类型

  • 以太网卡:最常见的网卡类型
  • 无线网卡:Wi-Fi 网卡
  • 光纤网卡:用于高速网络
  • 虚拟网卡:软件实现的网卡

什么是虚拟网卡

虚拟网卡(Virtual Network Interface)是通过软件实现的网络接口,不依赖物理硬件。

虚拟网卡的特点

  • 软件实现:完全由软件实现
  • 灵活配置:可以动态创建和删除
  • 多实例:一台机器可以有多个虚拟网卡
  • 功能扩展:可以实现特殊功能(如隧道、VPN)

虚拟网卡的类型

1. Loopback(回环接口)

1
2
3
4
5
6
# 查看回环接口
ip addr show lo

# 输出示例
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
inet 127.0.0.1/8 scope host lo

特点:

  • 地址:127.0.0.1(IPv4)或 ::1(IPv6)
  • 用途:本地进程间通信
  • 特点:数据不会离开本机

2. TUN/TAP

1
2
3
4
5
6
7
# TUN(点对点设备)
# 工作在网络层(IP 层)
ip tuntap add mode tun tun0

# TAP(以太网设备)
# 工作在数据链路层
ip tuntap add mode tap tap0

用途:

  • VPN:OpenVPN、WireGuard 等
  • 虚拟化:KVM、QEMU 等
  • 网络隧道:各种隧道协议

3. Veth Pair(虚拟以太网对)

1
2
3
4
5
6
7
8
9
10
# 创建 veth pair
ip link add veth0 type veth peer name veth1

# 配置 IP 地址
ip addr add 10.0.0.1/24 dev veth0
ip addr add 10.0.0.2/24 dev veth1

# 启用接口
ip link set veth0 up
ip link set veth1 up

用途:

  • 容器网络:Docker、Kubernetes 等
  • 网络命名空间:Linux 网络隔离
  • 虚拟网络:连接不同的网络命名空间

4. Bridge(网桥接口)

见网桥章节。

虚拟网卡的应用

Docker 网络

1
2
3
4
5
6
# Docker 创建的虚拟网卡
ip addr show docker0

# 输出示例
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet 172.17.0.1/16 scope global docker0

Kubernetes Pod 网络

1
2
3
4
# Pod 使用的 veth pair
ip link show type veth

# 每个 Pod 都有独立的网络命名空间和虚拟网卡

网关

什么是网关

网关(Gateway)是连接不同网络的设备,负责在不同网络之间转发数据包。网关通常工作在网络层(OSI 第三层)或更高层。

graph TB
    A[网络 A
192.168.1.0/24] --> B[网关
192.168.1.1] B --> C[网络 B
10.0.0.0/24] B --> D[互联网] style A fill:#ffcccc style B fill:#ccffcc style C fill:#ccccff style D fill:#ffffcc

网关的功能

  1. 路由转发:在不同网络间转发数据包
  2. 协议转换:转换不同网络协议
  3. 地址转换:NAT(网络地址转换)
  4. 安全控制:防火墙、访问控制
  5. 流量管理:QoS、流量整形

默认网关

默认网关是当目标地址不在本地网络时,数据包发送的目标。

1
2
3
4
5
6
7
8
# 查看默认网关
ip route show default

# 输出示例
default via 192.168.1.1 dev eth0

# 或使用 route 命令
route -n

什么是二层网关

二层网关(Layer 2 Gateway)工作在网络的数据链路层(OSI 第二层),基于 MAC 地址进行转发。

二层网关的特点

  • MAC 地址转发:基于 MAC 地址表转发
  • 广播域:在同一广播域内
  • 透明桥接:对上层协议透明
  • 学习功能:学习 MAC 地址和端口映射

二层网关的工作原理

sequenceDiagram
    participant A as 主机 A
    participant G as 二层网关
    participant B as 主机 B
    
    A->>G: 发送数据帧(目标 MAC: B)
    G->>G: 查找 MAC 地址表
    G->>B: 转发数据帧
    B->>G: 返回响应
    G->>A: 转发响应

二层网关的应用

  • 交换机:传统二层交换机
  • 虚拟交换机:Open vSwitch、Linux Bridge
  • VLAN 网关:VLAN 间的通信

什么是三层网关

三层网关(Layer 3 Gateway)工作在网络层(OSI 第三层),基于 IP 地址进行路由转发。

三层网关的特点

  • IP 地址路由:基于 IP 地址和路由表
  • 跨网络通信:可以连接不同网段
  • 路由协议:支持动态路由协议
  • NAT 功能:网络地址转换

三层网关的工作原理

graph TB
    A[网络 A
192.168.1.0/24] --> G[三层网关
路由器] G --> B[网络 B
10.0.0.0/24] G --> C[网络 C
172.16.0.0/24] G --> D[互联网] G --> E[路由表] E --> F[192.168.1.0/24 → eth0] E --> F1[10.0.0.0/24 → eth1] E --> F2[0.0.0.0/0 → eth2] style A fill:#ffcccc style G fill:#ccffcc style E fill:#ccccff

三层网关的功能

1. 路由转发

1
2
3
4
5
6
7
# 查看路由表
ip route show

# 输出示例
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1
10.0.0.0/24 via 10.0.0.1 dev eth1
default via 203.0.113.1 dev eth2

2. NAT(网络地址转换)

1
2
3
4
5
# SNAT(源地址转换)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.10

# DNAT(目标地址转换)
iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080

3. 防火墙

1
2
3
4
5
# 允许特定流量
iptables -A FORWARD -s 192.168.1.0/24 -d 10.0.0.0/24 -j ACCEPT

# 拒绝特定流量
iptables -A FORWARD -s 192.168.1.0/24 -d 10.0.0.0/24 -j DROP

三层网关的应用

  • 路由器:传统网络路由器
  • Linux 路由器:使用 Linux 系统作为路由器
  • 云网关:云平台的虚拟网关
  • SDN 网关:软件定义网络网关

二层网关 vs 三层网关

特性 二层网关 三层网关
工作层次 数据链路层(L2) 网络层(L3)
转发依据 MAC 地址 IP 地址
广播域 同一广播域 不同广播域
路由功能 无 有
NAT 功能 无 有
典型设备 交换机 路由器

网桥

什么是网桥

网桥(Bridge)是连接两个或多个网段的设备,工作在数据链路层,基于 MAC 地址转发数据帧。

graph TB
    A[网段 A] --> B[网桥]
    C[网段 B] --> B
    B --> D[统一网段]
    
    style A fill:#ffcccc
    style B fill:#ccffcc
    style C fill:#ccccff
    style D fill:#ffffcc

网桥的功能

  1. 帧转发:根据 MAC 地址转发数据帧
  2. 帧过滤:过滤不需要转发的帧
  3. 学习功能:学习 MAC 地址和端口映射
  4. 环路防止:STP(生成树协议)防止环路

网桥的工作原理

sequenceDiagram
    participant A as 主机 A
    participant B as 网桥
    participant C as 主机 C
    
    A->>B: 发送数据帧(目标 MAC: C)
    B->>B: 查找 MAC 地址表
    alt MAC 地址在表中
        B->>C: 转发到对应端口
    else MAC 地址不在表中
        B->>B: 广播到所有端口(除源端口)
        B->>B: 学习 MAC 地址
    end

网桥的类型

1. 透明网桥

  • 特点:对上层协议透明
  • 应用:最常见的网桥类型
  • 标准:IEEE 802.1D

2. 源路由网桥

  • 特点:路由信息由源主机决定
  • 应用:Token Ring 网络
  • 标准:IEEE 802.5

什么是虚拟网桥

虚拟网桥(Virtual Bridge)是通过软件实现的网桥,不依赖物理硬件。

Linux Bridge

Linux Bridge 是 Linux 内核提供的虚拟网桥实现。

创建和管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建网桥
ip link add name br0 type bridge

# 启用网桥
ip link set br0 up

# 配置 IP 地址
ip addr add 192.168.1.1/24 dev br0

# 将物理网卡加入网桥
ip link set eth0 master br0

# 查看网桥信息
bridge link show

# 查看网桥 MAC 地址表
bridge fdb show

网桥配置示例

1
2
3
4
5
# 创建网桥并配置
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 eth1
ifconfig br0 192.168.1.1 netmask 255.255.255.0 up

Open vSwitch

Open vSwitch(OVS)是功能更强大的虚拟交换机。

基本操作

1
2
3
4
5
6
7
8
9
10
11
12
# 创建 OVS 网桥
ovs-vsctl add-br br0

# 添加端口
ovs-vsctl add-port br0 eth0
ovs-vsctl add-port br0 tap0

# 查看网桥
ovs-vsctl show

# 查看流表
ovs-ofctl dump-flows br0

虚拟网桥的应用

1. 容器网络

1
2
3
4
5
# Docker 默认网桥
docker network ls

# 创建自定义网桥
docker network create --driver bridge mynetwork

2. 虚拟化网络

1
2
3
4
# KVM 虚拟机网络
# 使用 Linux Bridge 连接虚拟机
virsh net-list
virsh net-info default

3. Kubernetes 网络

1
2
3
4
5
6
7
8
9
10
# CNI 插件使用网桥
# Flannel、Calico 等都使用网桥技术
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx

网桥 vs 交换机

特性 网桥 交换机
端口数 通常 2-4 个 多个端口
转发方式 软件转发 硬件转发
性能 较低 较高
成本 低 高
灵活性 高 低

网桥 vs 网关

对比项 网桥 网关
定义 连接同一网络的不同网段,实现二层转发 连接不同网络,实现三层及以上网络协议的连接与转换
工作层次 数据链路层(第二层) 网络层、传输层,甚至应用层
优点
  • 1. 简单高效,转发速度快
  • 2. 能实现同类型网络的隔离与互通
  • 3. 配置灵活,可透明接入网络
  • 1. 能连接不同类型的网络(如局域网与广域网)
  • 2. 支持协议转换和地址转换(如 NAT)
  • 3. 能进行访问控制和安全策略配置
缺点
  • 1. 只能连接同类型协议的网络,无法跨协议
  • 2. 对大型网络广播域可能造成广播风暴
  • 3. 无法做复杂的流量管理和安全策略
  • 1. 转发性能通常低于网桥(要处理更复杂的协议)
  • 2. 配置相对复杂
  • 3. 可能成为网络瓶颈或单点故障
典型应用 虚拟化网络、局域网隔离/互联、容器网络 出网网关、路由器、防火墙、VPN 网关

路由表

什么是路由表

路由表(Routing Table)是存储路由信息的表,用于决定数据包应该发送到哪个网络接口或下一跳地址。

graph TB
    A[数据包] --> B[路由表]
    B --> C{匹配路由规则}
    C -->|匹配| D[转发到对应接口]
    C -->|不匹配| E[使用默认路由]
    
    style A fill:#ffcccc
    style B fill:#ccffcc
    style C fill:#ccccff

路由表的作用

  1. 路径选择:选择数据包的最佳路径
  2. 网络隔离:区分不同网段
  3. 流量控制:控制数据流向
  4. 负载均衡:在多条路径间分配流量

路由表的组成

路由表通常包含以下字段:

  • 目标网络:目标网络地址和子网掩码
  • 网关:下一跳地址
  • 接口:发送数据包的接口
  • 度量值:路由的优先级(metric)
  • 标志:路由的状态标志

查看路由表

Linux 系统

1
2
3
4
5
6
7
8
# 使用 ip 命令
ip route show

# 输出示例
default via 192.168.1.1 dev eth0 proto static
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
10.0.0.0/24 via 10.0.0.1 dev eth1 proto static metric 100
172.16.0.0/16 via 172.16.0.1 dev eth2 proto static metric 200

使用 route 命令

1
2
3
4
5
6
7
8
9
10
# 查看路由表
route -n

# 输出示例
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.0.0 10.0.0.1 255.255.255.0 UG 100 0 0 eth1
172.16.0.0 172.16.0.1 255.255.255.0 UG 200 0 0 eth2

路由类型

1. 主机路由

1
2
3
4
5
# 添加主机路由
ip route add 192.168.1.50 via 10.0.0.1 dev eth1

# 删除主机路由
ip route del 192.168.1.50

2. 网络路由

1
2
3
4
5
# 添加网络路由
ip route add 10.0.0.0/24 via 10.0.0.1 dev eth1

# 删除网络路由
ip route del 10.0.0.0/24

3. 默认路由

1
2
3
4
5
# 添加默认路由
ip route add default via 192.168.1.1 dev eth0

# 或使用简写
ip route add default via 192.168.1.1

4. 直连路由

1
2
3
4
# 直连路由(自动生成)
# 当配置 IP 地址时自动创建
ip addr add 192.168.1.100/24 dev eth0
# 自动创建:192.168.1.0/24 dev eth0 scope link

路由优先级

路由表按照以下顺序匹配:

  1. 主机路由:最精确的匹配
  2. 网络路由:根据子网掩码匹配
  3. 默认路由:0.0.0.0/0(最后匹配)
1
2
3
4
5
6
7
# 查看路由优先级
ip route show table main

# 使用 metric 设置优先级
ip route add 10.0.0.0/24 via 10.0.0.1 dev eth1 metric 100
ip route add 10.0.0.0/24 via 10.0.0.2 dev eth2 metric 200
# metric 值越小,优先级越高

多路由表

Linux 支持多个路由表。

1
2
3
4
5
6
7
8
9
10
11
# 查看所有路由表
ip route show table all

# 使用特定路由表
ip route show table 100

# 添加路由到特定表
ip route add 10.0.0.0/24 via 10.0.0.1 dev eth1 table 100

# 使用路由规则
ip rule add from 192.168.1.0/24 table 100

动态路由

使用路由协议

1
2
3
4
5
6
7
8
# 安装 Quagga(支持 OSPF、BGP 等)
apt-get install quagga

# 配置 OSPF
vtysh
configure terminal
router ospf
network 192.168.1.0/24 area 0

路由表管理

添加路由

1
2
3
4
5
6
7
8
# 添加静态路由
ip route add 10.0.0.0/24 via 10.0.0.1 dev eth1

# 添加永久路由(CentOS/RHEL)
echo "10.0.0.0/24 via 10.0.0.1 dev eth1" >> /etc/sysconfig/network-scripts/route-eth1

# 添加永久路由(Debian/Ubuntu)
echo "up ip route add 10.0.0.0/24 via 10.0.0.1 dev eth1" >> /etc/network/interfaces

删除路由

1
2
3
4
5
# 删除路由
ip route del 10.0.0.0/24

# 清空路由表
ip route flush table main

修改路由

1
2
3
# 修改路由(先删除再添加)
ip route del 10.0.0.0/24
ip route add 10.0.0.0/24 via 10.0.0.2 dev eth2

网络通信流程

数据包转发流程

sequenceDiagram
    participant A as 源主机
    participant B as 网关/路由器
    participant C as 目标主机
    
    A->>A: 检查目标 IP
    A->>A: 查询路由表
    alt 目标在同一网段
        A->>C: 直接发送(ARP 获取 MAC)
    else 目标在不同网段
        A->>B: 发送到网关(使用网关 MAC)
        B->>B: 查询路由表
        B->>C: 转发数据包
        C->>B: 返回响应
        B->>A: 转发响应
    end

ARP 协议

ARP(Address Resolution Protocol)用于将 IP 地址解析为 MAC 地址。

1
2
3
4
5
6
7
8
9
# 查看 ARP 表
arp -a

# 输出示例
? (192.168.1.1) at 00:11:22:33:44:55 [ether] on eth0
? (192.168.1.100) at aa:bb:cc:dd:ee:ff [ether] on eth0

# 使用 ip 命令
ip neigh show

完整通信示例

同网段通信

1
2
3
4
5
6
7
8
9
10
11
12
# 主机 A: 192.168.1.100
# 主机 B: 192.168.1.200

# 1. 主机 A 查询路由表
ip route get 192.168.1.200
# 结果:192.168.1.200 dev eth0 src 192.168.1.100

# 2. 主机 A 查询 ARP 表
arp -n 192.168.1.200
# 如果不存在,发送 ARP 请求

# 3. 主机 A 直接发送数据包到主机 B

跨网段通信

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 主机 A: 192.168.1.100
# 主机 B: 10.0.0.200
# 网关: 192.168.1.1

# 1. 主机 A 查询路由表
ip route get 10.0.0.200
# 结果:10.0.0.200 via 192.168.1.1 dev eth0 src 192.168.1.100

# 2. 主机 A 查询网关 MAC 地址
arp -n 192.168.1.1

# 3. 主机 A 发送数据包到网关(目标 MAC: 网关 MAC,目标 IP: 10.0.0.200)

# 4. 网关查询路由表并转发

实际应用场景

场景 1:Docker 网络

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Docker 使用网桥连接容器
docker network inspect bridge

# 输出示例
[
{
"Name": "bridge",
"Id": "abc123...",
"Created": "2024-01-01T00:00:00Z",
"Scope": "local",
"Driver": "bridge",
"IPAM": {
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
}
}
]

场景 2:Kubernetes Pod 网络

1
2
3
4
5
6
7
8
9
10
11
# Pod 网络配置
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
# Pod 通过 veth pair 连接到网桥
# 网桥作为网关转发流量

场景 3:VPN 网络

1
2
3
4
5
6
7
8
# OpenVPN 使用 TUN 设备
# 创建虚拟网卡
ip tuntap add mode tun tun0
ip addr add 10.8.0.1/24 dev tun0
ip link set tun0 up

# 配置路由
ip route add 10.8.0.0/24 dev tun0

场景 4:多网卡路由

1
2
3
4
5
6
7
8
9
10
11
12
13
# 服务器有多个网卡
# eth0: 192.168.1.100/24 (内网)
# eth1: 203.0.113.10/24 (公网)

# 配置路由
# 内网流量走 eth0
ip route add 192.168.0.0/16 dev eth0

# 公网流量走 eth1
ip route add default via 203.0.113.1 dev eth1

# 特定网段走特定接口
ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0

场景 5:网络隔离

1
2
3
4
5
6
7
8
9
10
11
# 使用网桥和 VLAN 实现网络隔离
# 创建网桥
ip link add name br-vlan100 type bridge
ip link set br-vlan100 up

# 创建 VLAN 接口
ip link add link eth0 name eth0.100 type vlan id 100
ip link set eth0.100 up

# 将 VLAN 接口加入网桥
ip link set eth0.100 master br-vlan100

总结

网络基础设施是理解网络通信的基础:

核心概念

  1. 网卡:计算机与网络的物理/虚拟接口
  2. 网关:连接不同网络的设备(二层或三层)
  3. 网桥:连接网段的设备,基于 MAC 地址转发
  4. 路由表:决定数据包转发路径的表

关键理解

  • 二层转发:基于 MAC 地址,在同一广播域
  • 三层转发:基于 IP 地址,可以跨网段
  • 虚拟化:软件实现的网络设备,灵活配置
  • 路由选择:根据路由表选择最佳路径

实际应用

  • ✅ 容器网络(Docker、Kubernetes)
  • ✅ 虚拟化网络(KVM、VMware)
  • ✅ VPN 和隧道
  • ✅ 网络隔离和安全
  • ✅ 负载均衡和高可用

掌握这些网络基础概念,能够更好地理解和管理现代网络架构。

参考文献


文章作者: djaigo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 djaigo !
赏
评论
  目录