网络与信息安全技术 第 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地址通常是固定的
二、虚电路网络与数据报网络
网络层有两种基本的服务模型:虚电路和数据报。理解这两种模型的区别和联系,是掌握网络层设计思想的基础。
虚电路网络
虚电路网络在数据传输前需要建立虚电路,类似于电话网络的呼叫建立过程。
虚电路建立过程:
- 发送方发送呼叫建立请求包,包含完整的源地址和目的地址
- 该请求经过网络中的每个节点,每个节点分配虚电路号,记录转发表项
- 建立请求到达接收方,接收方同意建立虚电路
- 接收方发送呼叫建立确认包,沿原路径返回
- 发送方收到确认,虚电路建立完成
数据传输过程: 每个数据包只需要携带虚电路号,不需要完整的目的地址。路由器根据虚电路号查找转发表,将数据包转发到下一个节点。
虚电路释放过程: 通信双方或一方发起释放请求,释放请求经过沿途节点,释放虚电路号和转发表项。
虚电路的特点:
- 需要建立连接,有连接建立开销
- 所有数据沿相同路径传输,保证按序到达
- 路由器需要维护连接状态(虚电路号、转发表)
- 如果路径上的某个节点故障,虚电路中断,需要重新建立
- 每个数据包头部小(只需要虚电路号)
数据报网络
数据报网络不需要建立连接,每个数据包独立路由。
数据传输过程: 每个数据包携带完整的源地址和目的地址,路由器根据目的地址和路由表独立决定转发路径。不同数据包可能经过不同路径到达目的地,可能乱序、丢失、重复。
数据报的特点:
- 无需建立连接,随时可以发送数据
- 数据包可能乱序到达,端系统需要处理排序
- 路由器不需要维护连接状态,只维护路由表
- 某个路径故障时,数据包可以自动绕行
- 每个数据包头部大(需要完整地址)
虚电路与数据报的对比
| 特性 | 虚电路网络 | 数据报网络 |
|---|---|---|
| 连接 | 需要建立 | 无需连接 |
| 路径 | 固定路径 | 可能不同路径 |
| 路由器状态 | 维护连接状态 | 只维护路由表 |
| 可靠性 | 路径故障则中断 | 可自动绕行 |
| 头部开销 | 小(虚电路号) | 大(完整地址) |
| 应用示例 | ATM、X.25 | IP网络 |
互联网采用数据报模型的原因:
- 互联网最初是为军事和科研设计的,需要高可靠性(路径故障时自动绕行)
- 早期计算机性能有限,路由器维护数百万连接状态不现实
- 网络核心简单,便于扩展
- 应用可以选择是否在传输层建立可靠连接(TCP),网络层不强制
三、网络互连与网络互连设备
互联网由许多自治的网络(称为自治系统AS)互连而成。网络互连使得不同类型、不同规模的网络可以相互通信。
网络互连的必要性
异构性:不同网络使用不同的技术(如以太网、WiFi、光纤),需要互连设备转换协议。
可扩展性:单个网络的规模有限,互连可以构建全球范围的互联网。
管理自主:不同的组织管理自己的网络,互连不影响各自的管理权。
路由器的体系结构
路由器是网络互连的核心设备,具有以下特点:
多个输入输出端口:连接多个网络,每个端口连接到一个网络。
转发功能:根据数据报的目的地址和路由表,决定将数据报从哪个端口转发出去。
路由功能:运行路由协议,与其他路由器交换路由信息,构建路由表。
交换结构:在输入端口和输出端口之间高速传输数据报。交换结构可以是内存交换、总线交换、互联网络交换。
处理能力:路由器需要高速处理数据报(线速转发),对每个数据报进行头部解析、查找路由表、更新头部、重新计算校验和。
路由器的输入输出端口
输入端口:
- 物理层:实现比特的接收
- 链路层:实现帧的接收和解封装
- 网络层:查找路由表,确定输出端口
- 队列:如果多个数据报竞争同一个输出端口,需要在输入端口排队
输出端口:
- 队列:存储等待发送的数据报
- 链路层:封装成帧
- 物理层:发送比特
路由器的转发过程
当路由器收到一个数据报时:
- 检查校验和,如果错误则丢弃
- 检查TTL(生存时间)字段,如果为0则丢弃
- 提取目的IP地址
- 查找路由表,找到最长前缀匹配的表项
- 将数据报转发到对应的输出端口
- 如果需要分片,执行分片操作
- 更新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时,需要分片。
分片过程:
- 路由器检查数据报长度和下一跳链路的MTU
- 如果数据报长度 > MTU且DF标志为0,则分片
- 将数据分成若干片,每片不超过MTU
- 每个分片复制原始头部,修改以下字段:
- 总长度:该分片的长度
- 标识:与原始数据报相同
- 标志:除最后一个分片外,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个子网。
划分步骤:
- 确定需要的子网数:4个子网需要2位(2²=4)
- 从主机号部分借2位作为子网号
- 原网络/24,借2位后变成/26
- 子网掩码:255.255.255.192(/26)
- 每个子网有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转换过程:
- 内网主机(如192.168.1.100:5000)向公网服务器(如1.2.3.4:80)发送数据包
- NAT路由器收到数据包,检查转换表
- 如果是新的会话,分配公网端口(如203.0.113.5:40000),在转换表中添加映射:192.168.1.100:5000 ↔ 203.0.113.5:40000
- 将源IP:端口替换为公网IP:端口,更新校验和
- 转发数据包到公网
- 收到响应时,查找转换表,将目的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的工作原理:
- 路由器初始化:直连网络的距离为0
- 定期(每30秒)向邻居发送整个路由表
- 收到邻居的路由表后,计算到每个网络的距离:到邻居的距离 + 邻居到目的地的距离
- 如果新距离更短,更新路由表
- 如果16跳,认为网络不可达(RIP的最大跳数是15)
RIP的问题:
- 慢收敛(收敛慢):网络变化需要很长时间传播到所有路由器
- 无穷计数问题:网络不可达时,距离会增加到无穷(16)
- 跳数限制:只能用于小型网络(最多15跳)
- 固定度量:不考虑带宽、延迟等因素
链路状态算法:OSPF
OSPF(Open Shortest Path First)是链路状态算法的实现,使用Dijkstra算法计算最短路径。
OSPF的工作原理:
- 发现邻居:通过Hello报文发现直连的OSPF路由器
- 建立邻接关系:与某些邻居建立邻接关系,交换链路状态信息
- 泛洪链路状态通告(LSA):将本地的链路状态信息泛洪到整个OSPF域
- 构建链路状态数据库:每个路由器收集完整的网络拓扑信息
- 运行Dijkstra算法:以自己为根,计算到所有网络的最短路径树
- 生成路由表:从最短路径树提取路由信息
OSPF的优点:
- 快速收敛:网络变化时快速传播到所有路由器
- 支持大型网络:没有跳数限制
- 度量灵活:可以配置带宽、延迟、成本等度量
- 区域划分:将大型网络分成多个区域,减少路由协议开销
- 等价负载均衡:支持多条等价路径的负载均衡
路径向量算法:BGP
BGP(Border Gateway Protocol)是互联网的核心路由协议,用于自治系统(AS)之间的路由。BGP是路径向量算法,不仅记录到目的地的距离,还记录经过的AS路径。
BGP的工作原理:
- 建立BGP会话:两个AS的边界路由器建立TCP连接(端口179)
- 交换路由信息:互相通告可达网络和AS路径
- 路径选择:根据策略选择最佳路径(AS路径短、本地优先、MED等)
- 路由反射:在大型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