网络层知识体系梳理:从互联、寻址到路由
网络层位于运输层之下、数据链路层之上,是实现互联网互连的核心层次。数据链路层解决的是同一链路或同一局域网内相邻节点之间的帧传输问题,而网络层解决的是分组如何跨越多个异构网络、经过多个路由器,最终到达目的主机的问题。
网络层的知识可以围绕几条主线展开:网络层如何提供服务,IP 如何统一不同网络的寻址与分组格式,IPv4 如何通过地址、子网、NAT、ARP、DHCP、ICMP 等机制完成通信支持,IPv6 如何改进地址空间与首部设计,路由算法和路由协议如何生成路由表,IP 多播和移动 IP 如何支持特殊通信场景,路由器又如何在设备层面完成分组转发。

一、网络层的基本功能
网络层的基本功能是实现异构网络互连、逻辑寻址、路由选择、分组转发以及差错和控制信息反馈。它向运输层提供主机到主机的通信服务,而不是进程到进程的通信服务。进程之间的通信由运输层通过端口号完成,网络层只负责把分组送到目的主机。
1.1 异构网络互连
异构网络是指在物理介质、链路层协议、帧格式、传输速率、最大传输单元、硬件地址等方面存在差异的网络。例如,以太网、无线局域网、点到点链路、广域网等底层技术并不相同。如果没有网络层的统一抽象,这些网络之间很难直接组成一个大规模互联网络。
TCP/IP 体系中的 IP 协议通过统一的 IP 地址和 IP 数据报格式,把不同类型的底层网络抽象成一个逻辑统一的互联网。上层运输层和应用层不需要关心分组经过的是哪种链路,只需要面对统一的 IP 层接口。
路由器是实现异构网络互连的关键设备。路由器连接多个网络,根据 IP 数据报中的目的 IP 地址查找路由表,决定下一跳和输出接口。交换机主要根据 MAC 地址在局域网内部转发帧,而路由器根据 IP 地址在不同网络之间转发分组。
1.2 路由与转发
路由和转发是网络层中密切相关但含义不同的概念。路由选择是控制平面的功能,负责根据网络拓扑、链路状态、路径代价和路由协议计算到各目的网络的路径,并生成路由表。分组转发是数据平面的功能,指路由器收到 IP 数据报后,根据转发表或路由表查找下一跳和输出接口,把数据报发往下一跳。
路由选择可以理解为"规划路线",分组转发可以理解为"按路线前进"。路由选择通常由静态配置或动态路由协议完成,例如 RIP、OSPF、BGP;转发则是路由器对每个到达分组执行的快速查表动作。
路由表通常包含目的网络、网络前缀或子网掩码、下一跳地址、输出接口、度量值等信息。路由器查表时通常采用最长前缀匹配原则。如果多个路由项都能匹配目的 IP 地址,则选择网络前缀最长、范围最精确的那一项。
分组跨越多个网络时,IP 数据报中的源 IP 地址和目的 IP 地址通常保持不变,但每经过一个路由器,链路层帧都会重新封装,因此源 MAC 地址和目的 MAC 地址会随每一跳改变。IP 地址体现端到端的逻辑通信,MAC 地址体现逐跳的链路传输。
1.3 网络层提供的服务模型
网络层可以提供虚电路服务或数据报服务。虚电路服务是面向连接的通信方式,通信前需要建立连接,沿途节点保存虚电路状态,后续分组通常沿同一路径转发,通信结束后释放连接。它便于保证顺序和进行资源控制,但连接建立、维护和释放都有额外开销,网络核心设备也需要保存状态。
数据报服务是无连接的通信方式,通信前不建立连接,每个分组都独立携带完整目的地址并独立选择路径。不同分组可能经过不同路径,也可能乱序到达、丢失或重复。


TCP/IP 体系中的 IP 协议采用数据报服务。IP 提供的是尽最大努力交付,即网络层会尽力把数据报送到目的主机,但不保证可靠交付、不保证顺序、不保证时延、不保证带宽,也不保证一定不丢失。可靠传输、流量控制和拥塞控制等功能通常由运输层的 TCP 等协议实现。
二、SDN 的基本概念

SDN,即软件定义网络,是一种将控制平面与数据平面分离的网络体系结构。传统网络设备中,控制功能和转发功能通常耦合在同一设备内,路由器或交换机既运行控制协议,又执行分组转发。SDN 则把控制逻辑集中到逻辑上集中的控制器中,底层交换设备主要按照控制器下发的规则转发分组。
2.1 控制平面与数据平面分离
数据平面负责高速转发分组。SDN 交换机根据流表项匹配分组字段,例如源地址、目的地址、协议类型、端口号、入端口等,然后执行转发、丢弃、修改字段、统计等动作。
控制平面由 SDN 控制器承担。控制器掌握网络拓扑、链路状态和策略要求,计算转发规则,并通过南向接口把规则下发给交换设备。OpenFlow 是典型的南向接口协议,它定义了控制器和交换机之间交换控制信息的方式。
控制平面与数据平面分离后,网络行为可以通过软件集中编程和管理。管理员可以通过控制器统一部署访问控制、流量工程、负载均衡、网络监控和网络虚拟化策略,而不必逐台设备手工配置。
2.2 SDN 的分层与接口
SDN 通常分为应用层、控制层和基础设施层。应用层运行网络应用,例如安全策略、流量调度、负载均衡、网络监控等。控制层由 SDN 控制器组成,向上提供抽象接口,向下控制转发设备。基础设施层由交换机、路由器等转发设备组成,负责实际数据转发。
SDN 中常见接口包括北向接口、南向接口和东西向接口。北向接口连接控制器和上层应用,使应用能够调用网络能力。南向接口连接控制器和数据平面设备,OpenFlow 是典型代表。东西向接口用于多个控制器之间的信息交换和协同。
2.3 SDN 的优点与问题
SDN 的优点包括集中控制、灵活编程、便于自动化管理、利于网络虚拟化、便于快速部署新业务。由于控制逻辑从硬件设备中解耦,网络策略可以通过控制器统一下发,降低传统逐设备配置的复杂度。
SDN 也存在问题。控制器如果过于集中,可能成为性能瓶颈或单点故障。控制器与交换设备之间的控制信道需要保证安全。多个控制器之间需要保持状态一致。传统网络向 SDN 演进还涉及设备兼容、协议支持和运维方式变化。
三、IPv4
IPv4 是目前仍广泛使用的网际协议版本,是网络层的核心内容。IPv4 的重点包括数据报格式、分片机制、IPv4 地址、NAT、子网划分、CIDR、路由聚合、默认路由、ARP、DHCP、ICMP、IP 多播和移动 IP。
3.1 IPv4 数据报格式
IPv4 数据报由首部和数据部分组成。首部最小长度为 20 字节,最大长度为 60 字节。首部字段包括版本、首部长度、服务类型、总长度、标识、标志、片偏移、生存时间、协议、首部校验和、源地址、目的地址和可选字段。
版本字段标识 IP 协议版本,IPv4 的版本号为 4。首部长度字段以 4 字节为单位,因此当首部长度字段为 5 时,表示首部长度为 20 字节。服务类型字段用于表示服务质量相关需求。总长度字段表示整个 IP 数据报的长度,包括首部和数据部分,单位为字节。由于总长度字段为 16 位,IPv4 数据报理论最大长度为 65535 字节。
标识、标志和片偏移字段与分片有关。标识字段用于标明分片属于同一个原始数据报。标志字段中的 DF 位表示禁止分片,MF 位表示后面是否还有分片。片偏移字段表示当前分片的数据部分在原始数据报中的相对位置,单位为 8 字节。
TTL,即生存时间,用于防止数据报在网络中无限循环。每经过一个路由器,TTL 通常减 1;当 TTL 减为 0 时,路由器丢弃该数据报,并通常向源主机发送 ICMP 超时报文。协议字段用于指明数据部分应交给哪个上层协议处理,例如 ICMP、TCP 或 UDP。首部校验和只检验 IPv4 首部,不检验数据部分,并且由于 TTL 每跳变化,首部校验和需要在每个路由器处重新计算。
源 IP 地址和目的 IP 地址各占 32 位。路由器主要根据目的 IP 地址查找路由表,源 IP 地址用于目的主机响应和网络设备返回差错信息。

3.2 IPv4 分片
不同链路具有不同的最大传输单元 MTU。如果 IP 数据报长度超过下一条链路的 MTU,并且没有设置禁止分片,路由器可以把数据报分成多个较小的分片。每个分片都是一个独立的 IP 数据报,都带有自己的 IP 首部。
分片时,除最后一个分片外,每个分片的数据部分长度必须是 8 字节的整数倍,因为片偏移字段以 8 字节为单位。所有分片具有相同的标识字段,目的主机根据标识、源地址、目的地址和协议字段判断哪些分片属于同一个原始数据报。最后一个分片的 MF 位为 0,其他分片的 MF 位为 1。
分片会增加首部开销和重组复杂度。如果任意一个分片丢失,整个原始数据报通常无法重组成功。因此现代网络倾向于通过路径 MTU 发现机制减少中途分片。IPv6 中间路由器不再执行分片,分片只能由源主机完成。

3.3 IPv4 地址
IPv4 地址长度为 32 位,通常采用点分十进制表示,例如 192.168.1.1。IPv4 地址具有层次结构,通常由网络号和主机号组成。网络号标识主机所在网络,主机号标识该网络中的具体主机。
早期 IPv4 采用分类地址,包括 A 类、B 类、C 类、D 类和 E 类。A 类地址以二进制 0 开头,网络号较短、主机号较长,适合大型网络。B 类地址以 10 开头,适合中等规模网络。C 类地址以 110 开头,适合小型网络。D 类地址以 1110 开头,用于 IP 多播。E 类地址以 1111 开头,保留为实验用途。
在一个网络中,主机号全 0 的地址表示网络地址,主机号全 1 的地址表示广播地址,它们不能分配给普通主机。例如 192.168.1.0/24 表示网络地址,192.168.1.255 表示广播地址,可分配给主机的地址通常是 192.168.1.1 到 192.168.1.254。
常见特殊地址包括 0.0.0.0、127.0.0.0/8、255.255.255.255 和私有地址。127.0.0.1 是环回地址,用于本机测试。私有地址包括 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16,只能在内部网络使用,不能直接在公网路由。

3.4 NAT
NAT,即网络地址转换,主要用于缓解 IPv4 公网地址不足问题。它允许多个内部主机使用私有地址访问公网,而对外表现为一个或少量公网地址。
NAT 路由器维护转换表,把内部私有 IP 地址和端口号映射为公网 IP 地址和端口号。当内部主机访问外部服务器时,NAT 路由器将源 IP 地址从私有地址改为公网地址,并可能修改源端口,同时记录映射关系。外部服务器响应时,目的地址是 NAT 路由器的公网地址和端口,NAT 路由器根据转换表把目的地址和端口还原为内部主机的私有地址和端口。
NAT 的优点是节省公网 IPv4 地址,并在一定程度上隐藏内部网络结构。缺点是破坏了端到端通信模型,使外部主机主动访问内部主机变得困难;某些协议在报文内容中携带 IP 地址或端口,可能需要额外处理;NAT 设备需要维护状态,增加了复杂性。

3.5 子网划分
子网划分是在原有网络号和主机号结构基础上,从主机号中借用若干位作为子网号,把一个较大的网络划分为多个较小的子网。子网划分可以提高地址利用率、减少广播范围、便于网络管理和增强安全隔离。
子网掩码用于区分 IP 地址中的网络部分和主机部分。掩码中连续的 1 对应网络号和子网号,连续的 0 对应主机号。例如 255.255.255.0 等价于 /24,表示前 24 位是网络前缀,后 8 位是主机号。
如果剩余 h 位作为主机号,则每个子网共有 2^h 个地址,其中主机号全 0 和全 1 通常不能分配给普通主机,因此可用主机数通常为 2^h - 2。判断两个 IP 是否在同一子网内,需要将两个地址分别与子网掩码按位与,结果相同则属于同一子网。
3.6 CIDR 与路由聚合
CIDR,即无分类域间路由,取消了传统 A、B、C 类地址的固定边界,使用"IP 地址/前缀长度"的形式表示地址块。例如 192.168.10.0/24 表示前 24 位为网络前缀,后 8 位为主机部分。
CIDR 使地址分配更加灵活,减少了分类地址造成的地址浪费。CIDR 中路由查找采用最长前缀匹配原则。如果一个目的地址同时匹配多个路由项,应选择前缀长度最长的路由项,因为它描述的地址范围最小、最具体。
路由聚合也称路由汇总,是把多个连续的小地址块合并成一个较大的地址块,用一个较短前缀表示,从而减少路由表项数量。路由聚合的基本方法是找出多个网络地址二进制表示中的最长公共前缀,公共前缀之后的位全部置 0,得到聚合后的网络地址。
路由聚合能够缩小路由表规模,提高查表效率,减少路由更新开销。但聚合必须保证地址块连续并且边界对齐,否则可能覆盖不属于自己的地址范围,造成错误转发。
3.7 默认路由
默认路由用于处理路由表中没有更具体匹配项的数据报。IPv4 默认路由通常写作 0.0.0.0/0,因为前缀长度为 0,可以匹配任意 IPv4 地址。当没有其他更长前缀匹配项时,路由器使用默认路由指定的下一跳。
主机通常配置默认网关。当目的 IP 地址不在本地子网内时,主机把数据报交给默认网关,由默认网关继续转发。默认路由可以显著简化主机和边缘路由器的路由表配置。
3.8 网络层转发分组的过程
源主机发送数据报前,先判断目的 IP 地址是否与自己在同一子网。如果目的主机在同一子网内,源主机通过 ARP 获取目的主机的 MAC 地址,并把 IP 数据报封装成帧发送给目的主机。如果目的主机不在同一子网内,源主机通过 ARP 获取默认网关的 MAC 地址,并把数据报交给默认网关。
路由器收到帧后,去掉数据链路层首部,取出 IP 数据报,检查目的 IP 地址并查找路由表。若找到匹配路由,则根据最长前缀匹配原则确定下一跳和输出接口。随后,路由器根据下一跳所在链路的链路层协议重新封装成帧,并发送出去。
在整个转发过程中,IP 数据报的源 IP 地址和目的 IP 地址一般不变,但每经过一跳都会重新封装链路层帧,因此 MAC 地址每跳改变。TTL 每经过一个路由器减 1,如果减为 0,则数据报被丢弃并可能产生 ICMP 超时报文。
3.9 ARP
ARP,即地址解析协议,用于在同一链路或同一局域网内,根据目标 IP 地址获得对应的 MAC 地址。IP 地址用于网络层寻址,MAC 地址用于数据链路层帧传输。主机要发送链路层帧时,必须知道下一跳的 MAC 地址。
ARP 的基本过程是:主机先查看 ARP 缓存,如果已有目标 IP 地址对应的 MAC 地址,就直接使用;如果没有,则广播 ARP 请求,询问"谁拥有这个 IP 地址";局域网中的所有主机都能收到请求,但只有拥有该 IP 地址的主机会单播 ARP 响应,告诉请求者自己的 MAC 地址;请求者收到响应后,将映射关系写入 ARP 缓存,并用该 MAC 地址封装帧。
ARP 只在同一链路内工作。如果目的主机与源主机在同一子网内,源主机解析目的主机的 MAC 地址;如果目的主机不在同一子网内,源主机解析默认网关的 MAC 地址。路由器转发到下一条链路时,又会为下一跳重新进行地址解析和帧封装。
3.10 DHCP
DHCP,即动态主机配置协议,用于自动为主机分配网络配置信息。通过 DHCP,主机可以自动获得 IP 地址、子网掩码、默认网关、DNS 服务器地址等参数,减少人工配置的工作量和错误。
DHCP 的典型过程包括 Discover、Offer、Request 和 ACK。客户端刚接入网络时没有有效 IP 地址,因此以广播方式发送 DHCP Discover 报文寻找 DHCP 服务器。服务器收到后返回 DHCP Offer,提供一个可用 IP 地址和相关配置。客户端选择某个服务器的配置并发送 DHCP Request。服务器最后返回 DHCP ACK,确认分配成功,客户端即可使用该地址。
DHCP 使用 UDP 传输,服务器端口通常为 67,客户端端口通常为 68。DHCP 分配的地址通常具有租期,客户端需要在租期到期前续租。如果续租失败,客户端应停止使用该地址并重新申请。
3.11 ICMP
ICMP,即网际控制报文协议,是 IP 层的辅助协议,用于在主机和路由器之间传递差错报告和控制信息。ICMP 报文封装在 IP 数据报中传输,但它服务于网络层控制功能。
常见 ICMP 差错报文包括目的不可达、时间超过、参数问题、重定向等。目的不可达用于表示网络、主机、协议或端口不可达。时间超过通常由 TTL 减为 0 引起,也可能由分片重组超时引起。参数问题表示 IP 首部字段存在错误。重定向用于提醒主机以后向更合适的路由器发送数据报。
常见 ICMP 询问报文包括回送请求与回送回答、时间戳请求与回答等。PING 使用 ICMP 回送请求和回送回答,用于检测目标主机是否可达以及测量往返时间。Traceroute 或 Tracert 利用逐步增加 TTL 和 ICMP 超时报文,探测从源主机到目的主机经过的路由路径。
ICMP 只报告差错,不负责纠正差错。它通常不会对 ICMP 差错报文本身再产生 ICMP 差错报文,以避免差错报文无限循环。
四、IPv6
IPv6 是为解决 IPv4 地址空间不足并改进网络层设计而提出的新一代 IP 协议。IPv6 地址长度为 128 位,基本首部固定为 40 字节,支持扩展首部、自动配置、多播和任播,并取消广播。
4.1 IPv6 的主要特点
IPv6 的首要特点是地址空间巨大。IPv4 地址长度为 32 位,而 IPv6 地址长度为 128 位,可以提供极其庞大的地址数量,适合移动设备、物联网和未来大规模网络发展。
IPv6 基本首部更加简洁。它取消了 IPv4 中的首部校验和、分片相关字段和复杂选项字段,把可选功能放入扩展首部中。路由器在常规转发时只需处理固定长度的基本首部,因此转发效率更高。
IPv6 不允许中间路由器分片,分片只能由源主机通过分片扩展首部完成。这减少了路由器的处理负担,也使路径 MTU 发现更加重要。IPv6 支持无状态地址自动配置,主机可以根据网络前缀和接口标识自动生成地址。
IPv6 取消广播,使用多播实现许多原来由广播承担的功能。IPv6 还支持任播地址,使数据报可以交付给一组接口中路由意义上最近的一个接口。IPv6 对移动性、安全性和服务质量也提供了更好的支持基础。
4.2 IPv6 数据报格式
IPv6 数据报由基本首部、一个或多个扩展首部以及上层数据组成。基本首部固定为 40 字节,主要字段包括版本、通信量类、流标号、有效载荷长度、下一个首部、跳数限制、源地址和目的地址。
版本字段取值为 6。通信量类用于区分不同优先级或服务质量需求。流标号用于标识同一数据流,使路由器能够对同一流的分组进行一致处理。有效载荷长度表示基本首部之后的数据长度,包括扩展首部和上层数据。
下一个首部字段用于指明基本首部之后跟随的是哪个扩展首部,或者直接指明上层协议,例如 TCP、UDP、ICMPv6。跳数限制类似于 IPv4 中的 TTL,每经过一个路由器减 1,减为 0 时分组被丢弃。
IPv6 基本首部没有首部校验和,这是因为链路层和运输层通常已经提供差错检测,网络层每跳重新计算校验和会降低路由器效率。IPv6 基本首部也没有 IPv4 的标识、标志和片偏移字段,分片由扩展首部完成。
IPv6 扩展首部位于基本首部和上层数据之间,用于承载可选功能。常见扩展首部包括逐跳选项首部、路由首部、分片首部、目的选项首部、认证首部和封装安全载荷首部。扩展首部机制使 IPv6 既能保持基本首部简洁,又具有较强扩展能力。


4.3 IPv6 地址
IPv6 地址长度为 128 位,通常写成 8 组十六进制数,每组 16 位,中间用冒号分隔。例如 2001:0db8:0000:0000:0000:ff00:0042:8329。为了简化书写,每组前导 0 可以省略,连续的一段全 0 可以用双冒号压缩,例如可写为 2001:db8::ff00:42:8329。
双冒号在一个 IPv6 地址中只能出现一次,否则无法确定被压缩的 0 组数量。IPv6 地址通常也用前缀长度表示网络部分,例如 2001:db8:abcd:12::/64。在 IPv6 中,一个局域网常使用 /64 前缀,前 64 位表示网络前缀,后 64 位表示接口标识。
IPv6 地址主要包括单播地址、多播地址和任播地址。单播地址标识一个接口,发送到单播地址的数据报交付给该接口。多播地址标识一组接口,发送到多播地址的数据报交付给该组中的所有接口。任播地址也分配给多个接口,但发送到任播地址的数据报通常交付给路由意义上最近的一个接口。
IPv6 没有广播地址。IPv4 中通过广播实现的许多功能,在 IPv6 中由多播完成。常见特殊地址包括未指定地址 ::、环回地址 ::1、链路本地地址 fe80::/10 和全球单播地址。链路本地地址只在本链路范围内有效,不能被路由器转发到其他链路。多播地址通常以 ff00::/8 开头。


4.4 从 IPv4 向 IPv6 过渡
IPv4 和 IPv6 会长期共存,因此需要过渡技术。常见过渡方式包括双协议栈、隧道技术和协议转换。
双协议栈是指设备同时支持 IPv4 和 IPv6。访问 IPv4 节点时使用 IPv4,访问 IPv6 节点时使用 IPv6。这种方式兼容性好,是常见过渡方案,但需要同时维护两套地址、路由和安全策略。
隧道技术用于让一种协议的数据报穿越另一种协议的网络。例如 IPv6 数据报可以封装在 IPv4 数据报中穿越 IPv4 网络,到达隧道出口后再解封装。隧道技术适用于中间网络尚未完全支持目标协议的场景。
协议转换用于只支持 IPv4 的节点和只支持 IPv6 的节点之间通信。转换设备需要在 IPv4 首部和 IPv6 首部之间进行字段映射,并可能结合地址和端口转换。协议转换灵活但复杂,可能影响端到端透明性。
五、路由算法
路由算法用于确定分组从源网络到目的网络的路径。路由选择的目标是生成正确、稳定、可扩展的路由表,使路由器能够根据目的地址进行逐跳转发。常见路由思想包括静态路由、动态路由、距离向量算法和链路状态算法。
5.1 静态路由与动态路由
静态路由由管理员手工配置。它简单、稳定、可控,协议开销小,适合拓扑结构简单、变化较少的小型网络。静态路由的缺点是不能自动适应链路故障和拓扑变化,规模变大后维护困难。默认路由可以看作一种特殊的静态路由,用于把所有未知目的网络交给指定下一跳。
动态路由由路由协议自动完成。路由器通过交换路由信息发现网络可达性,并根据算法更新路由表。当链路故障、代价变化或网络新增时,动态路由协议可以自动重新收敛。动态路由适合中大型网络,但会消耗带宽、CPU 和内存,也可能出现收敛延迟或临时路由环路。
5.2 距离向量算法
距离向量算法的基本思想是,每台路由器只知道到相邻路由器的代价,并通过与邻居交换路由表逐步学习到各目的网络的距离和下一跳。路由器根据邻居通告的距离,加上自己到该邻居的链路代价,计算经由该邻居到目的网络的总代价,并选择最小者作为下一跳。
距离向量算法实现简单,不要求路由器掌握全网拓扑,但收敛速度较慢,容易产生路由环路和计数到无穷问题。所谓计数到无穷,是指链路故障后,路由器之间可能相互误以为对方仍有到目的网络的路径,导致距离值逐步增大,直到达到协议规定的无穷大。
常见改进方法包括水平分割、毒性逆转、触发更新和最大度量限制。水平分割指从某个邻居学到的路由不再从该接口通告回去。毒性逆转则将这类路由以无穷大距离通告回去,明确告诉对方不能经由自己到达该目的网络。触发更新是在路由变化时立即发送更新,加快收敛。


5.3 链路状态算法
链路状态算法的基本思想是,每台路由器发现自己与邻居之间的链路状态和代价,并把这些信息泛洪给区域内所有路由器。这样每台路由器都能获得完整的网络拓扑图,然后独立运行 Dijkstra 算法,计算从自己出发到各目的网络的最短路径树。
链路状态算法收敛较快、全局信息充分、不容易长期形成环路,但实现复杂,需要维护链路状态数据库,并消耗一定计算和存储资源。如果网络规模很大,还需要通过区域划分等方式降低复杂度。
Dijkstra 算法从源节点出发,逐步确定到各节点的最短路径。算法维护一个已经确定最短路径的节点集合和一个暂定距离表,每次选出暂定距离最小的节点加入集合,并用它更新其他节点的暂定距离,直到所有节点的最短路径确定。
六、分层次路由选择与路由协议
互联网规模巨大,如果所有路由器都运行同一种全局路由协议并保存全网详细路由信息,路由表会过大,协议开销也难以承受。因此互联网采用分层次路由选择,把整个互联网划分为许多自治系统。
自治系统 AS 是由同一管理机构控制的一组网络和路由器。自治系统内部使用内部网关协议 IGP,自治系统之间使用外部网关协议 EGP。分层路由能够减小路由表规模,降低路由信息交换开销,隐藏自治系统内部细节,并允许不同组织采用不同路由策略。
6.1 内部网关协议 IGP
内部网关协议用于自治系统内部。由于同一自治系统内部通常由同一组织管理,可以使用统一的度量标准和路由策略,因此 IGP 主要关注路径效率、收敛速度和稳定性。RIP 和 OSPF 都属于 IGP。
RIP 简单,适合小规模网络。OSPF 更复杂,但收敛速度较快,支持较大规模自治系统内部路由。选择哪种 IGP 取决于网络规模、管理复杂度、收敛要求和设备能力。
6.2 外部网关协议 EGP
外部网关协议用于自治系统之间。不同自治系统由不同组织管理,存在不同的商业关系、安全约束和策略要求,因此外部路由不能只依据最短路径决定。
BGP 是当前互联网中最重要的外部网关协议。它更关注策略可达性,而不是单纯的路径长度。BGP 允许自治系统根据商业关系和管理策略控制路由传播和路径选择。
6.3 RIP
RIP,即路由信息协议,是一种基于距离向量算法的内部网关协议。它使用跳数作为度量,每经过一个路由器跳数加 1。RIP 规定最大有效跳数为 15,跳数 16 表示不可达,因此只适合小规模网络。
RIP 路由器维护一张路由表,表项通常包括目的网络、距离和下一跳。相邻路由器会周期性交换路由表。路由器收到邻居的路由信息后,对其中每条路由的距离加 1,并与本地路由表比较。如果本地没有该目的网络的路由,就添加;如果经由该邻居的新路径更短,就更新;如果原来的下一跳就是该邻居,则即使距离变大也需要更新,因为原路径状态已经变化。
RIP 使用 UDP 的 520 端口传输。RIP 报文主要包括请求报文和响应报文。请求报文用于向邻居请求路由信息,响应报文用于发送路由表。路由器启动时可以发送请求报文,正常运行后会周期性发送响应报文,也可以在路由发生变化时触发更新。
RIP 的优点是实现简单、配置方便、适合小型网络。缺点是收敛慢、最大跳数小、度量单一、容易出现环路和计数到无穷。为了缓解这些问题,RIP 可以采用水平分割、毒性逆转、触发更新等机制。
6.4 OSPF
OSPF,即开放最短路径优先协议,是一种基于链路状态算法的内部网关协议。每台 OSPF 路由器发现邻居后,生成链路状态通告,描述自己与邻居之间的链路和代价,并通过泛洪方式传播给同一区域内其他路由器。
所有路由器获得一致的链路状态数据库后,以自己为根运行 Dijkstra 算法,计算最短路径树并生成路由表。OSPF 的代价可以根据带宽等因素配置,因此比 RIP 只看跳数更加灵活。
OSPF 支持区域划分。大型自治系统可以划分为多个区域,骨干区域负责连接其他区域。区域划分能减少链路状态数据库规模,降低泛洪和计算开销。
OSPF 的优点是收敛快、度量灵活、支持 CIDR 和可变长子网掩码、适合较大网络。缺点是配置和维护复杂,对设备资源要求较高。

6.5 BGP
BGP,即边界网关协议,是自治系统之间使用的外部网关协议。BGP 通常被称为路径向量协议,它通告到达某个网络前缀的可达性信息,并携带 AS 路径。AS 路径记录到达目的网络需要经过哪些自治系统,可用于防止自治系统级路由环路,也可作为策略选择的重要依据。
BGP 的目标不是简单寻找最短路径,而是在满足策略约束的前提下选择可达路径。BGP 的路径选择会受到本地策略、AS 路径、下一跳、商业关系和运营策略影响。
如果某个 AS 在收到的路径中发现自己的 AS 号,就会拒绝该路径,避免形成自治系统级环路。BGP 适合互联网这样由多个独立管理域组成的大规模网络,但它的收敛通常比内部网关协议慢,配置和策略也更复杂。
七、IP 多播
IP 多播用于一对多通信,即一个源主机发送一份数据,网络负责将数据复制并交付给一组接收者。它适合视频会议、在线直播、实时数据分发、组播更新等场景。多播的目标是减少源主机发送负担和网络中重复流量。
7.1 多播的基本概念
单播是一对一通信,源主机需要分别给每个目的主机发送数据。广播是一对同一广播域内所有主机通信,所有主机都会收到广播数据。多播是一对一组主机通信,只有加入某个多播组的主机接收该组数据。
多播组由多播地址标识,主机可以动态加入或离开多播组。源主机向多播地址发送数据,并不需要知道组内具体有哪些成员。网络中的多播路由器根据组成员分布,把数据沿合适的分发路径转发到组成员所在网络。
多播可以减少重复发送。例如同一个视频流要发给大量接收者,如果使用单播,源主机需要发送许多份相同数据;如果使用多播,源主机只需发送一份,网络在必要分叉处复制数据。
7.2 IP 多播地址
IPv4 中 D 类地址用于多播,范围是 224.0.0.0 到 239.255.255.255。D 类地址以二进制 1110 开头,不表示某台具体主机,而表示一个多播组。多播地址通常作为目的地址使用,不能作为普通源地址使用。
在局域网中,多播 IP 地址需要映射为相应的多播 MAC 地址,以便链路层传输。主机加入某个多播组后,才接收发往该多播地址的数据。
IPv6 也支持多播,并且取消了广播。许多原来由 IPv4 广播完成的功能,在 IPv6 中由多播替代。IPv6 多播地址通常以 ff00::/8 开头。
7.3 多播路由
多播路由的核心是构造从源到多个接收者的分发树。路由器需要知道哪些接口方向存在多播组成员,并避免把数据转发到没有成员的方向。分发树可以是基于源的树,也可以是共享树。
多播路由比单播路由复杂,因为它不仅要确定到一个目的网络的下一跳,还要处理一组接收者的分布、数据复制位置、环路避免和组成员变化。实际网络中,多播常与组成员管理协议配合使用。
八、移动 IP
移动 IP 用于解决主机在不同网络之间移动时仍保持通信连续性的问题。普通 IP 地址与网络位置相关,主机移动到其他网络后,如果继续使用原地址,路由器无法按普通路由把数据送到新位置;如果更换地址,已有连接又可能中断。移动 IP 的目标是在移动节点改变接入网络时,仍能保持原有通信。
8.1 移动 IP 的基本概念
移动节点是会改变接入网络的主机。归属网络是移动节点原本所属的网络。归属地址是移动节点在归属网络中的长期地址。外地网络是移动节点当前访问的网络。转交地址表示移动节点当前所在位置。
归属代理位于归属网络,负责维护移动节点归属地址和当前转交地址之间的绑定关系。外地代理位于外地网络,可以帮助移动节点获得转交地址并完成相关转发。通信对端称为通信节点,它通常仍然向移动节点的归属地址发送数据。
8.2 移动 IP 的通信过程
移动节点进入外地网络后,需要获得转交地址,并向归属代理注册。归属代理记录移动节点当前所在位置,即归属地址和转交地址之间的映射关系。
当通信节点向移动节点的归属地址发送数据时,数据报按普通路由到达归属网络。归属代理截获这些数据报后,通过隧道封装并转发到移动节点当前的转交地址。移动节点收到后解封装,得到原始数据报。
移动节点向通信节点发送数据时,可以直接按照普通 IP 路由发送,也可以根据具体机制经由归属代理转发。如果通信节点到移动节点的数据必须先经过归属代理,再由归属代理转发到外地网络,就可能形成三角路由,导致路径不是最优。
8.3 移动 IP 的意义与问题
移动 IP 的意义在于把主机身份标识与当前网络位置区分开来。归属地址表示移动节点身份,转交地址表示当前所在位置。这样移动节点即使改变接入网络,也可以保持归属地址不变,从而尽量保持通信连续性。
移动 IP 的问题包括路径可能不够优化,归属代理可能成为瓶颈或单点故障,注册过程需要安全认证,隧道封装会增加额外开销。它体现了网络层支持移动性的基本思想。
九、网络层设备:路由器
路由器是网络层最典型的设备。它连接多个网络,根据 IP 地址转发分组,是实现互联网互连的关键设备。理解路由器需要同时关注控制平面和数据平面,也就是路由信息如何生成以及分组如何被快速转发。
9.1 路由器的组成
路由器通常由输入端口、输出端口、交换结构、路由处理器和存储队列等部分组成。输入端口接收链路上传来的帧,完成物理层和数据链路层处理,取出 IP 数据报,并进行查表或转发表查询。输出端口负责排队、封装链路层帧并发送到下一条链路。
交换结构位于输入端口和输出端口之间,负责把分组从输入端口转移到正确的输出端口。交换结构可以采用内存交换、总线交换或互连网络交换等方式。高速路由器需要高性能交换结构,否则内部交换过程会成为瓶颈。
路由处理器负责运行路由协议、维护路由表、生成转发表,并处理控制平面任务。实际高速转发通常不由路由处理器逐个处理分组,而是由输入端口或专门硬件根据转发表完成快速查找。
9.2 路由表与转发表
路由表偏向控制平面,包含路由来源、度量、下一跳、目的网络等较完整信息。转发表偏向数据平面,是从路由表提取并优化后的快速查找结构,用于对每个到达分组执行最长前缀匹配并确定输出接口。
路由协议和静态配置决定路由表的内容,路由表进一步生成转发表。分组转发时,路由器通常直接查询转发表,以获得更高转发速度。
9.3 路由器内部排队
路由器内部可能出现输入排队和输出排队。当分组到达速度超过交换结构处理能力时,输入端口会排队。当多个输入端口同时向同一个输出端口发送分组,而输出链路速率不足时,输出端口会排队。
排队会增加时延,队列溢出会导致分组丢失。路由器可以通过队列管理和调度机制改善性能,例如优先级队列、公平队列、主动队列管理等。虽然 IP 层提供尽力而为服务,但路由器内部排队和调度会显著影响网络性能。
9.4 路由器与交换机
交换机主要工作在数据链路层,根据 MAC 地址转发帧,通常用于同一局域网内部。路由器工作在网络层,根据 IP 地址转发分组,用于连接不同网络。交换机通常扩展局域网,路由器则连接不同网络并隔离广播域。
交换机转发时通常不改变帧所承载的网络层数据报,而路由器转发时会去掉收到的链路层帧首部,检查 IP 数据报,查找路由表,再根据下一条链路重新封装新的帧。因此,经过路由器后,链路层源地址和目的地址会改变。
主机跨网络通信时,通常把数据报交给默认网关。默认网关就是本地网络中的路由器接口。路由器收到数据后,依据目的 IP 地址逐跳转发,直到数据报到达目的主机所在网络。
十、易混概念对比
10.1 IP 地址与 MAC 地址
IP 地址是网络层地址,具有层次结构,用于跨网络寻址和路由选择。MAC 地址是数据链路层地址,主要用于同一链路内帧传输。IP 地址在端到端传输过程中通常保持不变,而 MAC 地址每经过一个路由器都会改变。
10.2 ARP 与 DNS
ARP 根据 IP 地址查找同一链路上的 MAC 地址,作用范围通常是局域网。DNS 根据域名查找 IP 地址,服务于应用层访问。二者都属于"解析"思想,但解析对象、作用范围和协议层次不同。
10.3 DHCP 与 NAT
DHCP 用于给主机自动分配 IP 地址和网络配置参数,解决的是主机如何获得地址的问题。NAT 用于把内部私有地址转换为公网地址,解决的是私有网络如何访问公网以及公网地址不足的问题。
10.4 RIP、OSPF 与 BGP
RIP 是距离向量协议,使用跳数作为度量,最大有效跳数为 15,使用 UDP 520 端口,适合小型网络。OSPF 是链路状态协议,使用 Dijkstra 算法,支持区域划分和灵活代价,适合较大自治系统内部。BGP 是路径向量协议,用于自治系统之间,强调策略和 AS 路径,不是单纯的最短路径协议。
10.5 单播、广播与多播
单播是一对一通信,广播是一对同一广播域内所有主机通信,多播是一对一组成员通信。IPv4 支持广播和多播,IPv6 取消广播并广泛使用多播。多播可以减少一对多通信中的重复数据传输。
10.6 路由选择与分组转发
路由选择是控制平面的功能,负责计算路径并生成路由表。分组转发是数据平面的功能,负责对每个到达分组查表并发送到正确输出接口。路由协议影响路由选择结果,转发表影响分组转发效率。
十一、整体知识框架
网络层的核心任务是让分组跨越多个异构网络,从源主机到达目的主机。为了完成这一任务,网络层首先用 IP 协议统一不同网络的逻辑寻址和分组格式;然后用 ARP、DHCP、NAT、ICMP 等协议解决地址解析、地址配置、地址转换和差错控制问题;再用子网划分、CIDR 和路由聚合提高地址利用率并控制路由表规模;最后通过 RIP、OSPF、BGP 等路由协议生成路由信息,由路由器执行逐跳转发。
IPv4 是基础,重点在数据报格式、分片、地址、NAT、子网、CIDR、ARP、DHCP、ICMP、多播和移动 IP。IPv6 是发展方向,重点在地址空间、固定首部、扩展首部、地址类型和过渡机制。路由算法和协议是网络层动态性的来源,重点理解距离向量、链路状态、自治系统、IGP、EGP、RIP、OSPF 和 BGP。网络层设备则体现路由器如何在控制平面生成路由信息,并在数据平面执行高速转发。
把所有内容压缩成三个问题,就是:目的主机如何被表示,分组如何找到下一跳,网络状态变化时路径如何更新。围绕这三个问题,网络层的知识就能形成完整体系。
重点问题


