网络层常见问题
默认网关不存在时的 IP/ARP 通信
- ARP 通信:可以。
- 仅限于本地子网内设备。
- ARP 不依赖默认网关设置。
- 无法 ARP 不存在的网关地址。
- IP 通信:
- 本地子网内设备:可以。
- 局域网外部(远程网络):不可以。
- 主机尝试将流量发给不存在的默认网关,ARP 失败导致无法发送。
Hub/Switch/Router 连接下的主机 IP 通信
- 拓扑:主机 A/B — Hub — 交换机 — (路由器) — 主机 C (直连交换机)。
- 前提:主机 A/B/C 在同一 IP 子网。
- 通信结果:可以进行 IP 通信,交换机不会丢弃报文。
- 设备行为:
- Hub:L1 设备,无智能,泛洪所有流量,形成单个冲突域/广播域。
- 交换机:L2 设备,学习 MAC 地址,根据 MAC 表智能转发单播帧,泛洪广播帧。每个端口独立冲突域,同一 VLAN 是广播域。
- 路由器:L3 设备,连接不同 IP 子网,是广播域边界。
- 交换机丢弃情况(非正常行为):
- 端口安全限制、MAC 地址表溢出攻击、网络环路、VLAN 配置不匹配。
VLAN 是否隔离 ARP
- 结论:是的,VLAN 会完全隔离 ARP。
- 原理:
- VLAN 的本质是创建逻辑广播域。
- ARP 请求是广播帧。
- 交换机仅在同一 VLAN 内泛洪广播帧,不会将广播帧转发到其他 VLAN。
- 跨 VLAN 通信:
- 不同 VLAN 间的设备无法直接通过 ARP 相互发现。
- 需要三层设备(路由器或三层交换机)进行路由。路由器会在各自 VLAN 内进行 ARP。
ARP DHCP 报文类型
ARP (Address Resolution Protocol)
| 报文类型 | 源 MAC 地址 | 目的 MAC 地址 | 源 IP 地址 | 目的 IP 地址 |
|---|
| Request | 单播 | FF:FF:FF:FF:FF:FF (广播) | 单播 | 单播 |
| Reply | 单播 | 单播 | 单播 | 单播 |
DHCP (Dynamic Host Configuration Protocol)
| 报文类型 | 源 MAC 地址 | 目的 MAC 地址 | 源 IP 地址 | 目的 IP 地址 |
|---|
| Discover | 单播 | FF:FF:FF:FF:FF:FF (广播) | 0.0.0.0 (未分配) | 255.255.255.255 (广播) |
| Offer | 单播 | 广播 或 单播 | 单播 | 广播 或 单播 |
| Request | 单播 | 广播 或 单播 | 0.0.0.0 或 单播 | 广播 或 单播 |
| ACK | 单播 | 广播 或 单播 | 单播 | 广播 或 单播 |
| NAK | 单播 | 广播 | 单播 | 广播 |
| Decline | 单播 | 单播 | 0.0.0.0 | 单播 |
| Release | 单播 | 单播 | 单播 | 单播 |
| Inform | 单播 | 单播 | 单播 | 单播 |
IP 分组分片与重组(IPv4)
分片必要性
- 原因: 跨越不同 MTU(最大传输单元)的网络链路。
- 规则: 当 IP 分组长度 > 出接口 MTU,且 IP 头部 DF(Don’t Fragment)位为 0 时,路由器执行分片。
分片过程(由中间路由器执行)
- MTU 检查: 路由器比较分组长度与出接口 MTU。
- DF 位检查:
DF = 1 (不分片): 丢弃分组,发送 ICMP “Fragmentation Needed” 错误消息给源主机。
DF = 0 (允许分片): 执行分片。
- 生成分片:
- 原始 IP 分组数据被分割成多块。
- 每个分片获得一个原始 IP 头部的副本。
- IP 头部修改:
- 总长度: 更新为当前分片长度。
- 标志(Flags):
MF = 1 (More Fragments): 除最后一个分片外。
MF = 0: 最后一个分片。
- 片偏移(Fragment Offset): 表示分片数据在原始分组中的起始位置(以 8 字节为单位)。
- 标识(Identification): 所有分片保持相同值。
- 头部校验和: 重新计算。
- 独立转发: 各分片独立路由。
重组过程(由最终目的主机执行)
- 接收与识别: 目的主机接收分片,通过相同“标识”字段识别属于同一原始分组。
- 缓冲: 收集所有分片到重组缓冲区。
- 排序与拼接: 根据“片偏移”字段将分片按正确顺序拼接。
- 完整性检查: 通过“MF”位确认所有分片是否到达,包括最后一个分片(MF=0)。
- 重组超时: 若规定时间内未收到所有分片,丢弃已接收分片。
- 提交: 成功重组后,提交完整 IP 分组给上层协议。
考量与 IPv6 差异
- 性能开销: 分片和重组增加处理负担,降低效率。
- 可靠性问题: 任一分片丢失导致整个原始分组丢失。
- IPv6:
- 路由器不分片: IPv6 路由器遇到 MTU 过小的分组会丢弃,并发送 ICMPv6 “Packet Too Big” 消息。
- 源主机分片: 如果需要,IPv6 中的分片操作只能由源主机进行(通过路径 MTU 发现及分片扩展头部)。
点对点网络新旧标准的地址分配
| 特性 | /30 CIDR 地址块 | /31 CIDR 地址块 |
|---|
| 前缀长度 | 30 位 | 31 位 |
| 主机位数 | 2 位 | 1 位 |
| 总地址数 | 4 个 | 2 个 |
| 可用地址数 | 2 个 (用于链路两端) | 2 个 (用于链路两端) |
| 保留地址 | 2 个 (网络地址和广播地址) | 0 个 (根据 RFC 3021 特殊处理) |
| RFC 规范 | 传统 IP 寻址规则 | RFC 3021 (专门为 P2P 链路设计) |
| 主要优点 | 传统、兼容性好 | 极大地节约 IP 地址资源 |
| 主要缺点 | 相对于 P2P 链路需求,存在 50% 的地址浪费 | 需要设备支持 RFC 3021;仅适用于 P2P 链路 |
| 适用场景 | 任何需要 P2P 连接的场合,尤其是对 IP 地址节约不敏感的场景 | 拥有大量 P2P 链路、对 IP 地址节约有强烈需求的场景(如 ISP) |
简而言之,/30 提供了两个可用地址,但同时也浪费了两个保留地址;而 /31 则通过 RFC 3021 规范,使得其仅有的两个地址都能直接用于点对点链路,从而实现了 IP 地址的零浪费。在规划大型网络时,选择 /31 可以显著提高 IP 地址的利用效率。
水平分割、多播转发树、TTL 字段
- 水平分割 (Horizontal Split):
- 解决问题:主要解决距离矢量路由协议(如 RIP)在网络中可能出现的路由环路问题。它通过禁止路由器将从某个接口学到的路由信息,再从同一个接口通告出去,从而有效阻止了路由信息在环路中无限传播。
- 多播转发树 (Multicast Forwarding Tree):
- 解决问题:解决将一份多播数据流高效、无环地分发给网络中多个感兴趣的接收者的问题。它通过构建一个从多播源到所有接收者的树状路径,确保每份数据只在需要的地方复制和转发,避免了对整个网络进行泛洪(flooding)导致资源浪费,也防止了重复数据包的发送。
- TTL (Time-to-Live):
- 解决问题:解决 IP 数据包在网络中因路由环路或其他原因无限循环,从而耗尽网络资源的问题。TTL 字段在 IP 数据包每经过一个路由器(即一个跳段)时减 1,当 TTL 值为 0 时,路由器会丢弃该数据包,有效限制了数据包在网络中的最大生存时间或跳数。