网络基础概念

从网络分类、拓扑、协议分层和 IP 地址出发,结合 Linux 配置、常用命令与故障排查流程,建立可验证的网络基础知识框架。

网络基础概念、通信设备、资源共享与信息传递关系图

原知识库系列:网络基础 所属知识地图:基础设施与运维

网络基础 系列第 01 篇

概述

网络基础概念

什么是网络

计算机网络是指将地理位置不同的多台计算机及其外部设备,通过通信线路和通信设备连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享信息传递的计算机系统。

简单来说,网络就是让设备之间能够"对话"的基础设施。就像电话系统让人与人可以远程交流一样,计算机网络让设备与设备可以交换数据。

为什么需要网络

网络核心价值 网络存在的核心价值体现在以下几个方面:

  1. 资源共享

    • 硬件资源共享:打印机、存储设备、计算资源等可以供多台计算机共同使用
    • 软件资源共享:应用程序、数据库、文件等可以在网络内部分享
    • 数据资源共享:信息可以在授权范围内被多个用户访问和使用
  2. 信息传递

    • 即时通信:邮件、即时消息、视频会议等
    • 数据传输:文件传输、数据同步、备份等
    • 远程访问:远程登录、远程桌面、云计算服务等
  3. 分布式处理

    • 负载均衡:将任务分散到多台计算机上处理
    • 高可用性:多台服务器互为备份,提高系统可靠性
    • 并行计算:大型计算任务可以拆分到多个节点同时执行
  4. 成本效益

    • 降低硬件成本:共享设备减少重复投资
    • 降低管理成本:集中化管理提高效率
    • 提高资源利用率:避免资源闲置浪费

网络的分类

网络分类 按照不同的标准,网络可以分为多种类型:

分类标准 类型 说明
覆盖范围 PAN(个人区域网) 几米范围内,如蓝牙连接
LAN(局域网) 建筑物或园区内,如家庭网络、企业内网
MAN(城域网) 城市范围内
WAN(广域网) 跨城市、国家,如互联网
传输介质 有线网络 使用双绞线、光纤等物理线路
无线网络 使用无线电波、红外线等
拓扑结构 星型、总线型、环型、网状等 设备连接方式不同
使用目的 公用网 向公众开放,如互联网
专用网 特定组织内部使用,如企业内网

核心概念

网络拓扑

网络拓扑 网络拓扑是指网络中各个节点(计算机、路由器、交换机等设备)之间的连接方式和布局结构。常见的网络拓扑结构有:

1. 星型拓扑(Star Topology)

        [交换机/集线器]
       /    |    |    \
      /     |    |     \
   [PC1]  [PC2] [PC3] [PC4]

特点:

应用场景: 现代局域网最常用,家庭网络、办公室网络普遍采用

2. 总线型拓扑(Bus Topology)

[PC1]----[PC2]----[PC3]----[PC4]
  |       |       |       |
(终端电阻)=================(终端电阻)

特点:

应用场景: 早期以太网,现在较少使用

3. 环型拓扑(Ring Topology)

    [PC1] ---- [PC2]
      |          |
      |          |
    [PC4] ---- [PC3]

特点:

应用场景: 令牌环网络、光纤分布式数据接口(FDDI)

4. 网状拓扑(Mesh Topology)

    [A]----[B]
     | \  / |
     |  \/  |
     |  /\  |
     | /  \ |
    [C]----[D]

特点:

应用场景: 核心网络、数据中心、关键任务系统

网络协议

网络协议 网络协议是计算机网络中设备之间进行通信时必须遵循的规则和约定。就像人类交流需要共同的语言一样,网络设备通信需要共同的协议。

协议三要素

  1. 语法(Syntax):数据格式、编码规则

    • 规定数据的结构、格式
    • 例如:IP 数据包的头部格式
  2. 语义(Semantics):控制信息含义、动作

    • 规定通信双方要发出什么控制信息
    • 执行的动作和返回的应答
  3. 时序(Timing):事件顺序、速度匹配

    • 规定事件的执行顺序
    • 速度匹配和排序

常见网络协议

协议 层级 用途
HTTP/HTTPS 应用层 网页浏览、Web 服务
DNS 应用层 域名解析
SMTP/POP3/IMAP 应用层 电子邮件
FTP/SFTP 应用层 文件传输
SSH 应用层 安全远程登录
TCP 传输层 可靠的数据传输
UDP 传输层 快速但不可靠的数据传输
IP 网络层 路由和寻址
ICMP 网络层 网络诊断(ping 使用)
ARP 数据链路层 IP 地址到 MAC 地址映射
Ethernet 数据链路层 以太网帧传输

TCP vs UDP

TCP(传输控制协议)

UDP(用户数据报协议)

OSI 模型简介

OSI 与 TCP/IP 模型 OSI(开放系统互连)模型是国际标准化组织(ISO)制定的一个概念模型,用于描述网络通信的层次结构。它将网络通信过程分为 7 个层次,每层负责不同的功能。

┌─────────────────────────────────────────────────┐
│  第 7 层:应用层 (Application Layer)              │  ← 用户接口
│     提供网络服务给应用程序                        │
│     协议:HTTP, FTP, SMTP, DNS                   │
├─────────────────────────────────────────────────┤
│  第 6 层:表示层 (Presentation Layer)             │  ← 数据格式
│     数据加密、压缩、格式转换                      │
│     协议:SSL/TLS, JPEG, MPEG                    │
├─────────────────────────────────────────────────┤
│  第 5 层:会话层 (Session Layer)                  │  ← 会话管理
│     建立、管理、终止会话                          │
│     协议:NetBIOS, RPC                           │
├─────────────────────────────────────────────────┤
│  第 4 层:传输层 (Transport Layer)                │  ← 端到端传输
│     可靠传输、流量控制、错误恢复                  │
│     协议:TCP, UDP                               │
├─────────────────────────────────────────────────┤
│  第 3 层:网络层 (Network Layer)                  │  ← 路由寻址
│     逻辑寻址、路由选择                            │
│     协议:IP, ICMP, ARP                          │
├─────────────────────────────────────────────────┤
│  第 2 层:数据链路层 (Data Link Layer)            │  ← 帧传输
│     物理寻址、错误检测                            │
│     协议:Ethernet, PPP, 802.11                  │
├─────────────────────────────────────────────────┤
│  第 1 层:物理层 (Physical Layer)                 │  ← 物理介质
│     比特流传输、物理接口                          │
│     介质:双绞线、光纤、无线电波                 │
└─────────────────────────────────────────────────┘

各层功能详解

第 1 层 - 物理层

第 2 层 - 数据链路层

第 3 层 - 网络层

第 4 层 - 传输层

第 5 层 - 会话层

第 6 层 - 表示层

第 7 层 - 应用层

OSI 模型与 TCP/IP 模型对比

虽然 OSI 模型有 7 层,但实际应用中更常用的是TCP/IP 模型(4 层):

OSI 模型 TCP/IP 模型 典型协议
应用层、表示层、会话层 应用层 HTTP, FTP, DNS, SMTP
传输层 传输层 TCP, UDP
网络层 网络层(网际层) IP, ICMP, ARP
数据链路层、物理层 网络接口层 Ethernet, WiFi

IP 地址与子网

IPv4 地址

IPv4 地址由 32 位二进制数组成,通常用点分十进制表示:

二进制:11000000.10101000.00000001.00000001
十进制:192.168.1.1

地址分类:

类别 范围 用途
A 类 1.0.0.0 - 126.255.255.255 大型网络
B 类 128.0.0.0 - 191.255.255.255 中型网络
C 类 192.0.0.0 - 223.255.255.255 小型网络
D 类 224.0.0.0 - 239.255.255.255 组播
E 类 240.0.0.0 - 255.255.255.255 保留

私有地址范围(不可在互联网上路由):

子网掩码

子网掩码用于区分 IP 地址中的网络部分和主机部分:

IP 地址:   192.168.1.100
子网掩码:  255.255.255.0
网络地址:  192.168.1.0
主机地址:  100

CIDR 表示法:

IPv6 简介

由于 IPv4 地址耗尽,IPv6 应运而生:


实战操作

网络实战排障 本节介绍常用的网络诊断命令,这些命令在 Linux、macOS 和 Windows(部分命令名略有不同)上都可以使用。

ping - 测试网络连通性

ping 命令使用 ICMP 协议测试主机之间的连通性。

基本用法:

# 测试与谷歌 DNS 的连通性
ping 8.8.8.8

# 测试与域名的连通性
ping www.google.com

# 指定发送次数(Linux)
ping -c 4 8.8.8.8

# 指定发送次数(Windows)
ping -n 4 8.8.8.8

# 指定数据包大小
ping -s 1000 8.8.8.8

# 持续 ping(按 Ctrl+C 停止)
ping 8.8.8.8

# 指定间隔时间(秒)
ping -i 2 8.8.8.8

输出示例:

$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=15.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=14.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=15.1 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=117 time=14.9 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 14.801/15.025/15.312/0.189 ms

输出解读:

常见问题诊断:

traceroute / tracert - 追踪路由路径

traceroute(Linux/macOS)或 tracert(Windows)显示数据包从源到目的地经过的所有路由器。

基本用法:

# Linux/macOS
traceroute 8.8.8.8
traceroute www.google.com

# 使用 ICMP 而不是 UDP
traceroute -I 8.8.8.8

# 指定最大跳数
traceroute -m 20 8.8.8.8

# 指定等待时间(秒)
traceroute -w 2 8.8.8.8

# Windows
tracert 8.8.8.8

输出示例:

$ traceroute -m 10 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 10 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  2.123 ms  1.987 ms  2.045 ms
 2  10.0.0.1 (10.0.0.1)  8.456 ms  8.234 ms  8.567 ms
 3  172.16.0.1 (172.16.0.1)  12.345 ms  12.123 ms  12.456 ms
 4  203.0.113.1 (203.0.113.1)  15.678 ms  15.456 ms  15.789 ms
 5  8.8.8.8 (8.8.8.8)  18.901 ms  18.765 ms  18.890 ms

输出解读:

应用场景:

ip addr / ifconfig - 查看网络接口信息

ip addr(推荐,现代 Linux 系统):

# 查看所有网络接口
ip addr

# 查看特定接口
ip addr show eth0

# 简短输出
ip -br addr

# 仅显示 IPv4
ip -4 addr

# 仅显示 IPv6
ip -6 addr

输出示例:

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe12:3456/64 scope link
       valid_lft forever preferred_lft forever

输出解读:

ifconfig(传统命令,部分系统已废弃):

# 查看所有接口
ifconfig

# 查看特定接口
ifconfig eth0

# 显示所有接口(包括未启用的)
ifconfig -a

ip route / route - 查看路由表

# 查看路由表(推荐)
ip route

# 简短输出
ip -br route

# 传统命令
route -n

# 查看默认网关
ip route | grep default

输出示例:

$ ip route
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100

输出解读:

netstat / ss - 查看网络连接和端口

# 查看所有连接(ss 是 netstat 的现代替代品)
ss -tunapl

# 查看监听端口
ss -tlnp

# 查看 UDP 端口
ss -ulnp

# 统计信息
ss -s

# 传统命令(部分系统仍支持)
netstat -tunapl
netstat -rn  # 路由表

输出示例:

$ ss -tlnp
State    Recv-Q   Send-Q     Local Address:Port     Peer Address:Port   Process
LISTEN   0        128              0.0.0.0:22            0.0.0.0:*       users:(("sshd",pid=1234,fd=3))
LISTEN   0        128              0.0.0.0:80            0.0.0.0:*       users:(("nginx",pid=5678,fd=6))
LISTEN   0        128            127.0.0.1:3306          0.0.0.0:*       users:(("mysqld",pid=9012,fd=10))

常用端口:

nslookup / dig - DNS 查询

# nslookup 基本查询
nslookup www.google.com

# 指定 DNS 服务器
nslookup www.google.com 8.8.8.8

# dig(更详细)
dig www.google.com

# 查询特定记录类型
dig www.google.com A      # A 记录(IPv4)
dig www.google.com AAAA   # AAAA 记录(IPv6)
dig google.com MX         # MX 记录(邮件交换)
dig google.com NS         # NS 记录(域名服务器)
dig google.com TXT        # TXT 记录

# 反向解析(IP 到域名)
dig -x 8.8.8.8

curl / wget - 网络请求测试

# 测试网页可访问性
curl -I https://www.google.com

# 显示详细过程
curl -v https://www.google.com

# 测试 API 端点
curl https://api.example.com/health

# 下载文件
wget https://example.com/file.zip

# 指定输出文件名
wget -O myfile.zip https://example.com/file.zip

配置示例

Linux 网络配置

临时配置(重启后失效)

# 配置 IP 地址
sudo ip addr add 192.168.1.100/24 dev eth0

# 删除 IP 地址
sudo ip addr del 192.168.1.100/24 dev eth0

# 启用/禁用网络接口
sudo ip link set eth0 up
sudo ip link set eth0 down

# 配置默认网关
sudo ip route add default via 192.168.1.1

# 配置 DNS(临时)
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 8.8.4.4" | sudo tee -a /etc/resolv.conf

永久配置 - Ubuntu/Debian(Netplan)

Ubuntu 17.10+ 使用 Netplan 配置网络:

# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
        search:
          - example.com

应用配置:

# 测试配置
sudo netplan try

# 应用配置
sudo netplan apply

# 生成配置(不应用)
sudo netplan generate

永久配置 - CentOS/RHEL 7+(NetworkManager)

# 使用 nmcli 配置
sudo nmcli connection modify eth0 \
    ipv4.addresses 192.168.1.100/24 \
    ipv4.gateway 192.168.1.1 \
    ipv4.dns "8.8.8.8 8.8.4.4" \
    ipv4.method manual

# 激活连接
sudo nmcli connection up eth0

# 查看连接状态
nmcli connection show
nmcli device status

永久配置 - CentOS/RHEL 6(传统方式)

# 编辑网卡配置文件
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0

配置文件内容:

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
TYPE=Ethernet

重启网络服务:

sudo systemctl restart network
# 或
sudo service network restart

配置静态路由

# 临时添加静态路由
sudo ip route add 10.0.0.0/8 via 192.168.1.254

# 永久添加(Ubuntu Netplan)
# 在 netplan 配置中添加:
# routes:
#   - to: 10.0.0.0/8
#     via: 192.168.1.254

# 永久添加(CentOS)
# 创建文件 /etc/sysconfig/network-scripts/route-eth0
10.0.0.0/8 via 192.168.1.254

网络接口绑定(Bonding)

将多个物理网卡绑定为一个逻辑接口,提高带宽或提供冗余:

# 查看支持的绑定模式
cat /sys/class/net/bonding_masters

# 创建绑定接口(临时)
sudo ip link add bond0 type bond mode 802.3ad
sudo ip link set eth0 master bond0
sudo ip link set eth1 master bond0
sudo ip link set bond0 up

绑定模式:

网络命名空间(高级)

# 创建命名空间
sudo ip netns add ns1

# 查看命名空间
ip netns list

# 在命名空间中执行命令
sudo ip netns exec ns1 ip addr

# 删除命名空间
sudo ip netns del ns1

验证方法

网络连通性测试流程

按照以下顺序进行网络故障排查:

1. 本地接口检查 → 2. 网关连通性 → 3. 外网连通性 → 4. DNS 解析 → 5. 服务可达性

步骤 1:检查本地网络接口

# 检查接口状态
ip addr show
ip link show

# 检查接口是否 UP
ip link show | grep "state UP"

# 验证环回接口
ping -c 3 127.0.0.1

预期结果:

步骤 2:测试网关连通性

# 获取默认网关
ip route | grep default

# 测试网关连通性
ping -c 4 <网关 IP>

# 检查 ARP 表(验证二层连通性)
arp -a
ip neigh show

预期结果:

步骤 3:测试外网连通性

# 测试公共 DNS
ping -c 4 8.8.8.8
ping -c 4 1.1.1.1

# 测试多个外网地址
ping -c 2 8.8.8.8 && ping -c 2 1.1.1.1 && ping -c 2 208.67.222.222

# 追踪路由
traceroute -m 15 8.8.8.8

预期结果:

步骤 4:测试 DNS 解析

# 测试域名解析
nslookup www.google.com
dig www.google.com +short

# 测试不同 DNS 服务器
dig @8.8.8.8 www.google.com
dig @1.1.1.1 www.google.com

# 测试反向解析
dig -x 8.8.8.8 +short

预期结果:

步骤 5:测试服务可达性

# 测试 HTTP 服务
curl -I https://www.google.com

# 测试特定端口
nc -zv www.google.com 443
telnet www.google.com 443

# 使用 ss 检查本地端口
ss -tlnp | grep :80

自动化测试脚本

创建一个综合网络测试脚本:

#!/bin/bash
# network-test.sh - 网络连通性综合测试

echo "=== 网络连通性测试 ==="
echo "时间:$(date)"
echo ""

# 1. 检查网络接口
echo "1. 网络接口状态"
ip -br addr show
echo ""

# 2. 检查网关
echo "2. 默认网关"
ip route | grep default
GATEWAY=$(ip route | grep default | awk '{print $3}')
if [ -n "$GATEWAY" ]; then
    echo "测试网关连通性..."
    ping -c 2 -W 1 "$GATEWAY" > /dev/null && echo "✓ 网关可达" || echo "✗ 网关不可达"
fi
echo ""

# 3. 测试外网
echo "3. 外网连通性"
for ip in 8.8.8.8 1.1.1.1 208.67.222.222; do
    ping -c 2 -W 1 "$ip" > /dev/null && echo "✓ $ip 可达" || echo "✗ $ip 不可达"
done
echo ""

# 4. 测试 DNS
echo "4. DNS 解析测试"
if nslookup www.google.com > /dev/null 2>&1; then
    echo "✓ DNS 解析正常"
    dig www.google.com +short
else
    echo "✗ DNS 解析失败"
fi
echo ""

# 5. 测试 HTTP
echo "5. HTTP 连接测试"
if curl -s --connect-timeout 3 -o /dev/null https://www.google.com; then
    echo "✓ HTTPS 连接正常"
else
    echo "✗ HTTPS 连接失败"
fi
echo ""

echo "=== 测试完成 ==="

使用方法:

chmod +x network-test.sh
./network-test.sh

网络性能测试

# 带宽测试(需要 iperf3)
# 服务器端
iperf3 -s

# 客户端
iperf3 -c <服务器 IP>

# 延迟测试
ping -c 100 8.8.8.8 | tail -5

# 下载速度测试
curl -o /dev/null http://speedtest.wdc01.softlayer.com/downloads/test10.zip

# 使用 speedtest-cli
speedtest-cli

常见问题

1. 无法获取 IP 地址(DHCP 失败)

症状:

排查步骤:

# 1. 检查接口状态
ip link show eth0

# 2. 查看 DHCP 客户端日志
sudo journalctl -u dhcpcd -f
# 或
sudo tail -f /var/log/syslog | grep dhcp

# 3. 手动请求 DHCP
sudo dhclient -v eth0

# 4. 检查 DHCP 服务器是否可达
# 查看网络中是否有 DHCP 响应
sudo tcpdump -i eth0 -n port 67 or port 68

解决方案:

2. 能 ping 通 IP 但无法访问域名

症状:

排查步骤:

# 1. 检查 DNS 配置
cat /etc/resolv.conf

# 2. 测试 DNS 解析
nslookup www.google.com
dig www.google.com

# 3. 检查 DNS 服务是否响应
dig @8.8.8.8 www.google.com

# 4. 检查防火墙是否阻止 DNS
sudo iptables -L -n | grep 53

解决方案:

3. 默认网关不可达

症状:

排查步骤:

# 1. 确认网关配置
ip route show

# 2. 检查网关配置是否正确
ip addr show eth0

# 3. 检查 ARP 表
ip neigh show

# 4. 检查物理连接
ethtool eth0 | grep "Link detected"

# 5. 查看网络统计
ip -s link show eth0

解决方案:

4. 网络连接间歇性中断

症状:

排查步骤:

# 1. 持续 ping 测试
ping -c 1000 8.8.8.8 | grep -E "(packet loss|rtt)"

# 2. 检查接口错误统计
ip -s link show

# 3. 检查系统日志
sudo dmesg | grep -i eth
sudo journalctl -xe | grep -i network

# 4. 检查网络负载
watch -n 1 'cat /proc/net/dev'

# 5. 检查是否有 IP 冲突
arping -c 5 <你的 IP>

可能原因:

5. 端口无法访问

症状:

排查步骤:

# 1. 检查服务是否监听正确端口
ss -tlnp | grep <端口号>
netstat -tlnp | grep <端口号>

# 2. 检查监听地址
# 0.0.0.0 表示监听所有接口
# 127.0.0.1 表示只监听本地

# 3. 检查防火墙
sudo iptables -L -n
sudo ufw status
sudo firewall-cmd --list-all

# 4. 检查 SELinux(CentOS/RHEL)
getenforce
sudo ausearch -m avc -ts recent | grep <端口号>

# 5. 本地端口测试
nc -zv localhost <端口号>

解决方案:

6. 网络速度慢

症状:

排查步骤:

# 1. 测试实际带宽
iperf3 -c <测试服务器>

# 2. 检查接口速率
ethtool eth0 | grep -E "(Speed|Duplex)"

# 3. 检查网络错误
ip -s link show
cat /proc/net/dev

# 4. 检查是否有带宽限制
tc qdisc show

# 5. 检查网络拥塞
mtr 8.8.8.8

# 6. 检查 DNS 解析时间
time nslookup www.google.com

可能原因:

7. SSH 连接失败

症状:

排查步骤:

# 1. 检查基本连通性
ping <目标主机>

# 2. 检查 SSH 端口
nc -zv <目标主机> 22

# 3. 详细模式连接
ssh -v user@host

# 4. 检查 SSH 服务状态(远程)
# 通过其他方式登录后检查
systemctl status sshd

# 5. 检查防火墙
# 本地
sudo ufw status
# 远程需要其他方式检查

解决方案:

8. IPv6 连接问题

症状:

排查步骤:

# 1. 检查 IPv6 配置
ip -6 addr show

# 2. 测试 IPv6 连通性
ping6 -c 4 ipv6.google.com

# 3. 检查 IPv6 路由
ip -6 route show

# 4. 查看优先级
cat /proc/sys/net/ipv6/conf/all/disable_ipv6

# 5. 临时禁用 IPv6 优先级
# 修改 /etc/gai.conf,取消以下行的注释:
# precedence ::ffff:0:0/96  100

解决方案:

9. MTU 问题导致连接异常

症状:

排查步骤:

# 1. 检查当前 MTU
ip link show | grep mtu

# 2. 测试不同 MTU 的 ping
ping -s 1472 -M do 8.8.8.8  # 应该成功
ping -s 1473 -M do 8.8.8.8  # 可能失败

# 3. 查找最佳 MTU
# 从 1500 开始递减测试

# 4. 检查路径 MTU
tracepath 8.8.8.8

解决方案:

10. 网络命名空间隔离问题

网络命名空间隔离问题

这个结构把“网络命名空间隔离问题”拆成可复盘的检查边界,下面的内容会沿着这些边界继续展开。

症状:

排查步骤:

# 1. 检查命名空间
ip netns list

# 2. 进入命名空间检查
ip netns exec <namespace> ip addr
ip netns exec <namespace> ip route

# 3. 检查虚拟网卡
ip link show type veth

# 4. 检查 NAT 规则
sudo iptables -t nat -L -n

# 5. 检查转发设置
cat /proc/sys/net/ipv4/ip_forward

解决方案:


从概念到现场的网络心智模型

网络基础最容易学成“术语清单”:知道交换机、路由器、IP、端口、DNS、网关这些词,但遇到真实故障时仍然不知道从哪里下手。更稳妥的方式是把网络理解成一条可验证的数据路径:应用先生成请求,操作系统选择源地址和路由,网卡把数据交给本地链路,交换机在广播域内转发帧,路由器在不同网段之间选择下一跳,防火墙和安全策略决定是否允许通过,目标主机再把流量交给对应进程。

这条路径里有三个关键问题:

  1. 我要找谁:由域名、IP 地址、子网、路由和 DNS 共同回答。
  2. 我怎么过去:由网卡、网关、交换机、路由器、VLAN、无线和运营商链路共同决定。
  3. 对方是否接收:由端口监听、防火墙策略、应用状态、证书、认证和业务逻辑共同决定。

很多初学者把 ping 当成网络是否正常的唯一证据,这是不够的。ping 主要证明 ICMP 层面的可达性,不能证明 TCP 端口开放,不能证明 TLS 握手成功,也不能证明 HTTP 服务返回正确内容。一个生产排障过程至少要能分别回答:本机地址是否正确、默认网关是否可达、DNS 是否能解析、路由是否走对、端口是否可达、应用是否响应、返回内容是否符合预期。

一条 HTTPS 请求的最小证据链

以访问 https://example.com 为例,可以把证据链拆成七步:

步骤 要验证的问题 常用证据
本机接口 网卡是否启用,是否拿到正确地址 ip addrip link
默认路由 不在本网段的流量交给谁 ip route
DNS 域名能否解析到预期地址 dignslookup
网关 本机到默认网关是否可达 ping <gateway>ip neigh
路径 中间路径是否异常 traceroutemtr
端口 目标 TCP 443 是否可达 nc -vz host 443curl -v
应用 TLS 和 HTTP 是否正常 curl -vkI、服务日志

这个表的价值不是让人死记命令,而是建立“每条结论必须有证据”的习惯。说“网络不通”太笼统;说“DNS 能解析,默认网关可达,TCP 443 建连超时,路径在出口防火墙后停止”才是可处理的问题。

网络边界比设备名称更重要

真实环境里的设备功能经常重叠:一台无线控制器可能同时做认证和策略,一台防火墙可能同时做路由、NAT、VPN 和 IPS,一台三层交换机可能既做二层转发又做网关。学习网络基础时,不要只问“这个设备叫什么”,更应该问“当前这一步由哪个边界决定”。

常见边界包括:

排障时先定位边界,再找设备。比如客户端能解析域名,也能 ping 通目标 IP,但 TCP 443 超时,问题更可能在四层策略、目标监听、回程路由或中间 NAT,而不是 DNS。又比如同网段主机互相不通,优先检查 VLAN、ARP、交换机端口和主机防火墙,而不是去改默认路由。

基础实验路径

网络基础一定要做实验。只看概念,无法建立对“正常输出”和“异常输出”的感觉。建议准备一台 Linux 虚拟机或云主机,至少完成下面四类实验。

实验一:本机网络基线

目标是记录一台正常主机的网络状态:

ip link
ip addr
ip route
ip neigh
ss -lntup
resolvectl status 2>/dev/null || cat /etc/resolv.conf

记录时不要只保存命令输出,还要写清楚每个字段的含义:哪个接口是主网卡,哪个地址是 IPv4,哪个地址是 IPv6,默认网关是谁,DNS 服务器是谁,哪些端口在监听。以后遇到故障时,这份基线就是对比依据。

实验二:逐层验证外网访问

选择一个稳定目标,按顺序验证:

ping -c 3 127.0.0.1
ping -c 3 <本机IP>
ping -c 3 <默认网关>
ping -c 3 1.1.1.1
dig example.com
curl -I https://example.com

这个顺序很重要。环回不通,说明本机协议栈或系统状态异常;本机 IP 不通,说明接口配置异常;网关不通,说明本地链路或二层邻居异常;公网 IP 不通,说明路由或出口异常;DNS 不通,说明解析链路异常;HTTP 不通,才进入应用和安全策略排查。

实验三:观察邻居关系

同网段通信依赖 ARP 或 IPv6 邻居发现。可以用下面命令观察:

ip neigh show
sudo tcpdump -i eth0 -nn arp

当访问同网段主机时,系统需要把目标 IP 解析成 MAC;当访问外网时,系统解析的是默认网关的 MAC,而不是远端服务器的 MAC。这一点非常关键。很多初学者误以为访问互联网时二层目的 MAC 是公网服务器,实际上每一跳链路都会重写二层头部,IP 目的地址保持不变,MAC 只在本地链路内有效。

实验四:端口和应用验证

确认 IP 可达后,再验证端口和应用:

nc -vz example.com 443
curl -v https://example.com/
ss -lntup

nc 能证明 TCP 建连是否成功,curl -v 能看到 DNS、TCP、TLS、HTTP 的关键过程,ss 能确认本机是否有服务监听。若本机服务监听在 127.0.0.1,外部主机无法访问;若监听在 0.0.0.0,还要继续检查主机防火墙、安全组和上游策略。

生产环境中的基础规范

网络基础进入生产环境后,最重要的是规范,而不是命令数量。一个小型网络也应至少维护四类资料:

资料 内容 用途
地址规划 网段、网关、DHCP 范围、保留地址、用途 防止地址冲突和网段重叠
拓扑图 交换机、路由器、防火墙、无线、服务器连接关系 支撑变更评审和故障定位
策略表 源、目的、端口、协议、方向、负责人 防止防火墙规则不可解释
基线记录 正常时期的接口、路由、邻居、端口和性能 支撑故障前后对比

这些资料不需要一开始就很复杂,但必须准确。网络故障中最浪费时间的情况,往往不是技术难,而是没人知道某个地址属于谁、某条链路通向哪里、某条策略为什么存在、某个网关是否还能改。

变更前后的最小检查

每次修改地址、网关、DNS、路由、防火墙、交换机端口或无线配置,都应该执行最小检查:

  1. 变更前保存当前配置和关键命令输出。
  2. 明确影响范围:哪些网段、哪些用户、哪些应用可能受影响。
  3. 准备回滚方式:配置文件、命令、控制台访问方式。
  4. 变更后按证据链验证:网关、DNS、端口、应用、监控告警。
  5. 更新文档:地址表、拓扑、策略表、变更记录。

没有这套动作,很多“小改动”都会变成后续无法解释的问题。尤其是 DNS、默认网关和防火墙策略,短期看只是一个参数,长期会影响大量系统。

初学者容易混淆的几个点

第一,IP 地址和 MAC 地址不是替代关系。IP 用于端到端寻址,MAC 用于本地链路转发。跨网段通信时,IP 目的地址通常不变,MAC 目的地址每一跳都会变化。

第二,网关不是“任何网络问题的万能出口”。默认网关只负责把非本地网段流量交给下一跳。如果本机掩码配置错误,系统可能误以为远端在本地,根本不会把流量交给网关。

第三,DNS 正常不代表网络一定正常。DNS 只解决名称到地址的映射,后续还要经过路由、策略、端口和应用处理。反过来,IP 能通但域名不通,通常优先看 DNS 配置、解析结果和防火墙是否允许 53/UDP 或 53/TCP。

第四,端口开放不代表业务正常。TCP 连接成功只说明目标进程或代理接受连接,HTTP 状态码、证书、认证、后端健康检查和业务日志仍需要继续验证。

第五,IPv6 不能忽略。很多系统默认启用 IPv6,浏览器或应用可能优先尝试 AAAA 记录。IPv4 正常、IPv6 异常时,用户仍可能感知为访问慢或间歇失败。

小型网络案例:从一台电脑到一个办公室

把前面的概念放到一个小型办公室场景里更容易理解。假设办公室有一条互联网宽带、一台出口路由器、一台二层交换机、一台无线 AP、十几台办公电脑、两台打印机和一台内部文件服务器。最小网络设计可以这样拆:

对象 设计内容 验证方法
出口路由器 连接运营商,提供默认网关、NAT 和基础防火墙 查看 WAN 状态、默认路由、NAT 会话
交换机 承载有线终端和 AP 上联 查看端口状态、速率、错误包、MAC 表
无线 AP 提供员工 Wi-Fi 和访客 Wi-Fi 检查 SSID、认证、客户端地址
DHCP 给办公终端分配地址、网关和 DNS 查看租约、地址池、冲突记录
DNS 解析公网域名和内部服务名 dig 测试 A/AAAA 记录
文件服务器 提供内部共享服务 验证 IP、端口、权限和访问日志

这个场景里,员工反馈“无法访问文件服务器”时,不应直接重启服务器。更好的路径是:确认员工电脑是否拿到正确地址,确认能否 ping 通默认网关,确认能否解析文件服务器名称,确认访问的是正确 IP,确认 TCP 端口是否开放,确认服务器服务是否监听,最后再看账号权限和共享配置。每一步都有明确证据,排障就不会在不同团队之间来回推诿。

如果访客 Wi-Fi 能上网但不能访问内部文件服务器,这可能是正确设计,因为访客网络通常应该隔离内网资源。如果员工 Wi-Fi 也不能访问,就要检查员工 SSID 绑定的 VLAN、地址池、网关策略、防火墙放行和服务器侧访问控制。这里可以看到,网络基础不是孤立命令,而是业务边界、安全边界和设备配置共同作用的结果。

学完本篇后的自测清单

读完本篇后,可以用下面的问题检查自己是否真正掌握:

  1. 给定一台主机的 IP、掩码和网关,能否判断它访问某个目标时是否需要经过网关?
  2. 访问公网网站时,目的 IP、目的 MAC、目的端口分别代表什么?
  3. DNS 解析成功但网页打不开,下一步应该验证哪几类证据?
  4. ip route 中默认路由和直连路由有什么区别?
  5. ss -lntup 看到服务只监听 127.0.0.1,为什么外部主机无法访问?
  6. 同网段两台主机互相不通时,为什么要检查 ARP、VLAN 和本机防火墙?
  7. 为什么禁用 ICMP 可能影响路径 MTU 和故障诊断?
  8. 为什么修改 DNS、网关、防火墙策略前要记录变更前基线?

能回答这些问题,说明你已经能从“会敲命令”进入“能解释网络行为”。后续学习 OSI、TCP/IP、子网、VLAN、路由和防火墙时,都可以把这些问题作为底层检查框架。

网络问题交接模板

日常协作中,网络问题最好按模板交接,避免只说“网络有问题”:

字段 示例
现象 办公网电脑访问文件服务器超时
影响范围 仅三楼无线用户,二楼有线用户正常
源和目的 源地址段、目标 IP、目标端口
已验证证据 DNS 正常、网关可达、TCP 445 超时
最近变更 前一晚调整员工 Wi-Fi VLAN
临时措施 有线接入可恢复访问
责任边界 需要检查 AP、交换机 trunk、防火墙策略和服务器日志

这个模板可以显著减少沟通成本。接手的人能立即判断下一步该查链路、地址、路由、策略还是应用,而不是重新从零询问。长期坚持记录,还能沉淀出常见故障模式和变更风险清单,帮助团队持续改进和复盘沉淀,提升协作效率和质量。

总结

本文介绍了网络基础的核心概念,包括:

  1. 网络基础:网络的定义、价值、分类
  2. 核心概念:拓扑结构、协议、OSI 模型、IP 地址
  3. 实战命令:ping、traceroute、ip、ss 等常用工具
  4. 配置方法:Linux 网络的临时和永久配置
  5. 验证流程:系统化的网络连通性测试方法
  6. 故障排查:10 个常见网络问题及解决方案

掌握这些基础知识是进一步学习网络技术的基石。建议读者:

下一篇: OSI 七层模型详解(尚未在官网发布)

参考资料


所属系列: 网络基础 相关文档:

相关产品

相关文章

暂无已发布相关文章。