Roxy's Library

Back

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

网络层概述#

定位与功能#

网络层的基本功能是在主机之间实现了多跳的传输方式。 与应用层和传输层不同的是,网络层不仅实现于端系统(主机)中,也实现于网络核心的路由器中

  • 发送端:将传输层数据单元封装成数据包,注入网络。
  • 接收端:解析接收到的数据包,取出传输层数据单元,交付给上层。
  • 路由器:检查数据包头部,根据路由表将其转发到合适的下一跳。

网络层的服务模型有多种选择,历史上也存在多种网络层技术,而我们如今最常用的因特网选择了“尽力而为”(Best-effort)的方式,实现了无连接的数据报服务, 即无连接、不保证服务质量、不保证可靠传输。这样的策略使得网络的造价大幅降低,运行方式灵活,得到了广泛部署

数据平面与控制平面#

网络层实现的基本功能主要可以分为两个操作:

  • 转发:将数据报从路由器的输入接口传送到正确的输出接口
    • 核心:转发函数
  • 路由:选择数据报从源端到目的端的路径
    • 核心:路由算法与协议

基于这两个功能,又能把网络层进一步划分为数据平面和控制平面:

  • 数据平面:实现转发功能
    • 单个路由器上的局部功能,每个路由器独自执行
  • 控制平面:实现路由功能
    • 需要多个路由器协同工作,共同决定路由路径
    • 两种实现方式:传统路由算法与软件定义网络 (SDN)

数据平面的转发操作本质上就相当于去计算一个转发函数,这个函数的形式通常是一个转发表,输入是数据包的目的地址(有时还有端口号),输出是对应的下一跳接口。 实际执行转发时通过查表来完成

Image of Forwarding Plane

传统上,控制平面实现在路由器内部,通过运行某种路由协议相互协作,计算端到端的路径,并更改路由器的转发表。 而近年来,软件定义网络 (SDN) 的兴起使得控制平面可以从路由器中剥离出来,将路由计算交给远端的控制器(可能是一个服务器或服务器集群)完成, 路由器上只需要实现一个简单的控制代理,负责与控制器通信并更新转发表

路由器#

路由器是网络层的核心设备,传统的路由器主要由四个部分组成:

  1. 输入端口 (Input Ports):物理层接收、链路层处理、转发表查询、通过交换结构将报文排队发往目的接口卡
  2. 高速交换结构 (Switching Fabric):连接输入与输出端口的核心交换网络
  3. 输出端口 (Output Ports):从输出接口发送报文、缓存排队、链路层封装、物理层发送、从输出接口发送报文
  4. 路由处理器 (Routing Processor):执行控制平面功能(运行路由协议),计算转发表并下发给输入端口

Image of Router Architecture

一个路由器可同时运行多个路由协议,也可不运行任何路由协议,只使用静态路由和直连路由。 路由管理根据路由优先级,选择最佳路由,形成核心路由表,控制层将核心路由表下发到数据层,形成转发表(FIB)

具体路由算法、SDN等控制平面的内容将在后续文章中介绍,这里我们先聚焦于路由器的数据平面

路由器中IP报文转发有以下几个核心功能:

  • 链路层解封装,IP头部校验
  • 获取报文目的IP地址
  • 用目的IP地址,基于最长前缀匹配规则查询转发表
  • 查询失败,丢弃报文
  • 查询成功
    • IP头部“TTL”字段值减1,重新计算IP头部“校验和”
    • 获取转发出接口和下一跳链路层地址
    • 重新进行链路层封装,发送报文

普通IP报文转发过程中,路由器不查看传输层及以上层协议的内容;每经过一个路由器,链路层封装会更新,IP头部“TTL”减1,IP头部“校验和”会更新

这里我们介绍的路由器与家用路由器不同,家用路由器通常还集成了交换机、防火墙等一系列功能,本文只从经典路由器的角度进行介绍

输入端口#

Image of Input Port

输入端口主要功能就是接收数据包,提取网络层数据报,并根据目的地址查找转发表,决定将数据包发往哪个输出端口。 当交换结构繁忙时,输入端口还需要维持一个缓冲队列,让数据包进行排队。

一个路由器通常有多个输入端口,每个端口连接一条链路,两两之间独立工作,达到线速的效果

输入端口的转发策略有两种:

  • 基于目的地址的转发
    • 只根据目的IP地址
    • 传统交换机中常用(受限于芯片计算能力)
  • 通用转发
    • 可以根据数据报文中任意字段的组合
    • 现代软件定义网络中使用

基于目的IP地址的转换本质上是把所有的IP地址划分成不同的范围,每个范围对应一个输出端口。 在实际实现这种转发的时候,采用了最长前缀匹配的方式进行转换

最长前缀匹配

  • 原理:转发表中存储的是目的地址的前缀。当一个目的 IP 匹配表中的多个表项时,选择掩码最长(最精确)的那一项

出于对成本的考量,交换结构的速度一般会慢于所有输入端口的速度之和,当出现突发的大量流量是,数据包会在输入端口排队, 甚至导致排队延迟和丢包

  • 排头阻塞现象
    • 排在队列最前面的数据包因为其输出端口拥塞而被阻塞。
    • 排在它后面的数据包虽然其对应的输出端口是空闲的,但也被迫等待,无法被发送。

交换结构#

交换结构负责将报文从输入端口的缓冲队列传输到正确的输出端口,它的速率决定了路由器内部的数据搬运能力。

交换速率:所有输入端口到输入端口的总速率,期望是所有输入端口速率之和,但实际上往往达不到这个水平

目前常见的交换结构有三种:

Image of Switching Fabrics

共享内存

早期的路由器中,交换结构内没有专用芯片,只有一块内存,由控制平面的路由处理器控制。路由处理器不仅负责路由功能,还负责转发功能

交换流程:

  • 报文到达输入端口时,产生中断信号通知路由处理器
  • 路由处理器将报文复制到内存中,查询对应输出端口,再将报文复制到输出端口

由于内存拷贝速度有限,这种交换结构的性能很差

共享总线

数据包从输入端口直接到达输出端口,无需处理器干预

实现方式:

  • 输入端口通过转发表后,给报文附加上“标签”,表明输出端口
  • 带标签的报文通过总线广播至所有输出端口
  • 每个输出端口通过标签判断报文是不是属于自己的,不属于则忽略

总线一次只能广播一个报文,因此当多个输入端口同时发送报文时,会产生冲突,延迟会增大

纵横式交换

2N2N 条总线组成的网格,连接 NN 个输入和 NN 个输出。可以进行并行工作。 只要不同的输入端口去往不同的输出端口,它们可以同时传输,互不干扰。

后续一些交换机为了达到更高性能,会使用更复杂的多级交换结构

输出端口#

输出端口主要负责将从交换结构送来的数据包通过链路发送出去,它发送数据包的顺序不一定与到达顺序相同,因为输出端口通常会维护一个缓冲区,对数据包进行排队和调度

Image of Output Port

缓冲区

当交换结构送来的数据包速率超过了输出链路的发送速率时,需要缓存数据包,形成排队,是造成网络排队时延和丢包的主要原因

  • 缓冲区大小设置:
    • 经典经验法则:B=RTT×CB = RTT \times C (链路带宽 × 往返时延)。例如 250ms × 10Gbps
    • 现代改进法则:若交换机的报文分为N个流,B=RTT×CNB = \frac{RTT \times C}{\sqrt{N}}。这说明当流很多时,需要的缓冲区可以比经典值小很多
    • 流:相同网络地址的报文构成1个流

分组调度

决定缓冲区中的哪个包先被发送,下面是一些常见的调度算法:

  1. 先进先出 (FIFO) + 弃尾 (Drop Tail)

    • 最简单,按到达顺序发送。
    • 缓冲区满时丢弃新到达的包(或头部/随机丢弃)。
    • 缺点:无法区分业务优先级。
  2. 优先权队列 (Priority Queuing)

    • 将包分为高优先级(如语音)和低优先级(如邮件)。
    • 非抢占式:当前正在发送的包发完后,永远先检查高优先级队列,只有高优先级为空才发低优先级。
    • 缺点:低优先级流量可能饥饿 (Starvation),永远发不出去。
  3. 轮询 (Round Robin, RR)

    • 将包分类,轮流从每个类别的队列中发送一个包。
    • 优点:解决了饥饿问题。
    • 缺点:如果不同队列的包大小不同,或者业务重要性不同,简单的轮流显得不公平。
  4. 加权公平队列 (Weighted Fair Queuing, WFQ)

    • 更一般化的轮询方式,结合优先调度与轮询方式的优势
    • 每个类别(Class ii)分配一个权重 (wiw_i)
    • 轮询时考虑权重:权重高的队列,轮询到的次数更多
网络层基本概念、路由器
https://astro-pure.js.org/blog/csnet_net_chap1
Author GreyRat
Published at December 13, 2025
Comment seems to stuck. Try to refresh?✨