网络层(Internet Layer)

网络层(Internet Layer): 对应 OSI 模型的网络层,负责数据包的路由和转发

IP地址及子网划分

IPv4:目前广泛使用的版本,地址长度为32位。IPv6:下一代IP协议,地址长度为128位。

IP地址的管理与分配

  1. 公有地址:由ICANN统一分配,全网唯一
  2. 静态IP:长期固定(如服务器使用), 动态IP:由DHCP临时分配(如家庭宽带)

IP地址及其分类

IPv4地址由 32位二进制 构成,常采用 ==点分十进制== 表示(如192.168.1.1),分为4个八位组

IP地址的基本结构/组成要素:

  • 网络号(Network ID) :标识设备所属的网络
  • 主机号(Host ID) :标识网络内的具体设备

IP地址最初被划分为A、B、C、D、E五类,但因地址浪费等问题已逐渐被CIDR取代

  • A类:前8位为网络号,后24位为主机号,适用于超大规模网络(如国家主干网),但仅有126个可用A类网络,导致地址浪费。

  • B类:前16位为网络号,后16位为主机号,适用于中型机构,但全球仅有约1.6万个B类网络,实际分配中仍存在浪费。

  • C类:前24位为网络号,后8位为主机号,适用于小型网络,但每个网络仅支持254台主机,需大量C类地址覆盖中型需求,导致路由表膨胀。

随着CIDR(无类域间路由)的普及,传统ABC类划分已不再重要,IP地址分配转为无类别方式,仅D/E类保留原有用途。


P地址根据其使用范围和分配方式,还可以分为 公有IP地址 和 私有IP地址。公有IP地址在全球范围内是唯一的;私有IP地址在同一局域网内是唯一的,但可以在不同的局域网中重复使用。

通过使用私有IP地址,可以显著减少对公有IP地址的需求,降低网络建设和维护的成本。此外,私有IP地址提供了更高的灵活性和控制力,便于内部网络的管理和扩展。


特殊IP地址

主机号全为 0 和全为 1 的情况

  • 主机号全为 0(如 192.168.1.0):代表该网络的网络地址,不能用作主机IP。
  • 主机号全为 1(如 192.168.1.255):传统上被视为广播地址,用于向该网络内的所有主机发送数据包。在CIDR(无类域间路由)下,可根据具体配置决定是否允许分配。

一些常见的本地特殊IP:

  1. 环回地址:127.x.x.x(如127.0.0.1),用于本地测试。
  2. 广播地址: 受限广播255.255.255.255,仅在本地网络生效。
  3. 私有地址:
    • A类私有:10.0.0.0 ~ 10.255.255.255
    • B类私有:172.16.0.0 ~ 172.31.255.255
    • C类私有:192.168.0.0 ~ 192.168.255.255
  4. 链路本地地址(Link-Local Addresses): 169.254.0.0/16 当无法从DHCP服务器获取IP地址时,计算机会自动分配此类地址用于同一局域网内的通信

这些地址仅在内部网络使用,需通过NAT转换访问公网


子网的划分

子网(Subnet) 是指从一个较大的网络中划分出的较小的逻辑网络。通过子网划分,可以将一个大的网络分割成多个较小的部分,每个部分作为一个独立的子网运作。这样做有几个好处:

  • 提高地址利用率:将单一网络分割为多个子网,避免主机号浪费(如B类网络划分子网后,可为不同部门分配独立子网)。
  • 优化网络管理:隔离广播域、增强安全性、简化故障排查。

要将子网等分为 $2^n$ 个更小的子网,则将子网掩码右移 $n$ 位,每个小子网是原来子网的 $\frac 1 {2^n}$

示例:将192.168.1.0/24划分为4个子网,右移 2 位后子网掩码为:255.255.255.192(/26),则每个子网只剩 6 位主机号(实际可用的主机IP地址数量为 $2^6-2 =62$ ),每个子网信息如下:

  • 子网1:192.168.1.0/26(主机范围:192.168.1.1 - 192.168.1.62
  • 子网2:192.168.1.64/26(主机范围:192.168.1.65 - 192.168.1.126
  • 子网3:192.168.1.128/26(主机范围:192.168.1.129 - 192.168.1.190
  • 子网4:192.168.1.192/26(主机范围:192.168.1.193 - 192.168.1.254

几个关键数字对应的二进制数:64 => 0100 0000128 => 1000 0000192 => 1100 0000

子网掩码允许网络管理员创建自定义大小的子网,不再局限于传统的A、B、C类网络的固定大小


无类别域间路由

CIDR(Classless Inter-Domain Routing,无类别域间路由)是一种用于更高效分配IP地址和优化路由表的一种技术。CIDR 一定程度上解决了IPv4地址耗尽和路由表膨胀的问题。

RFC 1517-1520:1993年引入CIDR,允许更灵活的地址分配和路由聚合,不再依赖固定的A、B、C类地址划分,而是使用 ==可变长度的子网掩码(VLSM) 和前缀表示法==

  1. 斜线记法(前缀表示法:Prefix Notation):用于标识网络地址块的大小,支持灵活的地址分配和路由。格式:IP地址/前缀长度(如192.168.1.0/24),前缀长度表示网络部分的位数

  2. 变长子网掩码(Variable Length Subnet Mask, VLSM) :CIDR使用可变长度的子网掩码(VLSM),允许更灵活的地址划分,一个网络可以被划分为多个子网,每个子网使用不同的子网掩码。示例:假设我们有一个网络地址块:192.168.1.0/24,需要划分为ABCD四个子网,每个子网的主机数分别是:62,30,12,6,主机号位数分别是:6,5,4,3

子网 网络地址 子网掩码 可用地址 广播地址 n
A 192.168.1.0/26
0->0000 0000
255.255.255.192
192->1100 0000
192.168.1.1 -
192.168.1.62
192.168.1.63 62
B 192.168.1.64/27
64->0100 0000
255.255.255.224
224->1110 0000
192.168.1.65 -
192.168.1.94
192.168.1.95 30
C 192.168.1.96/28
96->0110 0000
255.255.255.240
240->1111 0000
192.168.1.97 -
192.168.1.110
192.168.1.111 14
D 192.168.1.112/29
112->0111 0000
255.255.255.248
248->1111 1000
192.168.1.113 -
192.168.1.118
192.168.1.119 6
  1. 路由聚合(Route Aggregation) :也称为:Route Summarization(路由汇总),是一种将多个连续的小地址块合并为一个更大的地址块的技术,从而减少路由表条目,示例:多个连续的子网:192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24,聚合为一个更大的地址块:192.168.0.0/22(覆盖192.168.0.0192.168.3.255

CIDR的实际应用:地址分配:ISP分配:互联网服务提供商(ISP)可以根据客户需求分配不同大小的地址块,例如,一个企业可能需要1000个地址,ISP可以分配一个/22地址块(1024个地址)


Internet Protocol

IP(Internet Protocol,互联网协议)是TCP/IP协议族中的核心协议之一,负责在网络层实现数据包的寻址和路由。IP协议定义了数据包的格式(IP数据报)以及如何将数据包从源主机传输到目标主机。

  • 实现数据包的路由和转发,提供无连接、不可靠的数据传输服务

  • 支持分片和重组以适应不同网络的最大传输单元(MTU)

IP数据报格式

IPv4数据报由首部(Header)和数据(Payload) 两部分组成。首部长度为20字节(无选项时),最大长度为60字节(含选项),下图除了最后的 Data ,其余皆为首部:

以下为首部(Header)各字段详细解释:

  1. Version(版本):标识IP协议的版本,IPv4:0100(4),IPv6:0110(6)

  2. IHL(Internet Header Length,首部长度):表示IP首部的长度,单位为 4字节,二进制表示的最小值为 0101 -> 5(20字节),最大值为 1111 -> 15(60字节)

  3. Type of Service(服务类型):指定数据报的服务质量(QoS)

  4. Total Length(总长度):整个IP数据报的长度(首部 + 数据),最大值:65535(字节)

  5. Identification(标识): 用于标识数据报的唯一性,便于分片和重组。

  6. Flags(标志):==控制数据报的分片==

  7. Fragment Offset(分片偏移):表示当前分片在原始数据报中的位置,单位为8字节。

  8. Time to Live(TTL,生存时间):限制数据报在网络中的最大跳数,每经过一个路由器减1,值为0时丢弃。

  9. Protocol(协议):标识上层协议类型。TCP:6 ,UDP:17,ICMP:1

  10. Header Checksum(首部校验和):用于校验IP首部的完整性

  11. Source IP Address(源IP地址):发送数据报的源主机IP地址

  12. Destination IP Address(目标IP地址):接收数据报的目标主机IP地址

  13. Options(选项):提供额外的功能,如记录路由(Record Route)、时间戳(Timestamp)等


分片与重组

当一个数据报太大以至于无法在一个特定的链路层协议上传输时(例如,超过了该网络的最大传输单元MTU),就需要将其分割成较小的部分,即 分片(fragmentation)。然后,在目的地或目标网络重新组合这些分片以恢复原始数据报,这就是 重组(reassembly)的过程。

当一个IP数据报需要分片时,以下字段在IPv4头部中起重要作用:

重组通常发生在最终的目的主机上,一旦所有的分片都到达并且按照正确的顺序排列,目的主机就可以将它们重新组装成原始的数据报并继续处理。


值得注意的是,在IPv6中,只支持终端设备之间的分片操作,默认情况下 ==不允许路由器对数据报进行分片==。IPv6依赖于源节点执行路径MTU发现来确定适当的数据报大小。如果数据报太大而不能被传输,中间路由器会丢弃它并向源节点发送ICMPv6“Packet Too Big”消息,促使源节点减小数据报尺寸重试。


路由与路路由器

路由(Routing)是指在网络中选择一条路径将数据从源节点传输到目的节点的过程,路由可以是静态的,也可以是动态的

  • 静态路由:由网络管理员手动配置的固定路由条目。
  • 动态路由:通过路由协议自动计算和更新路由表

路由器(Router) 负责在不同网络之间转发数据包。路由器根据路由表(Routing Table)决定数据包的转发路径。主要功能包括:

  • 路径选择:根据路由协议计算最优路径。
  • 数据转发:按照路由表的指引,将数据包发送到下一跳设备。
  • 网络隔离:连接不同的子网,实现网络分段,提高安全性和效率。

路由器的主要类型:

  1. 企业级路由器:用于大型企业和数据中心,具备高吞吐量和复杂的策略管理能力,如 Cisco、华为、HPE 等品牌的高端路由器。
  2. 家用路由器:适用于家庭和小型办公环境,通常集成了 NAT(网络地址转换)、DHCP、Wi-Fi AP 等功能,如 TP-Link、小米、Netgear 等。
  3. 核心路由器:用于互联网骨干网,处理高速大流量转发,如思科(Cisco)和华为(Huawei)的高端设备。
  4. 边界路由器:用于 ISP(互联网服务提供商)之间的连接,支持 BGP(边界网关协议)。

路由表及路由转发

路由表(Routing Table)是路由器用来决定如何转发数据包的关键数据结构。它存储了到达不同目的地的路径信息。路由表关键字段:

  1. Destination/Mask(目标网络/子网掩码): 指定该路由条目的目的地网络地址及其对应的子网掩码。这个组合决定了哪些数据包将匹配此条目。

  2. Gateway(网关): 也称为下一跳(Next Hop),指定了到达目标网络需要经过的下一个路由器的IP地址。如果目标网络直接连接到本路由器,则此字段可能为空或者指向接口本身。

  3. Interface(接口): 表示通过哪个物理或逻辑接口发送数据包以到达目标网络。

  4. Metric(度量值): 衡量路径成本的一个数值,可以基于多种因素如跳数、带宽、延迟等。较低的度量值表示更优的路径。当有多条路径可达同一目的地时,会选择具有最低度量值的路径。

  5. Proto(协议来源): 标识该路由条目的来源,比如直连(Direct)、静态配置(Static),或是通过某种动态路由协议(如RIP、OSPF、BGP等)学习得到。

  6. Flags(标志位): 可能包含一些特殊标志,例如U(可用)、G(网关存在)、H(主机路由)等,具体取决于使用的操作系统和路由软件。

并不是只有路由器才拥有路由表,个人电脑、服务器等也会有一个路由表来确定如何处理出站流量

示例:Linux中查看路由表 route -n ,windows命令 route print

bash
[root@rocky ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.16.2    0.0.0.0         UG    100    0       0  ens160
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0       0  docker0
192.168.16.0    0.0.0.0         255.255.255.0   U     100    0       0  ens160

第一条路由是一个默认路由,用于所有非本地网络的数据包,它们会被转发到网关 192.168.16.2 剩余两条的Gateway均为 0.0.0.0,表示这是一个直连网络,不需要经过网关


路由转发 (Packet Forwarding) : 是指路由器根据路由表中的信息,将数据包正确地传递到目的地的过程。主要步骤如下:

  1. 查找路由表:路由器检查数据包的目标 IP,并在路由表中查找匹配的路由条目。
  2. 选择最佳路由:如果有多个匹配项,选择度量值最低的路径。
  3. 确定下一跳:路由器根据路由表确定数据包应该转发到哪个下一跳设备。
  4. 封装与转发:数据包可能需要重新封装(如 MAC 地址变化),然后通过合适的接口发送出去。

两种主要的转发方式:

  • 逐跳转发(Hop-by-Hop Forwarding):每个路由器都独立查找路由表,并决定下一跳设备。
  • 标签交换(Label Switching):如 MPLS(多协议标签交换),通过预先建立的路径(LSP)进行快速转发。

网络地址转换

NAT(Network Address Translation,网络地址转换)主要用于修改IP数据包中的源或目的IP地址。这项技术最初是为了解决IPv4地址空间不足的问题而设计的,但随着时间的发展,它也被广泛应用于提高网络安全性和简化网络管理等方面。

NAT通常在路由器或者防火墙上实现,它会在数据包进出网络边界时进行必要的地址和端口转换,并维护一张转换表记录这些映射关系。当响应的数据包返回时,NAT设备会根据这张表将其转换回原始的内部地址和端口。


NAT的应用场景:几乎所有的家庭宽带路由器都内置了NAT功能,使得家庭内的多个设备可以共享单一的公网IP地址上网。能感知到NAT的场景最常见的就是 虚拟机NAT模式,但是VM的NAT模式与路由器NAT是有去别的:

对比项 家庭/企业路由器 NAT VM 中的 NAT
作用 让内网设备共享公网IP
(从外部网络访问内部服务,需配置端口转发规则)
让虚拟机共享宿主机网络
NAT 设备 路由器 宿主机
IP 变换 内网 IP → 公网 IP VM 私有 IP → 宿主机 IP
外部访问 需要端口映射 需要端口映射
应用场景 互联网访问 虚拟化环境

VM中虚拟网卡扮演 NAT 设备的角色,负责地址转换,但不进行传统的路由计算


ICMP协议

ICMP(Internet Control Message Protocol,互联网控制消息协议) 主要用于在网络设备之间传递控制消息。这些消息涉及请求和响应操作,帮助诊断网络问题、报告错误情况等。比如ping命令使用ICMP回显请求和响应报文来测试网络连通性。

ICMP消息通常封装在IP数据包内,作为IP层的一个辅助协议。它包含多种类型的报文,每种都有特定的目的和格式。以下是一些常见的ICMP报文类型:

ICMP常见使用场景:

  1. 网络诊断与故障排除

    • Ping:通过发送ICMP Echo Request并等待Echo Reply来验证目标主机的可达性。
    • Traceroute:通过设置不同的TTL值并观察ICMP Time Exceeded响应,确定数据包从源到目的地所经过的路由路径。
  2. 错误报告: 当发生诸如网络不通、主机不在线或者服务端口关闭等问题时,ICMP可以提供详细的错误信息给源主机,以便进行相应的调整或修复。

  3. 流量控制:在某些情况下,如网络拥塞时,ICMP Source Quench(源抑制)曾被用来通知发送方降低发送速率,不过这一特性已被废弃,因为有更好的方法来管理流量。

  4. 安全策略实施:防火墙和其他网络安全设备可能会根据ICMP消息的内容来决定是否允许或阻止特定类型的通信。例如,禁止外部网络对内部主机发起的ICMP Echo Requests(即禁用ping)作为一种简单的防护措施。

  5. 路径MTU发现:为了找到一条路径上支持的最大传输单元(MTU),系统可能依赖于ICMP Fragmentation Needed(需要分片)消息,这有助于避免不必要的IP分片,提高传输效率。

虽然ICMP并不是直接负责用户数据传输的协议,但它在网络管理和维护中扮演着不可或缺的角色。


IGMP协议

虽然ICMP与IGMP看起来有些像,但它们的功能和服务对象完全不同

IGMP(Internet Group Management Protocol,互联网组管理协议) 是用于管理组播成员资格的协议。它允许主机表达对特定组播组的兴趣,并让路由器知道哪些主机希望接收特定组播流量。IGMP主要用于支持IP组播,这是一种允许一个发送者向多个接收者同时发送数据的技术。

尽管单播(Unicast)和广播(Broadcast)仍然是常见的数据传输方式,但它们各有局限性:单播对于大规模分发效率不高,而广播则会占用过多带宽且不适合跨网段传输。相比之下,组播(Multicast)能够有效地将信息从一个发送者传递给多个接收者,同时减少了不必要的带宽消耗。


IPv6地址及数据报

IPv6(Internet Protocol version 6)是下一代互联网协议,用于替代 IPv4,解决 IPv4 地址耗尽问题,并提供更高效的网络传输能力。

IPv6 地址是 128 位(16 字节),常使用 十六进制 表示,分成 8 组,每组 16 位(4 个十六进制数),以 冒号(:) 分隔:

bash
2001:0db8:85a3:0000:0000:8a2e:0370:7334

IPv6 的好处:

  1. 地址充足:全球唯一地址,无需 NAT。
  2. 简化路由:固定 40 字节头部,提升转发效率。
  3. 自动配置:支持 SLAAC,无需手动配置 IP。
  4. 安全性增强:原生支持 IPSec 加密通信。

IPv6 地址类型:

地址类型 范围 说明
单播地址 唯一地址 直接指向某个设备
组播地址 ff00::/8 发送给多个设备
任播地址 - 发送给最近的一个设备
链路本地地址 fe80::/10 仅限本地网络,不可路由
站点本地地址 fc00::/7 内部网络使用
回环地址 ::1 本机地址(类似 IPv4 127.0.0.1

IPv6数据报

IPv6 基础头部(Fixed Header) 固定 40 字节,相比 IPv4 头部更简单,提升了转发效率。

IPv6 头部关键字段:

字段 长度 作用
版本(Version) 4bit 固定为 6,表示 IPv6
流量分类(Traffic Class) 8bit 用于 QoS(流量优先级)
流标签(Flow Label) 20bit 标记特定数据流,提高传输效率
负载长度(Payload Length) 16bit 指定数据部分的大小(不包括头部)
下一头部(Next Header) 8bit 指定下一个协议(如 TCP/UDP)
跳数限制(Hop Limit) 8bit 类似 IPv4 TTL(防止环路)
源地址(Source Address) 128bit 发送方 IPv6 地址
目的地址(Destination Address) 128bit 接收方 IPv6 地址
扩展头部(Extension Headers) 可变 额外的控制信息,如 IPSec

扩展头部 位于 IPv6 基础头部之后,在负载数据(如 TCP/UDP)之前。一般情况下,IPv6 普通数据包不会携带扩展头部,只有在 需要特定功能(如 IPSec、分片)时,才会使用扩展头部

  • IPv6 默认只解析基础头部,路由器无需处理扩展头部,减少计算量
  • 只在特定情况下由特定设备解析,如端到端的额外信息(如 IPSec、分片),不像 IPv4 那样 所有路由器都要解析变长选项

一些的 IPv6 扩展头部介绍:

扩展头部类型 Next Header 值 作用
Hop-by-Hop Options 0 路由器逐跳处理,如 Jumbogram
Routing Header 43 规定路径(类似源路由)
Fragment Header 44 处理 IPv6 分片
Authentication Header (AH) 51 IPSec 认证
Encapsulating Security Payload (ESP) 50 IPSec 加密
Destination Options 60 仅目的端处理的信息

与IPv4的区别

对比项 IPv4 IPv6
地址长度 32 位 128 位
地址数量 约 43 亿个 约 $3.4 \times 10^{38}$
常用地址表示方式 点分十进制(192.168.1.1) 冒号十六进制(2001:db8::1)
地址分配 需要 NAT(网络地址转换) 无需 NAT,全球唯一
自动配置 DHCP 分配 SLAAC(自动地址配置)
广播 有广播(Broadcast) 无广播,改为组播(Multicast)
头部结构 复杂,变长选项 固定 40 字节头部,性能更好
安全性 需要额外加密 IPSec 内置支持

IPv6 的变化和改进

  • 头部简化:IPv6 固定 40 字节,路由器转发更快。
  • 无 NAT:IPv6 设备可直接通信,无需 NAT 转换。
  • 无广播:IPv6 仅支持组播,减少网络负担。
  • IPSec 强制支持:默认支持端到端加密通信。
  • 分片和重组:IPv6不允许在路由器上进行分片和重组,只能在源与目的地执行

IPv6 数据报与 IPv4 数据报的区别

对比项 IPv4 IPv6
头部长度 变长,不固定(20-60 字节) 固定 40 字节
地址长度 32 位 128 位
选项字段 头部有选项 选项移入扩展头部
广播支持 有广播 仅支持组播
生存时间(TTL) TTL 计数 直接改为 跳数限制(Hop Limit)
下一协议 Protocol 字段 Next Header 取代
安全性 IPSec 可选 IPSec 强制支持

IPv6 迁移注意事项

  1. 是否支持 IPv6?

    • 运营商、路由器、操作系统是否支持 IPv6?
    • 使用 ping6ip -6 addr show 检查 IPv6 连接。
  2. IPv6 地址配置

    • 自动配置(SLAAC):设备可自动获取 IPv6 地址。
    • DHCPv6:类似 IPv4 DHCP,但需要路由器支持。
  3. IPv6 防火墙

    • 由于 IPv6 无 NAT,需要配置防火墙 防止公网 IP 暴露设备
  4. IPv6 过渡机制

    • 双栈(Dual Stack):同时运行 IPv4 和 IPv6(推荐)。
    • 隧道(Teredo、6to4):让 IPv6 运行在 IPv4 之上。

总结

  • IPv6 解决 IPv4 地址耗尽问题,提供更大的地址空间。
  • IPv6 头部固定 40 字节,更简洁高效,路由转发性能更好。
  • IPv6 原生支持自动配置(SLAAC)、IPSec 加密、安全性更强
  • IPv6 需要企业和运营商支持,部署时需注意防火墙和过渡机制。