服务连不上、域名解析失败、能 ping 通 IP 却打不开网页——这些网络问题的根源,大多出在四个基本概念上:IP、子网、网关、DNS,再叠加一层路由。很多人对它们是「知道名字、说不清原理」的状态,所以排障时只能靠重启和猜。这一篇把网络四要素讲透,配合 Linux 下的查看命令,帮你建立「数据包怎么从本机走到目标」的完整认知。
一、网络四要素:一张图搞懂
想象你要寄一封信给「上海市浦东新区张江路 100 号的小明」。寄信需要:
- 收件人地址(IP 地址):小明的具体门牌
- 地址里哪部分是区域(子网掩码):判断「本市内投递」还是「寄往外省」
- 邮局大门(默认网关):出了本区域后,交给谁继续送
- 查号台(DNS):你说「小明的店」这个名字,查号台告诉你具体门牌(域名 → IP)
数据包发送的过程,本质和寄信一样。把这张「寄信图」装进脑子,后面全顺。
| 概念 | 作用 | 类比 |
|---|---|---|
| IP 地址 | 定位主机 | 门牌号 |
| 子网掩码 | 划分网段,判断是否同网 | 区域划分 |
| 网关 | 跨网段的出口 | 邮局大门 |
| DNS | 域名解析成 IP | 查号台 |
| 路由表 | 决定包从哪条路走 | 投递路线 |
二、IP 地址与子网掩码
IP 地址
IPv4 是 32 位,写成点分十进制四个字节,如192.168.1.10。它由两部分组成:
[ 网络号 ][ 主机号 ]网络号标识「在哪个网络」,主机号标识「网络内的哪台机器」。两者怎么分,由子网掩码决定。
子网掩码
掩码是连续的 1 后跟连续的 0。1覆盖的位是网络号,0覆盖的位是主机号。
常见掩码:
| CIDR | 掩码 | 可用主机数 |
|---|---|---|
| /24 | 255.255.255.0 | 254 |
| /25 | 255.255.255.128 | 126 |
| /16 | 255.255.0.0 | 65534 |
| /8 | 255.0.0.0 | 16777214 |
为什么是 254 而不是 256?每个网段有两个地址被保留:
- 网络地址:主机号全 0(如
192.168.1.0),代表「整个网络」 - 广播地址:主机号全 1(如
192.168.1.255),发给网段内所有主机
判断两台机器是否同网段
核心规则:两 IP 分别和掩码做「按位与」,结果相同就是同网段,可以直接通信;不同就得走网关。
# 示例:192.168.1.10/24 与 192.168.1.20/24 192.168.1.10 & 255.255.255.0 = 192.168.1.0 # 网络地址相同 192.168.1.20 & 255.255.255.0 = 192.168.1.0 # 同网段 ✓ # 192.168.1.10/24 与 192.168.2.20/24 192.168.1.10 & 255.255.255.0 = 192.168.1.0 192.168.2.20 & 255.255.255.0 = 192.168.2.0 # 不同网段,需网关私有地址
这三个网段是私有地址,只在局域网内用,不能直接上公网:
| 网段 | 说明 |
|---|---|
10.0.0.0/8 | 大企业常用 |
172.16.0.0/12 | 中型网络 |
192.168.0.0/16 | 家庭/小型办公 |
保留地址
| 地址 | 含义 |
|---|---|
127.0.0.0/8 | 回环(localhost) |
169.254.0.0/16 | 链路本地(DHCP 失败时自动分配,见到就说明网络没配好) |
0.0.0.0 | 本机所有地址 / 未指定 |
看到169.254.x.x就是 DHCP 拿不到地址的信号,是排障的重要线索。
三、网关
网关(Gateway)是「本网段通往其他网段的出口」。当你访问的 IP 不在本网段,包会先发给网关,由它转发。
- 默认网关(default gateway):路由表里
0.0.0.0那条,是所有「不知道往哪走」的包的兜底出口。 - 通常网关就是路由器的内网地址,如
192.168.1.1。
没有网关,本机只能和自己同网段的主机通信,出不了网。
查看网关:
ip route show defaultdefault via 192.168.1.1 dev eth0 proto dhcp metric 100via 192.168.1.1就是默认网关。
四、DNS:域名到 IP 的翻译官
人对域名敏感(www.baidu.com),机器只认 IP(110.242.68.66)。DNS 负责翻译。
解析流程
以解析www.example.com为例:
1. 查本机 hosts 文件(/etc/hosts) 2. 查本地 DNS 缓存(systemd-resolved / nscd) 3. 问 /etc/resolv.conf 里配置的 DNS 服务器 └─ 递归查询:根域名 → .com → example.com → www.example.com 4. 拿到 IP,缓存并返回关键配置文件
| 文件 | 作用 |
|---|---|
/etc/hosts | 本地静态解析,优先级最高 |
/etc/resolv.conf | DNS 服务器配置 |
/etc/nsswitch.conf | 解析顺序(hosts → dns 等) |
/etc/hosts
cat /etc/hosts127.0.0.1 localhost 127.0.1.1 web01 192.168.1.100 db-server用途:本地开发映射、临时绕过 DNS、屏蔽域名(指向 127.0.0.1)。hosts 优先于 DNS,调试域名问题时先看它。
/etc/resolv.conf
cat /etc/resolv.confnameserver 223.5.5.5 nameserver 8.8.8.8 options timeout:2 attempts:3nameserver:DNS 服务器地址,可配多个,按顺序尝试options timeout:查询超时(秒)options attempts:重试次数
⚠️ systemd-resolved 的坑
Ubuntu 18.04+ 默认用systemd-resolved,/etc/resolv.conf常是一个软链接:
ls -l /etc/resolv.conf /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf直接编辑/etc/resolv.conf会被 systemd 覆盖。正确做法:
# 方法一:改 resolved 配置 sudo vim /etc/systemd/resolved.conf # 填 DNS=223.5.5.5 8.8.8.8 sudo systemctl restart systemd-resolved # 方法二:改用真实文件(关闭 stub) sudo rm /etc/resolv.conf echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf sudo chattr +i /etc/resolv.conf # 防止被覆盖五、Linux 下查看网络配置
旧命令ifconfig、route、netstat已逐渐被ip系列取代(属于iproute2包)。现代系统优先用ip。
ip addr:看 IP 地址
ip addr show2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff inet 192.168.1.10/24 brd 192.168.1.255 scope global dynamic eth0 valid_lft 86390sec preferred_lft 86390sec inet6 fe80::5054:ff:fe12:3456/64 scope link关键信息:state UP(网卡启用)、inet 192.168.1.10/24(IPv4 地址和掩码)、link/ether(MAC 地址)。
ip route:看路由表
ip route showdefault 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.10逐行看:
default via 192.168.1.1:默认路由(网关)192.168.1.0/24 dev eth0 ... src 192.168.1.10:本网段直连,不用网关
其他常用命令
| 命令 | 作用 |
|---|---|
ip -br addr | 简洁显示所有接口 |
ip link set eth0 up/down | 启用/禁用网卡 |
ip route get 8.8.8.8 | 查看到某 IP 会走哪条路由 |
cat /etc/hosts | 本地解析 |
cat /etc/resolv.conf | DNS 配置 |
查看哪条路由会被选中
ip route get 8.8.8.88.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.10 uid 1000这告诉你「去 8.8.8.8 会经 eth0、网关 192.168.1.1、源 IP 192.168.1.10」。排「走错网卡」「多网卡选路」问题时极其有用。
六、⚠️ 常见错误
- 改了
/etc/resolv.conf却被覆盖。systemd-resolved 会重建它,要改resolved.conf或用chattr +i。 - 看到
169.254.x.x还在查上游。这是本机 DHCP 失败时的自分配地址,说明本机根本没拿到网络配置,先查 DHCP 或网线。 - hosts 改了不生效。可能是应用缓存了 DNS/连接,或解析走了别的顺序,检查
/etc/nsswitch.conf。 - 子网掩码配错导致「能通却不全通」。同网段却走网关,或跨网段当同网段,会出现部分通、部分不通的诡异现象。
- 多网卡默认路由冲突。两个网卡都有 default 路由,包从哪个走不确定。用
ip route get确认,必要时用 metric 调优先级。 - ping 域名不通但 ping IP 通。这是 DNS 问题,不是网络不通,去查 DNS 配置。
- 防火墙放行忘了方向。出站出得去,入站回不来(或反过来),表现为「主动连出去可以,别人连不进来」。
七、原理探究:一个数据包的旅程
理解数据包怎么走到目标,网络问题就都串起来了。假设你在本机执行ping www.example.com:
第一步:域名解析
查 hosts → 查缓存 → 问 DNS 服务器 → 得到 IP 93.184.216.34第二步:判断目标是否同网段
用本机 IP 与掩码算出网络地址,和目标的网络地址比:
- 同网段→ 直接 ARP 找到目标 MAC,发出去
- 不同网段→ 目标 MAC 填网关的 MAC,交给网关转发
第三步:查路由表决定出口
ip route get 93.184.216.34内核按「最长前缀匹配」选路由:越具体的路由(前缀越长)优先级越高。默认路由(0.0.0.0/0)是兜底。
第四步:封装、封装、再封装
数据从应用层往下走,每层加自己的头:
[以太网头 [IP头 [TCP头 [数据]]]] ← 二层帧- 目标 IP 在IP 头里
- 目标端口在TCP 头里
- 目标 MAC 在以太网头里
第五步:ARP 找下一跳的 MAC
同网段直接找目标 MAC;跨网段找网关 MAC。ARP 就是「这个 IP 是谁,报上 MAC」的广播请求。
第六步:出网卡 → 路由器 → 一跳一跳到目标
包到达路由器后,路由器只看 IP 头,查自己的路由表决定下一跳,重新封装二层头(换源/目标 MAC),继续转发。每一跳 IP 不变,MAC 一直在变。
第七步:回包沿路返回
目标回包时,源/目标地址对调。回来时可能走不同路径(互联网路由是动态的)。
把这七步记住,「通不通、慢不慢、丢不丢」的问题都能一层层定位:解析有没有问题(DNS)→ 路由对不对(route)→ 能不能到达(链路)→ 会不会被拦(防火墙)→ 回得来吗(NAT/防火墙)。
八、网络基础速查表
# IP 地址与网卡状态 ip addr show ip -br addr # 路由与默认网关 ip route show ip route get 8.8.8.8 # DNS 配置 cat /etc/resolv.conf cat /etc/hosts resolvectl status # systemd-resolved 用户 # 网卡启停 sudo ip link set eth0 down sudo ip link set eth0 up # 常见问题对应 # 169.254.*.* → DHCP 失败 # ping IP 通、域名不通 → DNS 问题 # 同网段不通 → 掩码或 ARP 问题 # 跨网段不通 → 网关/路由问题网络四要素是排障的骨架:IP 定位、掩码分网、网关出门、DNS 翻译。下一篇讲怎么用ip、nmcli、netplan、ifcfg去实际配置这些参数,把「看懂」变成「配得对」。