前言
这一层网络层是整个计算机网络的核心,十分重要,我们在这篇文章中将粗略地了解网络层的重要性和网络层是什么,所以这篇文章很简单。
网络层概述:从隔壁房间,到世界的另一端
数据链路层 已经解决了"相邻节点之间怎么可靠传帧"的问题。PPP让两台直连的设备能通信,CSMA/CD让共享一根线的多台设备不会乱套,交换机让冲突域缩小到每个端口,VLAN在逻辑上隔开了广播域。
但是都有同一个问题:它们都只能在一个网络内部工作。
同一个以太网 里的设备,通过MAC地址互相找到对方,没有问题。
但如果你想访问一台地球另一端的服务器,你的电脑怎么知道数据该往哪走?中间要经过多少个路由器?每个路由器凭什么知道下一跳该转发给谁?
数据链路层的世界是一个"直连"的世界。而互联网是一个"跨越无数中间网络"的世界。这就是网络层要解决的根本问题。
链路层的局限:只能在一个网络内部通信
数据链路层解决的是"相邻节点"之间的通信。两台设备直接连在同一根线上,或者通过交换机连在同一个局域网里,它们通过MAC地址互相寻址。
MAC地址就像房间里的别人的名字。在同一房间里,喊名字就能找到人。但如果你想找的人不在这个房间里(另一栋楼、另一个城市、另一个国家)------那么 MAC地址就完全不够用了。
原因很简单 :MAC地址是平面地址 。它不包含任何位置信息。
00:1A:2B:3C:4D:5E这个地址,你完全看不出这台设备在地球上的哪个角落。如果一个路由器想根据MAC地址来转发数据,它就需要维护一张全球所有设备的MAC地址表------这张表会有几十亿条记录,而且每台设备移动一次位置就得更新。
这可能吗?当然不行。所以数据链路层只能在一个有限的广播域内工作。这个局限不是设计失误,而是设计分工------链路层只管"相邻节点",跨网络的事交给上一层。
核心矛盾:局域网直连 vs 互联网跨网
于是,网络层的核心矛盾就浮现了:
数据链路层只能在一个网络内部通信 vs 需要让全球任意两台设备跨网络通信
这个大矛盾可以分解为两个小问题:
第一,寻址问题。
我们需要一套全球通用的地址体系。这个地址必须能支持大规模路由,必须具备层级结构------就像邮政地址用"国家/省/市/街道"来组织,路由器不需要知道每个具体门牌号,只需要根据地址前缀来判断"去这个方向走哪个接口"。
第二,路径问题。
从源地址到目的地址,可能存在多条可能的路径。哪条路径是当前最优的?它可能取决于跳数、带宽、延迟,甚至网络运营商的商业协议。你需要一套机制来计算和选择路径。
这两个问题,对应了网络层的两大核心任务。
网络层的两大核心任务:分组转发与路由选择

网络层的工作可以概括为两件事:转发 和路由。它们不是同一个概念。
| 维度 | 分组转发 | 路由选择 |
|---|---|---|
| 是什么 | 路由器收到一个IP数据报,查表,从某个接口转发出去 | 确定数据报从源到目的经过的路径 |
| 作用范围 | 局部------单个路由器的一次操作 | 全局------全网路由器协同计算 |
| 时间尺度 | 纳秒到微秒级 | 秒到分钟级 |
| 实现方式 | 硬件(转发表查找) | 软件(路由协议计算) |
| 类比 | 在高速路口,收费员告诉你下一个出口往哪走 | 出发前,你用导航软件规划了整条路线 |
分组转发发生在每一个中间路由器的每一次数据报到达时。路由器检查IP数据报的目的地址,查找自己的转发表,决定从哪个接口发出去。这个过程必须极快,通常由专用硬件完成。
路由选择则是一个更"宏观"的过程。它不处理单个数据报,而是决定"到达某个网络,应该走哪条路"。路由协议(比如RIP、OSPF、BGP)负责在路由器之间交换信息,计算出最优路径,然后把这些路径信息填入转发表。
两者的关系是:路由选择负责"铺路"和"更新地图",分组转发负责"按图索骥"。 没有路由选择,转发表就是空的,分组转发无从进行。没有分组转发,路由选择算出来的路径永远不会被用到。
网络层向上层提供两种服务
网络层向上面的传输层提供服务。历史上,网络层可以向上提供两种截然不同的服务,由此延伸出了无连接服务和面向连接服务之争。

服务一:无连接服务(数据报服务)

这种服务不事先建立连接 。
每个数据报独立处理,携带完整的目的地址,在网络中独立路由。不同数据报可能走不同的路径,到达顺序可能与发送顺序不同。网络层只负责"尽力而为"地交付,不保证可靠------(不保证一定送到 ,不保证按序到达 ,不保证不重复)。
服务二:面向连接服务(虚电路服务)

这种服务要求在通信之前先建立一条"虚电路"。
虚电路不是物理专线,而是一条逻辑上 的路径,沿途路由器为它预留表项。建立之后,所有数据报都沿着同一条虚电路传输,按序到达。网络层保证可靠交付。
两者的核心区别:
| 对比 | 数据报服务 | 虚电路服务 |
|---|---|---|
| 连接建立 | 不需要 | 必须先建立 |
| 地址 | 每个数据报携带完整目的地址 | 数据报只携带虚电路号 |
| 路径 | 每个数据报独立选路 | 同一虚电路的所有数据报走同一路径 |
| 顺序 | 不保证按序到达 | 保证按序到达 |
| 可靠性 | 不保证,交给传输层 | 网络层自己保证 |
| 路由器状态 | 不保存连接状态 | 需要为每条虚电路保存状态 |
| 容错性 | 高------路由器故障,数据报绕路 | 低------沿途一个节点故障,整条虚电路中断 |
谁赢了?数据报服务。
因特网选择了无连接的数据报服务。这个选择不是偶然的。虚电路要求沿途所有路由器都支持虚电路机制,这在全球范围内根本做不到。更重要的是,数据报服务把可靠性交给端系统(传输层的TCP),让网络层保持简单------这就是"端到端原则":网络核心尽量简单,智能放在边缘。
ATM(异步传输模式)曾经试图用虚电路统一网络层,但它失败了。复杂的网络层协议难以在全球范围内部署和维护。IP协议的"尽力而为"看似简陋,反而因为简单而获得了最大的成功------它可以在任何链路层之上运行,可以连接任何异构网络,可以为任何上层协议服务。

📌 小结:网络层要解决的根本矛盾,是数据链路层的"局域网局限"和互联网的"全球互通需求"之间的矛盾。为此,网络层有两项核心任务:分组转发(局部操作,查表转发)和路由选择(全局计算,规划路径)。网络层向上提供两种服务模式------无连接的数据报服务和面向连接的虚电路服务------因特网选择了前者,把复杂性交给端系统,让网络核心保持简单。正是这个选择,奠定了今天互联网可扩展、可互联的基础。