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

计算机网络基础(三):IP、以太网、ARP、DNS与NAT
Lichermione传输层把数据交给目标进程,网络层负责把数据送到目标网络,数据链路层负责当前链路上的帧交付。
本文沿着一个 IP 数据报的路径,讲解 IPv4 首部、CIDR、路由、以太网、MTU、ARP、DNS、ICMP 与 NAT,并说明这些协议怎样协作完成跨网络通信。
一、网络层的职责
网络层主要解决:
- 逻辑寻址:使用 IP 地址标识网络接口和路由目标;
- 路由选择:决定数据包下一跳;
- 逐跳转发:路由器把数据包从入口转到出口;
- 生存范围控制:TTL 防止数据包永久循环;
- 差错报告与诊断: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 | 203.0.113.0/24 |
现代路由与子网设计以 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 | default via 192.168.1.1 dev eth0 |
含义:
- 本地
192.168.1.0/24从eth0直接交付; - 其他未匹配目的地交给默认网关
192.168.1.1。
7.3 最长前缀匹配
如果多个路由都能匹配目的地址,通常选择前缀最长、最具体的路由。
例如:
1 | 10.0.0.0/8 via A |
目的 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 | tracepath example.com |
具体 ping 参数受实现影响。
十一、ARP
ARP 在 IPv4 本地链路中解析“下一跳 IPv4 地址 -> MAC 地址”。
11.1 同网段目标
主机直接查询目标 IP 对应的 MAC。
11.2 跨网段目标
主机查询的是默认网关或路由表指定下一跳的 MAC,不是远端主机 MAC。
11.3 工作流程
- 查询邻居缓存;
- 缓存没有可用表项时,在本地链路广播 ARP Request;
- 拥有该 IP 的节点返回 ARP Reply;
- 主机缓存映射;
- 后续帧使用该 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 解析过程
典型过程:
- 应用查询系统解析器;
- 检查本地缓存与 hosts;
- 查询配置的递归解析器;
- 若未缓存,递归解析器向根、顶级域和权威服务器迭代查询;
- 根据 TTL 缓存结果并返回客户端。
实际顺序受 /etc/nsswitch.conf、systemd-resolved、容器环境等影响,不能只概括成“永远先查 /etc/hosts”。
12.2 常用命令
1 | getent hosts 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 | traceroute 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 服务时,可能经历:
- DNS 获得服务器 IP;
- 客户端判断目的不在本地子网;
- 路由表选择默认网关;
- ARP 获得网关 MAC;
- 客户端封装以太网帧,目的 MAC 是网关;
- 网关移除当前帧,检查目的 IP;
- NAT 改写源 IP/端口并记录映射;
- 多个路由器按最长前缀匹配逐跳转发;
- 服务器响应发回 NAT 公网地址与映射端口;
- NAT 查状态表并还原内网目的地址;
- 网关在 LAN 上重新封装帧交给客户端;
- 客户端 TCP/TLS/HTTP 逐层处理响应。
在普通路由转发中,链路层地址逐跳变化;NAT 场景下 IP 和端口也可能被边界设备改写。
十七、常用命令
1 | ip address show |
查看 NAT、防火墙规则需要相应权限,现代 Linux 常使用 nftables;一些系统仍保留 iptables 兼容接口。
十八、常见误区
- IPv4 私有地址可以随便选:应使用 RFC 1918 等明确保留范围;
- 经过路由器 MAC 地址不变:链路层首部逐跳重建;
- ARP 查询远端互联网主机 MAC:跨网段时查询下一跳;
- MF 的最后一片为 1:错误,MF=1 表示后面还有分片,最后一片为 0;
- 1472 是所有 UDP 的绝对安全负载:路径 MTU 与首部可能变化;
- DNS 只使用 UDP:大响应、区域传送和其他场景会使用 TCP;
- ping 使用某个端口:普通 ICMP ping 没有传输层端口;
- NAT 就是防火墙:NAT 不是完整安全策略;
- IP 地址等于一台物理机器:一台机器可有多个 IP,一个 IP 也可代表复杂服务;
ping不通等于服务不通:ICMP 可能被过滤。
十九、总结
- IPv4 负责逻辑寻址与逐跳转发,提供尽力而为的数据报服务。
- CIDR 用前缀长度划分网络,路由选择遵循最长前缀匹配。
- 以太网 MAC 服务于当前链路,交换机根据 MAC 表转发帧。
- ARP 把 IPv4 下一跳地址解析为链路层地址,不跨越普通路由器。
- MTU 限制网络层数据报大小,现代网络应尽量通过 MSS 和路径 MTU 发现避免分片。
- DNS 负责名称解析,ICMP 提供差错报告和诊断。
- NAT/PAT 通过状态映射让多个私网端点共享公网地址,返回包依靠映射表分发。