第4章:网络层-数据平面

1 导论

网络层的关键功能

  • 转发:将分组从路由器的输入接口转发到合适的输出接口

  • 路由:使用路由算法决定分组从发送主机到目标接收主机的路径

    • 路由选择算法

    • 路由选择协议

  • 连接建立:在某些网络架构中是第三个重要功能

    • 在分组传输之前,在两个主机之间在通过一些路由器所构成的路径上建立一个网络连接

    • 网络层连接:在2个主机之间,涉及到路径上的一些路由器

    • 传输层连接:在2个进程之间(TCP连接)

数据平面

  • 本地每个路由器功能

  • 决定从路由器的输入端口到达的分组如何转发到输出端口

  • 转发功能:

    • 传统方式:基于目标地址+转发表

    • SDN:基于多个字段+流表

控制平面

  • 网络范围内的逻辑

  • 决定数据报如何在路由器之间路由,决定数据报从源到目标主机之间的端到端路径

  • 2个控制平面方法:

    • 传统路由算法:在路由器中被实现

      • 在每一个路由器中的单独路由器算法元件在控制平面进行交互

    • SDN:在远程服务器中实现

      • 一个不同(通常是是远程的)的控制器与本地控制代理(CAs)交互

网络层提供的服务模型

  • 对于单个数据报的服务:

    • 可靠传送

    • 延迟保证

  • 对于数据报流的服务:

    • 保证数据报传送

    • 保证流的最小带宽

    • 分组之间的延迟差

网络架构
服务模型
带宽保证
丢包保证
保序保证
延迟保证
拥塞反馈

Internet

best effort (尽力而为)

none

no

no

no

no (通过丢包推断)

ATM

CBR (恒定速率)

constant rate

yes

yes

yes

no

ATM

VBR (变化速率)

guaranteed rate

yes

yes

yes

no

ATM

ABR (可用比特率)

guaranteed minimum

no

yes

no

yes

ATM

UBR (不指名比特率)

none

no

yes

no

no

2 路由器组成

高层面通用路由器体系架构

  • 路由:运行路由选择算法(RIP/OSPF/BGP )生成路由表

  • 转发:从输入到输出链路交换数据报-根据路由表进行分组的转发

2.1 输入端口

分布式交换:

  • 核心机制:根据数据报头部的信息(如目的地址),在位于输入端口内存的转发表中查找对应的输出端口。这一过程可概括为 “匹配 + 行动”

  • 基于目标的转发(传统方法):转发决策仅依赖于​ IP 数据报的目标 IP 地址

  • 通用转发:转发决策可以基于头部字段的任意组合进行,更加灵活。

输入端口缓存

  • 当交换机构的速率小于输入端口的汇聚速率时,在输入端口可能要排队

    • 排队延迟以及由于输入缓存溢出造成丢失

![[第4章:网络层-数据平面_time_1.png]]

2.2 交换结构

  • 将分组从输入缓冲区传输到合适的输出端口

  • 交换速率:分组可以按照该速率从输入传输到输出

    • 运行速度通常是输入/输出链路速率的若干倍

  • 有三种比较典型的交换机构

    • memory

    • bus

    • crossbar

通过内存交换

这是第一代路由器的交换方式,其核心是CPU的集中控制。

  • 核心原理:采用传统计算机架构。分组(数据包)会从输入端口被完整拷贝到系统内存,CPU从分组头部提取目标地址,在内存中查找转发表,找到输出端口后,再将分组从内存拷贝到输出端口

  • 关键瓶颈:转发速度受内存带宽限制,因为每个分组都需要在系统总线上往返穿越两次

  • 并发性一次只能转发一个分组,是纯粹的串行处理

  • 典型设备:早期的传统计算机改造的路由器。

通过总线交换

这是第二代路由器的交换方式,相比第一代简化了路径。

  • 核心原理:数据报通过一条共享总线,直接从输入端口传输到输出端口,不再需要经过系统内存的两次拷贝。

  • 关键瓶颈:存在总线竞争,交换速度受限于总线带宽,所有端口共享这一条通道。

  • 并发性:虽然流程简化,但仍然是一次处理一个分组,属于时分复用的串行。

  • 典型设备:Cisco 1900(1Gbps总线)、Cisco 5600(32Gbps总线),适用于企业级或接入路由器。

通过互联网络(crossbar等)的交换

这是第三代路由器的交换方式,采用硬件实现并行交换,性能大幅提升。

  • 核心原理:使用Crossbar(纵横制交换矩阵)​ 等互联网络,可以在多个输入和输出端口之间建立多条并发的点对点连接

  • 工作方式:控制器根据转发决策,可以“短接”任意输入端口到输出端口的总线,实现同时并发转发多个分组,彻底克服了共享总线带来的带宽限制。

  • 并发性:可实现真正的并行交换,这是与前两代的根本区别。

  • 高级技术:常将数据报分片为固定长度的“信元”在交换网络内部交换,以提高效率和公平性。

  • 典型设备:Cisco 12000系列,交换速率可达60Gbps,适用于区域或骨干网络核心。

2.3 输出端口

  • 当数据报从交换结构来的速度比传输速率要快就需要输出端口缓存

  • 由调度规则选择排队的数据报进行传输

调度机制

  • 调度:选择下一个要通过链路的分组

  • FIFO:按照分组到来的次序发送

    • 丢弃策略:如果分组到达一个满的队列,先丢弃哪个?

      • tail drop:丢弃刚到达的分组

      • priority:根据优先权丢弃分组

      • random:随机丢弃

3 IP协议

3.1 IP协议报文结构

![[第4章:网络层-数据平面_time_2.png]]

IP的分片和分组

  • 网络链路层有MTU(最大传输单元-链路层帧所携带的最大数据长度)

  • 大的IP数据报在网络上被分片

    • 一个数据报被分割成若干个小的数据报

      • 相同的ID

      • 不同的偏移量

      • 最后一个分片标记为0

    • 重组只在最终的目标主机上进行

    • IP头部信息被用于标识排序相关分片

![[第4章:网络层-数据平面_time_3.png]]

3.2 IP地址

  • IP地址:32位标识,对主机或路由器的接口编址

  • 接口:主机/路由器和链路的连接处

    • 路由器通常有多个接口

    • 主机也有可能有多个接口

    • IP地址和每一个接口关联

  • 一个IP地址和一个接口相关联

子网

  • IP地址:

    • 子网部分(高位bits)

    • 主机部分(低位bits)

  • 什么是子网

    • 一个子网内的节点(主机或路由器)它们的IP地址的高位部分相同,这个节点构成的网络的一部分叫做子网

    • 无需路由器介入,子网内各主机可以在物理上相互直接到达

IP地址分类

  • A类:0开头,一个字节网络位

  • B类:10开头,两个字节网络位

  • C类:110开头

  • D类:1110开头

  • A/B/C:单播地址

  • D:组播地址

特殊IP地址

  • 子网全0:本网络

  • 主机全0:本主机

  • 主机全1:广播地址,这个网络的所有地址

  • 127开头的为回环地址,到网络层会掉头返回主机

  • 专用地址/私有地址:这些地址被设计用于内部网络(如家庭或公司局域网),不会在公共互联网上被路由。

类别

IP地址范围

子网掩码 (MASK)

固定二进制前缀

Class A

10.0.0.0- 10.255.255.255

8

​第一个8位固定为 00001010​

Class B

172.16.0.0- 172.31.255.255

12

前12位固定为 10101100 0001

Class C

192.168.0.0- 192.168.255.255

16

前16位固定为 11000000 10101000

CIDR:Classless InterDomain Routing

无类域间路由:

  • 子网部分可以在任意位置

  • 地址格式:a.b.c.d/x,其中x为子网号部分长度

  • 把IP和子网掩码做与运算即可获取网络位,去查路由表的表项,如果没找到则走默认表项。

如何获取一个地址?

  • 一个ISP如何获得一块地址?

  • ICANN:Internet Corporation forAssigned Name and Numbers

    • 分配地址

    • 管理DNS

    • 分配域名,解决冲突

最长前缀匹配

在路由表中匹配转发时,会查找匹配最长前缀的一条记录。

而路由器会尝试聚合路由规则,会把一个该路由器负责的一整个网段聚合为一条路由记录。

3.3 NAT:Network Address Translation

  • 动机:本地网络只有一个有效的IP地址

    • 省钱:不需要从ISP分配一块地址,可用一个IP地址用于所有的局域网设置

    • 可以在局域网改变设备地址的情况下无须通知外界

    • 可以改变ISP(地址变化)而不需要改变内部的设备地址

    • 安全:局域网内部的设备没有明确的地址,对外是不可见的

![[第4章:网络层-数据平面_time_4.png]]

工作机制

  1. 处理外出数据包(替换源地址)

    当内网设备发送数据包到公网时,NAT路由器会拦截这个数据包,并将数据包的源IP地址和源端口号,替换为路由器自己的公共IP地址和一个新分配的、唯一的端口号。这样,在公网服务器看来,这个请求就来自NAT路由器,而不是内网的真实设备。

  2. 记录转换映射(维护NAT转换表)

    这是NAT能够正确工作的“记忆”核心。路由器会将每一次替换关系(即:内部私有IP:端口 ⇌ 公共IP:新端口)作为一个条目,记录在内部的 NAT转换表​ 中。这张表是后续数据能正确送回内网对应设备的依据。

  3. 处理进入数据包(还原目标地址)

    当公网服务器返回响应数据包时,数据包的目标地址是NAT路由器的公共IP和那个特定的端口号。路由器会查询NAT转换表,根据目标端口号找到对应的内网私有IP和端口,然后将数据包的目标IP地址和端口号替换回这个内部地址,并转发给内网中正确的设备。

  4. NAT 的核心功能与价值

  • 16位端口字段的妙用:这是NAT的技术基石。通过将内部IP地址和端口号,映射到路由器单一公网IP的不同端口上,一个局域网理论上可支持超过 6万(2^16=65536)个并发连接,从而用少量公网IP支撑整个内网的上网需求,是解决IPv4地址枯竭的关键实践方案

  1. 对 NAT 的主要争议(违背网络设计原则)

争议的核心在于,NAT作为一种“救急”的工程方案,打破了早期互联网的许多设计原则:

  • 违反网络分层架构:传统上,路由器(第3层网络设备)不应处理传输层(第4层)的端口信息。NAT深入修改了端口号,模糊了网络设备的功能边界

  • 破坏端到端原则:这是最根本的争议。理想的互联网设计主张“智能的边缘,简单的核心”,让通信两端的主机处理所有复杂功能(如加密、校验),网络核心只负责简单转发。NAT的介入使得:

    • 外网主机无法主动发起对内网主机的连接,破坏了网络的对等性。

    • 像**P2P(如BT下载、视频通话)**​ 这类需要端到端直接通信的应用变得复杂,必须通过“打洞”等技术绕开NAT。

  • 是一种临时方案,而非根本解决:地址短缺问题本应由IPv6(提供几乎无限的地址空间)从根源上解决。NAT的广泛使用,在客观上延缓了IPv6的部署和推广

  1. 引发的实际问题:“NAT穿越”

正是由于上述原则被破坏,产生了“NAT穿越”这个现实技术难题。它特指:位于公网上的客户端,如何主动与位于NAT路由器后的服务器建立连接。解决此问题需要一系列复杂技术(如STUN、TURN、ICE协议),增加了应用开发的复杂性。

3.3.1 NAT穿越

特性
方案一:静态配置 NAT
方案二:通用即插即用 (UPnP)
方案三:中继 (Relaying)

核心机制

在网络管理员层面,手动配置NAT路由器,将公网IP的特定端口与内网服务器的特定端口永久绑定。

内网主机通过UPnP IGD协议与NAT路由器自动通信,动态地请求、添加或删除端口映射规则。

引入一个双方都能访问的第三方服务器,所有数据通过此服务器进行中转和桥接

实现方式

1. 在NAT路由器上设置规则。 2. 例如:将所有对 138.76.29.7:2500的访问,转发给内网的 10.0.0.1:25000

1. 内网主机向路由器查询公网IP。 2. 请求添加一个端口映射(如将公网端口2500映射到本机的25000端口)。 3. 路由器自动创建该规则。

1. 内网主机主动连接到公网上的中继服务器。 2. 外部客户端也连接到同一个中继服务器。 3. 中继服务器在两者之间转发数据

主要优点

稳定、可靠、安全。规则由管理员控制,不会被随意篡改。

方便、自动化,无需手动配置路由器,普通用户即可使用,适合P2P应用。

连通性最高,能穿透几乎所有类型的NAT和防火墙,只要双方都能连接中继服务器。

显著缺点

配置复杂、不灵活。需要网络知识和路由器权限,且每个服务都需要手动配置一条规则。

存在安全隐患。自动开放端口可能被恶意软件利用。且许多企业路由器出于安全考虑会禁用此功能。

效率低、延迟高、成本高。所有流量都经过第三方服务器,增加了带宽开销、通信延迟和对中继服务器的依赖。

典型应用

企业内部需要对外提供稳定服务(如Web、邮件服务器)的场景。

个人用户使用的P2P下载软件、在线游戏、家用NAS远程访问等。

对连通性要求极高、前两种方案失效的场合,如Skype的早期版本、某些视频通话的备选连接方式。

4 通用转发和SDN

4.1.1 传统网络架构:分布式与固化

这种架构是互联网早期及当前大部分网络的基础,其核心特征是控制与数据平面在每台设备上紧密集成

  1. “每路由器”控制模式

    • 每台路由器(或交换机、防火墙等“中间盒”)都独立运行控制算法(如OSPF、BGP),并维护自己的本地转发表。

    • 控制功能是分布式实现的,设备之间通过协议交互来协商路径。

  2. 垂直集成带来的问题

    • 每台设备的硬件、操作系统和协议软件通常由单一厂商私有化、垂直集成提供,形成了一个“黑盒”。

    • 这导致网络成本高昂、厂商锁定严重,并且抑制了技术创新生态。

  3. 分布式固化导致的困境

    • 设备的工作逻辑(控制平面)固化在硬件和软件中,难以更改和升级。

    • 为了实现防火墙、负载均衡、NAT等不同功能,必须部署种类繁多的专用“中间盒”,使得网络复杂臃肿。

    • 任何配置更改或策略部署都需要在所有分布式设备上逐一操作,管理极其困难,且容易因配置错误导致全网故障

4.1.2 SDN的核心思路:分离与集中

为克服传统架构的弊端,SDN提出了一种革命性的新架构,其根本思想是将控制平面与数据平面分离,并进行逻辑上的集中控制

  1. 控制与数据平面解耦

    • 数据平面被简化为纯粹的“分组交换机”(SDN交换机),其核心职责只剩下执行“匹配-行动”规则。它不再运行复杂的路由协议,而是根据一个由集中控制器下发的流表来转发、丢弃或处理数据包。

    • 控制平面被从各个网络设备中剥离出来,集中到一个(或一组)称为SDN控制器的软件中。控制器拥有全网视图。

  2. 逻辑集中的控制平面

    • 这个集中的控制器通过标准协议(如OpenFlow)与网络中所有的SDN交换机进行通信。

    • 控制器根据全局网络状态和上层应用程序的需求,集中计算出全网的数据流转发逻辑(即流表项),并远程下发到各个交换机中执行。

  3. 可编程的网络

    • 通过这种架构,网络行为不再由固化在设备中的协议决定,而是由运行在控制器上的软件应用来定义。

    • 网络管理员或开发者可以通过编写应用程序,像编程一样灵活地定义网络策略、实现流量工程、安全控制等高级功能,从而实现“可编程的网络”。

4.1.3 SDN架构的根本性优势

与第一部分的“问题”相对应,SDN架构带来了以下核心优势:

  1. 水平集成与开放生态

    • 打破了传统设备的“垂直集成”垄断。SDN交换机、控制器和网络应用可以由不同厂商专业化地生产,通过标准化接口互联,形成一个开放、竞争的良性产业生态,降低成本并促进创新。

  2. 简化管理与提升可靠性

    • 集中式的控制器拥有全局视野,使得网络管理、配置、监控和故障排查变得前所未有的简单

    • 可以避免传统分布式协议中复杂的交互和可能产生的配置不一致,极大地减少了人为配置错误,提升了网络整体的可靠性和可维护性。

  3. 支持创新与高级特性

    • “匹配-行动”的流表模型和集中可编程的控制平面,使得网络能够轻松实现流量工程、快速故障恢复、定制化安全策略等传统网络难以实现或实现起来极其复杂的高级功能。

    • 为研发和部署未来的新型网络协议和应用提供了统一的实验与部署平台。

最后更新于