Roxy's Library

Back

本文内容基于 2025 秋季《计算机网络》课程讲述,如有差错,欢迎指正

传统Internet是一个尽力而为的服务模型,它并不对传输质量进行任何的保障,并且在传输时采用的是无连接的服务模式。 虽然说这种方法在今天是能够正常的工作,但在实际演进中,为了应对一系列现实中的问题或提供更好的服务,网络层引入了一系列增强技术

IPv6 协议#

IPv6 是用来取代现有的 IPv4 协议,其初始动机是 IPv4 的32位地址不够用,而 NAT 等技术无法根治此问题

  • 后续一些优化:
    • 简化头部格式,加快路由器的处理与转发速度
    • 更好地提升服务质量(QoS)

IPv6 地址#

  • 长度:128 bits(是 IPv4 的 4 倍)。地址数量约为 3×10383 \times 10^{38}
  • 表示法:冒分十六进制(如 2001:0DA8:0000:0000:200C:0000:0000:00A5
  • 简化规则:
    • 前导零可省略。
    • 连续的一组 0 可以用双冒号 :: 表示(全地址中只能出现一次)
    • 例:2001:DA8::200C:0:0:A5

IPv6 数据报格式#

IPv6 采用了固定长度(40字节)的基本头部,以提高处理效率。

IPv6 Header

主要字段:

  • 版本(Version):4bit,协议版本号,值为 6
  • 流量类型(Traffic Class):8bit,用于区分数据包的服务类别或优先级
  • 流标签(Flow Label):20bit,标识属于同一会话的数据流,便于路由器特殊处理
  • 有效载荷长度(Payload Length):16bit,IPv6报头之后载荷的字节数(包括扩展头和数据),最大值64K
  • 下一个首部(Next Header):8bit,IPv6报头后的协议类型,可能是TCP/UDP/ICMP等,也可能是扩展头
  • 跳数限制(Hop Limit):8bit,类似 IPv4 的 TTL
  • 源/目的地址(Source / Dest Address):128 bit

与 IPv4 的关键区别(移除的字段):

  1. 移除 Checksum(校验和):路由器不再进行差错校验,以此减少每跳的计算开销(依赖链路层和传输层保证可靠性)
  2. 移除分片相关字段:不再允许途中分片,分片字段移动到扩展头
  3. 移除 Options(选项):改为使用扩展头部链式连接(位于头部字段后面),通过“下一个首部”字段表明
  4. 移出首部长度字段:固定为 40 字节

IPv6 报文可以包含多个扩展头部,形成链表结构(用“下一个首部”字段连接),最后一个扩展头部指向传输层协议

如有多个扩展头,需按规定顺序出现,如:逐跳选项头、路由头、分段头等

IPv6 还对一些传统的协议进行了改进,以适应 IPv6 环境

从 IPv4 到 IPv6 的迁移#

IPv4协议和IPv6协议并不兼容,全球范围内的网络设备和主机无法一夜之间全部升级到IPv6

目前为了实现平滑过渡,有两种主流过渡技术:

  1. 翻译技术:设备同时支持 IPv4 和 IPv6,把 IPv6 数据报转换为 IPv4 数据报,反之亦然
  • 与上层协议可能会有兼容性问题,比如传输层的校验和需要重新计算
  • 一些字段翻译困难,如 IPv6 的流标签在 IPv4 中没有对应字段,IPv6 到 IPv4 的地址翻译需要维护大量映射信息
  1. 隧道技术:当两个 IPv6 孤岛需要穿越 IPv4 网络通信时,将 IPv6 数据报封装在 IPv4 数据报的载荷中传输
  • 报文长度变化导致分片问题,可能需要进行途中分片
  • 解决办法:使用路径 MTU 发现技术,发送端探测路径上的最小 MTU 并在发送端提前规划分片

IPv6 Tunneling

面向连接的增强#

虚电路#

回顾一下电路交换的概念, 虽然电路交换的可靠性较差,任意一个节点故障都会导致整条路径不可用,需要重新分配路径,但是它的一些思想还是可以借鉴的

虚电路引用了电路交换的思想,在网络主机间建立一个逻辑连接(虚电路),分组都沿着这条逻辑连接按照存储转发方式传送, 如果不发生丢包,分组会按照发送顺序到达目的地。在这条虚电路上,我们可以实现一些面向连接的机制,比如流量控制、拥塞控制等

转发策略:

  • 给每个数据包分配一个标签(虚电路号),路由器根据标签识别数据属于哪个连接,然后基于连接的规则进行转发
  • 标签由各个路由器之间分布式决定,因此在每次转发时,数据包的标签可能会被修改

建立连接:

  • 源主机向目的主机发送连接请求,经过一系列路由器,路由器从上一跳为该连接获取输入标签(此时不知道输出标签)
  • 目的主机响应连接请求,经过相同的路由器返回源主机,路由器从上一跳获取输出标签,完成标签映射

Virtual Circuit

  • 对R1来说,输出标签22来自R4,数据返回时获取;输入标签11来自发送方,数据发送时获取

关闭连接时,某一方发起连接释放请求,另一方确认后,路由器删除对应的标签映射

MPLS#

MPLS(多协议标签交换) 在思想上非常类似于虚电路,把网络层基于IP地址的转换改成基于标签的转换,设计初衷是为了提高查找速度。 可以认为它是虚电路的一种实现方式,但应用场景更加广泛

其具体做法是在链路层头部和网络层头部之间插入一个 4 字节的 MPLS 标记,因此MPLS又被称为2.5层协议

MPLS Header

由于基于标签转发的特性,MPLS 上层可以采用多种协议(如 IPv4、IPv6),有时候又被称为网络链路的虚拟化。

因为 MPLS 需要新的操作,故需要一些新的网络设备(LSR)去支持,这种路由器具备标签交换和路由选择功能。 MPLS 与传统的 IP 网络是共存的,由一组相邻的 MPLS 路由器组成的子图称为 MPLS 域。 此外,LSR 之间通过标签分发协议(LDP)交换标签映射信息,建立标签转发表

MPLS 的工作过程分为三个阶段:

  1. 加标签:在进入 MPLS 网络边缘时,路由器在 IP 头之前插入 MPLS 标记
  2. 标签交换:核心路由器(LSR)仅查看 MPLS 标签,查找标签转发表,将 (入接口, 入标签) 替换为 (出接口, 出标签) 并转发(类似虚电路)
  3. 去标签:离开 MPLS 网络时,去掉标签,恢复 IP 转发

数据平面上存储能力有限,不可能为一组数据包分配唯一标签,因此 MPLS 将相同操作的数据包归为一类(比如目的IP有相同前缀), 构成一个转发等价类FEC,同一 FEC 的数据包使用相同的标签进行转发

MPLS 的一些应用场景

  • 流量工程:对流量打上不同标签,使其经过不同路径
  • VPN:用标签区分不同VPN的数据,与各自IP地址无关

VPN#

虚拟专用网络(VPN) 是建立在公网上的,通过加密与认证机制,保持逻辑上的隔离的一种专用网络(物理上并未实现隔离)

下面介绍通过隧道技术实现的 VPN VPN Tunneling

隧道技术:2个相同类型网络的设备,跨越中间异构类型网络进行通信

  • 将一种网络的数据包作为另一种网络的数据载荷进行封装
  • 在介绍 IPv6 隧道时已经提到这个技术

当数据包到达边缘路由器时,边缘路由器将数据包进行加密与封装,形成新的数据包,然后通过公网上传输。 到达目的边缘路由器时,进行解封装与解密,恢复原始数据包

VPN技术通过加密和认证机制,确保数据机密性与完整性

服务质量增强#

服务质量指在传输的过程中需要满足一系列的性能指标,比如带宽、时延、抖动等

为了保障服务质量,如今有以下几种方法

数据包调度#

在路由器输出端口上决定如何发送数据包,详见数据包调度

流量工程#

之前讲到SDN和MPLS时提到过流量工程的概念,这里我们简述一下流量工程对于如何分配流量的计算

路径选择

网络中从源主机到目的主机,一定有很多路径可以传输,我们并不会把所有的路径都放进来考虑,而是事先选择好一些路径

通常有多种策略:

  • k-最短路径:选择前k条最短路径
  • 链路互不相交最短路
  • Oblivious Routing(一种专门的路由技术)

流量分配

有了这些路径,如果知道了各个源和目的之间的传输需求,我们该怎样的把这些需求分配到这些路径上进行传输

这里我们采用线性规划的方法进行计算

输入:

  • 网络拓扑: G=(V,E,c),n=V,m=EG=(V,E,c),n=|V|,m=|E|
    • VV: 结点集合(主机、子网、AS、数据中心)
    • EE: 边集合
    • cc: ER+E \to \mathbb{R}^+ , 每条边的权重
  • 流量矩阵 (需求矩阵) : DRn×nD \in \mathbb{R}^{n \times n}
    • s,tV,D(s,t)\forall s,t \in V, D_{(s,t)}:从 s 到 t 所需要传输的流量
  • 网络路径: Π\Pi
    • s,tV,Π(s,t)\forall s,t\in V, \Pi_{(s,t)}: s 到 t 可选路径集合(第一阶段计算结果)

输出: 路径权重 (流量分配): F

  • s,tV,F(s,t)\forall s,t\in V, F_{(s,t)}: 将需要传输的流量 D(s,t)D_{(s,t)} 分配至 Π(s,t)\Pi_{(s,t)} 里的各个路径上的比例值
  • F(s,t)F_{(s,t)} 是“网络路径 \to 非负值”的映射

约束条件:

  • 为每个“源-目的”分配的总比例值不超过1
    • s,tV,pΠ(s,t)F(s,t)(p)1\forall s,t\in V, \sum_{p \in \Pi_{(s,t)}} F_{(s,t)}(p) \leq 1
  • 不超过每条边的容量
    • eE,fe=(s,t)VpΠ(s,t),peF(s,t)(p)D(s,t)c(e)\forall e \in E, f_e = \sum_{(s,t) \in V} \sum_{p \in \Pi_{(s,t)}, p \ni e} F_{(s,t)}(p) D_{(s,t)} \leq c(e)

优化目标:

  • 最小化最大链路利用率:
    • minmaxeEfec(e)\min \max_{e \in E} \frac{f_e}{c(e)}
  • 最大化总吞吐
    • maxs,tVpΠ(s,t)min{F(s,t)(p)D(s,t),wp}\max \sum_{s,t \in V} \sum_{p \in \Pi_{(s,t)}} \min\{F_{(s,t)}(p) D_{(s,t)}, w_p\} wpw_p 为传输速率限制
  • 最大化满足“源-目的”传输需求
    • maxα[0,1]αs.t. s,tV, pΠ(s,t)min{F(s,t)(p)D(s,t),wp}αD(s,t)\max_{\alpha\in [0,1]} \alpha \quad s.t.\ \forall s,t \in V,\ \sum_{p \in \Pi_{(s,t)}} \min\{ F_{(s,t)}(p) D_{(s,t)}, w_p\}\geq \alpha D_{(s,t)}
    • wpw_p 为传输速率限制

线性规划的缺点:

  • 输入流量依赖经验(如:历史数据)
  • 多个目标难以兼容
  • 线性规划计算量大,难以支持大型网络

流量整形#

流量整形(Traffic Shaping) 其作用是限制流出某一网络的某一连接的流量与突发,使这类报文以比较均匀的速度向外发送

下面介绍两种常见的流量整形算法:

漏桶算法 (Leaky Bucket)

原理:

  • 到达的数据包被放在缓冲区(漏桶)中
  • 漏桶最多可以容纳bb个字节。如果数据包到达的时候漏桶已经满了,那么数据包应被丢弃
  • 数据包从漏桶中发出,以常量速率(rr字节/秒)注入网络,因此平滑了突发流量

Leaky Bucket

令牌桶算法 (Token Bucket)

原理:

  • 系统以恒定速率rr向桶中放入令牌,桶中令牌达到上限bb时,丢弃多余令牌
  • 每个数据包到达时,必须从桶中取出一些令牌,才能发送该数据包,取出令牌的数量与数据包大小有关,一般数据包越大,取出的令牌越多
  • 如果桶中令牌满足需求,则将数据包发送,否则丢弃

Token Bucket

综合服务与区分服务#

综合服务:类似电路交换,建立连接,预留资源,保证服务质量。但是现实中难以实现

区分服务:使用IP头部中的区分服务字段(DSCP),对不同类别的数据包进行不同的处理,从而实现服务质量保障

  • 网络“公地悲剧”:所有数据包都要求高优先级,导致无法区分

分段路由#

在传统的 IP 路由中,路由器根据目的地址查找路由表,每一跳都独立决定下一跳去哪(逐跳转发)。 而在分段路由(SR)中,发送端(或者网络的入口边缘路由器)在数据包出发前就已经决定好了它要经过的完整路径,因此被称为“源路由”技术

  • 源路由:发送端(或入口路由器)在数据包头部直接压入一个有序的指令列表,指定数据包要经过的节点或链路
  • 中间路由器不需要维护复杂的流状态,只需根据指令转发

SRv6#

利用 IPv6 的扩展头部来实现的SR技术

  • SRH: 分段路由扩展头部
    • Segments Left:剩余的路由段数,即在到达最终目的地之前仍需访问的显式列出的中间节点的数目,每经过一个节点减1
    • Segment List:一组 IPv6 地址,表示数据包要经过的路径。Segment List[0]包含路径的最后一段。

SRv6 Header

网络层增强技术
https://astro-pure.js.org/blog/csnet_net_chap5
Author GreyRat
Published at December 17, 2025
Comment seems to stuck. Try to refresh?✨