网络与信息安全技术 第 4 篇:网络层路由原理与互联网编址

全文摘要

本文将带你深入理解网络层的数据转发机制和路由算法。你将学到转发与路由的区别、虚电路网络与数据报网络的对比、IP数据报格式与分片机制、IPv4地址分类与子网划分、CIDR无类域间路由、NAT网络地址转换、DHCP动态主机配置、路由算法的设计原理、OSPF与BGP协议的工作机制。通过阅读本文,你将掌握网络层的核心技术,理解互联网如何在全球范围内实现互联互通。


一、网络层服务

网络层是TCP/IP协议栈的第三层,负责将数据报从源主机通过中间路由器转发到目的主机。网络层是互联网的核心层,所有高层协议(传输层、应用层)都建立在网络层提供的服务之上。

转发与路由

理解网络层首先需要区分两个密切相关但不同的概念:

转发(Forwarding):指路由器在收到数据报后,根据数据报的目的地址和路由表,将其转发到合适的接口。转发是路由器的本地操作,发生在数据平面。

路由(Routing):指确定从源到目的的路径,涉及整个网络的协同。路由是网络范围的分布式计算过程,发生在控制平面。

一个形象的比喻:转发是快递员根据快递单上的地址将包裹送到下一个站点,路由是快递公司规划从发货地到目的地的完整配送路线。

网络层的服务模型

网络层提供两种服务模型:

数据报网络(Datagram Network):网络层提供无连接的服务。每个数据报独立路由,可能经过不同的路径到达目的地。数据报可能乱序、丢失、重复,网络层不保证服务质量。IP协议是数据报网络的典型代表。

虚电路网络(Virtual Circuit Network):网络层提供面向连接的服务。数据传输前需要建立虚电路,所有数据沿相同路径传输。网络层保证按序交付、可靠传输。ATM、X.25是虚电路网络的代表。

互联网采用数据报网络模型,这体现了互联网设计的哲学:网络核心保持简单,复杂功能放在边缘。这种设计使得互联网具有很好的扩展性和鲁棒性。

网络层寻址

网络层使用IP地址标识主机和路由器接口。每个主机和路由器接口有一个唯一的IP地址。IP地址是32位(IPv4)或128位(IPv6)的二进制数,通常用点分十进制(IPv4)或冒号分隔十六进制(IPv6)表示。

IP地址与网络层地址的区别:

  • IP地址是网络层地址,用于跨网络的寻址
  • MAC地址是链路层地址,用于在单一网络内的寻址
  • IP地址可以改变(如重新配置网络),MAC地址通常是固定的

二、虚电路网络与数据报网络

网络层有两种基本的服务模型:虚电路和数据报。理解这两种模型的区别和联系,是掌握网络层设计思想的基础。

虚电路网络

虚电路网络在数据传输前需要建立虚电路,类似于电话网络的呼叫建立过程。

虚电路建立过程

  1. 发送方发送呼叫建立请求包,包含完整的源地址和目的地址
  2. 该请求经过网络中的每个节点,每个节点分配虚电路号,记录转发表项
  3. 建立请求到达接收方,接收方同意建立虚电路
  4. 接收方发送呼叫建立确认包,沿原路径返回
  5. 发送方收到确认,虚电路建立完成

数据传输过程: 每个数据包只需要携带虚电路号,不需要完整的目的地址。路由器根据虚电路号查找转发表,将数据包转发到下一个节点。

虚电路释放过程: 通信双方或一方发起释放请求,释放请求经过沿途节点,释放虚电路号和转发表项。

虚电路的特点

  • 需要建立连接,有连接建立开销
  • 所有数据沿相同路径传输,保证按序到达
  • 路由器需要维护连接状态(虚电路号、转发表)
  • 如果路径上的某个节点故障,虚电路中断,需要重新建立
  • 每个数据包头部小(只需要虚电路号)

数据报网络

数据报网络不需要建立连接,每个数据包独立路由。

数据传输过程: 每个数据包携带完整的源地址和目的地址,路由器根据目的地址和路由表独立决定转发路径。不同数据包可能经过不同路径到达目的地,可能乱序、丢失、重复。

数据报的特点

  • 无需建立连接,随时可以发送数据
  • 数据包可能乱序到达,端系统需要处理排序
  • 路由器不需要维护连接状态,只维护路由表
  • 某个路径故障时,数据包可以自动绕行
  • 每个数据包头部大(需要完整地址)

虚电路与数据报的对比

特性虚电路网络数据报网络
连接需要建立无需连接
路径固定路径可能不同路径
路由器状态维护连接状态只维护路由表
可靠性路径故障则中断可自动绕行
头部开销小(虚电路号)大(完整地址)
应用示例ATM、X.25IP网络

互联网采用数据报模型的原因:

  • 互联网最初是为军事和科研设计的,需要高可靠性(路径故障时自动绕行)
  • 早期计算机性能有限,路由器维护数百万连接状态不现实
  • 网络核心简单,便于扩展
  • 应用可以选择是否在传输层建立可靠连接(TCP),网络层不强制

三、网络互连与网络互连设备

互联网由许多自治的网络(称为自治系统AS)互连而成。网络互连使得不同类型、不同规模的网络可以相互通信。

网络互连的必要性

异构性:不同网络使用不同的技术(如以太网、WiFi、光纤),需要互连设备转换协议。

可扩展性:单个网络的规模有限,互连可以构建全球范围的互联网。

管理自主:不同的组织管理自己的网络,互连不影响各自的管理权。

路由器的体系结构

路由器是网络互连的核心设备,具有以下特点:

多个输入输出端口:连接多个网络,每个端口连接到一个网络。

转发功能:根据数据报的目的地址和路由表,决定将数据报从哪个端口转发出去。

路由功能:运行路由协议,与其他路由器交换路由信息,构建路由表。

交换结构:在输入端口和输出端口之间高速传输数据报。交换结构可以是内存交换、总线交换、互联网络交换。

处理能力:路由器需要高速处理数据报(线速转发),对每个数据报进行头部解析、查找路由表、更新头部、重新计算校验和。

路由器的输入输出端口

输入端口

  • 物理层:实现比特的接收
  • 链路层:实现帧的接收和解封装
  • 网络层:查找路由表,确定输出端口
  • 队列:如果多个数据报竞争同一个输出端口,需要在输入端口排队

输出端口

  • 队列:存储等待发送的数据报
  • 链路层:封装成帧
  • 物理层:发送比特

路由器的转发过程

当路由器收到一个数据报时:

  1. 检查校验和,如果错误则丢弃
  2. 检查TTL(生存时间)字段,如果为0则丢弃
  3. 提取目的IP地址
  4. 查找路由表,找到最长前缀匹配的表项
  5. 将数据报转发到对应的输出端口
  6. 如果需要分片,执行分片操作
  7. 更新TTL字段,重新计算校验和

四、IP数据报格式与分片

IP协议是网络层的核心协议,定义了IP数据报的格式和处理规则。

IP数据报格式

IP数据报由头部和数据两部分组成,头部最小20字节,包含以下字段:

版本(4位):IP协议版本,IPv4值为4。

头部长度(4位):IP头部的长度(以32位字为单位),最小5(20字节),最大15(60字节)。

服务类型(8位):指定数据报的服务质量需求(如延迟、吞吐量、可靠性)。

数据报长度(16位):IP数据报的总长度(头部+数据),最大65535字节。

标识(16位):唯一标识一个数据报,用于分片和重组。

标志(3位):包含DF(Don’t Fragment,禁止分片)和MF(More Fragments,还有更多分片)标志。

片偏移(13位):分片在原始数据报中的位置(以8字节为单位)。

生存时间(8位):数据报在网络中可以经过的最大跳数,每经过一个路由器减1,为0时丢弃。

协议(8位):指定数据部分使用的协议(如TCP=6,UDP=17,ICMP=1)。

头部校验和(16位):检测头部传输错误。

源地址(32位):发送方的IP地址。

目的地址(32位):接收方的IP地址。

选项(可变长度):可选字段,用于控制和测试。

数据:上层协议(如TCP、UDP)的数据。

IP分片与重组

不同的数据链路层有不同的MTU(Maximum Transmission Unit,最大传输单元),是以太网的MTU为1500字节。当IP数据报长度超过链路的MTU时,需要分片。

分片过程

  1. 路由器检查数据报长度和下一跳链路的MTU
  2. 如果数据报长度 > MTU且DF标志为0,则分片
  3. 将数据分成若干片,每片不超过MTU
  4. 每个分片复制原始头部,修改以下字段:
    • 总长度:该分片的长度
    • 标识:与原始数据报相同
    • 标志:除最后一个分片外,MF=1
    • 片偏移:该分片在原始数据报中的位置

重组过程: 目的主机收到分片后,根据标识、源地址、目的地址判断哪些分片属于同一个数据报,根据片偏移重组数据。如果超时后未收到所有分片,丢弃整个数据报。

分片在网络中可能发生多次(多个路由器),但只在目的主机重组。分片增加了网络开销,应尽量避免。


五、IPv4地址与子网划分

IPv4地址是32位二进制数,通常用点分十进制表示(如192.168.1.1)。IPv4地址空间有2³²≈43亿个地址,但已基本耗尽。

IPv4地址分类

IPv4地址最初分为五类(A、B、C、D、E):

A类地址

  • 范围:1.0.0.0 - 126.255.255.255
  • 网络号:第1字节(0xxxxxxx,首位为0)
  • 主机号:后3字节
  • 默认子网掩码:255.0.0.0
  • 可用网络数:126个(2⁷-2)
  • 每个网络主机数:2²⁴-2≈1600万

B类地址

  • 范围:128.0.0.0 - 191.255.255.255
  • 网络号:前2字节(10xxxxxx,前两位为10)
  • 主机号:后2字节
  • 默认子网掩码:255.255.0.0
  • 可用网络数:2¹⁴≈16000
  • 每个网络主机数:2¹⁶-2≈65000

C类地址

  • 范围:192.0.0.0 - 223.255.255.255
  • 网络号:前3字节(110xxxxx,前三位为110)
  • 主机号:后1字节
  • 默认子网掩码:255.255.255.0
  • 可用网络数:2²¹≈200万
  • 每个网络主机数:2⁸-2=254

D类地址(组播):

  • 范围:224.0.0.0 - 239.255.255.255
  • 前四位为1110
  • 用于组播通信

E类地址(保留):

  • 范围:240.0.0.0 - 255.255.255.255
  • 前四位为1111
  • 保留用于未来使用

特殊IP地址

网络地址:主机号全0,表示网络本身。如192.168.1.0表示192.168.1.0/24网络。

广播地址:主机号全1,向网络中所有主机发送。如192.168.1.255表示向192.168.1.0/24网络广播。

本地回环地址:127.0.0.0/8,用于本地进程间通信。127.0.0.1通常表示本机。

私有地址(内网地址):

  • 10.0.0.0/8(10.0.0.0 - 10.255.255.255)
  • 172.16.0.0/12(172.16.0.0 - 172.31.255.255)
  • 192.168.0.0/16(192.168.0.0 - 192.168.255.255)

私有地址不在公网路由,只能在内网使用。NAT技术允许私有地址访问公网。

子网划分

子网划分是将一个网络分成多个更小的网络,提高地址利用率。

子网掩码:32位二进制数,网络号部分为1,主机号部分为0。子网掩码与IP地址进行AND运算得到网络地址。

例如,IP地址192.168.1.100,子网掩码255.255.255.0:

  • IP地址:11000000.10101000.00000001.01100100
  • 子网掩码:11111111.11111111.11111111.00000000
  • 网络地址:11000000.10101000.00000001.00000000 = 192.168.1.0

子网划分示例: 假设有一个C类网络192.168.1.0/24,需要划分成4个子网。

划分步骤:

  1. 确定需要的子网数:4个子网需要2位(2²=4)
  2. 从主机号部分借2位作为子网号
  3. 原网络/24,借2位后变成/26
  4. 子网掩码:255.255.255.192(/26)
  5. 每个子网有2⁶-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

CIDR与路由聚合

CIDR(Classless Inter-Domain Routing,无类域间路由)消除了ABC类的界限,使用斜线记法表示前缀长度。如192.168.1.0/24表示前24位是网络号。

CIDR的优点

  • 提高地址利用率:可以分配任意大小的地址块
  • 简化路由表:通过路由聚合减少路由表条目

路由聚合: 将多个连续的小网络聚合成一个大网络,在路由表中只保存聚合后的条目。

例如,聚合以下网络:

  • 192.168.0.0/24
  • 192.168.1.0/24
  • 192.168.2.0/24
  • 192.168.3.0/24

这些网络可以聚合成192.168.0.0/22。聚合后,外部路由器只需要知道到达192.168.0.0/22的路径,而不需要为每个/24网络维护单独的路由条目。


六、网络地址转换(NAT)

NAT(Network Address Translation)是将私有IP地址转换为公有IP地址的技术,缓解了IPv4地址短缺问题。

NAT的工作原理

NAT路由器位于内网和外网的边界,维护一个转换表,记录内网IP:端口到公网IP:端口的映射。

NAT转换过程

  1. 内网主机(如192.168.1.100:5000)向公网服务器(如1.2.3.4:80)发送数据包
  2. NAT路由器收到数据包,检查转换表
  3. 如果是新的会话,分配公网端口(如203.0.113.5:40000),在转换表中添加映射:192.168.1.100:5000 ↔ 203.0.113.5:40000
  4. 将源IP:端口替换为公网IP:端口,更新校验和
  5. 转发数据包到公网
  6. 收到响应时,查找转换表,将目的IP:端口还原为内网IP:端口

NAT的类型

静态NAT:一个私有地址固定映射到一个公有地址,适合服务器对外提供服务。

动态NAT:私有地址从地址池中动态选择公有地址,地址池耗尽时无法建立新连接。

NAPT(Network Address Port Translation):多个私有地址共享一个公有地址,通过端口号区分不同的连接。这是最常见的NAT类型,也称为PAT(Port Address Translation)。

NAT的优缺点

优点

  • 缓解IPv4地址短缺:多个内网主机共享少量公网地址
  • 隐藏内网结构:外网不知道内网的IP地址,增加安全性
  • 灵活性:可以改变ISP而不需要重新配置内网

缺点

  • 破坏端到端通信:内网主机无法直接作为服务器(需要端口转发)
  • 协议兼容性问题:某些协议在IP载荷中包含IP地址,需要ALG(Application Level Gateway)处理
  • 增加延迟:NAT转换需要处理每个数据包
  • 对等通信困难:P2P应用在NAT后面难以通信

七、DHCP动态主机配置

DHCP(Dynamic Host Configuration Protocol)自动为主机分配IP地址和其他网络配置参数,简化了网络管理。

DHCP的工作过程

sequenceDiagram
    participant Client as 客户端
    participant Server as DHCP服务器

    Note over Client,Server: DHCP地址分配过程

    Client->>Server: DHCP Discover<br/>(广播)
    Note over Client,Server: 客户端寻找DHCP服务器

    Server->>Client: DHCP Offer<br/>(IP地址、租期等)
    Note over Client,Server: 服务器提供IP地址

    Client->>Server: DHCP Request<br/>(请求分配该IP)
    Note over Client,Server: 客户端请求使用IP

    Server->>Client: DHCP ACK<br/>(确认分配)
    Note over Client,Server: 服务器确认分配<br/>客户端可以使用IP

图表讲解:这张时序图展示了DHCP的四个步骤——这是自动配置网络地址的标准流程。

DHCP Discover:客户端广播DHCP Discover报文,寻找DHCP服务器。客户端还没有IP地址,使用0.0.0.0作为源地址,255.255.255.255作为目的地址。

DHCP Offer:DHCP服务器收到Discover后,从地址池中选择一个可用IP地址,广播DHCP Offer报文。Offer包含分配的IP地址、租期、子网掩码、默认网关、DNS服务器等信息。可能有多个服务器响应Offer。

DHCP Request:客户端收到第一个Offer(或选择特定的服务器),广播DHCP Request报文,请求使用该IP地址。Request包含服务器标识符,告诉其他服务器不再等待该客户端的请求。

DHCP ACK:服务器收到Request后,发送DHCP ACK确认。客户端收到ACK后,可以使用分配的IP地址。

DHCP的租期与续租

DHCP分配的IP地址有租期,租期到期后地址被回收。客户端可以在租期过半时发送续租请求(DHCP Request),服务器通常同意续租。如果原服务器不可用,客户端可以在租期87.5%时广播Request,寻找其他服务器。

DHCP的中继

DHCP使用广播,广播不能跨越路由器。当网络中有多个子网时,每个子网都需要DHCP服务器,或使用DHCP中继代理。DHCP中继代理将子网的DHCP广播单播转发到中心的DHCP服务器,将服务器的响应转发回客户端。


八、路由算法与路由协议

路由算法确定从源到目的的最佳路径。路由协议是路由器之间交换路由信息的协议。

路由算法的分类

全局路由算法:所有路由器拥有完整的网络拓扑信息,使用链路状态算法(如OSPF)。

分散路由算法:路由器只与邻居交换信息,使用距离向量算法(如RIP)。

静态路由:管理员手动配置路由表,不自动适应网络变化。适合简单、稳定的网络。

动态路由:路由器通过路由协议自动学习和更新路由表,适应网络变化。

距离向量算法:RIP

RIP(Routing Information Protocol)是距离向量算法的实现,使用跳数作为度量。

RIP的工作原理

  1. 路由器初始化:直连网络的距离为0
  2. 定期(每30秒)向邻居发送整个路由表
  3. 收到邻居的路由表后,计算到每个网络的距离:到邻居的距离 + 邻居到目的地的距离
  4. 如果新距离更短,更新路由表
  5. 如果16跳,认为网络不可达(RIP的最大跳数是15)

RIP的问题

  • 慢收敛(收敛慢):网络变化需要很长时间传播到所有路由器
  • 无穷计数问题:网络不可达时,距离会增加到无穷(16)
  • 跳数限制:只能用于小型网络(最多15跳)
  • 固定度量:不考虑带宽、延迟等因素

链路状态算法:OSPF

OSPF(Open Shortest Path First)是链路状态算法的实现,使用Dijkstra算法计算最短路径。

OSPF的工作原理

  1. 发现邻居:通过Hello报文发现直连的OSPF路由器
  2. 建立邻接关系:与某些邻居建立邻接关系,交换链路状态信息
  3. 泛洪链路状态通告(LSA):将本地的链路状态信息泛洪到整个OSPF域
  4. 构建链路状态数据库:每个路由器收集完整的网络拓扑信息
  5. 运行Dijkstra算法:以自己为根,计算到所有网络的最短路径树
  6. 生成路由表:从最短路径树提取路由信息

OSPF的优点

  • 快速收敛:网络变化时快速传播到所有路由器
  • 支持大型网络:没有跳数限制
  • 度量灵活:可以配置带宽、延迟、成本等度量
  • 区域划分:将大型网络分成多个区域,减少路由协议开销
  • 等价负载均衡:支持多条等价路径的负载均衡

路径向量算法:BGP

BGP(Border Gateway Protocol)是互联网的核心路由协议,用于自治系统(AS)之间的路由。BGP是路径向量算法,不仅记录到目的地的距离,还记录经过的AS路径。

BGP的工作原理

  1. 建立BGP会话:两个AS的边界路由器建立TCP连接(端口179)
  2. 交换路由信息:互相通告可达网络和AS路径
  3. 路径选择:根据策略选择最佳路径(AS路径短、本地优先、MED等)
  4. 路由反射:在大型AS中,使用路由反射器减少IBGP连接

BGP的特点

  • 策略路由:考虑商业策略、法律限制等因素,不只是技术度量
  • 可扩展性:承载整个互联网的路由信息(数十万条路由)
  • 安全性:使用TCP保证可靠传输,使用MD5认证保护会话
  • 路由聚合:支持CIDR和路由聚合,减少路由表大小

九、知识总结表

协议/技术主要功能分类优缺点
IP网络层寻址与转发数据报网络优点:简单、可扩展
缺点:不可靠
NAT私有地址与公有地址转换地址转换优点:缓解地址短缺
缺点:破坏端到端
DHCP自动分配IP地址配置协议优点:自动化
缺点:依赖服务器
RIP距离向量路由算法内部网关协议优点:简单
缺点:收敛慢、跳数限制
OSPF链路状态路由算法内部网关协议优点:快速、可扩展
缺点:复杂
BGP路径向量路由算法外部网关协议优点:策略路由、可扩展
缺点:复杂

常见问题解答

Q1:为什么互联网采用数据报网络而不是虚电路网络?

:互联网最初是为军事和科研设计的,需要极高的可靠性。

数据报网络的每个数据包独立路由,如果某条路径故障,数据包可以自动选择其他路径。虚电路网络需要建立连接,如果路径上的某个节点故障,整个虚电路中断,需要重新建立。

此外,互联网的规模极大,路由器维护数百万个虚电路状态不现实。数据报网络的路由器只需要维护路由表,不需要维护连接状态,更容易扩展。

最后,数据报网络将复杂性放在边缘(端系统),网络核心保持简单,符合互联网的设计哲学。


Q2:什么是路由环路,如何避免?

:路由环路是指数据包在路由器之间循环转发,永远无法到达目的地。

路由环路可能由路由配置错误、路由收敛慢、度量不一致等原因造成。

避免路由环路的方法包括:定义最大跳数(如RIP的16跳表示不可达),水平分割(不从某个接口学到的路由不再从该接口通告),路由毒化(将不可达的路由度量设为无穷),保持定时器(在一段时间内抑制路由变化),链路状态协议(每个路由器拥有完整拓扑,不会产生环路)。

现代路由协议(如OSPF、IS-IS)采用链路状态算法,通过最短路径树计算路由,从根本上避免了路由环路。


Q3:NAT如何影响P2P应用,有哪些解决方案?

:NAT允许多个内网主机共享一个公网地址,但破坏了端到端通信。

P2P应用需要在NAT后面的节点之间直接连接,NAT阻止了外部连接到内网主机。

解决方案包括:UDP打洞,内网节点通过公网服务器交换地址信息,然后同时向对方发送UDP包,NAT会建立映射,允许后续通信。中继,所有流量通过公网中继服务器转发,性能差但总是有效。UPnP(通用即插即用),内网主机请求NAT路由器开放端口映射,允许外部连接。NAT穿透服务,如STUN(Session Traversal Utilities for NAT)帮助节点发现NAT类型和公网地址,ICE(Interactive Connectivity Establishment)结合多种技术建立连接。


Q4:为什么需要DHCP中继,直接在每个子网部署DHCP服务器不行吗?

:直接在每个子网部署DHCP服务器可以工作,但有几个问题。

首先,每个子网部署DHCP服务器成本高,管理复杂。DHCP服务器需要配置地址池、租期、网关、DNS等参数,多个服务器需要保持配置一致。

其次,DHCP服务器需要持续运行和监控,增加运维负担。

使用DHCP中继,可以在中心位置部署少量DHCP服务器,所有子网通过中继代理转发DHCP报文。DHCP中继修改DHCP报文中的giaddr字段(网关IP地址),DHCP服务器根据giaddr选择合适的地址池和网关配置。

这种架构集中管理,降低成本,提高可靠性。


Q5:什么是自治系统(AS),为什么BGP而不是OSPF用于AS之间路由?

:自治系统(Autonomous System,AS)是由单一技术管理的一组网络设备,如ISP、大型企业、大学。

每个AS有唯一的AS号(16位或32位)。AS内部使用内部网关协议(IGP)如OSPF、IS-IS,AS之间使用外部网关协议(EGP)如BGP。

BGP而不是OSPF用于AS之间路由的原因:OSPF需要所有路由器拥有相同的链路状态数据库,这在AS之间不现实(不同的AS可能不信任对方,不想共享详细拓扑)。BGP只交换可达性信息(哪个网络通过哪个AS可达),不共享详细的拓扑信息,保护了AS的隐私。BGP支持基于策略的路由(如 preferring 某个ISP的路径),OSPF基于技术度量选择最短路径,不考虑商业因素。BGP的可扩展性更好,可以承载整个互联网的路由信息,OSPF的链路状态泛洪在AS间规模下开销太大。


更新时间:2026年3月2日 系列:网络与信息安全技术 标签:#网络层 IP协议 路由算法 OSPF BGP 子网划分 NAT