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

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

什么是网络
计算机网络是指将地理位置不同的多台计算机及其外部设备,通过通信线路和通信设备连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
简单来说,网络就是让设备之间能够"对话"的基础设施。就像电话系统让人与人可以远程交流一样,计算机网络让设备与设备可以交换数据。
为什么需要网络
网络存在的核心价值体现在以下几个方面:
-
资源共享
- 硬件资源共享:打印机、存储设备、计算资源等可以供多台计算机共同使用
- 软件资源共享:应用程序、数据库、文件等可以在网络内部分享
- 数据资源共享:信息可以在授权范围内被多个用户访问和使用
-
信息传递
- 即时通信:邮件、即时消息、视频会议等
- 数据传输:文件传输、数据同步、备份等
- 远程访问:远程登录、远程桌面、云计算服务等
-
分布式处理
- 负载均衡:将任务分散到多台计算机上处理
- 高可用性:多台服务器互为备份,提高系统可靠性
- 并行计算:大型计算任务可以拆分到多个节点同时执行
-
成本效益
- 降低硬件成本:共享设备减少重复投资
- 降低管理成本:集中化管理提高效率
- 提高资源利用率:避免资源闲置浪费
网络的分类
按照不同的标准,网络可以分为多种类型:
| 分类标准 | 类型 | 说明 |
|---|---|---|
| 覆盖范围 | 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]
特点:
- 每个节点与其他多个节点直接连接
- 全连接:每个节点都与其他所有节点相连
- 部分连接:节点只与部分其他节点相连
- 冗余度高,可靠性强
- 成本高,布线复杂
应用场景: 核心网络、数据中心、关键任务系统
网络协议
网络协议是计算机网络中设备之间进行通信时必须遵循的规则和约定。就像人类交流需要共同的语言一样,网络设备通信需要共同的协议。
协议三要素
-
语法(Syntax):数据格式、编码规则
- 规定数据的结构、格式
- 例如:IP 数据包的头部格式
-
语义(Semantics):控制信息含义、动作
- 规定通信双方要发出什么控制信息
- 执行的动作和返回的应答
-
时序(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(用户数据报协议)
- 无连接:直接发送数据,不需要建立连接
- 不可靠:不保证数据到达,不保证顺序
- 低延迟:没有连接建立和确认的开销
- 适用场景:视频流、语音通话、在线游戏、DNS 查询
OSI 模型简介
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 层 - 数据链路层
- 将比特组合成帧(Frame)
- 提供物理地址(MAC 地址)
- 错误检测(不纠正)
- 流量控制(相邻节点之间)
第 3 层 - 网络层
- 逻辑寻址(IP 地址)
- 路由选择:决定数据包从源到目的地的路径
- 分组和重组
第 4 层 - 传输层
- 端到端的通信
- 分段和重组
- 连接管理(TCP)
- 流量控制和错误恢复
第 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 | 保留 |
私有地址范围(不可在互联网上路由):
- 10.0.0.0/8(10.0.0.0 - 10.255.255.255)
- 172.16.0.0/12(172.16.0.0 - 172.31.255.255)
- 192.168.0.0/16(192.168.0.0 - 192.168.255.255)
子网掩码
子网掩码用于区分 IP 地址中的网络部分和主机部分:
IP 地址: 192.168.1.100
子网掩码: 255.255.255.0
网络地址: 192.168.1.0
主机地址: 100
CIDR 表示法:
- 255.255.255.0 = /24(24 位网络位)
- 255.255.0.0 = /16
- 255.0.0.0 = /8
IPv6 简介
由于 IPv4 地址耗尽,IPv6 应运而生:
- 128 位地址长度(是 IPv4 的 4 倍)
- 表示法:8 组 4 位十六进制数,如
2001:0db8:85a3:0000:0000:8a2e:0370:7334 - 可简化:
2001:db8:85a3::8a2e:370:7334 - 地址空间:约 3.4×10³⁸个地址
实战操作
本节介绍常用的网络诊断命令,这些命令在 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
输出解读:
icmp_seq:ICMP 序列号ttl:生存时间,每经过一个路由器减 1time:往返时间(RTT),单位毫秒packet loss:丢包率,正常应为 0%
常见问题诊断:
Destination Host Unreachable:目标主机不可达,可能是路由问题Request Timed Out:请求超时,可能是防火墙阻止或主机离线Unknown Host:DNS 解析失败
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
输出解读:
- 每一行代表一跳(一个路由器)
- 每行显示 3 次探测的往返时间
*表示该跳没有响应(可能是防火墙阻止)- 第一跳通常是你的网关/路由器
应用场景:
- 定位网络延迟发生在哪一跳
- 诊断路由环路
- 识别网络中断点
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
输出解读:
lo:环回接口(localhost)eth0:第一个以太网接口inet:IPv4 地址inet6:IPv6 地址mtu:最大传输单元state UP:接口已启用
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
输出解读:
default via 192.168.1.1:默认网关是 192.168.1.1192.168.1.0/24 dev eth0:本地网段直接通过 eth0 访问
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))
常用端口:
- 22:SSH
- 80:HTTP
- 443:HTTPS
- 3306:MySQL
- 5432:PostgreSQL
- 6379:Redis
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
绑定模式:
- mode=0(balance-rr):轮询,负载均衡
- mode=1(active-backup):主备,冗余
- mode=4(802.3ad):LACP,需要交换机支持
- mode=6(balance-alb):自适应负载均衡
网络命名空间(高级)
# 创建命名空间
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
预期结果:
- 接口状态应为
UP - 应有正确的 IP 地址配置
- 环回接口应能 ping 通
步骤 2:测试网关连通性
# 获取默认网关
ip route | grep default
# 测试网关连通性
ping -c 4 <网关 IP>
# 检查 ARP 表(验证二层连通性)
arp -a
ip neigh show
预期结果:
- 网关应能 ping 通
- ARP 表中应有网关的 MAC 地址
步骤 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
预期结果:
- 外网地址应能 ping 通
- 延迟应在合理范围内(通常<100ms)
- 丢包率应为 0%
步骤 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
预期结果:
- 域名应能正确解析为 IP 地址
- 解析时间应<100ms
步骤 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 失败)
症状:
ip addr显示接口没有 IP 地址- 网络连接图标显示未连接
排查步骤:
# 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
解决方案:
- 检查网线/无线连接是否正常
- 重启网络服务:
sudo systemctl restart NetworkManager - 检查 DHCP 服务器是否运行
- 尝试配置静态 IP 地址
2. 能 ping 通 IP 但无法访问域名
症状:
ping 8.8.8.8成功ping www.google.com失败,显示 "unknown host"
排查步骤:
# 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
解决方案:
- 修改
/etc/resolv.conf添加有效 DNS 服务器 - 检查 NetworkManager 配置
- 清除 DNS 缓存:
sudo systemd-resolve --flush-caches - 检查防火墙规则
3. 默认网关不可达
症状:
- 本地网络正常
- 无法访问外网
ping <网关 IP>失败
排查步骤:
# 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
解决方案:
- 确认网关 IP 配置正确
- 检查路由器是否正常工作
- 重启路由器/交换机
- 检查 VLAN 配置(如有)
4. 网络连接间歇性中断
症状:
- 网络时好时坏
- ping 测试有间歇性丢包
排查步骤:
# 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>
可能原因:
- 网线/接口接触不良
- 网络环路
- 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 <端口号>
解决方案:
- 修改服务配置监听 0.0.0.0
- 添加防火墙规则:
sudo ufw allow <端口号>/tcp - 检查 SELinux 策略
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
可能原因:
- 接口协商速率低(如 100M 而非 1G)
- 网络拥塞
- DNS 解析慢
- 带宽限制(QoS)
- 硬件性能瓶颈
7. SSH 连接失败
症状:
ssh user@host连接超时或被拒绝
排查步骤:
# 1. 检查基本连通性
ping <目标主机>
# 2. 检查 SSH 端口
nc -zv <目标主机> 22
# 3. 详细模式连接
ssh -v user@host
# 4. 检查 SSH 服务状态(远程)
# 通过其他方式登录后检查
systemctl status sshd
# 5. 检查防火墙
# 本地
sudo ufw status
# 远程需要其他方式检查
解决方案:
- 确保 SSH 服务运行:
sudo systemctl start sshd - 开放防火墙端口:
sudo ufw allow 22/tcp - 检查 SSH 配置:
/etc/ssh/sshd_config - 检查 hosts.deny/hosts.allow
8. IPv6 连接问题
症状:
- IPv4 正常,IPv6 无法使用
- 应用优先使用 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
解决方案:
- 配置正确的 IPv6 地址和路由
- 如不需要 IPv6,可禁用:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 - 调整应用优先使用 IPv4
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
解决方案:
- 调整接口 MTU:
sudo ip link set eth0 mtu 1400 - 永久配置:在网络配置文件中设置 MTU
- 启用 TCP MTU 发现
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 转发:
sudo sysctl -w net.ipv4.ip_forward=1 - 配置正确的 NAT 规则
- 检查网桥配置
从概念到现场的网络心智模型
网络基础最容易学成“术语清单”:知道交换机、路由器、IP、端口、DNS、网关这些词,但遇到真实故障时仍然不知道从哪里下手。更稳妥的方式是把网络理解成一条可验证的数据路径:应用先生成请求,操作系统选择源地址和路由,网卡把数据交给本地链路,交换机在广播域内转发帧,路由器在不同网段之间选择下一跳,防火墙和安全策略决定是否允许通过,目标主机再把流量交给对应进程。
这条路径里有三个关键问题:
- 我要找谁:由域名、IP 地址、子网、路由和 DNS 共同回答。
- 我怎么过去:由网卡、网关、交换机、路由器、VLAN、无线和运营商链路共同决定。
- 对方是否接收:由端口监听、防火墙策略、应用状态、证书、认证和业务逻辑共同决定。
很多初学者把 ping 当成网络是否正常的唯一证据,这是不够的。ping 主要证明 ICMP 层面的可达性,不能证明 TCP 端口开放,不能证明 TLS 握手成功,也不能证明 HTTP 服务返回正确内容。一个生产排障过程至少要能分别回答:本机地址是否正确、默认网关是否可达、DNS 是否能解析、路由是否走对、端口是否可达、应用是否响应、返回内容是否符合预期。
一条 HTTPS 请求的最小证据链
以访问 https://example.com 为例,可以把证据链拆成七步:
| 步骤 | 要验证的问题 | 常用证据 |
|---|---|---|
| 本机接口 | 网卡是否启用,是否拿到正确地址 | ip addr、ip link |
| 默认路由 | 不在本网段的流量交给谁 | ip route |
| DNS | 域名能否解析到预期地址 | dig、nslookup |
| 网关 | 本机到默认网关是否可达 | ping <gateway>、ip neigh |
| 路径 | 中间路径是否异常 | traceroute、mtr |
| 端口 | 目标 TCP 443 是否可达 | nc -vz host 443、curl -v |
| 应用 | TLS 和 HTTP 是否正常 | curl -vkI、服务日志 |
这个表的价值不是让人死记命令,而是建立“每条结论必须有证据”的习惯。说“网络不通”太笼统;说“DNS 能解析,默认网关可达,TCP 443 建连超时,路径在出口防火墙后停止”才是可处理的问题。
网络边界比设备名称更重要
真实环境里的设备功能经常重叠:一台无线控制器可能同时做认证和策略,一台防火墙可能同时做路由、NAT、VPN 和 IPS,一台三层交换机可能既做二层转发又做网关。学习网络基础时,不要只问“这个设备叫什么”,更应该问“当前这一步由哪个边界决定”。
常见边界包括:
- 链路边界:网线、光纤、无线信号、速率协商、双工、错误包。
- 二层边界:VLAN、MAC 学习、ARP、广播域、环路保护。
- 三层边界:IP 地址、网关、路由、最长前缀匹配、NAT。
- 四层边界:TCP/UDP 端口、会话状态、重传、连接跟踪。
- 七层边界:DNS、HTTP、TLS、认证、反向代理、业务状态码。
- 管理边界:谁能改配置、谁能审批策略、谁负责监控和回滚。
排障时先定位边界,再找设备。比如客户端能解析域名,也能 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、路由、防火墙、交换机端口或无线配置,都应该执行最小检查:
- 变更前保存当前配置和关键命令输出。
- 明确影响范围:哪些网段、哪些用户、哪些应用可能受影响。
- 准备回滚方式:配置文件、命令、控制台访问方式。
- 变更后按证据链验证:网关、DNS、端口、应用、监控告警。
- 更新文档:地址表、拓扑、策略表、变更记录。
没有这套动作,很多“小改动”都会变成后续无法解释的问题。尤其是 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、地址池、网关策略、防火墙放行和服务器侧访问控制。这里可以看到,网络基础不是孤立命令,而是业务边界、安全边界和设备配置共同作用的结果。
学完本篇后的自测清单
读完本篇后,可以用下面的问题检查自己是否真正掌握:
- 给定一台主机的 IP、掩码和网关,能否判断它访问某个目标时是否需要经过网关?
- 访问公网网站时,目的 IP、目的 MAC、目的端口分别代表什么?
- DNS 解析成功但网页打不开,下一步应该验证哪几类证据?
ip route中默认路由和直连路由有什么区别?ss -lntup看到服务只监听127.0.0.1,为什么外部主机无法访问?- 同网段两台主机互相不通时,为什么要检查 ARP、VLAN 和本机防火墙?
- 为什么禁用 ICMP 可能影响路径 MTU 和故障诊断?
- 为什么修改 DNS、网关、防火墙策略前要记录变更前基线?
能回答这些问题,说明你已经能从“会敲命令”进入“能解释网络行为”。后续学习 OSI、TCP/IP、子网、VLAN、路由和防火墙时,都可以把这些问题作为底层检查框架。
网络问题交接模板
日常协作中,网络问题最好按模板交接,避免只说“网络有问题”:
| 字段 | 示例 |
|---|---|
| 现象 | 办公网电脑访问文件服务器超时 |
| 影响范围 | 仅三楼无线用户,二楼有线用户正常 |
| 源和目的 | 源地址段、目标 IP、目标端口 |
| 已验证证据 | DNS 正常、网关可达、TCP 445 超时 |
| 最近变更 | 前一晚调整员工 Wi-Fi VLAN |
| 临时措施 | 有线接入可恢复访问 |
| 责任边界 | 需要检查 AP、交换机 trunk、防火墙策略和服务器日志 |
这个模板可以显著减少沟通成本。接手的人能立即判断下一步该查链路、地址、路由、策略还是应用,而不是重新从零询问。长期坚持记录,还能沉淀出常见故障模式和变更风险清单,帮助团队持续改进和复盘沉淀,提升协作效率和质量。
总结
本文介绍了网络基础的核心概念,包括:
- 网络基础:网络的定义、价值、分类
- 核心概念:拓扑结构、协议、OSI 模型、IP 地址
- 实战命令:ping、traceroute、ip、ss 等常用工具
- 配置方法:Linux 网络的临时和永久配置
- 验证流程:系统化的网络连通性测试方法
- 故障排查:10 个常见网络问题及解决方案
掌握这些基础知识是进一步学习网络技术的基石。建议读者:
- 在实验环境中亲自执行所有命令
- 理解每个命令的输出含义
- 建立系统化的故障排查思维
- 持续积累实际运维经验
下一篇: OSI 七层模型详解(尚未在官网发布)
参考资料
- RFC 791: Internet Protocol,核验日期:2026-06-13。
- RFC 8200: Internet Protocol, Version 6 (IPv6) Specification,核验日期:2026-06-13。
- RFC 9293: Transmission Control Protocol (TCP),核验日期:2026-06-13。
- RFC 1122: Requirements for Internet Hosts,核验日期:2026-06-13。
- Linux ip-route manual,核验日期:2026-06-13。
所属系列: 网络基础 相关文档:
- 常用网络命令速查(尚未在官网发布)
- 网络故障排查手册(尚未在官网发布)
- Linux 网络配置指南(尚未在官网发布)
相关产品
相关文章
暂无已发布相关文章。