
前面的数据链路层文章一直在讨论“局域网里的这一跳”:网卡如何把 IP 数据报封装成帧,ARP 如何找到下一跳 MAC 地址,交换机如何在端口间转发帧,VLAN 如何限制二层广播域。它们都很重要,但也都有一个边界:
- 以太网帧和 MAC 地址只适合解决当前链路或当前局域网内的交付问题。
当你在家访问异地服务器时,数据不会只经过一台交换机。它会从家庭局域网到运营商网络,再经过许多不同速率、不同介质、不同组织管理的网络,最后到达服务器所在的局域网。不同网络之间,怎样让数据继续向正确方向前进?这正是网络层要解决的问题。
这一篇进入 TCP/IP 五层模型的网络层。网络层以 IP 协议为核心,为上层提供“主机到主机”的通信能力:把 IP 数据报从源主机送往目的主机,并让它能够跨越多个异构网络。下一篇再深入看一台路由器收到数据报后,具体会执行哪些动作。
一、网络层到底解决什么问题?
可以先把一次网络通信拆成两个尺度:
- 单段链路或局域网内:数据链路层负责把帧送到下一跳。例如电脑把帧交给本地交换机,交换机再把帧送到默认网关所在的端口。
- 从源主机到目的主机:网络层负责让数据报跨越一段又一段链路、经过多个路由器,最终到达另一台主机。
假设北京家里的电脑访问上海机房中的网站服务器,大致会经历下面的路径:
电脑
-> 家庭交换机或无线接入点
-> 家庭路由器
-> 运营商接入网
-> 多台骨干路由器
-> 服务器所在网络的路由器
-> 服务器
电脑并不需要知道中间经过了几台设备、每一段是网线还是光纤、运营商内部怎么布线。它只需把要发送的数据交给网络层,并以目的主机的 IP 地址作为全局寻址依据。网络层与路由器共同负责后面的跨网传递。
因此,网络层的核心任务可以概括为:
将分组,也就是 IP 数据报,从源主机经由多个网络和多段链路,尽最大努力交付给目的主机。
这里的“主机到主机”要和传输层的“进程到进程”区分开:
| 层次 | 主要对象 | 典型问题 |
|---|---|---|
| 数据链路层 | 同一链路或局域网中的相邻设备 | 下一跳的帧该从哪个端口出去? |
| 网络层 | 源主机与目的主机 | 跨多个网络时,数据报应往哪个方向走? |
| 传输层 | 两台主机上的应用进程 | 数据应交给浏览器、数据库还是其他进程?是否需要可靠传输? |
网络层的功能:
- 异构网络互连(基本功能)
- 路由选择 分组转发 (核心功能)
二、为什么需要 IP:互联网本来就是“异构网络的网络”
互联网不是一张由同一种设备、同一种链路拼成的大网。家庭 Wi-Fi、办公室以太网、校园网、运营商光纤骨干网、蜂窝移动网络和数据中心网络,在介质、速率、帧格式、设备能力与管理方式上都可能不同。
如果每一种网络都要求端到端通信双方理解自己的内部规则,那么两张网络互连时都需要进行大量专门适配;网络种类越多,互联关系越难维护。网络层提供了一个更稳定的共同层次:不同底层网络只要都能承载 IP 数据报,就能在路由器处相互连接。
可以把 IP 看作国际物流中的统一运单格式:
- 货物在城市内可能由货车、地铁或飞机运输;
- 每一段运输工具的装载规则不同;
- 但运单始终写着最终收件地,且中转站能据此决定下一段交给谁。
同样地,IP 数据报在端到端传输中保留源 IP 地址和目的 IP 地址;而每经过一段链路,外层的数据链路帧会根据当前链路重新封装。也就是说,IP 负责跨网络的逻辑寻址,帧和 MAC 地址负责每一跳的本地交付。
IP 网:把不同网络在逻辑上看成一个整体
路由器把多个网络连接起来,并在网络之间转发 IP 数据报。虽然底层网络各不相同,但只要它们的网络层都使用 IP,从网络层的视角看,它们就组成了一个统一的 IP 网。这个能力称为异构网络互连,也是网络层最基础的职责。
这就是“网际协议”这个名字的含义:IP 不是为了替代以太网、Wi-Fi 等链路技术,而是让许多不同的网络能够互相通信。对端主机而言,中间各网络的内部细节被屏蔽了;它看到的是一个能把数据报交付给目标 IP 地址的网络。
三、IP 数据报是怎样跨网前进的?
IP 数据报从一台主机到另一台主机,并不是带着同一份以太网帧一路不变地穿越互联网。每到一个路由器,当前链路的帧会在路由器处结束,路由器取出其中的 IP 数据报,检查并处理网络层信息,再把它封装进下一段链路所使用的新帧。
下面以主机 A 访问异地服务器 S 为例:
主机 A
发送:以“默认网关的 MAC 地址”为帧目的地址
以“服务器 S 的 IP 地址”为数据报目的地址
第一台路由器
收到帧,去掉旧帧
查找目的 IP 地址对应的下一跳
给同一个 IP 数据报加上下一段链路的新帧
后续路由器
重复“收帧 -> 处理 IP 数据报 -> 查表 -> 重新封装 -> 发往下一跳”
服务器 S
在最后一段链路收到帧,取出目的为自己的 IP 数据报
这段过程里有两个特别容易混淆的点。
1. IP 地址通常端到端保持,MAC 地址逐跳变化
在正常转发中,源 IP 地址和目的 IP 地址用来表达端到端的通信对象;每一跳上的源 MAC 和目的 MAC 则只服务于当前链路。路由器转发到下一跳时,需要重新构造新帧,MAC 地址也就随链路改变。
| 信息 | 主要作用范围 | 经过路由器后通常如何变化 |
|---|---|---|
| 源 IP、目的 IP | 源主机到目的主机的网络层通信 | 通常保持不变;NAT 等特殊处理除外 |
| 源 MAC、目的 MAC | 当前一跳链路的帧交付 | 每经过一台路由器都会重新生成 |
这也解释了为什么 ARP 只解决“本地 IP 地址对应哪个 MAC 地址”,而不能用来在互联网范围内查询某台远端服务器的 MAC 地址。
2. 主机并不直接把帧发给远端服务器
若目标 IP 不在本地网络,主机不会尝试找到远端服务器的 MAC 地址。它会把帧交给默认网关,也就是本地路由器;帧的目的 MAC 是默认网关接口的 MAC,IP 数据报的目的 IP 仍是远端服务器。之后每台路由器只需做局部决定:这份数据报的下一跳应该从哪个接口发出。
四、网络层的两项核心功能:路由选择与分组转发
“数据报跨越多个网络”听起来像一句话,但路由器内部实际上有两类不同的工作:一类决定整体路径,另一类把眼前的数据报快速送到下一跳。
当相互发送数据的两台主机,在同一个网络(小型网络)中时,数据可以不经任何路由器的转发直接交付。
当相互发送数据的两台主机,在不同的网络中时,数据要经过多个路由器的转发,间接交付,因此就得考虑数据从发送方到接收方怎么走,规划出一条路径。这就涉及到路由选择和分组转发。
1. 路由选择:为到达目标网络规划方向
路由选择关注的是:到达某个目的网络,下一步该选哪条路径?路由器通过静态配置或路由协议获得网络拓扑与可达信息,据此建立和维护路由表。
可以把它看成提前维护一份交通导航规则:去某片区域优先走哪个出口,某条道路故障后改走哪条备用方向。路由选择考虑的范围可以跨越多台路由器、多个网络,关注网络整体的连通性与路径变化。
例如,某条运营商链路中断后,路由协议会逐步传播新的可达信息;相关路由器据此重新计算或更新自己的路由表。这个过程不必为每个到来的数据报重新从头计算,而是先形成相对稳定的转发规则。
2. 分组转发:把眼前的数据报送向下一跳
分组转发关注的是:一个 IP 数据报刚刚到达这台路由器,现在应该从哪个出接口离开?路由器在数据平面中查询转发表,确定下一跳或出接口,然后完成必要的封装并发送。
它像十字路口的绿灯执行:导航规则已经准备好,眼前每一辆车到来时只需快速放行到正确出口。因为数据报数量巨大,转发必须很快,实际设备常用专用硬件来加速查表和转发。
3. 路由表与转发表不是完全同一件事
前者根据路由选择协议构造并维护路由表,后者处理通过路由器的数据流,关键操作是转发表查询、转发及相关的队列管理和任务调度等
学习阶段常把两者统称为“路由表”,但理解差异很有帮助:
| 名称 | 更关注什么 | 典型来源和特点 |
|---|---|---|
| 路由表 | 哪些网络可达、路径如何选择 | 来自手工配置或路由协议,便于计算与维护 |
| 转发表 | 到来的数据报立刻从哪里转发 | 从路由信息中提炼,强调高速查找与执行 |
两者密切相关:路由选择的结果会形成或更新转发规则;分组转发则按这些规则处理大量真实流量。但不要把“转发”理解成“每收到一个包就重新计算整条最优路径”。
路由选择涉及整条线路的所有的路由器,而分组转发是聚焦于1个路由器,路由选择是分组转发的基础
五、控制平面与数据平面:慢规划,快执行
网络层也可以根据两个核心功能,抽象的划分为两个层面:控制层面 和 数据(转发)层面。
这里的层面和计算机网络体系结构的层次是类似的,都是抽象的概念。显然,在一个路由器实体中无法肉眼看见这种抽象的层面。(控制层面实现路由选择功能,数据层面实现分组转发功能。)
数据平面:实时处理每一个到来的数据报
数据平面负责数据报的实际转发。它根据已有转发表完成查找、转发以及必要的排队与调度。这里追求的是速度:一台高负载路由器可能每秒处理海量数据报,不能为每个数据报执行复杂的全网计算。
控制平面:维护网络如何连通、路径如何变化
控制平面负责路由选择相关工作,包括与邻居路由器交换路由信息、运行路由算法、更新路由表,并把结果提供给数据平面。它关注的是网络变化后的整体规则,更新时间通常远慢于单个数据报的转发。
用一句话概括:
控制平面负责“路该怎么规划”,数据平面负责“这个包现在怎么走”。
传统互联网中,每台路由器都同时具备控制平面与数据平面:一边参与路由信息交换,一边快速转发数据报。
**软件定义网络(SDN)**则是另一种组织方式:可以把较集中的控制逻辑交给控制器,由控制器向设备下发转发规则;设备侧主要按规则执行转发。无论采用哪种架构,规划与执行的职责区分依然存在。
在传统因特网中的每一个路由器中,既有数据层面也有控制层面。
近几年流行一种创新网络架构—软件定义网络(SDN)
- 将控制平面(如阿里云的网络控制器)集中部署在远程服务器
- 数据平面则作为“智能转发引擎”运行在路由器中。
两个平面相互分离,控制平面利用控制-数据接口对数据平面上的路由器进行集中式控制,方便软件来控制网络。
- 在SDN 结构中路由器变得简单了,它的路由选择软件都不需要了,因此路由器之间不再相互交换路由信息。
- 在网络的控制平面有一个逻辑上的远程控制器(可由多个服务器组成)。
- 远程控制器掌握各主机和整个网络的状态,每个分组计算出最佳路由,通过 Openflow 协议(或其他途径)将转发表(在SDN中称流表)下发给路由器。
- 路由器的工作很单纯,即收到分组、查找转发表、转发分组。
六、IP 提供什么服务:无连接、尽最大努力交付
在 TCP/IP 体系中,IP 向上提供的是无连接、尽最大努力交付的数据报服务。这句话需要逐个理解。
1. 无连接:发送前不建立专用网络层连接
IP 发送数据报前,不需要先让源主机、所有中间路由器和目的主机共同建立一条专用的网络层连接。每个数据报携带目的 IP 地址,路由器根据当前转发规则独立处理它。
这使网络能够灵活地接纳大量通信:不同的数据报可能因为网络变化走不同路径,路由器也不必为每一对通信主机长期保存复杂的连接状态。
需要注意,“IP 无连接”不等于应用不能建立连接。浏览器使用 TCP 时,TCP 仍会在传输层建立面向连接的可靠传输;IP 只是负责在底层尽力转送 TCP 段所封装成的数据报。
2. 尽最大努力:努力转发,但不作强保证
“尽最大努力”并不是“不做事”,而是说 IP 网络不对下面这些结果作硬性承诺:
| IP 不保证的结果 | 可能出现的原因 |
|---|---|
| 一定送达 | 链路或设备故障、路由不可达、队列满导致丢包 |
| 按发送顺序到达 | 不同数据报可能走不同路径,排队时延也可能不同 |
| 在固定时间内到达 | 网络拥塞、排队、链路速率差异和路径变化都会影响时延 |
| 获得最低带宽 | 多个流量共同竞争链路与设备资源 |
| 不重复 | 某些异常或上层重传场景可能让接收方看到重复数据报 |
因此,网络层的数据报可能丢失、失序、重复、延迟过大,甚至出现错误。IP 的设计选择是保持核心网络简单、通用、可扩展;如果应用需要可靠、有序的字节流,通常由传输层的 TCP 通过序号、确认、超时和重传等机制来补充。
这也不是说所有应用都必须使用 TCP。实时音视频、在线游戏等应用可能选择 UDP 或其他传输协议,再根据自己的时延与可靠性需求设计恢复策略。网络层提供的是共同、基础的交付能力,而不是替所有应用完成全部质量保障。
3. 这句话有一个前提
“网络层提供无连接、尽最大努力服务”是对因特网 TCP/IP 体系的准确描述,并不是所有理论网络体系都必须如此。
例如 OSI 参考模型曾定义过网络层的面向连接服务模型。学习时应把结论与其体系背景一起记住。
七、IP 协议族:网络层不只有一个名称
IP 是 TCP/IP 体系中最核心的网络层协议。日常说“IP”时,很多场景实际指 IPv4;IPv6 则是为解决地址空间等问题演进出的新版本,后续会单独介绍。
围绕 IP 通信,还有几类紧密协作的协议:
| 协议 | 主要作用 | 与本篇的关系 |
|---|---|---|
| ARP | 在本地链路上把下一跳 IPv4 地址解析为 MAC 地址 | 帮助 IP 数据报走出当前这一跳 |
| ICMP | 传递网络控制与差错报告信息 | 帮助诊断网络可达性和转发问题 |
| IGMP | 管理 IPv4 多播组成员关系 | 服务于一对多通信场景 |
不同教材可能把 ARP 放在网络层、网络接口层或称为两层之间的协议,这是因为它同时涉及 IP 地址与链路层 MAC 地址。对理解实际通信来说,更重要的是它的职责:ARP 不负责跨网路由,只在本地网络中帮助找到下一跳的 MAC 地址。
八、一个完整场景:从浏览器到异地服务器
现在把各层职责重新串起来。浏览器要访问异地服务器时:
- 应用层准备请求数据;传输层可能把它交给 TCP 或 UDP。
- 网络层为数据加上源 IP 与目的 IP,形成 IP 数据报。
- 主机判断目的 IP 不在本地网络,选择默认网关作为下一跳。
- ARP 协助主机获得默认网关接口的 MAC 地址;数据链路层把 IP 数据报封装成以默认网关为帧目的地址的帧。
- 本地交换机根据 MAC 地址表把帧送到默认网关所在端口。
- 路由器取出 IP 数据报,查询转发表,确定下一跳;随后在下一段链路上重新封装新帧并转发。
- 经过多台路由器后,数据报进入服务器所在网络;最后一台路由器把它交给服务器。
- 服务器拆除链路层与网络层封装,按上层协议把数据交给对应进程。
在这条路径中,数据链路层的帧会逐跳更换,交换机主要按 MAC 地址在局域网内转发,路由器主要按 IP 地址跨网络转发。正是这种分层协作,让不同地区、不同网络技术和不同管理边界下的主机仍能通信。
九、总结
网络层是互联网跨网络通信的枢纽。它通过 IP 把众多异构网络连接成逻辑上的统一 IP 网,并让 IP 数据报能够从源主机经多台路由器到达目的主机。
它的核心工作分为两部分:路由选择负责维护“到哪里该往哪走”的规则,分组转发负责把每个到来的数据报快速送往下一跳。
TCP/IP 网络层选择无连接、尽最大努力的数据报服务:它不保证送达、顺序、时延或带宽,而把更强的可靠性和有序性需求交给上层协议处理。这种看似朴素的设计,正是互联网能连接海量异构网络并持续扩展的重要原因。
已经知道网络层解决“跨网往哪走”后,接下来就把镜头对准路由器本身:一份 IP 数据报抵达路由器时,输入端口、转发表、交换结构和输出端口分别做了什么?
如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!

1278

被折叠的 条评论
为什么被折叠?



