计算机网络基础(三):IP、以太网、ARP、DNS与NAT

传输层把数据交给目标进程,网络层负责把数据送到目标网络,数据链路层负责当前链路上的帧交付。

本文沿着一个 IP 数据报的路径,讲解 IPv4 首部、CIDR、路由、以太网、MTU、ARP、DNS、ICMP 与 NAT,并说明这些协议怎样协作完成跨网络通信。

一、网络层的职责

网络层主要解决:

  1. 逻辑寻址:使用 IP 地址标识网络接口和路由目标;
  2. 路由选择:决定数据包下一跳;
  3. 逐跳转发:路由器把数据包从入口转到出口;
  4. 生存范围控制:TTL 防止数据包永久循环;
  5. 差错报告与诊断:ICMP 提供部分通知能力。

IPv4 提供的是尽力而为的数据报服务。它不保证:

  • 一定到达;
  • 只到达一次;
  • 按顺序到达;
  • 延迟上限;
  • 带宽保证。

可靠性通常由 TCP 或应用层协议补充。

二、IPv4 首部

IPv4 基本首部通常为 20 字节,带选项时可以更长。

字段 位数 作用
Version 4 IPv4 中为 4
IHL 4 首部长度,单位为 32 位字
DSCP/ECN 8 服务质量标记与显式拥塞通知
Total Length 16 整个 IPv4 数据报长度
Identification 16 与分片重组相关
Flags 3 包含 DF、MF 等标志
Fragment Offset 13 分片在原数据报中的位置
TTL 8 每经路由转发至少减一
Protocol 8 上层协议,如 TCP=6、UDP=17、ICMP=1
Header Checksum 16 只覆盖 IPv4 首部
Source Address 32 源 IPv4 地址
Destination Address 32 目的 IPv4 地址
Options 可变 可选功能,实际常见包通常无选项

课件中传统的 “TOS 四选一” 是较早的解释。现代该字节通常按 DSCP 和 ECN 语义理解。

2.1 TTL

路由器转发数据包时递减 TTL。TTL 变为 0 时丢弃包,并通常返回 ICMP Time Exceeded。

traceroute 正是通过逐步增加 TTL 并观察返回消息来推测路径中的路由跳数。

2.2 Protocol

接收主机根据 Protocol 字段分用:

  • 1:ICMP;
  • 6:TCP;
  • 17:UDP。

端口属于 TCP/UDP 等传输层协议,不在普通 IPv4 首部中。

三、IP 地址、网络号与主机号

IPv4 地址长度 32 位。CIDR 使用前缀长度说明网络部分:

1
192.168.10.37/24

这里:

  • IP:192.168.10.37;
  • 掩码:255.255.255.0;
  • 网络地址:192.168.10.0;
  • 传统广播地址:192.168.10.255;
  • 常规主机范围:192.168.10.1 到 192.168.10.254。

网络地址通过按位与得到:

1
network = ip AND mask

是否位于同一子网必须结合前缀长度判断,不能只比较点分十进制的前三段。

四、从分类地址到 CIDR

早期 IPv4 使用 A、B、C 类划分网络号长度,造成地址空间浪费和路由表膨胀。

CIDR 使用任意前缀长度:

1
2
3
203.0.113.0/24
10.0.0.0/8
172.16.0.0/12

现代路由与子网设计以 CIDR 为主。A/B/C 类更多是历史知识,不能用来替代实际前缀。

4.1 子网可用地址数量

传统 IPv4 子网中,主机位数为 h 时:

1
地址总数 = 2^h

通常会保留网络地址和广播地址,但 /31 点到点链路与 /32 主机路由有特殊用途,不能机械套用“永远减 2”。

4.2 /26 示例

192.168.1.64/26:

  • 掩码:255.255.255.192;
  • 地址范围:192.168.1.64 到 192.168.1.127;
  • 网络地址:192.168.1.64;
  • 广播地址:192.168.1.127;
  • 常规主机:192.168.1.65 到 192.168.1.126。

五、特殊与保留 IPv4 地址

范围 用途
0.0.0.0/8 “本网络”等特殊语义;0.0.0.0 常表示未指定地址
10.0.0.0/8 RFC 1918 私有地址
100.64.0.0/10 共享地址空间,常见于运营商级 NAT
127.0.0.0/8 环回
169.254.0.0/16 链路本地
172.16.0.0/12 RFC 1918 私有地址
192.168.0.0/16 RFC 1918 私有地址
224.0.0.0/4 IPv4 多播
240.0.0.0/4 保留实验用途等
255.255.255.255 受限广播

文档示例常使用 192.0.2.0/24、198.51.100.0/24 和 203.0.113.0/24,避免误用真实公网地址。

六、DHCP

DHCP 可以自动提供:

  • IP 地址;
  • 子网掩码/前缀;
  • 默认网关;
  • DNS 服务器;
  • 租约时间;
  • 其他网络参数。

经典 IPv4 流程常概括为 DORA:

1
Discover -> Offer -> Request -> Acknowledge

客户端初始没有可用 IP,因此流程会使用广播和 UDP 端口。DHCP 地址是租约,不保证设备每次都获得同一个地址。

七、路由

7.1 什么是下一跳

IP 路由是逐跳过程。当前主机或路由器不需要知道完整物理路径,只需根据路由表决定:

  • 从哪个接口发出;
  • 下一跳是谁;
  • 是否可以直接交付。

7.2 路由表

1
ip route show

示例:

1
2
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10

含义:

  • 本地 192.168.1.0/24 从 eth0 直接交付;
  • 其他未匹配目的地交给默认网关 192.168.1.1。

7.3 最长前缀匹配

如果多个路由都能匹配目的地址,通常选择前缀最长、最具体的路由。

例如:

1
2
3
10.0.0.0/8 via A
10.20.0.0/16 via B
10.20.30.0/24 via C

目的 10.20.30.40 选择 /24 路由。

7.4 默认路由

默认路由是前缀长度为 0 的兜底规则:

1
0.0.0.0/0

只有没有更具体路由匹配时才使用。

八、以太网帧

以太网是广泛使用的局域网技术。典型 Ethernet II 帧包含:

字段 作用
目的 MAC 当前链路接收者
源 MAC 当前链路发送者
EtherType 上层协议类型,如 IPv4、IPv6、ARP
Payload 上层数据
FCS 帧校验序列,常用 CRC

前导码、帧间隙等也属于以太网传输体系,但不一定都以相同方式呈现给抓包软件。

九、MAC 地址与交换机

MAC 地址通常为 48 位:

1
52:54:00:12:34:56

交换机通过观察帧的源 MAC 学习“MAC -> 端口”关系:

  • 已知单播:转发到对应端口;
  • 未知单播:在相应 VLAN/广播域中泛洪;
  • 广播:在广播域内转发;
  • 表项会老化,拓扑变化后重新学习。

MAC 可被软件配置或伪造,不能单独作为强身份认证依据。

十、MTU 与分片

10.1 MTU

MTU 是链路层可承载的最大网络层数据单元大小。普通以太网常见 IP MTU 为 1500 字节,但隧道、VPN、PPPoE 和 Jumbo Frame 会改变它。

查看:

1
ip link show

10.2 IPv4 分片

当 IPv4 数据报超过下一跳 MTU 且允许分片时,可能由发送主机或中间路由器分片。

关键字段:

  • Identification:同一原数据报的分片通常相同;
  • Fragment Offset:以 8 字节为单位表示位置;
  • MF:后面还有分片时为 1,最后一片为 0;
  • DF:为 1 时禁止中间分片。

重组在目的主机完成。任一分片丢失,整个原数据报通常无法重组。

现代网络更倾向路径 MTU 发现并避免中间分片。

10.3 UDP 与 MTU

在 IPv4 MTU 为 1500、无 IP 选项时,1500 - 20 - 8 = 1472 字节 UDP 负载通常可避免本链路 IPv4 分片,但整条路径的 MTU 可能更小。

不要把 1472 当成所有网络的绝对安全值。

10.4 TCP 与 MSS

MSS 是 TCP 单段中最大数据负载。连接建立时双方可通过 TCP 选项通告 MSS。

IPv4、MTU 1500 且无额外选项时常见 MSS 为:

1
1500 - 20字节IPv4首部 - 20字节TCP首部 = 1460

TCP 会根据 MSS 和路径信息分段,不应简单把一次应用 send 对应到一个 IP 包。

10.5 Path MTU Discovery

路径 MTU 发现尝试确定整条路径可支持的最大包。若 ICMP 相关消息被错误过滤,可能出现 PMTUD black hole:小包正常,大包卡住。

Linux 可使用:

1
2
tracepath example.com
ping -M do -s 1472 192.0.2.1

具体 ping 参数受实现影响。

十一、ARP

ARP 在 IPv4 本地链路中解析“下一跳 IPv4 地址 -> MAC 地址”。

11.1 同网段目标

主机直接查询目标 IP 对应的 MAC。

11.2 跨网段目标

主机查询的是默认网关或路由表指定下一跳的 MAC,不是远端主机 MAC。

11.3 工作流程

  1. 查询邻居缓存;
  2. 缓存没有可用表项时,在本地链路广播 ARP Request;
  3. 拥有该 IP 的节点返回 ARP Reply;
  4. 主机缓存映射;
  5. 后续帧使用该 MAC 发送。

查看邻居表:

1
ip neigh show

11.4 ARP 不跨路由器

ARP 广播通常只在本地二层广播域传播。路由器不会把普通 ARP 请求转发到整个互联网。

11.5 ARP 欺骗

传统 ARP 缺少强认证,攻击者可在同一网络伪造映射并实施流量劫持。

防护包括网络隔离、交换机安全特性、动态 ARP 检查、静态绑定和端到端 TLS。HTTPS 可以降低内容被窃听和篡改的风险,但不能让受害主机完全免受网络中断或降级攻击。

IPv6 使用 Neighbor Discovery,而不是 ARP。

十二、DNS

DNS 把域名映射到资源记录,并不只保存 IP 地址。

常见记录:

类型 作用
A IPv4 地址
AAAA IPv6 地址
CNAME 别名
MX 邮件交换
NS 权威名称服务器
TXT 文本信息
SOA 区域起始授权信息

12.1 解析过程

典型过程:

  1. 应用查询系统解析器;
  2. 检查本地缓存与 hosts;
  3. 查询配置的递归解析器;
  4. 若未缓存,递归解析器向根、顶级域和权威服务器迭代查询;
  5. 根据 TTL 缓存结果并返回客户端。

实际顺序受 /etc/nsswitch.conf、systemd-resolved、容器环境等影响,不能只概括成“永远先查 /etc/hosts”。

12.2 常用命令

1
2
3
4
getent hosts example.com
dig example.com A
dig example.com AAAA
dig +trace example.com

DNS 通常使用 UDP 53,也会使用 TCP 53;加密 DNS 还可能使用 DoT 或 DoH。

十三、ICMP

ICMP 用于 IP 层差错报告和诊断,常见类型包括:

  • Echo Request / Echo Reply;
  • Destination Unreachable;
  • Time Exceeded;
  • Redirect;
  • IPv4 分片相关通知。

13.1 ping

1
ping example.com

典型 ping 使用 ICMP Echo,不使用 TCP/UDP 端口。因此“ping 是多少端口”这个问题的答案是:普通 ICMP ping 没有传输层端口号。

13.2 traceroute

1
2
traceroute example.com
tracepath example.com

不同实现可能使用 UDP、ICMP Echo 或 TCP 探测,但核心依赖 TTL/Hop Limit 和中间设备返回的超时信息。

13.3 ICMP 被过滤

ping 不通不等于应用一定不通;TCP 能通也不代表网络诊断消息应被全部屏蔽。粗暴过滤 ICMP 可能破坏路径 MTU 发现和故障诊断。

十四、NAT 与 NAPT

14.1 为什么使用 NAT

IPv4 公网地址有限。家庭和企业网络通常使用私有地址,对外通信时由边界设备转换。

14.2 基本地址转换

内网主机:

1
192.168.1.10:50000 -> 203.0.113.20:443

边界设备可能改写为:

1
198.51.100.8:62001 -> 203.0.113.20:443

并建立状态表:

1
198.51.100.8:62001 <-> 192.168.1.10:50000

返回流量以公网目的地址和端口命中表项后,再恢复为内网地址和端口。

家庭路由器常见的不只是地址转换,而是地址加端口转换,常称 NAPT/PAT。

14.3 为什么返回包知道交给谁

NAT 设备维护协议、内外地址、端口和状态映射。多个内网客户端共享同一个公网 IP 时,通常通过不同外部端口区分连接。

14.4 NAT 的限制

  • 外部不能默认主动连接没有映射的内部服务;
  • 状态表需要内存并会超时;
  • NAT 设备重启可能中断现有连接;
  • 某些协议把 IP/端口写进应用数据,需额外处理;
  • P2P、语音和游戏可能需要 STUN、TURN、ICE、端口映射或中继;
  • NAT 增加了网络状态复杂度,但不是安全边界的完整替代品。

14.5 端口转发

把公网端口静态映射到内部服务:

1
公网 198.51.100.8:8443 -> 内网 192.168.1.20:443

开放端口转发会扩大攻击面,应配合防火墙、身份认证、TLS、补丁和最小权限。

十五、代理与 NAT 的区别

对比 NAT 应用代理
主要层次 网络/传输层地址与端口转换 理解应用协议或转发字节流
客户端是否显式配置 常常无感 正向代理常需配置,透明代理除外
是否终止上层连接 普通 NAT 通常不终止 TCP 语义 HTTP 反向代理常分别建立上下游连接
典型用途 共享公网地址、端口映射 缓存、认证、负载均衡、访问控制

15.1 正向代理

代表客户端访问外部资源,外部服务器看到的直接对端是代理。

15.2 反向代理

代表服务端接收客户端请求,再转发到后端。常用于:

  • TLS 终止;
  • 负载均衡;
  • 静态资源和缓存;
  • 认证与限流;
  • 隐藏后端拓扑。

十六、完整转发示例

内网客户端访问公网 HTTPS 服务时,可能经历:

  1. DNS 获得服务器 IP;
  2. 客户端判断目的不在本地子网;
  3. 路由表选择默认网关;
  4. ARP 获得网关 MAC;
  5. 客户端封装以太网帧,目的 MAC 是网关;
  6. 网关移除当前帧,检查目的 IP;
  7. NAT 改写源 IP/端口并记录映射;
  8. 多个路由器按最长前缀匹配逐跳转发;
  9. 服务器响应发回 NAT 公网地址与映射端口;
  10. NAT 查状态表并还原内网目的地址;
  11. 网关在 LAN 上重新封装帧交给客户端;
  12. 客户端 TCP/TLS/HTTP 逐层处理响应。

在普通路由转发中,链路层地址逐跳变化;NAT 场景下 IP 和端口也可能被边界设备改写。

十七、常用命令

1
2
3
4
5
6
7
8
ip address show
ip route show
ip neigh show
ss -ntup
dig example.com
ping -c 4 example.com
tracepath example.com
sudo tcpdump -ni any 'arp or icmp'

查看 NAT、防火墙规则需要相应权限,现代 Linux 常使用 nftables;一些系统仍保留 iptables 兼容接口。

十八、常见误区

  1. IPv4 私有地址可以随便选:应使用 RFC 1918 等明确保留范围;
  2. 经过路由器 MAC 地址不变:链路层首部逐跳重建;
  3. ARP 查询远端互联网主机 MAC:跨网段时查询下一跳;
  4. MF 的最后一片为 1:错误,MF=1 表示后面还有分片,最后一片为 0;
  5. 1472 是所有 UDP 的绝对安全负载:路径 MTU 与首部可能变化;
  6. DNS 只使用 UDP:大响应、区域传送和其他场景会使用 TCP;
  7. ping 使用某个端口:普通 ICMP ping 没有传输层端口;
  8. NAT 就是防火墙:NAT 不是完整安全策略;
  9. IP 地址等于一台物理机器:一台机器可有多个 IP,一个 IP 也可代表复杂服务;
  10. ping 不通等于服务不通:ICMP 可能被过滤。

十九、总结

  1. IPv4 负责逻辑寻址与逐跳转发,提供尽力而为的数据报服务。
  2. CIDR 用前缀长度划分网络,路由选择遵循最长前缀匹配。
  3. 以太网 MAC 服务于当前链路,交换机根据 MAC 表转发帧。
  4. ARP 把 IPv4 下一跳地址解析为链路层地址,不跨越普通路由器。
  5. MTU 限制网络层数据报大小,现代网络应尽量通过 MSS 和路径 MTU 发现避免分片。
  6. DNS 负责名称解析,ICMP 提供差错报告和诊断。
  7. NAT/PAT 通过状态映射让多个私网端点共享公网地址,返回包依靠映射表分发。